ThreadPaneのツリーにチェックボックス型のカラムを挿入する方法(ごり押し) 〜Thunderbird Extention④〜
受信トレイや送信済みトレイ等の"ThreadPane"にチェックボックス型のカラムを追加する方法を調べていたが、
全然情報が集まらず、結局ごり押しの方法でそれっぽいことができたので載せておく。
ちなみに、
# チェックボックス型のカラムは、treecol要素でtype属性にcheckboxを設定した上に、CSSで画像を指定しないと見えない。また、チェックボックス型のカラムを編集可能にするには、tree要素とtreecol要素の両方のeditable属性をtrueにしなくてはいけない。
ということは調べていたら分かったのだが、その通りにしてもチェックボックスが機能しなかった。
var CheckBoxColumnHandler = { getCellText: function(row, col) {}, isEditable: function(row, col) { return true; }, getRowProperties: function(row, props){} getCellProperties: function(row, col, props){}, getImageSrc: function(row, col) { var key = gDBView.getKeyAt(row); var hdr = gDBView.db.GetMsgHdrForKey(key); var CheckFlg = hdr.getStringProperty("X-Check"); var retval; if(CheckFlg == "true") retval = "chrome://global/skin/checkbox/cbox-check.gif"; //ここはチェック時の画像 else retval = "chrome://global/skin/checkbox/cbox-check-dis.gif"; //ここはチェックなしの画像 return retval; }, } function ThreadPaneOnClick(event){ if (event.button != 0) return; var t = event.originalTarget; if (t.localName == "treecol") { HandleColumnClick(t.id); } else if (t.localName == "treechildren") { var row = new Object; var col = new Object; var childElt = new Object; var tree = GetThreadTree(); tree.treeBoxObject.getCellAt(event.clientX, event.clientY, row, col, childElt); if (row.value == -1) return; var key = gDBView.getKeyAt(row.value); var hdr = gDBView.db.GetMsgHdrForKey(key); //チェックボックス型のカラムIDを"CheckBoxCol"とする if(col.value.id == "CheckBoxCol") { if(hdr.getStringProperty("X-Check") == "true") { hdr.setStringProperty("X-Check","false"); } else { hdr.setStringProperty("X-Check","true"); } } gDBView.addColumnHandler("CheckBoxCol",CheckBoxColumnHandler); var boxobject = tree.boxObject; boxobject.QueryInterface(Components.interfaces.nsITreeBoxObject); //ツリーを再描画 boxobject.invalidate(); } else return; } document.getElementById("threadTree").addEventListener("mousedown",threadPaneOnClick,true);
とりあえずこれでチェックボックスまがいのことはできるようになったので、よしとしようw
画像をチェックボックスっぽい画像にすれば問題はないだろう(たぶん)