1 | var mcDatabaseDialog = { |
---|
2 | |
---|
3 | _xmlfile : null, |
---|
4 | _xmldoc : null, |
---|
5 | _dbdir : null, |
---|
6 | _app_version : 2, |
---|
7 | |
---|
8 | ///////////////////////////////////////////////////////////////////// |
---|
9 | // ãããã㣠|
---|
10 | ///////////////////////////////////////////////////////////////////// |
---|
11 | get BrowserWindow() { return Components.classes["@mozilla.org/appshell/window-mediator;1"].getService(Components.interfaces.nsIWindowMediator).getMostRecentWindow("navigator:browser"); }, |
---|
12 | get Common() { return mcDatabaseDialog.BrowserWindow.bitsObjectMng.Common; }, |
---|
13 | get XPath() { return mcDatabaseDialog.BrowserWindow.bitsObjectMng.XPath; }, |
---|
14 | get Database() { return mcDatabaseDialog.BrowserWindow.bitsObjectMng.Database; }, |
---|
15 | |
---|
16 | /* |
---|
17 | get DataSource() { return window.opener.top.bitsObjectMng.DataSource; }, |
---|
18 | get Common() { return window.opener.top.bitsObjectMng.Common; }, |
---|
19 | get XPath() { return window.opener.top.bitsObjectMng.XPath; }, |
---|
20 | get Database() { return window.opener.top.bitsObjectMng.Database; }, |
---|
21 | get XML() { return window.opener.top.bitsObjectMng.XML; }, |
---|
22 | get gBrowser() { return window.opener.top.bitsObjectMng.getBrowser();}, |
---|
23 | */ |
---|
24 | |
---|
25 | get STRING() { return document.getElementById("mcSettingString"); }, |
---|
26 | |
---|
27 | get TREE() { return document.getElementById("mcDatabaseTree"); }, |
---|
28 | get MENU_ADD() { return document.getElementById("mcDatabaseAdd"); }, |
---|
29 | get MENU_SET() { return document.getElementById("mcDatabaseSet"); }, |
---|
30 | get MENU_DEL() { return document.getElementById("mcDatabaseDel"); }, |
---|
31 | get MENU_DIS() { return document.getElementById("mcDatabaseDis"); }, |
---|
32 | get CHK_UNUSED() { return document.getElementById("mcDatabaseStartupAllDBUnused"); }, |
---|
33 | |
---|
34 | get PANEL() { return document.getElementById("mcDatabaseTabPanel"); }, |
---|
35 | |
---|
36 | get alldbunused(){ return nsPreferences.getBoolPref("wiredmarker.startup.alldbunused", false); }, |
---|
37 | set alldbunused(aVal){ |
---|
38 | var val = (aVal?true:false); |
---|
39 | nsPreferences.setBoolPref("wiredmarker.startup.alldbunused", val); |
---|
40 | }, |
---|
41 | |
---|
42 | ///////////////////////////////////////////////////////////////////// |
---|
43 | // ã¡ãœãã |
---|
44 | ///////////////////////////////////////////////////////////////////// |
---|
45 | init : function(aEvent){ |
---|
46 | try{ |
---|
47 | var xmlfile = mcDatabaseDialog.Common.getExtensionDir().clone(); |
---|
48 | xmlfile.append("db.xml"); |
---|
49 | if(xmlfile.exists()){ |
---|
50 | this._xmlfile = xmlfile; |
---|
51 | function _loadXMLDocument(pUri){ |
---|
52 | if(pUri == undefined) return undefined; |
---|
53 | //var xmlDocument = window.opener.top.bitsMarkingCollection.loadXMLDocument(pUri); |
---|
54 | var xmlDocument = mcDatabaseDialog.BrowserWindow.bitsMarkingCollection.loadXMLDocument(pUri); |
---|
55 | |
---|
56 | return xmlDocument; |
---|
57 | } |
---|
58 | function _createXMLDocument(aXMLFile){ |
---|
59 | if(!aXMLFile) return undefined; |
---|
60 | try{ |
---|
61 | return _loadXMLDocument(mcDatabaseDialog.Common.IO.newFileURI(aXMLFile).spec); |
---|
62 | }catch(ex){ |
---|
63 | mcDatabaseDialog._dump("mcDatabaseDialog._createXMLDocument():"+ ex); |
---|
64 | return undefined; |
---|
65 | } |
---|
66 | } |
---|
67 | this._xmldoc = _createXMLDocument(xmlfile); |
---|
68 | } |
---|
69 | var info = Components.classes["@mozilla.org/xre/app-info;1"].getService(Components.interfaces.nsIXULAppInfo); |
---|
70 | this._app_version = parseFloat(info.version); |
---|
71 | }catch(e){} |
---|
72 | if(!this._xmldoc) return; |
---|
73 | this.CHK_UNUSED.checked = this.alldbunused; |
---|
74 | this.rebuild(); |
---|
75 | this.TREE.addEventListener("click", this.onClick, false); |
---|
76 | this.TREE.addEventListener("dblclick", this.onDblClick, false); |
---|
77 | this.PANEL.addEventListener("command", this.eventListener, false); |
---|
78 | if(this._app_version<3.1){ |
---|
79 | this.TREE.addEventListener("draggesture", mcDatabaseDialog.onOldDraggesture, false); |
---|
80 | this.TREE.addEventListener("dragover", mcDatabaseDialog.onOldDragover, false); |
---|
81 | this.TREE.addEventListener("dragdrop", mcDatabaseDialog.onOldDragdrop, false); |
---|
82 | this.TREE.addEventListener("dragexit", mcDatabaseDialog.onOldDragexit, false); |
---|
83 | }else{ |
---|
84 | this.TREE.addEventListener("dragstart", mcDatabaseDialog.onDragEvents, false); |
---|
85 | this.TREE.addEventListener("drag", mcDatabaseDialog.onDragEvents, false); |
---|
86 | this.TREE.addEventListener("dragend", mcDatabaseDialog.onDragEvents, false); |
---|
87 | this.TREE.addEventListener("dragenter", mcDatabaseDialog.onDropEvents, false); |
---|
88 | this.TREE.addEventListener("dragover", mcDatabaseDialog.onDropEvents, false); |
---|
89 | this.TREE.addEventListener("dragleave", mcDatabaseDialog.onDropEvents, false); |
---|
90 | this.TREE.addEventListener("drop", mcDatabaseDialog.onDropEvents, false); |
---|
91 | } |
---|
92 | }, |
---|
93 | |
---|
94 | ///////////////////////////////////////////////////////////////////// |
---|
95 | done : function(aEvent){ |
---|
96 | if(this._app_version<3.1){ |
---|
97 | this.TREE.removeEventListener("draggesture", mcDatabaseDialog.onOldDraggesture, false); |
---|
98 | this.TREE.removeEventListener("dragover", mcDatabaseDialog.onOldDragover, false); |
---|
99 | this.TREE.removeEventListener("dragdrop", mcDatabaseDialog.onOldDragdrop, false); |
---|
100 | this.TREE.removeEventListener("dragexit", mcDatabaseDialog.onOldDragexit, false); |
---|
101 | }else{ |
---|
102 | this.TREE.removeEventListener("dragstart", mcDatabaseDialog.onDragEvents, false); |
---|
103 | this.TREE.removeEventListener("drag", mcDatabaseDialog.onDragEvents, false); |
---|
104 | this.TREE.removeEventListener("dragend", mcDatabaseDialog.onDragEvents, false); |
---|
105 | |
---|
106 | this.TREE.removeEventListener("dragenter", mcDatabaseDialog.onDropEvents, false); |
---|
107 | this.TREE.removeEventListener("dragover", mcDatabaseDialog.onDropEvents, false); |
---|
108 | this.TREE.removeEventListener("dragleave", mcDatabaseDialog.onDropEvents, false); |
---|
109 | this.TREE.removeEventListener("drop", mcDatabaseDialog.onDropEvents, false); |
---|
110 | } |
---|
111 | this._xmldoc = undefined; |
---|
112 | this._xmlfile = undefined; |
---|
113 | }, |
---|
114 | |
---|
115 | ///////////////////////////////////////////////////////////////////// |
---|
116 | // TREE 衚瀺å¶åŸ¡é¢é£ |
---|
117 | ///////////////////////////////////////////////////////////////////// |
---|
118 | get rowCount(){ |
---|
119 | var count = 0; |
---|
120 | var xPathResult = this.XPath.evaluate('/DATABASES[1]/DATABASE[@hidden="false"]', this._xmldoc); |
---|
121 | if(xPathResult) count = xPathResult.snapshotLength; |
---|
122 | xPathResult = undefined; |
---|
123 | return count; |
---|
124 | }, |
---|
125 | getCellText : function(row,column){ |
---|
126 | var celltext = ""; |
---|
127 | var dbNode = this.getNodeFromXML(row); |
---|
128 | var dataNode = dbNode.getElementsByTagName(column.id)[0]; |
---|
129 | if(dataNode) celltext = dataNode.textContent; |
---|
130 | if(column.id == "DATABASE_DEFAULT") celltext = ""; |
---|
131 | if(column.id == "DATABASE_STATUS"){ |
---|
132 | var disabled = dbNode.getAttribute("disabled"); |
---|
133 | if(!disabled || disabled == "false"){ |
---|
134 | celltext = this.STRING.getString("MSG_DATABASE_USE"); |
---|
135 | } |
---|
136 | } |
---|
137 | return celltext; |
---|
138 | }, |
---|
139 | setTree: function(treebox){ this.treebox = treebox; }, |
---|
140 | isContainer: function(row){ return false; }, |
---|
141 | isSeparator: function(row){ return false; }, |
---|
142 | isSorted: function(){ return false; }, |
---|
143 | getLevel: function(row){ return 0; }, |
---|
144 | getImageSrc: function(row,column){ |
---|
145 | if(column.id == "DATABASE_DEFAULT"){ |
---|
146 | var dbNode = this.getNodeFromXML(row); |
---|
147 | var db_default = dbNode.getAttribute("db_default"); |
---|
148 | return db_default == "true" ? "chrome://markingcollection/skin/radio-check.gif" : null; |
---|
149 | }else if(column.id == "DATABASE_TITLE"){ |
---|
150 | var dbNode = this.getNodeFromXML(row); |
---|
151 | var dataNode = dbNode.getElementsByTagName("DATABASE_ICON")[0]; |
---|
152 | return dataNode?dataNode.textContent:null; |
---|
153 | }else{ |
---|
154 | return null; |
---|
155 | } |
---|
156 | }, |
---|
157 | getRowProperties: function(row,props){}, |
---|
158 | getCellProperties: function(row, column, prop) { |
---|
159 | if(column.id == "DATABASE_TITLE"){ |
---|
160 | var aserv=Components.classes["@mozilla.org/atom-service;1"].getService(Components.interfaces.nsIAtomService); |
---|
161 | // prop.Clear(); |
---|
162 | prop.AppendElement(aserv.getAtom("Name")); |
---|
163 | } |
---|
164 | }, |
---|
165 | getColumnProperties: function(column, element, prop) {}, |
---|
166 | cycleHeader : function(col){}, |
---|
167 | setCellText : function(row,column,text){}, |
---|
168 | canDrop : function(row, orient){return true;}, |
---|
169 | getParentIndex: function(idx) { return -1; }, |
---|
170 | drop : function(row, orient){ |
---|
171 | // mcDatabaseDialog._dump("drop():row=["+row+"]:orient=["+orient+"]"); |
---|
172 | mcDatabaseDialog._drop(row, orient); |
---|
173 | }, |
---|
174 | _drop : function(row, orient){ |
---|
175 | if(orient>0) row++; |
---|
176 | if(row>=this.rowCount) row = this.rowCount-1; |
---|
177 | var dropnode = this.getNodeFromXML(row); |
---|
178 | if(!dropnode) return; |
---|
179 | var dragnode = this.getNodeFromXML(); |
---|
180 | if(!dragnode) return; |
---|
181 | if(dropnode == dragnode) return; |
---|
182 | if(row==this.rowCount-1 && orient>0){ |
---|
183 | dropnode.parentNode.appendChild(dragnode); |
---|
184 | this.TREE.currentIndex = row; |
---|
185 | }else{ |
---|
186 | dropnode.parentNode.insertBefore(dragnode,dropnode); |
---|
187 | this.TREE.currentIndex = row; |
---|
188 | } |
---|
189 | if(!this.TREE.view.selection.isSelected(this.TREE.currentIndex)) this.TREE.view.selection.select(this.TREE.currentIndex); |
---|
190 | this.saveXML(); |
---|
191 | this.rebuild(); |
---|
192 | }, |
---|
193 | |
---|
194 | dragDropObserver :{ |
---|
195 | onDragStart : function(event, transferData, action){ |
---|
196 | // mcDatabaseDialog._dump("dragDropObserver.onDragStart()"); |
---|
197 | |
---|
198 | try{ |
---|
199 | var id = mcDatabaseDialog.getIdFromXML(); |
---|
200 | transferData.data = new TransferData(); |
---|
201 | transferData.data.addDataForFlavour("moz/rdfitem", id); |
---|
202 | }catch(ex){ |
---|
203 | mcDatabaseDialog._dump("dragDropObserver.onDragStart():"+ex); |
---|
204 | } |
---|
205 | |
---|
206 | |
---|
207 | }, |
---|
208 | getSupportedFlavours : function(){ |
---|
209 | // mcDatabaseDialog._dump("dragDropObserver.getSupportedFlavours()"); |
---|
210 | var flavours = new FlavourSet(); |
---|
211 | flavours.appendFlavour("moz/rdfitem"); |
---|
212 | // flavours.appendFlavour("text/x-moz-url"); |
---|
213 | // flavours.appendFlavour("text/html"); |
---|
214 | // flavours.appendFlavour("text/xml"); |
---|
215 | // flavours.appendFlavour("application/x-moz-url"); |
---|
216 | // flavours.appendFlavour("application/x-moz-file","nsIFile"); |
---|
217 | // flavours.appendFlavour("text/unicode"); |
---|
218 | return flavours; |
---|
219 | }, |
---|
220 | onDragOver : function(event, flavour, session){ |
---|
221 | // mcDatabaseDialog._dump("dragDropObserver.onDragOver():flavour=["+flavour.contentType+"]"); |
---|
222 | return; |
---|
223 | var row = {}; |
---|
224 | var col = {}; |
---|
225 | var obj = {}; |
---|
226 | mcTreeHandler.TREE.treeBoxObject.getCellAt(event.clientX, event.clientY, row, col, obj); |
---|
227 | |
---|
228 | |
---|
229 | var aRow = row.value; |
---|
230 | if(aRow == undefined) return; |
---|
231 | if(aRow < 0) return; |
---|
232 | return; |
---|
233 | |
---|
234 | |
---|
235 | if(!mcTreeHandler.TREE.view.isContainer(aRow)) return; |
---|
236 | var isContainerOpen = mcTreeHandler.TREE.view.isContainerOpen(aRow); |
---|
237 | if(isContainerOpen) return; |
---|
238 | mcTreeDNDHandler.folderAutoOpenRow = aRow; |
---|
239 | }, |
---|
240 | onDragExit : function(event, session){ |
---|
241 | // mcDatabaseDialog._dump("dragDropObserver.onDragExit()"); |
---|
242 | return; |
---|
243 | mcTreeDNDHandler.folderAutoOpenRow = -1; |
---|
244 | _dump("dragDropObserver.onDragExit()"); |
---|
245 | }, |
---|
246 | onDrop : function(event, transferData, session){ |
---|
247 | // mcDatabaseDialog._dump("dragDropObserver.onDrop()"); |
---|
248 | }, |
---|
249 | }, |
---|
250 | |
---|
251 | ///////////////////////////////////////////////////////////////////// |
---|
252 | // Drag & Drop Old Callback functions |
---|
253 | ///////////////////////////////////////////////////////////////////// |
---|
254 | onOldDraggesture: function(aEvent){ |
---|
255 | nsDragAndDrop.startDrag(aEvent,mcDatabaseDialog.dragDropObserver); |
---|
256 | aEvent.stopPropagation(); |
---|
257 | }, |
---|
258 | onOldDragover: function(aEvent){ |
---|
259 | nsDragAndDrop.dragOver(aEvent,mcDatabaseDialog.dragDropObserver); |
---|
260 | aEvent.stopPropagation(); |
---|
261 | }, |
---|
262 | onOldDragdrop: function(aEvent){ |
---|
263 | nsDragAndDrop.drop(aEvent,mcDatabaseDialog.dragDropObserver); |
---|
264 | aEvent.stopPropagation(); |
---|
265 | }, |
---|
266 | onOldDragexit: function(aEvent){ |
---|
267 | nsDragAndDrop.dragExit(aEvent,mcDatabaseDialog.dragDropObserver); |
---|
268 | aEvent.stopPropagation(); |
---|
269 | }, |
---|
270 | |
---|
271 | ///////////////////////////////////////////////////////////////////// |
---|
272 | // Drag & Drop New Callback functions |
---|
273 | ///////////////////////////////////////////////////////////////////// |
---|
274 | onDragEvents: function(aEvent){ |
---|
275 | switch (aEvent.type) { |
---|
276 | case "dragstart": |
---|
277 | try{ |
---|
278 | var id = mcDatabaseDialog.getIdFromXML(); |
---|
279 | var transferData = aEvent.dataTransfer; |
---|
280 | transferData.setData("moz/rdfitem", id); |
---|
281 | }catch(ex){ |
---|
282 | mcDatabaseDialog._dump("mcDatabaseDialog.onDragEvents().dragstart:"+ex); |
---|
283 | } |
---|
284 | break; |
---|
285 | case "drag": |
---|
286 | break; |
---|
287 | case "dragend": |
---|
288 | break; |
---|
289 | } |
---|
290 | }, |
---|
291 | |
---|
292 | onDropEvents: function(aEvent){ |
---|
293 | switch (aEvent.type) { |
---|
294 | case "dragenter": |
---|
295 | case "dragover": |
---|
296 | aEvent.preventDefault(); |
---|
297 | break; |
---|
298 | case "drop": |
---|
299 | aEvent.preventDefault(); |
---|
300 | break; |
---|
301 | } |
---|
302 | }, |
---|
303 | |
---|
304 | ///////////////////////////////////////////////////////////////////// |
---|
305 | // TREE ã€ãã³ãé¢é£ |
---|
306 | ///////////////////////////////////////////////////////////////////// |
---|
307 | onClick: function(aEvent){ |
---|
308 | if(aEvent && aEvent.button != 0){ |
---|
309 | aEvent.stopPropagation(); |
---|
310 | return; |
---|
311 | } |
---|
312 | mcDatabaseDialog._onClick(aEvent); |
---|
313 | }, |
---|
314 | _onClick: function(aEvent){ |
---|
315 | // this._dump("_onClick():this.TREE.view.selection.count="+this.TREE.view.selection.count); |
---|
316 | // this._dump("_onClick():this.TREE.currentIndex="+this.TREE.currentIndex); |
---|
317 | |
---|
318 | var disabled = (this.TREE.view.selection.count<=0 || this.TREE.currentIndex < 0 || this.TREE.currentIndex >= this.TREE.view.rowCount) ? 3 : 0; |
---|
319 | if(!disabled){ |
---|
320 | var id = this.getIdFromXML(); |
---|
321 | if(id && id == "local") disabled |= 2; |
---|
322 | // var db_default = this.getDefaultFromXML(); |
---|
323 | // if(db_default) disabled |= 2; |
---|
324 | } |
---|
325 | this.disabledMenu(disabled); |
---|
326 | }, |
---|
327 | |
---|
328 | onDblClick: function(aEvent){ |
---|
329 | if(aEvent && aEvent.button != 0){ |
---|
330 | aEvent.stopPropagation(); |
---|
331 | return; |
---|
332 | } |
---|
333 | mcDatabaseDialog._onDblClick(aEvent); |
---|
334 | }, |
---|
335 | _onDblClick: function(aEvent){ |
---|
336 | if(this.MENU_DIS.disabled) return; |
---|
337 | this._onCommandDis(aEvent); |
---|
338 | }, |
---|
339 | |
---|
340 | ///////////////////////////////////////////////////////////////////// |
---|
341 | // MENU ã€ãã³ãé¢é£ |
---|
342 | ///////////////////////////////////////////////////////////////////// |
---|
343 | eventListener : function(aEvent){ |
---|
344 | //mcDatabaseDialog._dump("onCommand():aEvent="+aEvent.type); |
---|
345 | //mcDatabaseDialog._dump("onCommand():aEvent="+aEvent.target.id); |
---|
346 | switch(aEvent.type){ |
---|
347 | case "command" : |
---|
348 | mcDatabaseDialog.onCommand(aEvent); |
---|
349 | break; |
---|
350 | default : |
---|
351 | break; |
---|
352 | } |
---|
353 | }, |
---|
354 | |
---|
355 | onCommand : function(aEvent){ |
---|
356 | if(aEvent.target && aEvent.target.id){ |
---|
357 | switch(aEvent.target.id){ |
---|
358 | case "mcDatabaseAdd": |
---|
359 | this._onCommandAdd(aEvent); |
---|
360 | break; |
---|
361 | case "mcDatabaseSet": |
---|
362 | this._onCommandSet(aEvent); |
---|
363 | break; |
---|
364 | case "mcDatabaseDel": |
---|
365 | this._onCommandDel(aEvent); |
---|
366 | break; |
---|
367 | case "mcDatabaseDis": |
---|
368 | this._onCommandDis(aEvent); |
---|
369 | break; |
---|
370 | case "mcDatabaseStartupAllDBUnused": |
---|
371 | this._onCommandStartupAllDBUnused(aEvent); |
---|
372 | break; |
---|
373 | default: |
---|
374 | break; |
---|
375 | } |
---|
376 | } |
---|
377 | }, |
---|
378 | _onCommandAdd : function(aEvent){ |
---|
379 | // this._dump("_onCommandAdd():this.TREE.view.selection.count="+this.TREE.view.selection.count); |
---|
380 | // this._dump("_onCommandAdd():this.TREE.currentIndex="+this.TREE.currentIndex); |
---|
381 | |
---|
382 | if(!this._dbdir) this._dbdir = this._xmlfile.parent.clone(); |
---|
383 | |
---|
384 | var dbfile = null; |
---|
385 | var appname = this.STRING.getString("APP_TITLE").toLowerCase(); |
---|
386 | var filename = ""; |
---|
387 | var cnt; |
---|
388 | for(cnt=0;;cnt++){ |
---|
389 | dbfile = this._dbdir.clone(); |
---|
390 | filename = appname; |
---|
391 | if(cnt) filename += "(" + cnt + ")"; |
---|
392 | dbfile.append(filename + ".sqlite"); |
---|
393 | if(!dbfile.exists()) break; |
---|
394 | } |
---|
395 | var dbfileURL = this.getNewDataFile(filename); |
---|
396 | if(!dbfileURL) return; |
---|
397 | _dump('_onCommandAdd'); |
---|
398 | // this._dump("_onCommandAdd():dbfileURL="+dbfileURL.spec); |
---|
399 | // this._dump("_onCommandAdd():dbfileURL="+dbfileURL); |
---|
400 | |
---|
401 | setTimeout(function(){ mcDatabaseDialog.checkUseDataFile(dbfileURL); },0); |
---|
402 | |
---|
403 | }, |
---|
404 | |
---|
405 | _onCommandSet : function(aEvent){ |
---|
406 | // this._dump("_onCommandSet():this.TREE.view.selection.count="+this.TREE.view.selection.count); |
---|
407 | // this._dump("_onCommandSet():this.TREE.currentIndex="+this.TREE.currentIndex); |
---|
408 | this.openSetting(); |
---|
409 | }, |
---|
410 | |
---|
411 | _onCommandDel : function(aEvent){ |
---|
412 | |
---|
413 | var disabled = this.MENU_DEL.getAttribute("disabled"); |
---|
414 | if(disabled == "true") return; |
---|
415 | |
---|
416 | // this._dump("_onCommandDel():this.TREE.view.selection.count="+this.TREE.view.selection.count); |
---|
417 | // this._dump("_onCommandDel():this.TREE.currentIndex="+this.TREE.currentIndex); |
---|
418 | |
---|
419 | var dbNode = this.getNodeFromXML(); |
---|
420 | |
---|
421 | var dbtype = null; |
---|
422 | try{ dbtype = dbNode.getElementsByTagName("DATABASE_DBTYPE")[0].textContent; }catch(ex){} |
---|
423 | if(dbtype){ |
---|
424 | this.Database.done(dbtype); |
---|
425 | } |
---|
426 | |
---|
427 | // if(dbNode.nextSibling.nodeName == "#text") dbNode.parentNode.removeChild(dbNode.nextSibling); |
---|
428 | // if(dbNode.previousSibling.nodeName == "#text") dbNode.parentNode.removeChild(dbNode.previousSibling); |
---|
429 | // dbNode.parentNode.removeChild(dbNode); |
---|
430 | |
---|
431 | dbNode.setAttribute("disabled",true); |
---|
432 | dbNode.setAttribute("hidden",true); |
---|
433 | dbNode.setAttribute("db_contextmenu",false); |
---|
434 | |
---|
435 | this.saveXML(); |
---|
436 | |
---|
437 | this.rebuild(); |
---|
438 | if(this.TREE.currentIndex >= this.TREE.view.rowCount){ |
---|
439 | this.TREE.currentIndex = (this.TREE.view.rowCount>0?this.TREE.view.rowCount-1:-1); |
---|
440 | if(this.TREE.currentIndex<0){ |
---|
441 | this.TREE.view.selection.clearSelection(); |
---|
442 | }else{ |
---|
443 | this.TREE.view.selection.select(this.TREE.currentIndex); |
---|
444 | } |
---|
445 | } |
---|
446 | this._onClick(); |
---|
447 | }, |
---|
448 | |
---|
449 | _onCommandDis : function(aEvent){ |
---|
450 | // this._dump("_onCommandDis():this.TREE.view.selection.count="+this.TREE.view.selection.count); |
---|
451 | // this._dump("_onCommandDis():this.TREE.currentIndex="+this.TREE.currentIndex); |
---|
452 | |
---|
453 | var dbNode = this.getNodeFromXML(); |
---|
454 | var disabled = dbNode.getAttribute("disabled"); |
---|
455 | if(!disabled || disabled == "false"){ |
---|
456 | dbNode.setAttribute("disabled",true); |
---|
457 | dbNode.setAttribute("db_contextmenu",false); |
---|
458 | }else{ |
---|
459 | dbNode.removeAttribute("disabled"); |
---|
460 | dbNode.setAttribute("db_contextmenu",true); |
---|
461 | } |
---|
462 | |
---|
463 | this.saveXML(); |
---|
464 | |
---|
465 | this.rebuild(); |
---|
466 | }, |
---|
467 | |
---|
468 | _onCommandStartupAllDBUnused : function(aEvent){ |
---|
469 | this.alldbunused = this.CHK_UNUSED.checked; |
---|
470 | }, |
---|
471 | |
---|
472 | ///////////////////////////////////////////////////////////////////// |
---|
473 | rebuild : function(){ |
---|
474 | this.TREE.view = mcDatabaseDialog; |
---|
475 | }, |
---|
476 | |
---|
477 | ///////////////////////////////////////////////////////////////////// |
---|
478 | getRootNodeFromXML : function(){ |
---|
479 | var xPathResult = this.XPath.evaluate('/DATABASES[1]', this._xmldoc); |
---|
480 | if(!xPathResult) return undefined; |
---|
481 | return xPathResult.snapshotItem(0); |
---|
482 | }, |
---|
483 | |
---|
484 | ///////////////////////////////////////////////////////////////////// |
---|
485 | getNodeFromXML : function(aRow){ |
---|
486 | if(aRow == undefined) aRow = this.TREE.currentIndex; |
---|
487 | var xPathResult = this.XPath.evaluate('/DATABASES[1]/DATABASE[@hidden="false"]', this._xmldoc); |
---|
488 | if(xPathResult && xPathResult.snapshotLength>0){ |
---|
489 | return xPathResult.snapshotItem(aRow); |
---|
490 | }else{ |
---|
491 | return undefined; |
---|
492 | } |
---|
493 | }, |
---|
494 | |
---|
495 | ///////////////////////////////////////////////////////////////////// |
---|
496 | getIdFromXML : function(){ |
---|
497 | var dbNode = this.getNodeFromXML(); |
---|
498 | return dbNode.getAttribute("id"); |
---|
499 | }, |
---|
500 | |
---|
501 | ///////////////////////////////////////////////////////////////////// |
---|
502 | getDefaultFromXML : function(){ |
---|
503 | var dbNode = this.getNodeFromXML(); |
---|
504 | return dbNode.getAttribute("db_default")=="true"?true:false; |
---|
505 | }, |
---|
506 | |
---|
507 | ///////////////////////////////////////////////////////////////////// |
---|
508 | disabledMenu : function(aDisabled){ |
---|
509 | if(aDisabled & 1){ |
---|
510 | this.MENU_SET.setAttribute("disabled", true); |
---|
511 | this.MENU_DIS.setAttribute("disabled", true); |
---|
512 | }else{ |
---|
513 | this.MENU_SET.removeAttribute("disabled"); |
---|
514 | this.MENU_DIS.removeAttribute("disabled"); |
---|
515 | } |
---|
516 | |
---|
517 | if(aDisabled & 2){ |
---|
518 | this.MENU_DEL.setAttribute("disabled", true); |
---|
519 | }else{ |
---|
520 | this.MENU_DEL.removeAttribute("disabled"); |
---|
521 | } |
---|
522 | }, |
---|
523 | |
---|
524 | ///////////////////////////////////////////////////////////////////// |
---|
525 | getNewDataFile : function (aTitle){ |
---|
526 | var result = null; |
---|
527 | var picker = Components.classes["@mozilla.org/filepicker;1"].createInstance(Components.interfaces.nsIFilePicker); |
---|
528 | var pickerMode; |
---|
529 | |
---|
530 | var prompts = Components.classes["@mozilla.org/embedcomp/prompt-service;1"].getService(Components.interfaces.nsIPromptService); |
---|
531 | var check = {value: false}; |
---|
532 | var flags = prompts.BUTTON_TITLE_YES * prompts.BUTTON_POS_0 + prompts.BUTTON_TITLE_IS_STRING * prompts.BUTTON_POS_1 + prompts.BUTTON_TITLE_NO * prompts.BUTTON_POS_2; |
---|
533 | var button = prompts.confirmEx(window, this.STRING.getString("MSG_ADD_DATAFILE"), this.STRING.getString("CONFIRM_NEW_DATAFILE"), flags, "Button 0", this.STRING.getString("MSG_EXISTING_DATABASE"), "Button 2", null, check); |
---|
534 | if(button == 0){ |
---|
535 | pickerMode = picker.modeSave; |
---|
536 | }else if(button == 1){ |
---|
537 | pickerMode = picker.modeOpen; |
---|
538 | }else{ |
---|
539 | return; |
---|
540 | } |
---|
541 | try{ |
---|
542 | picker.init(window, "Selected File", pickerMode); |
---|
543 | if(aTitle && pickerMode != picker.modeOpen) picker.defaultString = aTitle + ".sqlite"; |
---|
544 | picker.defaultExtension = ".sqlite"; |
---|
545 | picker.displayDirectory = (this._dbdir?this._dbdir:this._xmlfile.parent); |
---|
546 | picker.appendFilter(this.STRING.getString("MSG_DATAFILE") + " (*.sqlite)","*.sqlite"); |
---|
547 | picker.appendFilter("All Files (*.*)","*.sqlite"); |
---|
548 | var showResult = picker.show(); |
---|
549 | if(showResult == picker.returnOK){ |
---|
550 | result = picker.fileURL; |
---|
551 | }else if(showResult == picker.returnReplace){ |
---|
552 | if(picker.file.exists()) picker.file.remove(false); |
---|
553 | result = picker.fileURL; |
---|
554 | } |
---|
555 | }catch(e){ |
---|
556 | result = null; |
---|
557 | this.Common.alert(e); |
---|
558 | } |
---|
559 | if(result && !result.file){ |
---|
560 | result = result.QueryInterface(Components.interfaces.nsIURL); |
---|
561 | result = result.QueryInterface(Components.interfaces.nsIFileURL); |
---|
562 | } |
---|
563 | return result; |
---|
564 | }, |
---|
565 | |
---|
566 | ///////////////////////////////////////////////////////////////////// |
---|
567 | checkUseDataFile : function (aURL){ |
---|
568 | _dump("checkUseDataFile:START"); |
---|
569 | try{ |
---|
570 | if(!aURL) return; |
---|
571 | var msg = this.STRING.getString("MSG_DATAFILE") + "[" + this.Common.splitFileName(aURL.file.leafName)[0] + "]\n\n"; |
---|
572 | msg += this.STRING.getString("ERROR_ADD_DATAFILE_3"); |
---|
573 | |
---|
574 | var xPathResult = this.XPath.evaluate('/DATABASES[1]/DATABASE[@hidden="false"]/DATABASE_FILE', this._xmldoc); |
---|
575 | if(xPathResult){ |
---|
576 | _dump("checkUseDataFile:1"); |
---|
577 | var ncnt; |
---|
578 | for(ncnt=0;ncnt<xPathResult.snapshotLength;ncnt++){ |
---|
579 | var node = xPathResult.snapshotItem(ncnt); |
---|
580 | if(!node || node.textContent != aURL.spec) continue; |
---|
581 | |
---|
582 | var nameNode = node.parentNode.getElementsByTagName("DATABASE_TITLE")[0]; |
---|
583 | if(nameNode){ |
---|
584 | msg = this.STRING.getString("MSG_DATAFILE") + "[" + this.Common.splitFileName(aURL.file.leafName)[0] + "]\n"; |
---|
585 | msg += this.STRING.getString("MSG_USE_TITLE") + "[" + nameNode.textContent + "]\n\n"; |
---|
586 | msg += this.STRING.getString("ERROR_ADD_DATAFILE_3"); |
---|
587 | } |
---|
588 | |
---|
589 | aURL = undefined; |
---|
590 | break; |
---|
591 | } |
---|
592 | } |
---|
593 | if(!aURL){ |
---|
594 | _dump("checkUseDataFile:2"); |
---|
595 | var prompts = Components.classes["@mozilla.org/embedcomp/prompt-service;1"].getService(Components.interfaces.nsIPromptService); |
---|
596 | var check = {value: false}; |
---|
597 | var flags = prompts.BUTTON_TITLE_YES * prompts.BUTTON_POS_0 + prompts.BUTTON_TITLE_NO * prompts.BUTTON_POS_1; |
---|
598 | var button = prompts.confirmEx(window, this.STRING.getString("MSG_ADD_DATAFILE"), msg, flags, "Button 0", "Button 1", "Button 2", null, check); |
---|
599 | if(button == 0) setTimeout(function(){ mcDatabaseDialog._onCommandAdd(); },0); |
---|
600 | }else{ |
---|
601 | _dump("checkUseDataFile:3"); |
---|
602 | var timeStamp = this.Common.getTimeStamp(); |
---|
603 | var newNode = true; |
---|
604 | var xPathResult = this.XPath.evaluate('/DATABASES[1]/DATABASE[@hidden="true"]/DATABASE_FILE', this._xmldoc); |
---|
605 | if(xPathResult){ |
---|
606 | var ncnt; |
---|
607 | for(ncnt=0;ncnt<xPathResult.snapshotLength;ncnt++){ |
---|
608 | var node = xPathResult.snapshotItem(ncnt); |
---|
609 | if(node && node.textContent == aURL.spec) break; |
---|
610 | } |
---|
611 | if(ncnt<xPathResult.snapshotLength){ |
---|
612 | var lastNode = null; |
---|
613 | var xPathResultT = this.XPath.evaluate('/DATABASES[1]/DATABASE[@hidden="false"]', this._xmldoc); |
---|
614 | if(xPathResultT && xPathResultT.snapshotLength>0) lastNode = xPathResultT.snapshotItem(xPathResultT.snapshotLength-1); |
---|
615 | |
---|
616 | var node = xPathResult.snapshotItem(ncnt); |
---|
617 | var cloneNode = node.parentNode.cloneNode(true); |
---|
618 | node.parentNode.parentNode.removeChild(node.parentNode); |
---|
619 | |
---|
620 | cloneNode.setAttribute("disabled","true"); |
---|
621 | cloneNode.setAttribute("hidden","false"); |
---|
622 | cloneNode.setAttribute("db_order",timeStamp); |
---|
623 | |
---|
624 | if(lastNode){ |
---|
625 | var nextSibling = lastNode.nextSibling; |
---|
626 | while(nextSibling && nextSibling.nodeType != 1){ |
---|
627 | nextSibling = nextSibling.nextSibling; |
---|
628 | } |
---|
629 | if(nextSibling){ |
---|
630 | lastNode.parentNode.insertBefore(cloneNode,nextSibling); |
---|
631 | }else{ |
---|
632 | lastNode.parentNode.appendChild(cloneNode); |
---|
633 | } |
---|
634 | } |
---|
635 | newNode = false; |
---|
636 | } |
---|
637 | } |
---|
638 | if(newNode){ |
---|
639 | _dump("checkUseDataFile:4"); |
---|
640 | var dbid = "local"+timeStamp; |
---|
641 | var rootNode = this.getRootNodeFromXML(); |
---|
642 | |
---|
643 | var dbNode = this._xmldoc.createElement("DATABASE"); |
---|
644 | dbNode.setAttribute("id",dbid); |
---|
645 | dbNode.setAttribute("disabled","true"); |
---|
646 | dbNode.setAttribute("hidden","false"); |
---|
647 | dbNode.setAttribute("db_order",timeStamp); |
---|
648 | rootNode.appendChild(dbNode) |
---|
649 | |
---|
650 | textNode = this._xmldoc.createTextNode("\n"); |
---|
651 | rootNode.appendChild(textNode); |
---|
652 | |
---|
653 | var dbinfo = { |
---|
654 | title : this.Common.splitFileName(aURL.file.leafName)[0], |
---|
655 | dbtype : dbid, |
---|
656 | file : aURL.spec, |
---|
657 | icon : "chrome://markingcollection/skin/database.png", |
---|
658 | comment : null, |
---|
659 | }; |
---|
660 | |
---|
661 | textNode = this._xmldoc.createTextNode("\n "); |
---|
662 | dbNode.appendChild(textNode); |
---|
663 | |
---|
664 | var childNode = this._xmldoc.createElement("DATABASE_TITLE"); |
---|
665 | textNode = this._xmldoc.createTextNode(dbinfo.title); |
---|
666 | childNode.appendChild(textNode); |
---|
667 | dbNode.appendChild(childNode); |
---|
668 | |
---|
669 | textNode = this._xmldoc.createTextNode("\n "); |
---|
670 | dbNode.appendChild(textNode); |
---|
671 | |
---|
672 | childNode = this._xmldoc.createElement("DATABASE_DBTYPE"); |
---|
673 | textNode = this._xmldoc.createTextNode(dbinfo.dbtype); |
---|
674 | childNode.appendChild(textNode); |
---|
675 | dbNode.appendChild(childNode); |
---|
676 | |
---|
677 | textNode = this._xmldoc.createTextNode("\n "); |
---|
678 | dbNode.appendChild(textNode); |
---|
679 | |
---|
680 | childNode = this._xmldoc.createElement("DATABASE_FILE"); |
---|
681 | textNode = this._xmldoc.createTextNode(dbinfo.file); |
---|
682 | childNode.appendChild(textNode); |
---|
683 | dbNode.appendChild(childNode); |
---|
684 | |
---|
685 | textNode = this._xmldoc.createTextNode("\n "); |
---|
686 | dbNode.appendChild(textNode); |
---|
687 | |
---|
688 | childNode = this._xmldoc.createElement("DATABASE_ICON"); |
---|
689 | textNode = this._xmldoc.createTextNode(dbinfo.icon); |
---|
690 | childNode.appendChild(textNode); |
---|
691 | dbNode.appendChild(childNode); |
---|
692 | |
---|
693 | textNode = this._xmldoc.createTextNode("\n "); |
---|
694 | dbNode.appendChild(textNode); |
---|
695 | } |
---|
696 | this.rebuild(); |
---|
697 | this.TREE.view.selection.select(this.TREE.view.rowCount-1); |
---|
698 | this._onClick(); |
---|
699 | this._dbdir = aURL.file.parent.clone(); |
---|
700 | setTimeout(function(){ mcDatabaseDialog.openSetting(dbinfo); },0); |
---|
701 | } |
---|
702 | }catch(e){ |
---|
703 | alert(e); |
---|
704 | } |
---|
705 | _dump("checkUseDataFile:END"); |
---|
706 | }, |
---|
707 | |
---|
708 | ///////////////////////////////////////////////////////////////////// |
---|
709 | openSetting : function (aDbinfo){ |
---|
710 | |
---|
711 | try{ |
---|
712 | |
---|
713 | var result = {}; |
---|
714 | var newInfo = (aDbinfo?true:false); |
---|
715 | if(!aDbinfo){ |
---|
716 | aDbinfo = { |
---|
717 | title : null, |
---|
718 | dbtype : null, |
---|
719 | file : null, |
---|
720 | icon : null, |
---|
721 | comment : null, |
---|
722 | }; |
---|
723 | var dbNode = this.getNodeFromXML(); |
---|
724 | try{ aDbinfo.title = dbNode.getElementsByTagName("DATABASE_TITLE")[0].textContent; }catch(ex){this.Common.alert(ex)} |
---|
725 | try{ aDbinfo.dbtype = dbNode.getElementsByTagName("DATABASE_DBTYPE")[0].textContent; }catch(ex){} |
---|
726 | try{ aDbinfo.file = dbNode.getElementsByTagName("DATABASE_FILE")[0].textContent; }catch(ex){} |
---|
727 | try{ aDbinfo.icon = dbNode.getElementsByTagName("DATABASE_ICON")[0].textContent; }catch(ex){} |
---|
728 | try{ aDbinfo.comment = dbNode.getElementsByTagName("DATABASE_COMMENT")[0].textContent; }catch(ex){} |
---|
729 | try{ aDbinfo.use = (dbNode.getAttribute("disabled")=="true"?false:true); }catch(ex){} |
---|
730 | try{ aDbinfo.contextmenu = (dbNode.getAttribute("db_contextmenu")=="true"?true:false); }catch(ex){} |
---|
731 | try{ aDbinfo.default = (dbNode.getAttribute("db_default")=="true"?true:false); }catch(ex){} |
---|
732 | } |
---|
733 | if(aDbinfo){ |
---|
734 | var key; |
---|
735 | for(key in aDbinfo){ |
---|
736 | result[key] = aDbinfo[key]; |
---|
737 | } |
---|
738 | } |
---|
739 | result.accept = false; |
---|
740 | window.openDialog("chrome://markingcollection/content/databasePropDialog.xul", "", "chrome,centerscreen,modal", result); |
---|
741 | if(result.accept){ |
---|
742 | var dbNode = this.getNodeFromXML(); |
---|
743 | var key; |
---|
744 | for(key in result){ |
---|
745 | if(aDbinfo[key] == result[key]) continue; |
---|
746 | if(key == "accept") continue; |
---|
747 | if(key == "default" && result[key]){ |
---|
748 | var xPathResult = this.XPath.evaluate('/DATABASES[1]/DATABASE', this._xmldoc); |
---|
749 | if(xPathResult){ |
---|
750 | var ncnt; |
---|
751 | for(ncnt=0;ncnt<xPathResult.snapshotLength;ncnt++){ |
---|
752 | var node = xPathResult.snapshotItem(ncnt); |
---|
753 | if(!node) continue; |
---|
754 | node.removeAttribute("db_default"); |
---|
755 | } |
---|
756 | } |
---|
757 | var xPathResult = this.XPath.evaluate('/DATABASES[1]/DATABASE/DATABASE_ICON', this._xmldoc); |
---|
758 | if(xPathResult){ |
---|
759 | var ncnt; |
---|
760 | for(ncnt=0;ncnt<xPathResult.snapshotLength;ncnt++){ |
---|
761 | var node = xPathResult.snapshotItem(ncnt); |
---|
762 | if(!node) continue; |
---|
763 | node.textContent = "chrome://markingcollection/skin/database.png"; |
---|
764 | } |
---|
765 | } |
---|
766 | dbNode.setAttribute("db_default",result[key]); |
---|
767 | try{ dbNode.getElementsByTagName("DATABASE_ICON")[0].textContent = "chrome://markingcollection/skin/localfolder.png"; }catch(ex){} |
---|
768 | if(result[key]){ |
---|
769 | result.use = true; |
---|
770 | dbNode.removeAttribute("disabled"); |
---|
771 | } |
---|
772 | continue; |
---|
773 | } |
---|
774 | if(key == "contextmenu"){ |
---|
775 | dbNode.setAttribute("db_contextmenu",result[key]); |
---|
776 | continue; |
---|
777 | } |
---|
778 | if(key == "use"){ |
---|
779 | if(result[key]){ |
---|
780 | dbNode.removeAttribute("disabled"); |
---|
781 | }else{ |
---|
782 | dbNode.setAttribute("disabled",true); |
---|
783 | } |
---|
784 | continue; |
---|
785 | } |
---|
786 | |
---|
787 | var tag = "DATABASE_" + key.toUpperCase(); |
---|
788 | var node = dbNode.getElementsByTagName(tag)[0]; |
---|
789 | if(result[key] && !node){ |
---|
790 | |
---|
791 | var textNode = this._xmldoc.createTextNode(" "); |
---|
792 | dbNode.appendChild(textNode); |
---|
793 | |
---|
794 | node = this._xmldoc.createElement(tag); |
---|
795 | textNode = this._xmldoc.createTextNode(result[key]); |
---|
796 | node.appendChild(textNode); |
---|
797 | dbNode.appendChild(node); |
---|
798 | |
---|
799 | textNode = this._xmldoc.createTextNode("\n "); |
---|
800 | dbNode.appendChild(textNode); |
---|
801 | |
---|
802 | } |
---|
803 | if(!result[key] && node){ |
---|
804 | if(node.nextSibling .nodeName == "#text") node.parentNode.removeChild(node.nextSibling ); |
---|
805 | if(node.previousSibling.nodeName == "#text") node.parentNode.removeChild(node.previousSibling); |
---|
806 | node.parentNode.removeChild(node); |
---|
807 | } |
---|
808 | if(result[key] && node){ |
---|
809 | var textNode = this._xmldoc.createTextNode(result[key]); |
---|
810 | node.replaceChild(textNode,node.firstChild); |
---|
811 | } |
---|
812 | } |
---|
813 | this.saveXML(); |
---|
814 | }else{ |
---|
815 | if(newInfo) this._onCommandDel(); |
---|
816 | } |
---|
817 | |
---|
818 | this.rebuild(); |
---|
819 | this._onClick(); |
---|
820 | |
---|
821 | }catch(e){ |
---|
822 | alert(e); |
---|
823 | } |
---|
824 | |
---|
825 | }, |
---|
826 | |
---|
827 | ///////////////////////////////////////////////////////////////////// |
---|
828 | saveXML : function(){ |
---|
829 | var xPathResult = this.XPath.evaluate('/DATABASES[1]/DATABASE', this._xmldoc); |
---|
830 | if(xPathResult){ |
---|
831 | var ncnt; |
---|
832 | var db_order=0; |
---|
833 | for(ncnt=0;ncnt<xPathResult.snapshotLength;ncnt++){ |
---|
834 | var node = xPathResult.snapshotItem(ncnt); |
---|
835 | if(!node) continue; |
---|
836 | node.setAttribute("db_order",++db_order); |
---|
837 | while(node.previousSibling && node.previousSibling.nodeName == "#text"){ |
---|
838 | node.previousSibling.parentNode.removeChild(node.previousSibling); |
---|
839 | } |
---|
840 | while(node.nextSibling && node.nextSibling.nodeName == "#text"){ |
---|
841 | node.nextSibling.parentNode.removeChild(node.nextSibling); |
---|
842 | } |
---|
843 | var textNode = this._xmldoc.createTextNode("\n "); |
---|
844 | node.parentNode.insertBefore(textNode,node); |
---|
845 | |
---|
846 | textNode = this._xmldoc.createTextNode("\n"); |
---|
847 | if(node.nextSibling){ |
---|
848 | node.parentNode.insertBefore(textNode,node.nextSibling); |
---|
849 | }else{ |
---|
850 | node.parentNode.appendChild(textNode); |
---|
851 | } |
---|
852 | } |
---|
853 | } |
---|
854 | var s = new XMLSerializer(); |
---|
855 | var xml = s.serializeToString(this._xmldoc); |
---|
856 | this.Common.writeFile(this._xmlfile, xml+"\n", "UTF-8"); |
---|
857 | }, |
---|
858 | |
---|
859 | ///////////////////////////////////////////////////////////////////// |
---|
860 | _dump : function(aString){ |
---|
861 | if(nsPreferences.getBoolPref("wiredmarker.debug", false)) window.dump(mcDatabaseDialog.Common.convertFormUnicode(aString,"Shift_jis")+"\n"); |
---|
862 | }, |
---|
863 | }; |
---|