source: DASISH/t5.6/client/branches/webannotator-basic-current-xsd/chrome/markingcollection/content/markingcollection/itemview.js @ 5703

Last change on this file since 5703 was 5703, checked in by stephanie.roth@snd.gu.se, 10 years ago

Initial commit of current status quo from GitHub. TODO: Adjust client code to work with updated xsd file.

  • Property svn:executable set to *
File size: 59.5 KB
Line 
1var bitsItemView = {
2        _init : false,
3        _pref : {},
4        _app_version : 2,
5        _canDrop : false,
6        _refreshFlag : true,
7        _getImageFromURL : {},
8
9        _refresh_timer : null,
10
11        modAlt   : false,
12        modShift : false,
13        modCtrl  : false,
14        modMeta  : false,
15
16        get POS_DEFAULT()     { return this.POS_TREE_BOTTOM; },
17        get POS_TREE_BOTTOM() { return "tree_bottom"; },
18        get POS_TREE_RIGHT()  { return "tree_right"; },
19
20        get BUTTON() {
21                try{
22                        return window.top.bitsMarkingCollection._contentWindow.document.getElementById("mcToolbarItemTreeButton");
23                }catch(e){ return undefined; }
24        },
25        get APPCONT()  { return document.getElementById("appcontent"); },
26        get idTREE()   { return "bitsItemTree"; },
27        get TREE()     { return document.getElementById(this.idTREE); },
28        get SPLITTER() { return document.getElementById("bitsBrowserLeftSplitter"); },
29        get TNBOX()    { return document.getElementById("bitsItemTNBox"); },
30        get VBOX()     { return document.getElementById("bitsBrowserLeftVBox"); },
31
32        get VTTB()     { return document.getElementById("bitsItemViewTypeToolbarbutton"); },
33        get VTLM()     { return document.getElementById("bitsItemViewTypeLargeMenuitem"); },
34        get VTMM()     { return document.getElementById("bitsItemViewTypeMiddleMenuitem"); },
35        get VTSM()     { return document.getElementById("bitsItemViewTypeSmallMenuitem"); },
36        get VSB()      { return document.getElementById("bitsItemViewSearchButton"); },
37        get VSM()      { return document.getElementById("bitsItemViewSearchMenu"); },
38
39        get idTREE_IFAVICON()  { return "bitsItemTreeIFavicon"; },
40        get idTREE_IURL()      { return "bitsItemTreeIUrl"; },
41        get idTREE_IDOCTITLE() { return "bitsItemTreeIDocTitle"; },
42        get idTREE_ITITLE()    { return "bitsItemTreeITitle"; },
43        get idTREE_IDATE()     { return "bitsItemTreeIDate"; },
44        get idTREE_INOTE()     { return "bitsItemTreeINote"; },
45        get idTREE_IFOLDER()   { return "bitsItemTreeIFolder"; },
46        get idTREE_IFOLDERSTYLE(){ return "bitsItemTreeIFolderStyle"; },
47        get TREE_IFAVICON()    { return document.getElementById(this.idTREE_IFAVICON); },
48        get TREE_IURL()        { return document.getElementById(this.idTREE_IURL); },
49        get TREE_IDOCTITLE()   { return document.getElementById(this.idTREE_IDOCTITLE); },
50        get TREE_ITITLE()      { return document.getElementById(this.idTREE_ITITLE); },
51        get TREE_IDATE()       { return document.getElementById(this.idTREE_IDATE); },
52        get TREE_INOTE()       { return document.getElementById(this.idTREE_INOTE); },
53        get TREE_IFOLDER()     { return document.getElementById(this.idTREE_IFOLDER); },
54        get TREE_IFOLDERSTYLE(){ return document.getElementById(this.idTREE_IFOLDERSTYLE); },
55
56        get idPOPUP_OPEN()    { return "bitsItemTreePopupOpen"; },
57        get idPOPUP_OPENN()   { return "bitsItemTreePopupOpenNewTab"; },
58        get idPOPUP_REMOVE()  { return "bitsItemTreePopupRemove"; },
59        get idPOPUP_PROPERTY(){ return "bitsItemTreePopupProperty"; },
60
61        get idPOPUP_COPY()        { return "bitsItemTreePopupHyperAnchorCopyToClipboard"; },
62        get idPOPUP_COPYTITLE()   { return "bitsItemTreePopupHyperAnchorCopyTitleToClipboard"; },
63        get idPOPUP_COPYNOTE()    { return "bitsItemTreePopupHyperAnchorCopyNoteToClipboard"; },
64        get idPOPUP_COPYMETA()    { return "bitsItemTreePopupHyperAnchorCopyMetaToClipboard"; },
65        get idPOPUP_COPYFORMAT()  { return "bitsItemTreePopupHyperAnchorCopyFormatToClipboard"; },
66        get idPOPUP_COPYSETTING() { return "bitsItemTreePopupHyperAnchorCopyFormatSetting"; },
67
68        get POPUP()         { return document.getElementById("bitsItemTreePopup"); },
69        get POPUP_OPEN()    { return document.getElementById(this.idPOPUP_OPEN); },
70        get POPUP_OPENN()   { return document.getElementById(this.idPOPUP_OPENN); },
71        get POPUP_REMOVE()  { return document.getElementById(this.idPOPUP_REMOVE); },
72        get POPUP_PROPERTY(){ return document.getElementById(this.idPOPUP_PROPERTY); },
73
74        get SIDEBAR_BOX()   { return document.getElementById("bitsSidebarBox"); },
75
76        get SIDEBAR()     { return window.top.document.getElementById("sidebar"); },
77        get SIDEBAR_DOC() {try{return this.SIDEBAR.contentDocument;}catch(e){return undefined;}},
78
79        get idBUTTON_LISTSTYLE()    { return "mcToolbarListStyleButton"; },
80        get idITEM_LISTSTYLE_RL()   { return "mcToolbarListStyleRLItem"; },
81        get idITEM_LISTSTYLE_TB()   { return "mcToolbarListStyleTBItem"; },
82        get idITEM_LISTSTYLE_NONE() { return "mcToolbarListStyleNoneItem"; },
83        get BUTTON_LISTSTYLE()    {try{return this.SIDEBAR_DOC.getElementById(this.idBUTTON_LISTSTYLE);}catch(e){return undefined;}},
84        get ITEM_LISTSTYLE_RL()   {try{return this.SIDEBAR_DOC.getElementById(this.idITEM_LISTSTYLE_RL);}catch(e){return undefined;}},
85        get ITEM_LISTSTYLE_TB()   {try{return this.SIDEBAR_DOC.getElementById(this.idITEM_LISTSTYLE_TB);}catch(e){return undefined;}},
86        get ITEM_LISTSTYLE_NONE() {try{return this.SIDEBAR_DOC.getElementById(this.idITEM_LISTSTYLE_NONE);}catch(e){return undefined;}},
87
88
89        get BROADCASTER() { return window.top.document.getElementById("viewMarkingCollection"); },
90
91        get STRING()     { return window.top.document.getElementById("MarkingCollectionOverlayString"); },
92        get DataSource() { return window.top.bitsObjectMng.DataSource; },
93        get Common()     { return window.top.bitsObjectMng.Common;     },
94        get XPath()      { return window.top.bitsObjectMng.XPath;      },
95        get Database()   { return window.top.bitsObjectMng.Database;   },
96        get XML()        { return window.top.bitsObjectMng.XML;   },
97        get gBrowser()   { return window.top.bitsObjectMng.getBrowser();},
98
99        get isChecked() {
100                return this._pref.disp;
101        },
102
103        get position() {
104                return this._pref.position;
105        },
106
107        set position(aPos) {
108                this._pref.position = aPos;
109                if(this._pref.position == this.POS_TREE_RIGHT){
110                        this.SIDEBAR_BOX.setAttribute("orient","horizontal");
111                        this.SPLITTER.setAttribute("orient","horizontal");
112                        this.VBOX.setAttribute("persist","width");
113                        try{this.BUTTON_LISTSTYLE.setAttribute("image",this.ITEM_LISTSTYLE_RL.getAttribute("image"));}catch(e){}
114                }else if(this._pref.position == this.POS_TREE_BOTTOM){
115                        this.SIDEBAR_BOX.setAttribute("orient","vertical");
116                        this.SPLITTER.setAttribute("orient","vertical");
117                        this.VBOX.setAttribute("persist","height");
118                        try{this.BUTTON_LISTSTYLE.setAttribute("image",this.ITEM_LISTSTYLE_TB.getAttribute("image"));}catch(e){}
119                }else{
120                        try{this.BUTTON_LISTSTYLE.setAttribute("image",this.ITEM_LISTSTYLE_NONE.getAttribute("image"));}catch(e){}
121                }
122        },
123
124        get confirmDelete() {
125                return this._pref.confirmDelete;
126        },
127
128        get object() {
129                return (this.TREE.currentIndex>=0 ? this.getRowObject(this.TREE.currentIndex) : undefined);
130        },
131
132/////////////////////////////////////////////////////////////////////
133        init : function(aEvent){
134                if(!this._init){
135                        var disp = nsPreferences.getBoolPref("wiredmarker.itemview.disp");
136                        if(disp == undefined) nsPreferences.setBoolPref("wiredmarker.itemview.disp",true);
137                        if(this.APPCONT){
138                                this.APPCONT.parentNode.insertBefore(this.VBOX,this.APPCONT)
139                                this.APPCONT.parentNode.insertBefore(this.SPLITTER,this.APPCONT)
140                        }
141                        this._pref = {
142                                disp          : nsPreferences.getBoolPref("wiredmarker.itemview.disp", false),
143                                position      : nsPreferences.copyUnicharPref("wiredmarker.itemview.position", this.POS_DEFAULT),
144                                confirmDelete : nsPreferences.getBoolPref("wiredmarker.confirmDelete", true),
145                        };
146                        this.position = this._pref.position;
147                        if(!this._pref.disp) try{this.BUTTON_LISTSTYLE.setAttribute("image",this.ITEM_LISTSTYLE_NONE.getAttribute("image"));}catch(e){}
148                        this.gBrowser.addEventListener("mousedown", this.onBrowserMousedown, false);
149                        var info = Components.classes["@mozilla.org/xre/app-info;1"].getService(Components.interfaces.nsIXULAppInfo);
150                        this._app_version = parseFloat(info.version);
151                        this.VTTB.setAttribute("disabled","true");
152                        if(this._app_version<3.1){
153                                this.TREE.addEventListener("draggesture", bitsItemView.onOldDraggesture, false);
154                                this.TREE.addEventListener("dragover", bitsItemView.onOldDragover, false);
155                                this.TREE.addEventListener("dragdrop", bitsItemView.onOldDragdrop, false);
156                                this.TREE.addEventListener("dragexit", bitsItemView.onOldDragexit, false);
157                        }else{
158                                this.TREE.addEventListener("dragstart", bitsItemView.onDragEvents, false);
159                                this.TREE.addEventListener("drag", bitsItemView.onDragEvents, false);
160                                this.TREE.addEventListener("dragend", bitsItemView.onDragEvents, false);
161
162                                this.TREE.addEventListener("dragenter", bitsItemView.onDropEvents, false);
163                                this.TREE.addEventListener("dragover", bitsItemView.onDropEvents, false);
164                                this.TREE.addEventListener("dragleave", bitsItemView.onDropEvents, false);
165                                this.TREE.addEventListener("drop", bitsItemView.onDropEvents, false);
166                        }
167                        this._init = true;
168                }
169                if(this.BUTTON) this.BUTTON.setAttribute("checked",this._pref.disp);
170                var sidebar = window.top.document.getElementById("sidebar");
171                if(sidebar && this.position == this.POS_TREE_RIGHT) sidebar.setAttribute("style","min-width:14em; width:18em;");
172        },
173
174/////////////////////////////////////////////////////////////////////
175        disp : function(aEvent){
176                this.treeDispChange();
177                this.rebuild();
178                this.SPLITTER.setAttribute("hidden",!this._pref.disp);
179                this.VBOX.setAttribute("hidden",!this._pref.disp);
180        },
181
182/////////////////////////////////////////////////////////////////////
183        done : function(aEvent){
184                this.SPLITTER.setAttribute("hidden",true);
185                this.VBOX.setAttribute("hidden",true);
186                try{this.TREE.treeBoxObject.clearStyleAndImageCaches();}catch(e){};
187                this.gBrowser.removeEventListener("mousedown", this.onBrowserMousedown, false);
188                if(this._app_version<3.1){
189                        this.TREE.removeEventListener("draggesture", bitsItemView.onOldDraggesture, false);
190                        this.TREE.removeEventListener("dragover", bitsItemView.onOldDragover, false);
191                        this.TREE.removeEventListener("dragdrop", bitsItemView.onOldDragdrop, false);
192                        this.TREE.removeEventListener("dragexit", bitsItemView.onOldDragexit, false);
193                }else{
194                        this.TREE.removeEventListener("dragstart", bitsItemView.onDragEvents, false);
195                        this.TREE.removeEventListener("drag", bitsItemView.onDragEvents, false);
196                        this.TREE.removeEventListener("dragend", bitsItemView.onDragEvents, false);
197                        this.TREE.removeEventListener("dragenter", bitsItemView.onDropEvents, false);
198                        this.TREE.removeEventListener("dragover", bitsItemView.onDropEvents, false);
199                        this.TREE.removeEventListener("dragleave", bitsItemView.onDropEvents, false);
200                        this.TREE.removeEventListener("drop", bitsItemView.onDropEvents, false);
201                }
202                var sidebar = window.top.document.getElementById("sidebar");
203                if(sidebar && this.position == this.POS_TREE_RIGHT) sidebar.setAttribute("style","min-width:14em; width:18em; max-width:36em;");
204        },
205
206/////////////////////////////////////////////////////////////////////
207        treeDispChange : function(){
208                try{var mcTreeRule = window.top.bitsMarkingCollection._contentWindow.document.getElementById("mcTreeRule");}catch(e){}
209                if(!mcTreeRule) return;
210                if(this._pref.disp){
211                        mcTreeRule.setAttribute("iscontainer", true);
212                }else{
213                        mcTreeRule.removeAttribute("iscontainer");
214                }
215        },
216
217/////////////////////////////////////////////////////////////////////
218        onChangeListStyle : function(aEvent){
219                var reboot = false;
220                if(aEvent.target.id == this.idITEM_LISTSTYLE_RL){
221                        if(!this._pref.disp || this.position != this.POS_TREE_RIGHT){
222                                nsPreferences.setBoolPref("wiredmarker.itemview.disp", true);
223                                nsPreferences.setUnicharPref("wiredmarker.itemview.position", this.POS_TREE_RIGHT);
224                                reboot = true;
225                        }
226                }else if(aEvent.target.id == this.idITEM_LISTSTYLE_TB){
227                        if(!this._pref.disp || this.position != this.POS_TREE_BOTTOM){
228                                nsPreferences.setBoolPref("wiredmarker.itemview.disp", true);
229                                nsPreferences.setUnicharPref("wiredmarker.itemview.position", this.POS_TREE_BOTTOM);
230                                reboot = true;
231                        }
232                }else if(aEvent.target.id == this.idITEM_LISTSTYLE_NONE){
233                        if(this._pref.disp){
234                                nsPreferences.setBoolPref("wiredmarker.itemview.disp", false);
235                                nsPreferences.setUnicharPref("wiredmarker.itemview.position", this.POS_TREE_BOTTOM);
236                                reboot = true;
237                        }
238                }
239                if(reboot){
240                        if(this.Common.confirm(this.STRING.getString("CONFIRM_SETTING_CHANGE_RESTART_APP"))){
241                                window.top.bitsMarkingCollection.reboot();
242                                return;
243                        }
244                }
245        },
246
247/////////////////////////////////////////////////////////////////////
248        onViewTypePopupCommand : function(aEvent){
249                var xmldoc = null;
250                var iconsize = null;
251                var viewtype = "small";
252                var viewtype_C = "small";
253                if(this._info){
254                        var viewmode = this._info.viewmode;
255                        var fid = this._info.fid;
256                        var dbtype = this._info.dbtype;
257                        if(fid && this.dbtype){
258                                var folders = this.Database.getFolderFormID(fid, dbtype);
259                                if(folders && folders.length>0 && folders[0].fid_property){
260                                        var parser = new DOMParser();
261                                        xmldoc = parser.parseFromString(folders[0].fid_property, "text/xml");
262                                        parser = undefined;
263                                        iconsize = xmldoc.getElementsByTagName("ICON_SIZE")[0];
264                                        if(iconsize) viewtype = iconsize.textContent
265                                }
266                        }
267                }
268                switch(aEvent.target.id){
269                        case "bitsItemViewTypeLargeMenuitem":
270                                viewtype_C = "large";
271                                break;
272                        case "bitsItemViewTypeMiddleMenuitem":
273                                viewtype_C = "middle";
274                                break;
275                        case "bitsItemViewTypeSmallMenuitem":
276                                viewtype_C = "small";
277                                break;
278                }
279                if(viewtype != viewtype_C){
280                        if(!xmldoc){
281                                var parser = new DOMParser();
282                                xmldoc = parser.parseFromString("<PROPERTY/>", "text/xml");
283                                parser = undefined;
284                        }
285                        if(iconsize){
286                                while(iconsize.hasChildNodes()){ iconsize.removeChild(iconsize.lastChild); }
287                        }else{
288                                iconsize = xmldoc.createElement("ICON_SIZE");
289                                xmldoc.documentElement.appendChild(iconsize);
290                        }
291                        iconsize.appendChild(xmldoc.createTextNode(viewtype_C));
292                        var s = new XMLSerializer();
293                        folders[0].fid_property = s.serializeToString(xmldoc);
294                        s = undefined;
295                        var dbtype = folders[0].dbtype;
296                        delete folders[0].dbtype;
297                        var changed = this.Database.updateFolder(folders[0],dbtype);
298                        this.refresh();
299                }
300        },
301
302/////////////////////////////////////////////////////////////////////
303        onSearchButtonCommand : function(aEvent){
304                var checked = this.VSB.getAttribute("checked");
305                if(!checked || checked == "false"){
306                        this.VSB.setAttribute("checked","true");
307                        this.VSM.removeAttribute("disabled");
308                        setTimeout(function(){
309                                bitsItemView.VSM.focus();
310                                bitsItemView.refresh();
311                        },0);
312                }else{
313                        this.VSB.removeAttribute("checked");
314                        this.VSM.blur();
315                        this.VSM.setAttribute("disabled","true");
316                        setTimeout(function(){
317                                        bitsItemView.refresh();
318                                },0);
319                }
320        },
321
322/////////////////////////////////////////////////////////////////////
323        onButtonClick : function(aEvent){
324                this._pref.disp = this.isChecked;
325                if(!this._pref.disp){
326                        this._pref.disp = true;
327                }else{
328                        this._pref.disp = false;
329                }
330                if(this.BUTTON) this.BUTTON.setAttribute("checked",this._pref.disp);
331                this.SPLITTER.setAttribute("hidden",!this._pref.disp);
332                this.VBOX.setAttribute("hidden",!this._pref.disp);
333                this.treeDispChange();
334                window.top.bitsMarkingCollection._contentWindow.mcTreeRdfRebuildItem.init();
335                window.top.bitsMarkingCollection._contentWindow.mcTreeHandler.TREE.builder.rebuild();
336                this.onTreeClick();
337                aEvent.stopPropagation();
338        },
339
340/////////////////////////////////////////////////////////////////////
341        onTreeClick : function(aInfo){
342                if(!this._pref.disp) return;
343                if(this._app_version<=2){
344                        this.VTTB.setAttribute("disabled","true");
345                }else if(aInfo){
346                        this.VTTB.removeAttribute("disabled");
347                }
348                if(bitsSearchAcross.getIndex() == mcTreeHandler.TREE.currentIndex){
349                        this.TREE_IFOLDER.hidden = false;
350                        this.TREE_IFOLDERSTYLE.hidden = false;
351                }else{
352                        this.TREE_IFOLDER.hidden = true;
353                        this.TREE_IFOLDERSTYLE.hidden = true;
354                }
355                this._info = aInfo;
356                this.rebuild(aInfo);
357        },
358
359/////////////////////////////////////////////////////////////////////
360        onTreeDateClick : function(aInfo){
361                if(!this._pref.disp) return;
362                if(this._app_version<=2){
363                        this.VTTB.setAttribute("disabled","true");
364                }else if(aInfo){
365                        this.VTTB.removeAttribute("disabled");
366                }
367                this._info = aInfo;
368                this.rebuild(aInfo);
369        },
370
371
372/////////////////////////////////////////////////////////////////////
373// TREE 衚瀺制埡関連
374/////////////////////////////////////////////////////////////////////
375        get rowCount(){
376                return (this.itemObjects?this.itemObjects.length:0);
377        },
378        getRowObject : function(row){
379                return (row>=0 && this.itemObjects && this.itemObjects.length>row ? this.itemObjects[row] : undefined);
380        },
381        getCellText : function(row,column){
382                if(!this.itemObjects || !this.itemObjects[row]) return null;
383                if(column.id == this.idTREE_ITITLE){
384                        return this.itemObjects[row].oid_title;
385                }else if(column.id == this.idTREE_IURL){
386                        return this.itemObjects[row].doc_url;
387                }else if(column.id == this.idTREE_IDOCTITLE){
388                        return this.itemObjects[row].doc_title;
389                }else if(column.id == this.idTREE_IDATE){
390                        if(!this.itemObjects) return null;
391                        if(this.itemObjects[row].oid_date.match(/^(\d{2}\/\d{2})\/(\d{4})\s+(\d{2}:\d{2}:\d{2})$/)){
392                                return RegExp.$2 + "/" + RegExp.$1 + " "  + RegExp.$3;
393                        }else{
394                                return this.itemObjects[row].oid_date;
395                        }
396                }else if(column.id == this.idTREE_INOTE){
397                        if(this.itemObjects[row].oid_note == undefined && this.itemObjects[row].oid_property && this.itemObjects[row].oid_property != ""){
398                                var domParser = new DOMParser();
399                                var xmldoc = domParser.parseFromString(this.itemObjects[row].oid_property, "text/xml");
400                                if(xmldoc && xmldoc.documentElement.nodeName == "parsererror") xmldoc = undefined;
401                                if(xmldoc){
402                                        var xmlnode = xmldoc.getElementsByTagName("NOTE")[0];
403                                        if(xmlnode) this.itemObjects[row].oid_note = xmlnode.textContent;
404                                }
405                                if(this.itemObjects[row].oid_note == undefined) this.itemObjects[row].oid_note = "";
406                                if(this.itemObjects[row].oid_note != ""){
407                                        var oid_note = this.itemObjects[row].oid_note;
408                                        oid_note = oid_note.replace(/[\r\n]+/mg, " ").replace(/^\s*/g,"").replace(/\s*$/g,"");
409                                        this.itemObjects[row].oid_note = oid_note;
410                                }
411                        }
412                        return this.itemObjects[row].oid_note;
413                }else if(column.id == this.idTREE_IFOLDER){
414                        if(this.itemObjects[row].pfid == "0" && this.itemObjects[row].dbtype == window.top.bitsMarkingCollection._uncategorized.dbtype){
415                                return window.top.bitsMarkingCollection._uncategorized.title;
416                        }else{
417                                return this.itemObjects[row].fid_title;
418                        }
419                }else{
420                        return null;
421                }
422        },
423        setTree: function(treebox){ this.treebox = treebox; },
424        isContainer: function(row){ return false; },
425        isSeparator: function(row){ return false; },
426        isSorted: function(){ return true; },
427        getLevel: function(row){ return 0; },
428        getImageSrc: function(row,column){
429                var icon;
430                if(!this.itemObjects) return icon;
431                if(!this.itemObjects[row]) return icon;
432                if(column.id != this.idTREE_IFAVICON) return icon;
433                var aObject = this.itemObjects[row];
434                if(aObject.oid_type.match(/^image\/(.+)$/)){
435                        if(this._app_version>2){
436                                var blobFile = this.Database.getObjectBLOBFile(aObject.oid,(aObject.dbtype?aObject.dbtype:this.dbtype));
437                                if(blobFile.exists()){
438                                        if(blobFile.fileSize>0){
439                                                var url = this.Common.convertFilePathToURL(blobFile.path);
440                                                if(url) icon = url;
441                                        }else if(aObject.oid_txt && this._getImageFromURL[aObject.oid_txt] == undefined){
442                                                var self = this;
443                                                this._getImageFromURL[aObject.oid_txt] = setTimeout(function(){
444                                                        if(self.Common.getImageFromURL(aObject.oid_txt, blobFile)){
445                                                                var box = self.TREE.boxObject;
446                                                                box.invalidateCell(row,column);
447                                                        }
448                                                },100);
449                                        }
450                                }
451                        }
452                }else if(aObject.oid_type == "url"){
453                        icon = this.Database.getFavicon(aObject.oid_txt,aObject.dbtype);
454                        if(!icon) icon = this.Database.getFavicon(aObject.doc_url,aObject.dbtype);
455                }else{
456                        var xmldoc;
457                        if(xmldoc){
458                                var xmlnode = xmldoc.getElementsByTagName("ICON")[0];
459                                if(xmlnode) icon = xmlnode.textContent;
460                        }else{
461                                if(aObject.oid_property.match(/^.*<ICON>(.+?)<\/ICON>.*$/m)){
462                                        icon = RegExp.$1;
463                                }
464                        }
465                        if(icon && icon != ""){
466                                var url = Components.classes['@mozilla.org/network/standard-url;1'].createInstance(Components.interfaces.nsIURL);
467                                url.spec = icon;
468                                if(url.scheme == "file"){
469                                        var file = bitsObjectMng.Common.convertURLToFile(icon)
470                                        if(!file.exists()) icon = undefined;
471                                }else if(url.scheme == "chrome"){
472                                        var val = this.Database.existsIcon(url);
473                                        if(!val) icon = undefined;
474                                }
475                        }
476                }
477                if(!icon) icon = this.Database.getFavicon(aObject.doc_url,aObject.dbtype);
478                if(!icon){
479                        if(aObject.oid_type.match(/^image\//)){
480                                icon = "chrome://markingcollection/skin/image.png";
481                        }else{
482                                icon = "chrome://markingcollection/skin/defaultFavicon.png";
483                        }
484                }
485                return icon;
486        },
487        getRowProperties: function(row,prop){},
488        getCellProperties: function(row, column, prop) {
489                if(column.id == this.idTREE_IFAVICON){
490                        var aserv=Components.classes["@mozilla.org/atom-service;1"].getService(Components.interfaces.nsIAtomService);
491                        prop.AppendElement(aserv.getAtom("ItemView"));
492                        if(this.itemObjects && this.itemObjects[row]){
493                                var aObject = this.itemObjects[row];
494                                prop.AppendElement(aserv.getAtom("ItemViewImage"));
495                        }
496                }else if(column.id == this.idTREE_IFOLDER){
497                        var aserv=Components.classes["@mozilla.org/atom-service;1"].getService(Components.interfaces.nsIAtomService);
498                        prop.AppendElement(aserv.getAtom("ItemView"));
499                        prop.AppendElement(aserv.getAtom("ItemViewImage"));
500                        prop.AppendElement(aserv.getAtom("folder"));
501                }else if(column.id == this.idTREE_IFOLDERSTYLE){
502                        if(this.itemObjects && this.itemObjects[row]){
503                                var aserv=Components.classes["@mozilla.org/atom-service;1"].getService(Components.interfaces.nsIAtomService);
504                                prop.AppendElement(aserv.getAtom('css_'+this.itemObjects[row].dbtype+'_'+this.itemObjects[row].pfid));
505                        }
506                }
507        },
508        getColumnProperties: function(column, element, prop) {},
509        cycleHeader : function(col){},
510        isEditable : function(row,column){
511                return column.editable;
512        },
513        setCellText : function(row,column,text){
514                if(column.id == this.idTREE_INOTE){
515                        text = text.replace(/\t/g,"        ");
516                        text = this.Common.exceptCode(text);
517                        text = text.replace(/[\r\n]+/g, " ").replace(/^\s*/g,"").replace(/\s*$/g,"");
518                        if(this.itemObjects[row].oid_note == text) return;
519                        if(this.itemObjects[row].oid_property == undefined || this.itemObjects[row].oid_property == "") this.itemObjects[row].oid_property == "<PROPERTY/>";
520                        var domParser = new DOMParser();
521                        var xmldoc = domParser.parseFromString(this.itemObjects[row].oid_property, "text/xml");
522                        if(xmldoc && xmldoc.documentElement.nodeName == "parsererror") xmldoc = undefined;
523                        if(xmldoc){
524                                var xmlnode = xmldoc.getElementsByTagName("NOTE")[0];
525                                if(!xmlnode){
526                                        xmlnode = xmldoc.createElement("NOTE");
527                                        xmldoc.documentElement.appendChild(xmlnode);
528                                }
529                                while(xmlnode.hasChildNodes()){ xmlnode.removeChild(xmlnode.lastChild); }
530                                if(text != ""){
531                                        xmlnode.appendChild(xmldoc.createTextNode(text));
532                                }else{
533                                        xmlnode.parentNode.removeChild(xmlnode);
534                                }
535                                var s = new XMLSerializer();
536                                this.itemObjects[row].oid_property = s.serializeToString(xmldoc);
537                                s = undefined;
538                                var itemObject = {};
539                                for(var key in this.itemObjects[row]){
540                                        itemObject[key] = this.itemObjects[row][key];
541                                }
542                                delete itemObject.oid_note;
543                                delete itemObject.fid_style;
544                                delete itemObject.fid_title;
545                                delete itemObject.folder_order;
546                                delete itemObject.dbtype;
547                                if(this.Database.updateObject(itemObject,this.dbtype)) this.itemObjects[row].oid_note = text;
548                                xmldoc = undefined;
549                        }
550                        domParser = undefined;
551                }
552        },
553        setCellValue : function(row,column,text){},
554  getParentIndex: function(idx) { return -1; },
555        canDrop : function(index, orient){
556                return this._canDrop;
557        },
558        onDrop : function(row, orient){},
559        drop : function(row, orient){
560                if(!this._info) return;
561                if(!this._canDrop) return;
562                try{
563                        var XferDataSet  = nsTransferable.get(mcTreeDNDHandler.dragDropObserver.getSupportedFlavours(),nsDragAndDrop.getDragData,true);
564                        var XferData     = XferDataSet.first.first;
565                        var doraggedData = XferData.data;
566                        var XferDataType = XferData.flavour.contentType;
567                }catch(ex){}
568                if(XferDataType == "application/x-moz-file" && XferData){
569                        if(XferData.data instanceof Components.interfaces.nsIFile){
570                                var urlString = this.Common.convertFilePathToURL(XferData.data.path);
571                                this.capture(urlString, row, orient);
572                        }
573                }else if(XferDataType == "wired-marker/object" && XferData){
574                }else if(XferData && XferData.data){
575                        if(
576                                bitsItemView.originalTarget &&
577                                bitsItemView.originalTarget.nodeName == "IMG" &&
578                                bitsItemView.originalTarget.hasAttribute('oid') &&
579                                bitsItemView.originalTarget.hasAttribute('dbtype') &&
580                                bitsItemView.originalTarget.hasAttribute('pfid')){
581                                var oid = bitsItemView.originalTarget.getAttribute('oid');
582                                var dbtype = bitsItemView.originalTarget.getAttribute('dbtype');
583                                var pfid = bitsItemView.originalTarget.getAttribute('pfid');
584                                var dstRes = mcTreeHandler.resource;
585                                if(dstRes){
586                                        var dst_fid = mcTreeDNDHandler.DataSource.getProperty(dstRes,"id");
587                                        var dst_dbtype = mcTreeDNDHandler.DataSource.getProperty(dstRes,"dbtype");
588                                        if(dst_fid == pfid && dst_dbtype == dbtype) return;
589                                        var srcObjects = bitsItemView.Database.getObject({oid:oid}, dbtype);
590                                        var mergeRtn = window.top.bitsTreeListService.mergeObject({fid:dst_fid,dbtype:dst_dbtype},srcObjects[0]);
591                                        if(mergeRtn) return;
592                                        var rtnObj = null;
593                                        if(dbtype == window.top.bitsMarkingCollection._uncategorized.dbtype || mcTreeDNDHandler.modShift){
594                                                rtnObj = window.top.bitsTreeListService.moveObject({fid:dst_fid,dbtype:dst_dbtype},srcObjects[0],true);
595                                        }else{
596                                                rtnObj = window.top.bitsTreeListService.copyObject({fid:dst_fid,dbtype:dst_dbtype},srcObjects[0]);
597                                        }
598                                        setTimeout(function(){
599                                                var viewmode = mcTreeViewModeService.viewmode;
600                                                mcItemView._bitsItemView.onTreeClick({viewmode:viewmode,fid:dst_fid,dbtype:dst_dbtype,res:dstRes});
601                                                window.top.bitsTreeListService.reload(bitsItemView.originalTarget.ownerDocument);
602                                                bitsItemView.originalTarget = null;
603                                        },0);
604                                }
605                        }else{
606                                this.capture(XferData.data, row, orient);
607                        }
608                }
609        },
610
611/////////////////////////////////////////////////////////////////////
612// Drag & Drop Old Callback functions
613/////////////////////////////////////////////////////////////////////
614        onOldDraggesture: function(aEvent){
615                bitsItemView.getModifiers(aEvent);
616                nsDragAndDrop.startDrag(aEvent,bitsItemView.dragDropObserver);
617                aEvent.stopPropagation();
618        },
619        onOldDragover: function(aEvent){
620                nsDragAndDrop.dragOver(aEvent,bitsItemView.dragDropObserver);
621                aEvent.stopPropagation();
622        },
623        onOldDragdrop: function(aEvent){
624                nsDragAndDrop.drop(aEvent,bitsItemView.dragDropObserver);
625                aEvent.stopPropagation();
626        },
627        onOldDragexit: function(aEvent){
628                nsDragAndDrop.dragExit(aEvent,bitsItemView.dragDropObserver);
629                aEvent.stopPropagation();
630        },
631
632/////////////////////////////////////////////////////////////////////
633// Drag & Drop New Callback functions
634/////////////////////////////////////////////////////////////////////
635        onDragEvents: function(aEvent){
636                switch(aEvent.type){
637                        case "dragstart":
638                                bitsItemView.onDragStart(aEvent);
639                                break;
640                        case "drag":
641                        break;
642                        case "dragend":
643                        break;
644                }
645        },
646
647        onDragStart : function(aEvent){
648                try{
649                        if(aEvent.originalTarget.localName != "treechildren") return;
650                        bitsItemView.getModifiers(aEvent);
651                        var idxList = bitsItemView.getSelection();
652                        if(idxList.length>0){
653                                var transferData = aEvent.dataTransfer;
654                                var rc = [];
655                                var i;
656                                for(i=0;i<idxList.length;i++){
657                                        var oid = bitsItemView.itemObjects[idxList[i]].oid;
658                                        var dbtype = bitsItemView.itemObjects[idxList[i]].dbtype;
659                                        rc.push(oid+"\t"+dbtype);
660                                }
661                                if(rc.length>0){
662                                        var data = rc.join("\n");
663                                        transferData.setData("wired-marker/object", data);
664                                }
665                        }
666                }catch(ex){
667                        bitsItemView._dump("bitsItemView.onDragStart():"+ex);
668                }
669        },
670
671        onDropEvents: function(aEvent){
672                switch(aEvent.type){
673                        case "dragenter":
674                        case "dragover":
675                                aEvent.preventDefault();
676                                break;
677                        case "drop":
678                                aEvent.preventDefault();
679                                var data = null;
680                                var supportedTypes = ["text/x-moz-url", "text/url-list", "text/plain", "application/x-moz-file"];
681                                var types = aEvent.dataTransfer.types;
682                                types = supportedTypes.filter(function(value){ return types.contains(value);});
683                                if(types.length){
684                                        data = aEvent.dataTransfer.getData(types[0]);
685                                        if(!data) data = aEvent.dataTransfer.mozGetDataAt(types[0],0);
686                                }
687                                if(data){
688                                        if(types[0] == "application/x-moz-file" && data instanceof Components.interfaces.nsIFile){
689                                                var urlString = bitsItemView.Common.convertFilePathToURL(data.path);
690                                                bitsItemView.capture(urlString);
691                                        }else{
692                                                if(
693                                                        bitsItemView.originalTarget &&
694                                                        bitsItemView.originalTarget.nodeName == "IMG" &&
695                                                        bitsItemView.originalTarget.hasAttribute('oid') &&
696                                                        bitsItemView.originalTarget.hasAttribute('dbtype') &&
697                                                        bitsItemView.originalTarget.hasAttribute('pfid')){
698                                                        var oid = bitsItemView.originalTarget.getAttribute('oid');
699                                                        var dbtype = bitsItemView.originalTarget.getAttribute('dbtype');
700                                                        var pfid = bitsItemView.originalTarget.getAttribute('pfid');
701                                                        var dstRes = mcTreeHandler.resource;
702                                                        if(dstRes){
703                                                                var dst_fid = mcTreeDNDHandler.DataSource.getProperty(dstRes,"id");
704                                                                var dst_dbtype = mcTreeDNDHandler.DataSource.getProperty(dstRes,"dbtype");
705                                                                if(dst_fid == pfid && dst_dbtype == dbtype) return;
706                                                                var srcObjects = bitsItemView.Database.getObject({oid:oid}, dbtype);
707                                                                var mergeRtn = window.top.bitsTreeListService.mergeObject({fid:dst_fid,dbtype:dst_dbtype},srcObjects[0]);
708                                                                if(mergeRtn) return;
709                                                                var rtnObj = null;
710                                                                if(dbtype == window.top.bitsMarkingCollection._uncategorized.dbtype || mcTreeDNDHandler.modShift){
711                                                                        rtnObj = window.top.bitsTreeListService.moveObject({fid:dst_fid,dbtype:dst_dbtype},srcObjects[0],true);
712                                                                }else{
713                                                                        rtnObj = window.top.bitsTreeListService.copyObject({fid:dst_fid,dbtype:dst_dbtype},srcObjects[0]);
714                                                                }
715                                                                setTimeout(function(){
716                                                                        var viewmode = mcTreeViewModeService.viewmode;
717                                                                        mcItemView._bitsItemView.onTreeClick({viewmode:viewmode,fid:dst_fid,dbtype:dst_dbtype,res:dstRes});
718                                                                        window.top.bitsTreeListService.reload(bitsItemView.originalTarget.ownerDocument);
719                                                                        bitsItemView.originalTarget = null;
720                                                                },0);
721                                                        }
722                                                }else{
723                                                        bitsItemView.capture(data);
724                                                }
725                                        }
726                                }
727                                break;
728                }
729        },
730
731/////////////////////////////////////////////////////////////////////
732        onBrowserMousedown : function(aEvent){
733                try{ bitsItemView.rangeParent = aEvent.rangeParent; }catch(ex){}
734                try{ bitsItemView.originalTarget = aEvent.originalTarget; }catch(ex){}
735        },
736
737/////////////////////////////////////////////////////////////////////
738        capture : function(aXferString, aRow, aOrient){
739                var aXferStringArr = aXferString.split("\n");
740                var url = aXferStringArr[0];
741                var url_title = aXferStringArr[1];
742                if(!url_title || url == url_title) url_title = "";
743                if(!this._info) return;
744                var fid;
745                var dbtype;
746                var fid_style;
747                if(!this._info.res){
748                        return;
749                }else{
750                        fid = this.DataSource.getProperty(this._info.res, "id");
751                        dbtype = this.DataSource.getProperty(this._info.res, "dbtype");
752                        fid_style = this.DataSource.getProperty(this._info.res, "style");
753                }
754                var win = this.Common.getFocusedWindow();
755                var sel = win.getSelection();
756                var isSelected = false;
757                try{
758                        isSelected = ( sel.anchorNode === sel.focusNode && sel.anchorOffset == sel.focusOffset ) ? false : true;
759                        if(isSelected && aXferStringArr.length != 1) isSelected = false;
760                        if(isSelected && win.document.contentType == "application/pdf") isSelected = false;
761                }catch(e){}
762                var newResArr;
763                if(isSelected){
764                        newResArr =  window.top.bitsMarkingCollection.addSelectedText({fid:fid,fid_style:fid_style,dbtype:dbtype},aOrient,aRow);
765                }else{
766                        if(url.indexOf("http://")  == 0 ||
767                                 url.indexOf("https://") == 0 ||
768                                 url.indexOf("ftp://")   == 0 ||
769                                 url.indexOf("file://")  == 0){
770                                if(this.originalTarget){
771                                        //既にTargetが蚭定されおいる堎合、カレントのドキュメントのものかをチェック
772                                        if(this.originalTarget.ownerDocument != this.gBrowser.contentDocument){
773                                                var win = this.gBrowser.contentWindow;
774                                                if(win.frames != null){
775                                                        var i;
776                                                        for(i=0;i<win.frames.length;i++){
777                                                                if(this.originalTarget.ownerDocument == win.frames[i].document) break;
778                                                        }
779                                                        if(i>=win.frames.length) this.originalTarget=null;
780                                                }else{
781                                                        this.originalTarget=null;
782                                                }
783                                        }
784                                }
785                                var tmpOriginalTarget = this.originalTarget;
786                                while(tmpOriginalTarget && (tmpOriginalTarget.nodeName != "A" && tmpOriginalTarget.nodeName != "IMG")){
787                                        tmpOriginalTarget = tmpOriginalTarget.parentNode;
788                                }
789                                if(tmpOriginalTarget) this.originalTarget = tmpOriginalTarget;
790                                newResArr = window.top.bitsMarkingCollection.addURLText({fid:fid,fid_style:fid_style,dbtype:dbtype},aOrient, aRow, aXferString, this.originalTarget);
791                        }else{
792                                isSelected = false;
793                                try{
794                                        isSelected = ( sel.anchorNode === sel.focusNode && sel.anchorOffset == sel.focusOffset ) ? false : true;
795                                        if(isSelected && win.document.contentType == "application/pdf") isSelected = false;
796                                }catch(ex){}
797                                if(isSelected){
798                                        newResArr =  window.top.bitsMarkingCollection.addSelectedText({fid:fid,fid_style:fid_style,dbtype:dbtype},aOrient,aRow);
799                                }else{
800                                        setTimeout(function(){
801                                                var rtn = window.top.bitsMarkingCollection.addPDFText({fid:fid,fid_style:fid_style,dbtype:dbtype},aOrient, aRow, aXferString);
802                                                if(!rtn) window.top.bitsMarkingCollection.Common.alert(mcMainService.STRING.getString("ERROR_INVALID_URL") + "\n" + aXferStringArr);
803                                        },0);
804                                }
805                        }
806                }
807                return {isSelected : isSelected, resArr : newResArr};
808        },
809
810/////////////////////////////////////////////////////////////////////
811        refresh : function(){
812                if(this._refresh_timer) clearTimeout(this._refresh_timer);
813                this._refresh_timer = setTimeout(function(){ bitsItemView._refresh(); },100);
814        },
815        _refresh : function(){
816                if(!this._refreshFlag) return;
817                var idx = this.TREE.currentIndex;
818                var rows = this.getSelection();
819                this.rebuild(this._info);
820                try{this.TREE.currentIndex=idx;}catch(e){}
821                if(!this.itemObjects) return;
822                try{
823                        var i;
824                        for(i=0;i<rows.length;i++){
825                                if(!this.TREE.view.selection.isSelected(rows[i])) this.TREE.view.selection.select(rows[i]);
826                        }
827                        if(this.itemObjects[idx]){
828                                var objs = this.Database.getObject({oid:this.itemObjects[idx].oid}, this.itemObjects[idx].dbtype);
829                                if(objs && objs.length>0) mcPropertyView.dispProperty(objs[0]);
830                        }
831                }catch(e){}
832                window.top.bitsAutocacheService.refresh();
833        },
834
835        rebuild : function(aInfo){
836                try{this.TREE.currentIndex = -1;}catch(e){}
837                try{this.TREE.view.selection.clearSelection();}catch(e){}
838                if(this.itemObjects){
839                        this.itemObjects.length = 0;
840                        this.itemObjects = undefined;
841                }
842                this.TREE.removeAttribute("flex");
843                var folderFilterHash = {};
844                var tmpFolderFilter = nsPreferences.copyUnicharPref("wiredmarker.filter.folder","");
845                var tmpFolderFilterArr = tmpFolderFilter.split("\t");
846                var i;
847                for(i=0;i<tmpFolderFilterArr.length;i++){
848                        if(!tmpFolderFilterArr[i].match(/^(\d+):(\d+):(.+)$/)) continue;
849                        var filter_fid = RegExp.$1;
850                        var filter_casesensitive = RegExp.$2;
851                        var filter_keyword = RegExp.$3;
852                        folderFilterHash[filter_fid] = new RegExp(filter_keyword,(filter_casesensitive==1)?"mg":"img");
853                }
854                tmpFolderFilterArr = undefined;
855                tmpFolderFilter = undefined;
856                if(aInfo){
857                        var viewmode = aInfo.viewmode;
858                        var fid = (aInfo.fid?parseInt(aInfo.fid):undefined);
859                        this.dbtype = aInfo.dbtype;
860                        var viewtype = "small";
861                        if(fid != undefined && !isNaN(fid)){
862                                var info = Components.classes["@mozilla.org/xre/app-info;1"].getService(Components.interfaces.nsIXULAppInfo);
863                                if(parseInt(info.version)>2){
864                                        var folders = this.Database.getFolderFormID(fid, this.dbtype);
865                                        if(folders && folders.length>0 && folders[0].fid_property){
866                                                var parser = new DOMParser();
867                                                var xmldoc = parser.parseFromString(folders[0].fid_property, "text/xml");
868                                                parser = undefined;
869                                                var iconsize = xmldoc.getElementsByTagName("ICON_SIZE")[0];
870                                                if(iconsize) viewtype = iconsize.textContent
871                                        }
872                                }
873                        }
874                        this.TREE.treeBoxObject.clearStyleAndImageCaches();
875                        if(viewtype == "large"){
876                                this.TREE_IFAVICON.setAttribute("style","min-width:77px;max-width:77px;");
877                                this.TREE.setAttribute("class","plain bitsItemTree-largeicon");
878                                this.VTTB.setAttribute("label","Large ");
879                                this.VTMM.removeAttribute("checked");
880                                this.VTSM.removeAttribute("checked");
881                                this.VTLM.setAttribute("checked","true");
882                        }else if(viewtype == "middle"){
883                                this.TREE_IFAVICON.setAttribute("style","min-width:43px;max-width:43px;");
884                                this.TREE.setAttribute("class","plain bitsItemTree-middleicon");
885                                this.VTTB.setAttribute("label","Middle ");
886                                this.VTLM.removeAttribute("checked");
887                                this.VTSM.removeAttribute("checked");
888                                this.VTMM.setAttribute("checked","true");
889                        }else{
890                                this.TREE_IFAVICON.setAttribute("style","min-width:25px;max-width:25px;");
891                                this.TREE.setAttribute("class","plain");
892                                this.VTTB.setAttribute("label","Small ");
893                                this.VTLM.removeAttribute("checked");
894                                this.VTMM.removeAttribute("checked");
895                                this.VTSM.setAttribute("checked","true");
896                        }
897                        if(fid != undefined && !isNaN(fid)){
898                                if(viewmode == "all"){
899                                        this.itemObjects = this.Database.getObject({pfid:fid}, this.dbtype);
900                                }else{
901                                        var doc_url = window.top.bitsAutocacheService.convertCacheURLToOriginalURL(this.Common.getURLStringFromDocument(this.gBrowser.contentDocument));
902                                        this.itemObjects = this.Database.getObject({pfid:fid,doc_url:doc_url}, this.dbtype);
903                                }
904                        }else if(isNaN(fid) && aInfo.fid == bitsSearchAcross.id){
905                                fid = aInfo.fid;
906                                var findRegExp = new RegExp(bitsSearchAcross.value,"img");
907                                if(viewmode == "all"){
908                                        this.itemObjects = this.Database.findObject(findRegExp);
909                                }else{
910                                        var doc_url = window.top.bitsAutocacheService.convertCacheURLToOriginalURL(this.Common.getURLStringFromDocument(this.gBrowser.contentDocument));
911                                        this.itemObjects = this.Database.findObject(findRegExp,undefined,{doc_url:doc_url});
912                                }
913                        }else if(aInfo.where){
914                                var param = {};
915                                for(var i=0;i<aInfo.where.length;i++){
916                                        param[aInfo.where[i].key] = aInfo.where[i].val;
917                                }
918                                if(viewmode != "all") param.doc_url = window.top.bitsAutocacheService.convertCacheURLToOriginalURL(this.Common.getURLStringFromDocument(this.gBrowser.contentDocument));
919                                this.itemObjects = this.Database.getObject(param, this.dbtype);
920                        }
921                        this.TREE.setAttribute("flex","1");
922                        if(this.itemObjects && folderFilterHash[fid]){
923                                this.itemObjects = this.itemObjects.filter(
924                                        function(element, index, array) {
925                                                return folderFilterHash[fid].test(element.oid_title);
926                                        }
927                                );
928                        }
929                        if(this.itemObjects && this.VSB.checked && this.VSM.value != ""){
930                                if(this.TREE_INOTE.hidden){
931                                        this.itemObjects = this.itemObjects.filter(
932                                                function(element, index, array) {
933                                                        return (new RegExp(bitsItemView.VSM.value,"img")).test(element.oid_title);
934                                                }
935                                        );
936                                }else{
937                                        var domParser = new DOMParser();
938                                        this.itemObjects = this.itemObjects.filter(
939                                                function(element, index, array) {
940                                                        if(element.oid_note == undefined && element.oid_property && element.oid_property != ""){
941                                                                var xmldoc = domParser.parseFromString(element.oid_property, "text/xml");
942                                                                if(xmldoc && xmldoc.documentElement.nodeName == "parsererror") xmldoc = undefined;
943                                                                if(xmldoc){
944                                                                        var xmlnode = xmldoc.getElementsByTagName("NOTE")[0];
945                                                                        if(xmlnode) element.oid_note = xmlnode.textContent;
946                                                                }
947                                                                if(element.oid_note == undefined) element.oid_note = "";
948                                                                if(element.oid_note != ""){
949                                                                        var oid_note = element.oid_note;
950                                                                        oid_note = oid_note.replace(/[\r\n]+/mg, " ").replace(/^\s*/g,"").replace(/\s*$/g,"");
951                                                                        element.oid_note = oid_note;
952                                                                }
953                                                        }
954                                                        var value = bitsItemView.VSM.value;
955                                                        return (new RegExp(value,"img")).test(element.oid_title) || (new RegExp(value,"img")).test(element.oid_note);
956                                                }
957                                        );
958                                        domParser = undefined;
959                                }
960                        }
961                        if(this.itemObjects){
962                                var self = this;
963                                this.itemObjects.sort(
964                                        function(a,b){
965                                                var direction = "";
966                                                if(bitsTreeDate.isChecked){
967                                                        var a_date = Date.parse(a.oid_date);
968                                                        var b_date = Date.parse(b.oid_date);
969                                                        if(a_date < b_date) return -1;
970                                                        if(a_date > b_date) return 1;
971                                                        var a_order = (a.folder_order?parseInt(a.folder_order):0);
972                                                        var b_order = (b.folder_order?parseInt(b.folder_order):0);
973                                                        if(a_order < b_order) return -1;
974                                                        if(a_order > b_order) return 1;
975                                                        return 0;
976                                                }else if(
977                                                        self.TREE_IFAVICON.hasAttribute("sortDirection") ||
978                                                        self.TREE_IURL.hasAttribute("sortDirection")
979                                                ){
980                                                        if(self.TREE_IFAVICON.hasAttribute("sortDirection")){
981                                                                direction = self.TREE_IFAVICON.getAttribute("sortDirection");
982                                                        }else if(self.TREE_IURL.hasAttribute("sortDirection")){
983                                                                direction = self.TREE_IURL.getAttribute("sortDirection");
984                                                        }
985                                                        if(direction == "ascending"){
986                                                                if(a.doc_url < b.doc_url) return -1;
987                                                                if(a.doc_url > b.doc_url) return 1;
988                                                        }else if(direction == "descending"){
989                                                                if(a.doc_url < b.doc_url) return 1;
990                                                                if(a.doc_url > b.doc_url) return -1;
991                                                        }
992                                                }else if(self.TREE_IDOCTITLE.hasAttribute("sortDirection")){
993                                                        direction = self.TREE_IDOCTITLE.getAttribute("sortDirection");
994                                                        if(direction == "ascending"){
995                                                                if(a.doc_title < b.doc_title) return -1;
996                                                                if(a.doc_title > b.doc_title) return 1;
997                                                        }else if(direction == "descending"){
998                                                                if(a.doc_title < b.doc_title) return 1;
999                                                                if(a.doc_title > b.doc_title) return -1;
1000                                                        }
1001                                                }else if(self.TREE_ITITLE.hasAttribute("sortDirection")){
1002                                                        direction = self.TREE_ITITLE.getAttribute("sortDirection");
1003                                                        if(direction == "ascending"){
1004                                                                if(a.oid_title < b.oid_title) return -1;
1005                                                                if(a.oid_title > b.oid_title) return 1;
1006                                                        }else if(direction == "descending"){
1007                                                                if(a.oid_title < b.oid_title) return 1;
1008                                                                if(a.oid_title > b.oid_title) return -1;
1009                                                        }
1010                                                }else if(self.TREE_IDATE.hasAttribute("sortDirection")){
1011                                                        direction = self.TREE_IDATE.getAttribute("sortDirection");
1012                                                        var a_date = Date.parse(a.oid_date);
1013                                                        var b_date = Date.parse(b.oid_date);
1014                                                        if(direction == "ascending"){
1015                                                                if(a_date < b_date) return -1;
1016                                                                if(a_date > b_date) return 1;
1017                                                        }else if(direction == "descending"){
1018                                                                if(a_date < b_date) return 1;
1019                                                                if(a_date > b_date) return -1;
1020                                                        }
1021                                                }
1022                                                return 0;
1023                                        }
1024                                );
1025                        }
1026                }else if(this._info){
1027                        var viewmode = this._info.viewmode;
1028                        var fid = (this._info.fid?parseInt(this._info.fid):undefined);
1029                        if(fid && this._info.dbtype){
1030                                this.TREE.setAttribute("flex","1");
1031                        }
1032                }
1033                if(this.TREE.hasAttribute("flex")){
1034                        var self = this;
1035                        self.TREE.view = self;
1036                        self.TREE.removeAttribute("hidden");
1037                        if(this._app_version>2) self.VTTB.removeAttribute("disabled");
1038                        self.VSB.removeAttribute("disabled");
1039                        if(self.VSB.hasAttribute("checked")) self.VSM.removeAttribute("disabled");
1040                }else{
1041                        this.VTTB.setAttribute("disabled",true);
1042                        this.VSB.setAttribute("disabled",true);
1043                        this.VSM.setAttribute("disabled",true);
1044                        this.TREE.setAttribute("hidden",true);
1045                }
1046        },
1047
1048/////////////////////////////////////////////////////////////////////
1049// TREE むベント関連
1050/////////////////////////////////////////////////////////////////////
1051        onMousedown : function(aEvent){
1052                mcTreeImageTooltip.onMousedown(aEvent);
1053                if(aEvent.button == 2){ //右クリック
1054                        var row = {};
1055                        var col = {};
1056                        var obj = {};
1057                        this.TREE.treeBoxObject.getCellAt(aEvent.clientX, aEvent.clientY, row, col, obj);
1058                        if(row.value>=0){
1059                                this.POPUP.removeAttribute("hidden");
1060                        }else{
1061                                this.POPUP.setAttribute("hidden","true");
1062                        }
1063                        return;
1064                }
1065        },
1066
1067        onMousemove : function(aEvent){
1068                var param = {
1069                        tree : bitsItemView.TREE
1070                };
1071                try {
1072                        var row = {};
1073                        var col = {};
1074                        var childElt = {};
1075                        param.tree.treeBoxObject.getCellAt(aEvent.clientX, aEvent.clientY, row, col, childElt);
1076                        if(row.value == undefined || col.value == undefined){
1077                        }else{
1078                                param.row = row;
1079                                param.col = col;
1080                                param.childElt = childElt;
1081                                if(mcTreeImageTooltip.tooltipRow != row.value){
1082                                        if(row.value>=0) param.obj = bitsItemView.itemObjects[row.value];
1083                                }
1084                        }
1085                }catch(e){}
1086                mcTreeImageTooltip.onMousemove(aEvent,param);
1087        },
1088
1089        onMouseout : function(aEvent){
1090                mcTreeImageTooltip.onMouseout(aEvent);
1091        },
1092
1093        onClick : function(aEvent){
1094                if(aEvent.button != 0) return;
1095                if(aEvent.altKey || aEvent.shiftKey || aEvent.ctrlKey) return;
1096                if(aEvent.target.id){
1097                        if(aEvent.target.id == this.idTREE) return;
1098                        if(aEvent.target.id != this.idTREE_IFAVICON)  this.TREE_IFAVICON.removeAttribute("sortDirection");
1099                        if(aEvent.target.id != this.idTREE_IURL)      this.TREE_IURL.removeAttribute("sortDirection");
1100                        if(aEvent.target.id != this.idTREE_IDOCTITLE) this.TREE_IDOCTITLE.removeAttribute("sortDirection");
1101                        if(aEvent.target.id != this.idTREE_ITITLE)    this.TREE_ITITLE.removeAttribute("sortDirection");
1102                        if(aEvent.target.id != this.idTREE_IDATE)     this.TREE_IDATE.removeAttribute("sortDirection");
1103                        if(aEvent.target.id != this.idTREE_INOTE)     this.TREE_INOTE.removeAttribute("sortDirection");
1104                        if(!aEvent.target.hasAttribute("sortDirection")){
1105                                aEvent.target.setAttribute("sortDirection","ascending");
1106                        }else if(aEvent.target.getAttribute("sortDirection") == "ascending"){
1107                                aEvent.target.setAttribute("sortDirection","descending");
1108                        }else{
1109                                aEvent.target.removeAttribute("sortDirection");
1110                        }
1111                        this.refresh();
1112                        return;
1113                }
1114                var row = {};
1115                var col = {};
1116                var obj = {};
1117                this.TREE.treeBoxObject.getCellAt(aEvent.clientX, aEvent.clientY, row, col, obj);
1118//              try{ if(col.value.id == this.idTREE_INOTE) return; }catch(e){}
1119                if(row.value<0){
1120                        this.TREE.view.selection.clearSelection();
1121                        return;
1122                }
1123                if(this.itemObjects && this.itemObjects[row.value]){
1124                        var objs = this.Database.getObject({oid:this.itemObjects[row.value].oid}, this.itemObjects[row.value].dbtype);
1125                        if(objs && objs.length>0) mcPropertyView.dispProperty(objs[0]);
1126                }
1127                //おたじない
1128                this.TREE.blur();
1129                this.TREE.focus();
1130                return;
1131                this.open();
1132        },
1133
1134        onDblClick : function(aEvent){
1135                if(aEvent.button != 0) return;
1136                if(aEvent.altKey || aEvent.shiftKey || aEvent.ctrlKey) return;
1137                if(aEvent.target.id == this.idTREE_ITITLE){
1138                        return;
1139                }else if(aEvent.target.id == this.idTREE_IDATE){
1140                        return;
1141                }
1142                var row = {};
1143                var col = {};
1144                var obj = {};
1145                this.TREE.treeBoxObject.getCellAt(aEvent.clientX, aEvent.clientY, row, col, obj);
1146                try{ if(col.value.id == this.idTREE_INOTE) return; }catch(e){}
1147                if(row.value<0){
1148                        this.TREE.view.selection.clearSelection();
1149                        return;
1150                }
1151                this.open();
1152        },
1153
1154        onKeyPress : function(aEvent){
1155                switch(aEvent.keyCode){
1156                        case aEvent.DOM_VK_RETURN :
1157                                aEvent.preventDefault();
1158                                this.open(aEvent.ctrlKey);
1159                                break;
1160                        case aEvent.DOM_VK_DELETE :
1161                                if(!(aEvent.ctrlKey || aEvent.shiftKey)){
1162                                        aEvent.preventDefault();
1163                                        this.remove(aEvent);
1164                                }
1165                                break;
1166                        case aEvent.DOM_VK_F2 :
1167                                aEvent.preventDefault();
1168                                this.property();
1169                                break;
1170                        default:
1171                                break;
1172                }
1173        },
1174
1175        onKeyDown : function(aEvent){
1176                switch(aEvent.keyCode){
1177                        case aEvent.DOM_VK_A :
1178                                if(aEvent.ctrlKey){
1179                                        aEvent.preventDefault();
1180                                        this.TREE.view.selection.selectAll();
1181                                }
1182                                break;
1183                        default:
1184                                break;
1185                }
1186        },
1187
1188/////////////////////////////////////////////////////////////////////
1189// TREE 関連
1190/////////////////////////////////////////////////////////////////////
1191        copy : function(aMode){
1192                if(this.TREE.currentIndex<0) return;
1193                var row = this.TREE.currentIndex;
1194                if(!this.itemObjects[row]) return;
1195                var aObject = this.itemObjects[row];
1196                if(!aMode) aMode = 'copy';
1197                window.top.bitsMetaCapture.copyToClipBoard(aObject.oid,aObject.dbtype,aMode);
1198        },
1199
1200        open : function(tabbed){
1201                if(this.TREE.currentIndex<0) return;
1202                var row = this.TREE.currentIndex;
1203                if(!this.itemObjects[row]) return;
1204                var aObject = this.itemObjects[row];
1205                this.Common.loadFromObject(aObject,tabbed);
1206        },
1207
1208        confirmRemovingFor : function(){
1209                try{
1210                        if(this.confirmDelete){
1211                                return this.Common.confirm( this.STRING.getString("CONFIRM_DELETE") );
1212                        }
1213                        return true;
1214                }catch(e){
1215                        return false;
1216                }
1217        },
1218
1219        setSelection : function(aOID,aDBTYPE){
1220                try{this.TREE.view.selection.clearSelection();}catch(e){}
1221                if(!this.itemObjects) return;
1222                try{
1223                        var row;
1224                        for(row=0;row<this.itemObjects.length;row++){
1225                                if(this.itemObjects[row].oid != aOID || this.itemObjects[row].dbtype != aDBTYPE) continue;
1226                                this.TREE.currentIndex = row;
1227                                if(this.TREE.view && !this.TREE.view.selection.isSelected(this.TREE.currentIndex)) this.TREE.view.selection.select(this.TREE.currentIndex);
1228                                this.TREE.treeBoxObject.ensureRowIsVisible(this.TREE.currentIndex);
1229                                this.TREE.focus();
1230                                mcPropertyView.dispProperty(this.itemObjects[row]);
1231                                break;
1232                        }
1233                }catch(e){
1234                        this._dump("bitsItemView.setSelection():"+e);
1235                }
1236        },
1237
1238        getSelection : function(){
1239                if(!this.TREE || !this.TREE.view) return undefined;
1240                var ret = [];
1241                var rc;
1242                var i;
1243                for(rc=0;rc<this.TREE.view.selection.getRangeCount();rc++){
1244                        var start = {}, end = {};
1245                        this.TREE.view.selection.getRangeAt(rc, start, end);
1246                        for(i=start.value;i<= end.value;i++){
1247                                if(!this.TREE.view.selection.isSelected(i)) continue;
1248                                ret.push(i);
1249                        }
1250                }
1251                return ret;
1252        },
1253
1254        validateMultipleSelection : function(aIdxList){
1255                if(aIdxList.length != this.TREE.view.selection.count){
1256                        this.Common.alert(this.STRING.getString("ERROR_MULTIPLE_SELECTION"));
1257                        return false;
1258                }
1259                return true;
1260        },
1261
1262        mergeObject : function(aFolder){
1263                if(this.TREE.view.selection.count == 0) return false;
1264                var idxList = this.getSelection();
1265                if(this.validateMultipleSelection(idxList) == false) return false;
1266                window.top.bitsScrapPartyMergeService._isCancel = false;
1267                window.top.bitsScrapPartyMergeService._isSameprocessing = false;
1268                window.top.bitsScrapPartyMergeService._isMergeMode = 0;
1269                window.top.bitsScrapPartyMergeService._isConfirm = false;
1270                var mergeRtn = 0;
1271                var i;
1272                var mergeFlag = false;
1273                for(i=0;i<idxList.length;i++){
1274                        var row = idxList[i];
1275                        if(!this.itemObjects[row]) continue;
1276                        var aObject = this.itemObjects[row];
1277                        var dstObjects = this.Database.getObject({pfid:aFolder.fid,oid_title:aObject.oid_title}, aFolder.dbtype);
1278                        if(!dstObjects || dstObjects.length == 0) continue;
1279                        mergeFlag = true;
1280                        break;
1281                }
1282                if(!mergeFlag) return mergeRtn;
1283                for(i=0;i<idxList.length;i++){
1284                        var row = idxList[i];
1285                        if(!this.itemObjects[row]) continue;
1286                        var aObject = this.itemObjects[row];
1287                        mergeRtn |= window.top.bitsScrapPartyMergeService._merge(aObject,aFolder);
1288                        if(window.top.bitsScrapPartyMergeService.cancel) return -1;
1289                }
1290                return mergeRtn;
1291        },
1292
1293        copyObject : function(aFolder){
1294                if(this.TREE.view.selection.count == 0) return false;
1295                var idxList = this.getSelection();
1296                if(this.validateMultipleSelection(idxList) == false) return false;
1297                var pfid = aFolder.fid;
1298                var pdbtype = aFolder.dbtype;
1299                var pfid_order = this.Database.getMaxOrderFormPID(aFolder.fid,aFolder.dbtype);
1300                var exists = false;
1301                var i;
1302                for(i=0;i<idxList.length;i++){
1303                        var row = idxList[i];
1304                        if(!this.itemObjects[row]) continue;
1305                        var aObject = this.itemObjects[row];
1306                        var rtn = this.Database.existsObject({oid:aObject.oid,pfid:aFolder.fid},aFolder.dbtype);
1307                        if(rtn){
1308                                exists = rtn;
1309                                continue;
1310                        }
1311                        if(aObject.dbtype == aFolder.dbtype){
1312                                rtn = this.Database.addLink({oid:aObject.oid,pfid:aFolder.fid,pfid_order:++pfid_order},aFolder.dbtype);
1313                        }else{
1314                                var objs = this.Database.getObjectWithProperty({oid:aObject.oid,pfid:aObject.pfid},aObject.dbtype);
1315                                var blobs =this.Database.getObjectBLOB(aObject.oid,aObject.dbtype);
1316                                if(objs && objs.length>0) aObject = objs[0];
1317                                var addObj = this.Database.newObject(aObject.oid,aFolder.dbtype);
1318                                var key;
1319                                for(key in aObject){
1320                                        if(key == "oid") continue;
1321                                        addObj[key] = aObject[key];
1322                                }
1323                                addObj.pfid = aFolder.fid;
1324                                delete addObj.dbtype;
1325                                delete addObj.fid_style;
1326                                rtn = this.Database.addObject(addObj,aFolder.dbtype);
1327                                if(rtn){
1328                                        if(blobs && blobs.length>0){
1329                                                this.Database.updateObjectBLOB(addObj.oid,blobs[0],aFolder.dbtype);
1330                                        }
1331                                }
1332                        }
1333                }
1334                if(exists){
1335                        this.Common.alert(mcMainService.STRING.getString("ALERT_COPYOBJECT_EXISTS"));
1336                }
1337                return true;
1338        },
1339
1340        moveObject : function(aFolder,aModShift){
1341                try{
1342                        if(aModShift == undefined) aModShift = false;
1343                        if(this.TREE.view.selection.count == 0) return false;
1344                        var idxList = this.getSelection();
1345                        if(this.validateMultipleSelection(idxList) == false) return false;
1346                        var update = false;
1347                        var i;
1348                        for(i=0;i<idxList.length;i++){
1349                                var row = idxList[i];
1350                                if(!this.itemObjects[row]) continue;
1351                                var aObject = this.itemObjects[row];
1352                                if(update == false && aObject.dbtype == aFolder.dbtype && this.Database.existsObject({oid:aObject.oid,pfid:aFolder.fid},aFolder.dbtype)){
1353                                        if(this.Common.confirm(this.STRING.getString("CONFIRM_COPYOBJECT_OVERWRITE"))){
1354                                                update = true;
1355                                        }else{
1356                                                return false;
1357                                        }
1358                                }
1359                                if(update && aObject.dbtype == aFolder.dbtype && this.Database.existsObject({oid:aObject.oid,pfid:aFolder.fid},aFolder.dbtype)){
1360                                        rtn = this.Database.removeLink({oid:aObject.oid,pfid:aFolder.fid},aFolder.dbtype);
1361                                }
1362                        }
1363                        var rtn;
1364                        for(i=0;i<idxList.length;i++){
1365                                var row = idxList[i];
1366                                if(!this.itemObjects[row]) continue;
1367                                rtn = this._moveObject(aFolder,this.itemObjects[row],aModShift);
1368                        }
1369                        this.refresh();
1370                        return true;
1371                }catch(e){
1372                        this._dump("bitsItemView.moveObject():"+e);
1373                        return false;
1374                }
1375        },
1376
1377        _moveObject : function(aFolder,aObject,aModShift){
1378                var rtn;
1379                var pfid_order = this.Database.getMaxOrderFormPID(aFolder.fid,aFolder.dbtype);
1380                var old_source = bitsMarker.id_key+aObject.dbtype+aObject.oid;
1381                var new_source = bitsMarker.id_key;
1382                if(aObject.dbtype == aFolder.dbtype){
1383                        rtn = this.Database.updateObject({oid:aObject.oid,pfid:aFolder.fid,pfid_old:aObject.pfid,pfid_order:++pfid_order},aFolder.dbtype);
1384                        new_source += aFolder.dbtype+aObject.oid;
1385                }else{
1386                        var objs = this.Database.getObjectWithProperty({oid:aObject.oid,pfid:aObject.pfid},aObject.dbtype);
1387                        var blobs =this.Database.getObjectBLOB(aObject.oid,aObject.dbtype);
1388                        if(objs && objs.length>0) aObject = objs[0];
1389                        var addObj = this.Database.newObject(aObject.oid,aFolder.dbtype);
1390                        var key;
1391                        for(key in aObject){
1392                                if(key == "oid") continue;
1393                                addObj[key] = aObject[key];
1394                        }
1395                        addObj.pfid = aFolder.fid;
1396                        addObj.pfid_order = ++pfid_order;
1397                        delete addObj.dbtype;
1398                        delete addObj.fid_style;
1399                        rtn = this.Database.addObject(addObj,aFolder.dbtype);
1400                        if(rtn && blobs && blobs.length>0) this.Database.updateObjectBLOB(addObj.oid,blobs[0],aFolder.dbtype);
1401                        if(rtn && aModShift) rtn = this.Database.removeObject(aObject,aObject.dbtype);
1402                        new_source += aFolder.dbtype+addObj.oid;
1403                }
1404                var i;
1405                for(i=0;i<this.gBrowser.browsers.length;i++){
1406                        var contentDocument = this.gBrowser.browsers[i].contentDocument;
1407                        var contentWindow = this.gBrowser.browsers[i].contentWindow;
1408                        var DOC = [];
1409                        if(contentWindow.frames){
1410                                var wincnt;
1411                                for(wincnt=0;wincnt<contentWindow.frames.length;wincnt++){
1412                                        DOC.push(contentWindow.frames[wincnt].document);
1413                                }
1414                        }
1415                        DOC.push(contentDocument);
1416                        var j;
1417                        for(j=0;j<DOC.length;j++){
1418                                var doc = DOC[j];
1419                                var xPathResult = this.XPath.evaluate('//*[@id="'+old_source+'"]', doc);
1420                                var k;
1421                                for(k=xPathResult.snapshotLength-1;k>=0;k--){
1422                                        var node = xPathResult.snapshotItem(k);
1423                                        node.setAttribute("pfid", aFolder.fid);
1424                                        node.setAttribute("style",aFolder.fid_style);
1425                                        node.setAttribute("dbtype",aFolder.dbtype);
1426                                        node.setAttribute("id",new_source);
1427                                }
1428                        }
1429                        DOC = undefined;
1430                }
1431                return rtn;
1432        },
1433
1434        remove : function(aEvent){
1435                if(this.TREE.view.selection.count == 0) return false;
1436                if(!this.confirmRemovingFor()) return false;
1437                if(aEvent) window.top.bitsScrapPartyAddonService.eventListener(aEvent, 0);
1438                var idxList = this.getSelection();
1439                if(this.validateMultipleSelection(idxList) == false) return false;
1440                var i;
1441                for(i=0;i<idxList.length;i++){
1442                        var row = idxList[i];
1443                        if(!this.itemObjects[row]) continue;
1444                        var aObject = this.itemObjects[row];
1445                        var match_exp = new RegExp("^"+bitsMarker.id_key+".+$","m");
1446                        var source;
1447                        if(!aObject.oid_type.match(/^image\/(.+)$/)) source = bitsMarker.id_key+aObject.dbtype+aObject.oid;
1448                        if(source) bitsMarker.unmarkerWindow(source);
1449                        var id = aObject.oid;
1450                        var dbtype = aObject.dbtype;
1451                        var pfid = aObject.pfid;
1452                        this.Database.removeObject({oid:id,pfid:pfid},dbtype,false);
1453                }
1454                this.refresh();
1455                mcPropertyView.dispProperty();
1456                if(aEvent) window.top.bitsScrapPartyAddonService.eventListener(aEvent, 1);
1457                return true;
1458        },
1459
1460        pageshow : function(aDoc){
1461
1462        },
1463
1464        property : function(){
1465                if(this.TREE.currentIndex<0) return;
1466                var row = this.TREE.currentIndex;
1467                if(!this.itemObjects[row]) return;
1468                var aObject = this.itemObjects[row];
1469                var id = aObject.oid;
1470                var style = aObject.fid_style;
1471                var dbtype = aObject.dbtype;
1472                var result = {
1473                        id       : aObject.oid,
1474                        title    : aObject.oid_title,
1475                        property : aObject.oid_property,
1476                        style    : aObject.fid_style,
1477                        dbtype   : aObject.dbtype,
1478                };
1479                window.openDialog("chrome://markingcollection/content/property.xul", "", "chrome,centerscreen,modal", id, result);
1480                if(result.accept) this.refresh();
1481                return result.accept;
1482        },
1483
1484////////////////////////////////////////////////////////////////////
1485// TREE ドラッグむベント関連
1486/////////////////////////////////////////////////////////////////////
1487        getModifiers : function(aEvent){
1488                this.modAlt   = aEvent.altKey;
1489                this.modShift = aEvent.shiftKey;
1490                this.modCtrl  = aEvent.ctrlKey;
1491                this.modMeta  = aEvent.metaKey;
1492        },
1493
1494        dragDropObserver : {
1495                onDragStart : function(event, transferData, action){
1496                        try{
1497                                if(event.originalTarget.localName != "treechildren") return;
1498                                var idxList = bitsItemView.getSelection();
1499                                if(idxList.length>0){
1500                                        transferData.data = new TransferData();
1501                                        var rc = [];
1502                                        var i;
1503                                        for(i=0;i<idxList.length;i++){
1504                                                var oid = bitsItemView.itemObjects[idxList[i]].oid;
1505                                                var dbtype = bitsItemView.itemObjects[idxList[i]].dbtype;
1506                                                rc.push(oid+"\t"+dbtype);
1507                                        }
1508                                        if(rc.length>0){
1509                                                var data = rc.join("\n");
1510                                                transferData.data.addDataForFlavour("wired-marker/object", data);
1511                                        }
1512                                }
1513                        }catch(ex){
1514                                bitsItemView._dump("dragDropObserver.onDragStart():"+ex);
1515                        }
1516                },
1517                getSupportedFlavours : function(){
1518                        bitsItemView._canDrop = false;
1519                        var flavours = new FlavourSet();
1520                        flavours.appendFlavour("text/x-moz-url");
1521                        flavours.appendFlavour("text/html");
1522                        flavours.appendFlavour("text/xml");
1523                        flavours.appendFlavour("application/x-moz-url");
1524                        flavours.appendFlavour("application/x-moz-file","nsIFile");
1525                        flavours.appendFlavour("text/unicode");
1526                        return flavours;
1527                },
1528                onDragOver : function(event, flavour, session){},
1529                onDragExit : function(event, session){},
1530                onDrop     : function(event, transferData, session){
1531                        bitsItemView._canDrop = true;
1532                },
1533        },
1534
1535/////////////////////////////////////////////////////////////////////
1536// Popup むベント関連
1537/////////////////////////////////////////////////////////////////////
1538        onPopupShowing : function(aEvent){},
1539
1540        onPopupHiding : function(aEvent){},
1541
1542        onPopupCommand : function(aEvent){
1543                switch(aEvent.target.id){
1544                        case this.idPOPUP_OPEN:
1545                                this.open();
1546                                break;
1547                        case this.idPOPUP_OPENN:
1548                                this.open(true);
1549                                break;
1550                        case this.idPOPUP_REMOVE:
1551                                this.remove(aEvent);
1552                                break;
1553                        case this.idPOPUP_PROPERTY:
1554                                this.property();
1555                                break;
1556                        case this.idPOPUP_COPY:
1557                                this.copy();
1558                                break;
1559                        case this.idPOPUP_COPYTITLE:
1560                                this.copy('title');
1561                                break;
1562                        case this.idPOPUP_COPYNOTE:
1563                                this.copy('note');
1564                                break;
1565                        case this.idPOPUP_COPYMETA:
1566                                this.copy('pagetitle');
1567                                break;
1568                        case this.idPOPUP_COPYFORMAT:
1569                                this.copy('format');
1570                                break;
1571                        case this.idPOPUP_COPYSETTING:
1572                                this.copy('setting');
1573                                break;
1574                }
1575        },
1576
1577/////////////////////////////////////////////////////////////////////
1578        onSearchKeyPress : function(aEvent){
1579                switch ( aEvent.keyCode ){
1580                        case aEvent.DOM_VK_RETURN : 
1581                                this.refresh();
1582                                break;
1583                        default:
1584                                break;
1585                }
1586        },
1587
1588/////////////////////////////////////////////////////////////////////
1589        _dump : function(aString){
1590                window.top.bitsMarkingCollection._dump(aString);
1591        },
1592};
Note: See TracBrowser for help on using the repository browser.