source: DASISH/t5.6/client/chrome/markingcollection/content/markingcollection/shortcutDialogOverlay.js @ 2709

Last change on this file since 2709 was 2709, checked in by sroth, 11 years ago

Wired-Marker initial source code with minor adjustments.

  • Property svn:executable set to *
File size: 16.4 KB
Line 
1var bitsShortcutDialogOverlay = {
2        _init : false,
3        _opener : null,
4        _changed : false,
5        _app_version : 2,
6
7        get TAB_PANELS() { return document.getElementById("mcSettingTabPanels"); },
8        get idPANEL()  { return 'mcShortcutTabPanel'; },
9
10        get TREE()     { return document.getElementById("bitsShortcutTree"); },
11        get ADD()      { return document.getElementById("bitsShortcutAdd"); },
12        get EDIT()     { return document.getElementById("bitsShortcutEdit"); },
13        get DEL()      { return document.getElementById("bitsShortcutDel"); },
14        get DISP()     { return document.getElementById("bitsShortcutDisp"); },
15
16        get idTITLE()    { return 'bitsShortcutTitleCol'; },
17        get idKEY()      { return 'bitsShortcutKeyCol'; },
18        get idSHIFT()    { return 'bitsShortcutShiftCol'; },
19        get idALT()      { return 'bitsShortcutAltCol'; },
20        get idACCEL()    { return 'bitsShortcutAccelCol'; },
21        get idDISABLED() { return 'bitsShortcutDisabledCol'; },
22        get idPRIORITY() { return 'bitsShortcutPriorityCol'; },
23
24        get STRING()     { return this._opener.top.document.getElementById("MarkingCollectionOverlayString"); },
25        get DataSource() { return this._opener.top.bitsObjectMng.DataSource; },
26        get Common()     { return this._opener.top.bitsObjectMng.Common;     },
27        get XPath()      { return this._opener.top.bitsObjectMng.XPath;      },
28        get Database()   { return this._opener.top.bitsObjectMng.Database;   },
29        get XML()        { return this._opener.top.bitsObjectMng.XML;   },
30        get gBrowser()   { return this._opener.top.bitsObjectMng.getBrowser();},
31        get bitsMarkingCollection() { return this._opener.top.bitsMarkingCollection;},
32
33
34        get bitsShortcutService(){ return this._opener.top.bitsShortcutService; },
35        get xmldoc()             { return this.bitsShortcutService.xmldoc; },
36        get namespace()          { return this.bitsShortcutService.namespace; },
37        get evaluateArray()      { return this.bitsShortcutService.evaluateArray; },
38        get confirmRemovingFor() { return this.bitsShortcutService.confirmRemovingFor; },
39        get check_img() { return "chrome://markingcollection/skin/cbox-check.gif"; },
40
41/////////////////////////////////////////////////////////////////////
42        init : function(aEvent){
43                if(!this._init){
44                        var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"].getService(Components.interfaces.nsIWindowMediator);
45                        this._opener = wm.getMostRecentWindow("navigator:browser");
46
47                        var osString = Components.classes["@mozilla.org/xre/app-info;1"].getService(Components.interfaces.nsIXULRuntime).OS;
48                        if(osString == "Darwin"){
49                                document.getElementById(this.idALT).setAttribute('label','Option');
50                                document.getElementById(this.idACCEL).setAttribute('label','Command');
51                        }
52
53                        this.DISP.checked = nsPreferences.getBoolPref("wiredmarker.shortcut.tree_disp", true);
54
55                        this.TAB_PANELS.addEventListener("select", this.tabselect, false);
56
57                        var db_hash = {};
58                        var dbinfo = this.bitsMarkingCollection.dbinfo.getAllDBInfo();
59                        if(dbinfo){
60                                var i;
61                                for(i=0;i<dbinfo.length;i++){
62                                        db_hash[""+dbinfo[i].database_dbtype] = dbinfo[i];
63                                }
64                        }
65                        var elemSCs =  this.evaluateArray('//SHORTCUT[@fid and @dbtype]');
66                        var sccnt;
67                        for(sccnt=elemSCs.length-1;sccnt>=0;sccnt--){
68                                var fid = elemSCs[sccnt].getAttribute('fid');
69                                var dbtype = elemSCs[sccnt].getAttribute('dbtype');
70                                if(dbtype){
71                                        if(!db_hash[dbtype] && elemSCs[sccnt].getAttributeNS(this.namespace,'hidden') == 'false'){
72                                                elemSCs[sccnt].setAttributeNS(this.namespace,'hidden','true');
73                                                this._changed = true;
74                                        }else if(db_hash[dbtype] && elemSCs[sccnt].getAttributeNS(this.namespace,'hidden') == 'true'){
75                                                elemSCs[sccnt].setAttributeNS(this.namespace,'hidden','false');
76                                                this._changed = true;
77                                        }
78                                }
79                                if(fid && dbtype && db_hash[dbtype] && !this.Database._fidExists(dbtype,fid)){
80                                        elemSCs[sccnt].parentNode.removeChild(elemSCs[sccnt]);
81                                        this._changed = true;
82                                }
83                        }
84                        var info = Components.classes["@mozilla.org/xre/app-info;1"].getService(Components.interfaces.nsIXULAppInfo);
85                        this._app_version = parseFloat(info.version);
86                        if(this._app_version<3.1){
87                                this.TREE.addEventListener("draggesture", bitsShortcutDialogOverlay.onOldDraggesture, false);
88                                this.TREE.addEventListener("dragover", bitsShortcutDialogOverlay.onOldDragover, false);
89                                this.TREE.addEventListener("dragdrop", bitsShortcutDialogOverlay.onOldDragdrop, false);
90                                this.TREE.addEventListener("dragexit", bitsShortcutDialogOverlay.onOldDragexit, false);
91                        }else{
92                                this.TREE.addEventListener("dragstart", bitsShortcutDialogOverlay.onDragEvents, false);
93                                this.TREE.addEventListener("drag", bitsShortcutDialogOverlay.onDragEvents, false);
94                                this.TREE.addEventListener("dragend", bitsShortcutDialogOverlay.onDragEvents, false);
95
96                                this.TREE.addEventListener("dragenter", bitsShortcutDialogOverlay.onDropEvents, false);
97                                this.TREE.addEventListener("dragover", bitsShortcutDialogOverlay.onDropEvents, false);
98                                this.TREE.addEventListener("dragleave", bitsShortcutDialogOverlay.onDropEvents, false);
99                                this.TREE.addEventListener("drop", bitsShortcutDialogOverlay.onDropEvents, false);
100                        }
101                        this.rebuild();
102                        this._init = true;
103                }
104        },
105
106/////////////////////////////////////////////////////////////////////
107        done : function(aEvent){
108                this.TAB_PANELS.removeEventListener("select", this.tabselect, false);
109                if(this._app_version<3.1){
110                        this.TREE.removeEventListener("draggesture", bitsShortcutDialogOverlay.onOldDraggesture, false);
111                        this.TREE.removeEventListener("dragover", bitsShortcutDialogOverlay.onOldDragover, false);
112                        this.TREE.removeEventListener("dragdrop", bitsShortcutDialogOverlay.onOldDragdrop, false);
113                        this.TREE.removeEventListener("dragexit", bitsShortcutDialogOverlay.onOldDragexit, false);
114                }else{
115                        this.TREE.removeEventListener("dragstart", bitsShortcutDialogOverlay.onDragEvents, false);
116                        this.TREE.removeEventListener("drag", bitsShortcutDialogOverlay.onDragEvents, false);
117                        this.TREE.removeEventListener("dragend", bitsShortcutDialogOverlay.onDragEvents, false);
118
119                        this.TREE.removeEventListener("dragenter", bitsShortcutDialogOverlay.onDropEvents, false);
120                        this.TREE.removeEventListener("dragover", bitsShortcutDialogOverlay.onDropEvents, false);
121                        this.TREE.removeEventListener("dragleave", bitsShortcutDialogOverlay.onDropEvents, false);
122                        this.TREE.removeEventListener("drop", bitsShortcutDialogOverlay.onDropEvents, false);
123                }
124                if(this._changed) this.bitsShortcutService.xmlflash(100);
125        },
126
127/////////////////////////////////////////////////////////////////////
128        tabselect : function(aEvent){
129                setTimeout(function(){bitsShortcutDialogOverlay._tabselect(aEvent);},0);
130        },
131
132        _tabselect : function(aEvent){
133                if(this.TAB_PANELS.selectedPanel.id != this.idPANEL) return;
134        },
135
136/////////////////////////////////////////////////////////////////////
137// TREE 衚瀺制埡関連
138/////////////////////////////////////////////////////////////////////
139        getTreeNodes : function(aExpr){
140                aExpr = (aExpr?' and ' + aExpr:'');
141                return this.evaluateArray('//SHORTCUT[@WM:hidden="false"' + aExpr + ']');
142        },
143        get rowCount(){
144                var results = this.getTreeNodes();
145                return results.length;
146        },
147        getCellText : function(row,column){
148                var results = this.getTreeNodes();
149                if(!results[row]) return null;
150                if(column.id == this.idTITLE){
151                        return results[row].getAttributeNS(this.namespace,"title");
152                }else if(column.id == this.idKEY){
153                        return results[row].getAttribute("key");
154                }else if(column.id == this.idPRIORITY){
155                        return row+1;
156                }else{
157                        return null;
158                }
159        },
160        getCellValue : function(row,column){
161                var results = this.getTreeNodes();
162                if(!results[row]) return null;
163                if(column.id == this.idSHIFT){
164                        return (results[row].getAttribute('shift') == 'true' ? true : false);
165                }else if(column.id == this.idALT){
166                        return (results[row].getAttribute('alt') == 'true' ? true : false);
167                }else if(column.id == this.idACCEL){
168                        return (results[row].getAttribute('accel') == 'true' ? true : false);
169                }else if(column.id == this.idDISABLED){
170                        return (results[row].getAttributeNS(this.namespace,'disabled') == 'true' ? true : false);
171                }
172                return null;
173        },
174        setTree: function(treebox){ this.treebox = treebox; },
175        isContainer: function(row){ return false; },
176        isSeparator: function(row){ return false; },
177        isSorted: function(){ return true; },
178        getLevel: function(row){ return 0; },
179        getImageSrc: function(row,column){
180                return null;
181        },
182        getRowProperties: function(row,prop){
183                var aserv=Components.classes["@mozilla.org/atom-service;1"].getService(Components.interfaces.nsIAtomService);
184                var results = this.getTreeNodes();
185                if(!results[row]) return;
186                if(results[row].getAttributeNS(this.namespace,'disabled') == 'true') prop.AppendElement(aserv.getAtom("disabled"));
187        },
188        getCellProperties: function(row, column, prop){
189                var aserv=Components.classes["@mozilla.org/atom-service;1"].getService(Components.interfaces.nsIAtomService);
190                var results = this.getTreeNodes();
191                if(!results[row]) return;
192                if(results[row].getAttributeNS(this.namespace,'disabled') == 'true') prop.AppendElement(aserv.getAtom("disabled"));
193        },
194        getColumnProperties: function(column, element, prop){},
195        cycleHeader : function(col){},
196        setCellText : function(row,column,text){},
197  getParentIndex: function(idx) { return -1; },
198        canDrop : function(index, orient){
199                return true;
200        },
201        onDrop : function(row, orient){},
202        drop : function(row, orient){
203                if(orient>0) row++;
204                if(row>=this.rowCount) row = this.rowCount-1;
205                var results = this.getTreeNodes();
206                var dropnode = results[row];
207                if(!dropnode) return;
208                var dragnode = results[this.TREE.currentIndex];
209                if(!dragnode) return;
210                if(dropnode == dragnode) return;
211                if(row==this.rowCount-1 && orient>0){
212                        dropnode.parentNode.appendChild(dragnode);
213                        this.TREE.currentIndex = row;
214                }else{
215                        dropnode.parentNode.insertBefore(dragnode,dropnode);
216                        this.TREE.currentIndex = row;
217                }
218                if(!this.TREE.view.selection.isSelected(this.TREE.currentIndex)) this.TREE.view.selection.select(this.TREE.currentIndex);
219                this.rebuild();
220                this._changed = true;
221        },
222        dragDropObserver :{
223                onDragStart : function(event, transferData, action){
224                        try{
225                                var row = bitsShortcutDialogOverlay.TREE.currentIndex;
226                                var results = bitsShortcutDialogOverlay.getTreeNodes();
227                                if(!results[row]) return null;
228                                var id = results[row].getAttribute("id");
229                                transferData.data = new TransferData();
230                                transferData.data.addDataForFlavour("moz/rdfitem", id);
231                        }catch(ex){
232                                bitsShortcutDialogOverlay._dump("dragDropObserver.onDragStart():"+ex);
233                        }
234                },
235                getSupportedFlavours : function(){
236                        var flavours = new FlavourSet();
237                        flavours.appendFlavour("moz/rdfitem");
238                        return flavours;
239                },
240                onDragOver : function(event, flavour, session){},
241                onDragExit : function(event, session){},
242                onDrop     : function(event, transferData, session){},
243        },
244
245/////////////////////////////////////////////////////////////////////
246// Drag & Drop Old Callback functions
247/////////////////////////////////////////////////////////////////////
248        onOldDraggesture: function(aEvent){
249                nsDragAndDrop.startDrag(aEvent,bitsShortcutDialogOverlay.dragDropObserver);
250                aEvent.stopPropagation();
251        },
252        onOldDragover: function(aEvent){
253                nsDragAndDrop.dragOver(aEvent,bitsShortcutDialogOverlay.dragDropObserver);
254                aEvent.stopPropagation();
255        },
256        onOldDragdrop: function(aEvent){
257                nsDragAndDrop.drop(aEvent,bitsShortcutDialogOverlay.dragDropObserver);
258                aEvent.stopPropagation();
259        },
260        onOldDragexit: function(aEvent){
261                nsDragAndDrop.dragExit(aEvent,bitsShortcutDialogOverlay.dragDropObserver);
262                aEvent.stopPropagation();
263        },
264
265/////////////////////////////////////////////////////////////////////
266// Drag & Drop New Callback functions
267/////////////////////////////////////////////////////////////////////
268        onDragEvents: function(aEvent){
269                switch (aEvent.type) {
270                        case "dragstart":
271                                try{
272                                        var row = bitsShortcutDialogOverlay.TREE.currentIndex;
273                                        var results = bitsShortcutDialogOverlay.getTreeNodes();
274                                        if(!results[row]) return null;
275                                        var id = results[row].getAttribute("id");
276                                        var transferData = aEvent.dataTransfer;
277                                        transferData.setData("moz/rdfitem", id);
278                                }catch(ex){
279                                        bitsShortcutDialogOverlay._dump("bitsShortcutDialogOverlay.onDragEvents().dragstart:"+ex);
280                                }
281                                break;
282                        case "drag":
283                        break;
284                        case "dragend":
285                        break;
286                }
287        },
288
289        onDropEvents: function(aEvent){
290                switch (aEvent.type) {
291                        case "dragenter":
292                        case "dragover":
293                                aEvent.preventDefault();
294                                break;
295                        case "drop":
296                                aEvent.preventDefault();
297                                break;
298                }
299        },
300
301/////////////////////////////////////////////////////////////////////
302        rebuild : function(){
303                this.TREE.view = bitsShortcutDialogOverlay;
304        },
305
306/////////////////////////////////////////////////////////////////////
307// TREE むベント関連
308/////////////////////////////////////////////////////////////////////
309        onClick : function(aEvent){
310                if(this.TREE.view.selection.count == 0){
311                        this.EDIT.setAttribute("disabled","true");
312                        this.DEL.setAttribute("disabled","true");
313                        return false;
314                }
315                var idxList = this.getSelection();
316                if(this.validateMultipleSelection(idxList) == false){
317                        this.EDIT.setAttribute("disabled","true");
318                        this.DEL.setAttribute("disabled","true");
319                        return false;
320                }
321                var results = this.getTreeNodes();
322                if(!results[idxList[0]]){
323                        this.EDIT.setAttribute("disabled","true");
324                        this.DEL.setAttribute("disabled","true");
325                        return false;
326                }
327                this.EDIT.removeAttribute("disabled");
328                if(idxList.length==1 && results[idxList[0]].getAttributeNS(this.namespace,"removed")=='false'){
329                        this.DEL.setAttribute("disabled","true");
330                }else{
331                        this.DEL.removeAttribute("disabled");
332                }
333        },
334
335        onDblClick : function(aEvent){
336                var row = this.TREE.currentIndex;
337                var results = this.getTreeNodes();
338                if(!results[row]) return false;
339                var disabled = (results[row].getAttributeNS(this.namespace,"disabled")=='true'?true:false);
340                results[row].setAttributeNS(this.namespace,"disabled",(disabled?'false':'true'));
341                this.rebuild();
342                this._changed = true;
343        },
344
345        onAdd : function(aEvent){},
346
347        onEdit : function(aEvent){
348                if(this.TREE.view.selection.count == 0) return false;
349                var idxList = this.getSelection();
350                if(this.validateMultipleSelection(idxList) == false) return false;
351                var row = this.TREE.currentIndex;
352                var results = this.getTreeNodes();
353                if(!results[row]) return false;
354                var result = {
355                        accept  : false,
356                        title   : results[row].getAttributeNS(this.namespace,"title"),
357                        key     : results[row].getAttribute("key"),
358                        shift   : (results[row].getAttribute('shift') == 'true' ? true : false),
359                        alt     : (results[row].getAttribute('alt')   == 'true' ? true : false),
360                        accel   : (results[row].getAttribute('accel') == 'true' ? true : false),
361                        removed : (results[row].getAttributeNS(this.namespace,"removed")=='true'?true:false)
362                };
363                window.openDialog("chrome://markingcollection/content/shortcutProperty.xul", "", "chrome,centerscreen,modal", result);
364                if(!result.accept) return false;
365                delete result.accept;
366                results[row].setAttributeNS(this.namespace,"title",result.title);
367                results[row].setAttribute("key",result.key)
368                results[row].setAttribute("shift",result.shift)
369                results[row].setAttribute("alt",result.alt)
370                results[row].setAttribute("accel",result.accel)
371                this.rebuild();
372                this._changed = true;
373                return true;
374        },
375
376        onDel : function(aEvent){
377                if(this.TREE.view.selection.count == 0) return false;
378                var idxList = this.getSelection();
379                if(this.validateMultipleSelection(idxList) == false) return false;
380                if(!this.confirmRemovingFor()) return false;
381                var results = this.getTreeNodes();
382                var i;
383                for(i=idxList.length-1;i>=0;i--){
384                        var row = idxList[i];
385                        if(!results[row]) continue;
386                        if(results[row].getAttributeNS(this.namespace,"removed")=='false') continue;
387                        this.xmldoc.removeChild(results[row]);
388                }
389                this.rebuild();
390                this._changed = true;
391                this.onClick(aEvent);
392        },
393
394        onDispTree : function(aEvent){
395                nsPreferences.setBoolPref("wiredmarker.shortcut.tree_disp", this.DISP.checked);
396        },
397/////////////////////////////////////////////////////////////////////
398        getSelection : function(){
399                var ret = [];
400                var rc;
401                var i;
402                for(rc=0;rc<this.TREE.view.selection.getRangeCount();rc++){
403                        var start = {}, end = {};
404                        this.TREE.view.selection.getRangeAt(rc, start, end);
405                        for(i=start.value;i<= end.value;i++){
406                                if(!this.TREE.view.selection.isSelected(i)) continue;
407                                ret.push(i);
408                        }
409                }
410                return ret;
411        },
412
413        validateMultipleSelection : function(aIdxList){
414                if(aIdxList.length != this.TREE.view.selection.count){
415                        alert(this.STRING.getString("ERROR_MULTIPLE_SELECTION"));
416                        return false;
417                }
418                return true;
419        },
420
421/////////////////////////////////////////////////////////////////////
422        _dump : function(aString){
423                this._opener.top.bitsMarkingCollection._dump(aString);
424        },
425};
Note: See TracBrowser for help on using the repository browser.