・サブツリーが折りたたまれたタブに、隠れているタブの数を表示するようにした
・選択されていないタブを閉じた時にまでフォーカスを移動していたのを修正 ・サブツリーをタブのダブルクリックで開閉する機能を加えた git-svn-id: http://www.cozmixng.org/repos/piro/treestyletab/trunk@1234 599a83e7-65a4-db11-8015-0010dcdd6dc2
This commit is contained in:
parent
7578fb9ad8
commit
37d1567be7
@ -14,6 +14,9 @@
|
|||||||
<preference id="extensions.treestyletab.autoCollapseExpandSubTreeOnSelect"
|
<preference id="extensions.treestyletab.autoCollapseExpandSubTreeOnSelect"
|
||||||
name="extensions.treestyletab.autoCollapseExpandSubTreeOnSelect"
|
name="extensions.treestyletab.autoCollapseExpandSubTreeOnSelect"
|
||||||
type="bool"/>
|
type="bool"/>
|
||||||
|
<preference id="extensions.treestyletab.collapseExpandSubTree.dblclick"
|
||||||
|
name="extensions.treestyletab.collapseExpandSubTree.dblclick"
|
||||||
|
type="bool"/>
|
||||||
<!--preference id="extensions.treestyletab.autoExpandSubTreeOnAppendChild"
|
<!--preference id="extensions.treestyletab.autoExpandSubTreeOnAppendChild"
|
||||||
name="extensions.treestyletab.autoExpandSubTreeOnAppendChild"
|
name="extensions.treestyletab.autoExpandSubTreeOnAppendChild"
|
||||||
type="bool"/-->
|
type="bool"/-->
|
||||||
@ -35,6 +38,9 @@
|
|||||||
<checkbox id="extensions.treestyletab.autoCollapseExpandSubTreeOnSelect-check"
|
<checkbox id="extensions.treestyletab.autoCollapseExpandSubTreeOnSelect-check"
|
||||||
preference="extensions.treestyletab.autoCollapseExpandSubTreeOnSelect"
|
preference="extensions.treestyletab.autoCollapseExpandSubTreeOnSelect"
|
||||||
label="&config.autoCollapseExpandSubTreeOnSelect;"/>
|
label="&config.autoCollapseExpandSubTreeOnSelect;"/>
|
||||||
|
<checkbox id="extensions.treestyletab.collapseExpandSubTree.dblclick-check"
|
||||||
|
preference="extensions.treestyletab.collapseExpandSubTree.dblclick"
|
||||||
|
label="&config.collapseExpandSubTree.dblclick;"/>
|
||||||
<!--checkbox id="extensions.treestyletab.autoExpandSubTreeOnAppendChild-check"
|
<!--checkbox id="extensions.treestyletab.autoExpandSubTreeOnAppendChild-check"
|
||||||
preference="extensions.treestyletab.autoExpandSubTreeOnAppendChild"
|
preference="extensions.treestyletab.autoExpandSubTreeOnAppendChild"
|
||||||
label="&config.autoExpandSubTreeOnAppendChild;"/-->
|
label="&config.autoExpandSubTreeOnAppendChild;"/-->
|
||||||
|
@ -1,2 +1,11 @@
|
|||||||
@namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
|
@namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
|
||||||
|
|
||||||
|
tab:not([treestyletab-children]) .treestyletab-tab-tree-twisty,
|
||||||
|
tab:not([treestyletab-children]) .treestyletab-tab-tree-counter-container,
|
||||||
|
tab:not([treestyletab-subtree-collapsed="true"]) .treestyletab-tab-tree-counter-container {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
tab[treestyletab-tab-collapsed="true"] {
|
||||||
|
visibility: collapse;
|
||||||
|
}
|
||||||
|
@ -8,8 +8,10 @@ var TreeStyleTabService = {
|
|||||||
kSUBTREE_COLLAPSED : 'treestyletab-subtree-collapsed',
|
kSUBTREE_COLLAPSED : 'treestyletab-subtree-collapsed',
|
||||||
kCOLLAPSED : 'treestyletab-tab-collapsed',
|
kCOLLAPSED : 'treestyletab-tab-collapsed',
|
||||||
|
|
||||||
kTWISTY : 'treestyletab-tab-tree-twisty',
|
kTWISTY : 'treestyletab-tab-tree-twisty',
|
||||||
kTWISTY_CONTAINER : 'treestyletab-tab-tree-twisty-container',
|
kTWISTY_CONTAINER : 'treestyletab-tab-tree-twisty-container',
|
||||||
|
kCOUNTER : 'treestyletab-tab-tree-counter',
|
||||||
|
kCOUNTER_CONTAINER : 'treestyletab-tab-tree-counter-container',
|
||||||
|
|
||||||
kMENUITEM_REMOVESUBTREE_MULTIPLETAB_SELECTION : 'multipletab-selection-item-removeTabSubTree',
|
kMENUITEM_REMOVESUBTREE_MULTIPLETAB_SELECTION : 'multipletab-selection-item-removeTabSubTree',
|
||||||
kMENUITEM_REMOVESUBTREE_CONTEXT : 'context-item-removeTabSubTree',
|
kMENUITEM_REMOVESUBTREE_CONTEXT : 'context-item-removeTabSubTree',
|
||||||
@ -260,6 +262,7 @@ var TreeStyleTabService = {
|
|||||||
aTabBrowser.mTabContainer.addEventListener('TabMove', this, true);
|
aTabBrowser.mTabContainer.addEventListener('TabMove', this, true);
|
||||||
aTabBrowser.mTabContainer.addEventListener('SSTabRestoring', this, true);
|
aTabBrowser.mTabContainer.addEventListener('SSTabRestoring', this, true);
|
||||||
aTabBrowser.mTabContainer.addEventListener('click', this, true);
|
aTabBrowser.mTabContainer.addEventListener('click', this, true);
|
||||||
|
aTabBrowser.mTabContainer.addEventListener('dblclick', this, true);
|
||||||
aTabBrowser.mTabContainer.addEventListener('mousedown', this, true);
|
aTabBrowser.mTabContainer.addEventListener('mousedown', this, true);
|
||||||
aTabBrowser.mTabContainer.addEventListener('select', this, true);
|
aTabBrowser.mTabContainer.addEventListener('select', this, true);
|
||||||
aTabBrowser.mPanelContainer.addEventListener('click', this, true);
|
aTabBrowser.mPanelContainer.addEventListener('click', this, true);
|
||||||
@ -357,26 +360,43 @@ var TreeStyleTabService = {
|
|||||||
this.setTabValue(aTab, this.kID, id);
|
this.setTabValue(aTab, this.kID, id);
|
||||||
aTab.__treestyletab__linkedTabBrowser = aTabBrowser;
|
aTab.__treestyletab__linkedTabBrowser = aTabBrowser;
|
||||||
|
|
||||||
this.initTabTwisty(aTab);
|
this.initTabContents(aTab);
|
||||||
|
|
||||||
var event = document.createEvent('Events');
|
var event = document.createEvent('Events');
|
||||||
event.initEvent('TreeStyleTab:TabOpen', true, false);
|
event.initEvent('TreeStyleTab:TabOpen', true, false);
|
||||||
aTab.dispatchEvent(event);
|
aTab.dispatchEvent(event);
|
||||||
},
|
},
|
||||||
|
|
||||||
initTabTwisty : function(aTab)
|
initTabContents : function(aTab)
|
||||||
{
|
{
|
||||||
if (document.getAnonymousElementByAttribute(aTab, 'class', this.kTWISTY)) return;
|
if (!document.getAnonymousElementByAttribute(aTab, 'class', this.kTWISTY)) {
|
||||||
|
var twisty = document.createElement('image');
|
||||||
|
twisty.setAttribute('class', this.kTWISTY);
|
||||||
|
|
||||||
var twisty = document.createElement('image');
|
var container = document.createElement('hbox');
|
||||||
twisty.setAttribute('class', this.kTWISTY);
|
container.setAttribute('class', this.kTWISTY_CONTAINER);
|
||||||
|
container.appendChild(twisty);
|
||||||
|
|
||||||
var container = document.createElement('hbox');
|
var icon = document.getAnonymousElementByAttribute(aTab, 'class', 'tab-icon');
|
||||||
container.setAttribute('class', this.kTWISTY_CONTAINER);
|
icon.appendChild(container);
|
||||||
container.appendChild(twisty);
|
}
|
||||||
|
|
||||||
var icon = document.getAnonymousElementByAttribute(aTab, 'class', 'tab-icon');
|
if (!document.getAnonymousElementByAttribute(aTab, 'class', this.kCOUNTER_CONTAINER)) {
|
||||||
icon.appendChild(container);
|
var counter = document.createElement('hbox');
|
||||||
|
counter.setAttribute('class', this.kCOUNTER_CONTAINER);
|
||||||
|
|
||||||
|
counter.appendChild(document.createElement('label'));
|
||||||
|
counter.lastChild.setAttribute('class', this.kCOUNTER);
|
||||||
|
counter.lastChild.setAttribute('value', '(0)');
|
||||||
|
|
||||||
|
var text = document.getAnonymousElementByAttribute(aTab, 'class', 'tab-text');
|
||||||
|
if (text) {
|
||||||
|
if (text.nextSibling)
|
||||||
|
text.parentNode.insertBefore(counter, text.nextSibling);
|
||||||
|
else
|
||||||
|
text.parentNode.appendChild(counter);
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
destroy : function()
|
destroy : function()
|
||||||
@ -414,6 +434,7 @@ var TreeStyleTabService = {
|
|||||||
aTabBrowser.mTabContainer.removeEventListener('TabMove', this, true);
|
aTabBrowser.mTabContainer.removeEventListener('TabMove', this, true);
|
||||||
aTabBrowser.mTabContainer.removeEventListener('SSTabRestoring', this, true);
|
aTabBrowser.mTabContainer.removeEventListener('SSTabRestoring', this, true);
|
||||||
aTabBrowser.mTabContainer.removeEventListener('click', this, true);
|
aTabBrowser.mTabContainer.removeEventListener('click', this, true);
|
||||||
|
aTabBrowser.mTabContainer.removeEventListener('dblclick', this, true);
|
||||||
aTabBrowser.mTabContainer.removeEventListener('mousedown', this, true);
|
aTabBrowser.mTabContainer.removeEventListener('mousedown', this, true);
|
||||||
aTabBrowser.mTabContainer.removeEventListener('select', this, true);
|
aTabBrowser.mTabContainer.removeEventListener('select', this, true);
|
||||||
aTabBrowser.mPanelContainer.removeEventListener('click', this, true);
|
aTabBrowser.mPanelContainer.removeEventListener('click', this, true);
|
||||||
@ -440,7 +461,7 @@ var TreeStyleTabService = {
|
|||||||
|
|
||||||
case 'TabMove':
|
case 'TabMove':
|
||||||
var tab = aEvent.originalTarget;
|
var tab = aEvent.originalTarget;
|
||||||
this.initTabTwisty(tab); // twisty vanished after the tab is moved!!
|
this.initTabContents(tab); // twisty vanished after the tab is moved!!
|
||||||
var b = this.getTabBrowserFromChildren(tab);
|
var b = this.getTabBrowserFromChildren(tab);
|
||||||
if (tab.getAttribute(this.kCHILDREN) && !b.__treestyletab__isSubTreeMoving) {
|
if (tab.getAttribute(this.kCHILDREN) && !b.__treestyletab__isSubTreeMoving) {
|
||||||
this.moveTabSubTreeTo(tab, tab._tPos);
|
this.moveTabSubTreeTo(tab, tab._tPos);
|
||||||
@ -472,6 +493,17 @@ var TreeStyleTabService = {
|
|||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
case 'dblclick':
|
||||||
|
var tab = this.getTabFromEvent(aEvent);
|
||||||
|
if (tab &&
|
||||||
|
tab.getAttribute(this.kCHILDREN) &&
|
||||||
|
this.getPref('extensions.treestyletab.collapseExpandSubTree.dblclick')) {
|
||||||
|
this.collapseExpandTabSubTree(tab, tab.getAttribute(this.kSUBTREE_COLLAPSED) != 'true');
|
||||||
|
aEvent.preventDefault();
|
||||||
|
aEvent.stopPropagation();
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
|
||||||
case 'mousedown':
|
case 'mousedown':
|
||||||
this.onTabMouseDown(aEvent);
|
this.onTabMouseDown(aEvent);
|
||||||
return;
|
return;
|
||||||
@ -586,7 +618,7 @@ var TreeStyleTabService = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (nextFocusedTab)
|
if (nextFocusedTab && b.selectedTab == tab)
|
||||||
b.selectedTab = nextFocusedTab;
|
b.selectedTab = nextFocusedTab;
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -886,6 +918,7 @@ var TreeStyleTabService = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
this.setTabValue(aParent, this.kCHILDREN, children);
|
this.setTabValue(aParent, this.kCHILDREN, children);
|
||||||
|
this.updateTabsCount(aParent);
|
||||||
|
|
||||||
if (newIndex > aChild._tPos) newIndex--;
|
if (newIndex > aChild._tPos) newIndex--;
|
||||||
this.moveTabSubTreeTo(aChild, newIndex);
|
this.moveTabSubTreeTo(aChild, newIndex);
|
||||||
@ -899,6 +932,7 @@ var TreeStyleTabService = {
|
|||||||
this.getPref('extensions.treestyletab.autoCollapseExpandSubTreeOnSelect')
|
this.getPref('extensions.treestyletab.autoCollapseExpandSubTreeOnSelect')
|
||||||
) {
|
) {
|
||||||
this.collapseExpandTreesIntelligentlyFor(aChild);
|
this.collapseExpandTreesIntelligentlyFor(aChild);
|
||||||
|
this.collapseExpandTabSubTree(aParent, false);
|
||||||
}
|
}
|
||||||
else if (aParent.getAttribute(this.kSUBTREE_COLLAPSED) == 'true') {
|
else if (aParent.getAttribute(this.kSUBTREE_COLLAPSED) == 'true') {
|
||||||
if (this.getPref('extensions.treestyletab.autoExpandSubTreeOnAppendChild')) {
|
if (this.getPref('extensions.treestyletab.autoExpandSubTreeOnAppendChild')) {
|
||||||
@ -935,6 +969,7 @@ var TreeStyleTabService = {
|
|||||||
.replace(new RegExp('\\|'+id), '')
|
.replace(new RegExp('\\|'+id), '')
|
||||||
.replace(/^\|/, '');
|
.replace(/^\|/, '');
|
||||||
this.setTabValue(parentTab, this.kCHILDREN, children);
|
this.setTabValue(parentTab, this.kCHILDREN, children);
|
||||||
|
this.updateTabsCount(parentTab);
|
||||||
|
|
||||||
if (!aDontUpdateIndent) this.updateTabsIndent([aChild]);
|
if (!aDontUpdateIndent) this.updateTabsIndent([aChild]);
|
||||||
},
|
},
|
||||||
@ -961,6 +996,17 @@ var TreeStyleTabService = {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
updateTabsCount : function(aTab)
|
||||||
|
{
|
||||||
|
var count = document.getAnonymousElementByAttribute(aTab, 'class', this.kCOUNTER);
|
||||||
|
if (count) {
|
||||||
|
count.setAttribute('value', '('+this.getDescendantTabsOf(aTab).length+')');
|
||||||
|
}
|
||||||
|
var parent = this.getParentTabOf(aTab);
|
||||||
|
if (parent)
|
||||||
|
this.updateTabsCount(parent);
|
||||||
|
},
|
||||||
|
|
||||||
moveTabSubTreeTo : function(aTab, aIndex)
|
moveTabSubTreeTo : function(aTab, aIndex)
|
||||||
{
|
{
|
||||||
if (!aTab) return;
|
if (!aTab) return;
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
pref("extensions.treestyletab.autoCollapseExpandSubTreeOnSelect", true);
|
pref("extensions.treestyletab.autoCollapseExpandSubTreeOnSelect", true);
|
||||||
|
pref("extensions.treestyletab.collapseExpandSubTree.dblclick", false);
|
||||||
pref("extensions.treestyletab.autoExpandSubTreeOnAppendChild", true);
|
pref("extensions.treestyletab.autoExpandSubTreeOnAppendChild", true);
|
||||||
pref("extensions.treestyletab.adoptChildrenToGrandParentOnRemoveTab", true);
|
pref("extensions.treestyletab.adoptChildrenToGrandParentOnRemoveTab", true);
|
||||||
// 0 = default, 1 = only visible tabs
|
// 0 = default, 1 = only visible tabs
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
<!ENTITY config.tabs.general "General">
|
<!ENTITY config.tabs.general "General">
|
||||||
|
|
||||||
<!ENTITY config.autoCollapseExpandSubTreeOnSelect "Collapse distractive subtrees automatically, when a tab is opened or focused">
|
<!ENTITY config.autoCollapseExpandSubTreeOnSelect "Collapse distractive subtrees automatically, when a tab is opened or focused">
|
||||||
|
<!ENTITY config.collapseExpandSubTree.dblclick "Collapse/Expand subtree of the tab by double-click">
|
||||||
|
|
||||||
<!ENTITY config.autoExpandSubTreeOnAppendChild "Expand subtree automatically, when tabs are inserted into the subtree">
|
<!ENTITY config.autoExpandSubTreeOnAppendChild "Expand subtree automatically, when tabs are inserted into the subtree">
|
||||||
|
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
<!ENTITY config.tabs.general "全般">
|
<!ENTITY config.tabs.general "全般">
|
||||||
|
|
||||||
<!ENTITY config.autoCollapseExpandSubTreeOnSelect "タブを開く時やタブを切り替える時に、関係ないサブツリーを自動的に折り畳む">
|
<!ENTITY config.autoCollapseExpandSubTreeOnSelect "タブを開く時やタブを切り替える時に、関係ないサブツリーを自動的に折り畳む">
|
||||||
|
<!ENTITY config.collapseExpandSubTree.dblclick "タブのダブルクリックでサブツリーを開閉する">
|
||||||
|
|
||||||
<!ENTITY config.autoExpandSubTreeOnAppendChild "折り畳まれたサブツリー内に子孫のタブが追加された時、サブツリーを自動的に展開する">
|
<!ENTITY config.autoExpandSubTreeOnAppendChild "折り畳まれたサブツリー内に子孫のタブが追加された時、サブツリーを自動的に展開する">
|
||||||
|
|
||||||
|
@ -19,10 +19,14 @@ tab[treestyletab-subtree-collapsed="true"] .treestyletab-tab-tree-twisty {
|
|||||||
list-style-image: url("tree-twisty-collapsed.png");
|
list-style-image: url("tree-twisty-collapsed.png");
|
||||||
}
|
}
|
||||||
|
|
||||||
tab:not([treestyletab-children]) .treestyletab-tab-tree-twisty {
|
.treestyletab-tab-tree-counter-container {
|
||||||
display: none;
|
-moz-box-align: center;
|
||||||
|
-moz-box-pack: end;
|
||||||
}
|
}
|
||||||
|
|
||||||
tab[treestyletab-tab-collapsed="true"] {
|
.treestyletab-tab-tree-counter {
|
||||||
visibility: collapse;
|
font-size: 90%;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
min-width: 0;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user