TreeStyleTabService.treeViewEnabled = true/false でツリー表示のON・OFFを即座に切り替えられるようにした

git-svn-id: http://www.cozmixng.org/repos/piro/treestyletab/trunk@5558 599a83e7-65a4-db11-8015-0010dcdd6dc2
This commit is contained in:
piro 2009-12-18 09:05:41 +00:00
parent c6a913b03c
commit 2654bb16ac
2 changed files with 121 additions and 70 deletions

View File

@ -1158,48 +1158,6 @@ var TreeStyleTabService = {
); );
}, },
promoteTab : function(aTab)
{
var b = this.getTabBrowserFromChild(aTab);
var sv = b.treeStyleTab;
var parent = sv.getParentTab(aTab);
if (!parent) return;
var nextSibling = sv.getNextSiblingTab(parent);
var grandParent = sv.getParentTab(parent);
if (grandParent) {
sv.attachTabTo(aTab, grandParent, {
insertBefore : nextSibling
});
}
else {
sv.partTab(aTab);
let index = nextSibling ? nextSibling._tPos : b.mTabContainer.childNodes.length ;
if (index > aTab._tPos) index--;
b.moveTabTo(aTab, index);
}
},
promoteCurrentTab : function()
{
this.promoteTab(this.browser.selectedTab);
},
demoteTab : function(aTab)
{
var b = this.getTabBrowserFromChild(aTab);
var sv = b.treeStyleTab;
var previous = this.getPreviousSiblingTab(aTab);
if (previous)
sv.attachTabTo(aTab, previous);
},
demoteCurrentTab : function()
{
this.demoteTab(this.browser.selectedTab);
},
/* Session Store API */ /* Session Store API */
getTabValue : function(aTab, aKey) getTabValue : function(aTab, aKey)
@ -2652,6 +2610,64 @@ catch(e) {
); );
}, },
promoteTab : function(aTab) /* PUBLIC API */
{
var b = this.getTabBrowserFromChild(aTab);
var sv = b.treeStyleTab;
var parent = sv.getParentTab(aTab);
if (!parent) return;
var nextSibling = sv.getNextSiblingTab(parent);
var grandParent = sv.getParentTab(parent);
if (grandParent) {
sv.attachTabTo(aTab, grandParent, {
insertBefore : nextSibling
});
}
else {
sv.partTab(aTab);
let index = nextSibling ? nextSibling._tPos : b.mTabContainer.childNodes.length ;
if (index > aTab._tPos) index--;
b.moveTabTo(aTab, index);
}
},
promoteCurrentTab : function() /* PUBLIC API */
{
this.promoteTab(this.browser.selectedTab);
},
demoteTab : function(aTab) /* PUBLIC API */
{
var b = this.getTabBrowserFromChild(aTab);
var sv = b.treeStyleTab;
var previous = this.getPreviousSiblingTab(aTab);
if (previous)
sv.attachTabTo(aTab, previous);
},
demoteCurrentTab : function() /* PUBLIC API */
{
this.demoteTab(this.browser.selectedTab);
},
get treeViewEnabled() /* PUBLIC API */
{
return this._treeViewEnabled;
},
set treeViewEnabled(aValue)
{
this._treeViewEnabled = aValue ? true : false ;
this.ObserverService.notifyObservers(
window,
'TreeStyleTab:changeTreeViewAvailability',
this._treeViewEnabled
);
return aValue;
},
_treeViewEnabled : true,
expandTreeAfterKeyReleased : function(aTab) expandTreeAfterKeyReleased : function(aTab)
{ {
if (this.getTreePref('autoCollapseExpandSubTreeOnSelect.whileFocusMovingByShortcut')) return; if (this.getTreePref('autoCollapseExpandSubTreeOnSelect.whileFocusMovingByShortcut')) return;

View File

@ -136,6 +136,7 @@ TreeStyleTabBrowser.prototype = {
this.internallyTabMovingCount = 0; this.internallyTabMovingCount = 0;
this.subTreeMovingCount = 0; this.subTreeMovingCount = 0;
this.subTreeChildrenMovingCount = 0; this.subTreeChildrenMovingCount = 0;
this._treeViewEnabled = true;
let (splitter, toggler) { let (splitter, toggler) {
splitter = document.getAnonymousElementByAttribute(b, 'class', this.kSPLITTER); splitter = document.getAnonymousElementByAttribute(b, 'class', this.kSPLITTER);
@ -581,6 +582,7 @@ TreeStyleTabBrowser.prototype = {
this.ObserverService.addObserver(this, 'TreeStyleTab:indentModified', false); this.ObserverService.addObserver(this, 'TreeStyleTab:indentModified', false);
this.ObserverService.addObserver(this, 'TreeStyleTab:collapseExpandAllSubtree', false); this.ObserverService.addObserver(this, 'TreeStyleTab:collapseExpandAllSubtree', false);
this.ObserverService.addObserver(this, 'TreeStyleTab:changeTreeViewAvailability', false);
this.addPrefListener(this); this.addPrefListener(this);
this.autoHide; this.autoHide;
@ -1077,6 +1079,7 @@ TreeStyleTabBrowser.prototype = {
this.ObserverService.removeObserver(this, 'TreeStyleTab:indentModified'); this.ObserverService.removeObserver(this, 'TreeStyleTab:indentModified');
this.ObserverService.removeObserver(this, 'TreeStyleTab:collapseExpandAllSubtree'); this.ObserverService.removeObserver(this, 'TreeStyleTab:collapseExpandAllSubtree');
this.ObserverService.removeObserver(this, 'TreeStyleTab:changeTreeViewAvailability');
this.removePrefListener(this); this.removePrefListener(this);
delete this.mTabBrowser; delete this.mTabBrowser;
@ -1113,6 +1116,10 @@ TreeStyleTabBrowser.prototype = {
} }
break; break;
case 'TreeStyleTab:changeTreeViewAvailability':
this.treeViewEnabled = (aData != 'false');
break;
case 'nsPref:changed': case 'nsPref:changed':
this.onPrefChange(aData); this.onPrefChange(aData);
break; break;
@ -2866,6 +2873,29 @@ TreeStyleTabBrowser.prototype = {
}, this); }, this);
}, },
get treeViewEnabled() /* PUBLIC API */
{
return this._treeViewEnabled;
},
set treeViewEnabled(aValue)
{
this._treeViewEnabled = aValue ? true : false ;
if (this._treeViewEnabled) {
let orient = this.isVertical ? 'vertical' : 'horizontal' ;
if (this.getTreePref('allowSubtreeCollapseExpand.'+orient))
this.browser.setAttribute(this.kALLOW_COLLAPSE, true);
this.updateTabsIndent(this.rootTabs, undefined, undefined, true);
}
else {
this.browser.removeAttribute(this.kALLOW_COLLAPSE);
this.getTabsArray(this.browser).forEach(function(aTab) {
this.updateTabIndent(aTab, this.indentProp, 0, true);
}, this);
}
return aValue;
},
// _treeViewEnabled : true,
/* attach/part */ /* attach/part */
attachTabTo : function(aChild, aParent, aInfo) /* PUBLIC API */ attachTabTo : function(aChild, aParent, aInfo) /* PUBLIC API */
@ -3043,7 +3073,7 @@ TreeStyleTabBrowser.prototype = {
updateTabsIndent : function(aTabs, aLevel, aProp, aJustNow) updateTabsIndent : function(aTabs, aLevel, aProp, aJustNow)
{ {
if (!aTabs || !aTabs.length) return; if (!aTabs || !aTabs.length || !this._treeViewEnabled) return;
if (aLevel === void(0)) { if (aLevel === void(0)) {
var parentTab = this.getParentTab(aTabs[0]); var parentTab = this.getParentTab(aTabs[0]);
@ -3063,35 +3093,9 @@ TreeStyleTabBrowser.prototype = {
var margin = this.indent < 0 ? this.baseIndent : this.indent ; var margin = this.indent < 0 ? this.baseIndent : this.indent ;
var indent = margin * aLevel; var indent = margin * aLevel;
var multirow = this.isMultiRow();
var topBottom = this.indentProp.match(/top|bottom/);
var maxIndent = parseInt(aTabs[0].boxObject.height / 2);
Array.slice(aTabs).forEach(function(aTab) { Array.slice(aTabs).forEach(function(aTab) {
if (!aTab.parentNode) return; // ignore removed tabs if (!aTab.parentNode) return; // ignore removed tabs
if (multirow) { this.updateTabIndent(aTab, aProp, indent, aJustNow);
indent = Math.min(aLevel * 3, maxIndent);
var colors = '-moz-border-'+topBottom+'-colors:'+(function(aNum) {
var retVal = [];
for (var i = 1; i < aNum; i++)
{
retVal.push('transparent');
}
retVal.push('ThreeDShadow');
return retVal.length == 1 ? 'none' : retVal.join(' ') ;
})(indent)+' !important;';
Array.slice(document.getAnonymousNodes(aTab)).forEach(function(aBox) {
if (aBox.nodeType != Node.ELEMENT_NODE) return;
aBox.setAttribute(
'style',
aBox.getAttribute('style').replace(/(-moz-)?border-(top|bottom)(-[^:]*)?.*:[^;]+;?/g, '') +
'; border-'+topBottom+': solid transparent '+indent+'px !important;'+colors
);
}, this);
}
else {
this.updateTabIndent(aTab, aProp, indent, aJustNow);
}
aTab.setAttribute(this.kNEST, aLevel); aTab.setAttribute(this.kNEST, aLevel);
this.updateTabsIndent(this.getChildTabs(aTab), aLevel+1, aProp, aJustNow); this.updateTabsIndent(this.getChildTabs(aTab), aLevel+1, aProp, aJustNow);
}, this); }, this);
@ -3121,6 +3125,37 @@ TreeStyleTabBrowser.prototype = {
{ {
this.stopTabIndentAnimation(aTab); this.stopTabIndentAnimation(aTab);
if (this.isMultiRow()) {
let topBottom = this.indentProp.match(/top|bottom/);
let maxIndent = parseInt(aTabs[0].boxObject.height / 2);
indent = Math.min(aLevel * 3, maxIndent);
var colors = '-moz-border-'+topBottom+'-colors:'+(function(aNum) {
var retVal = [];
for (var i = 1; i < aNum; i++)
{
retVal.push('transparent');
}
retVal.push('ThreeDShadow');
return retVal.length == 1 ? 'none' : retVal.join(' ') ;
})(indent)+' !important;';
Array.slice(document.getAnonymousNodes(aTab)).forEach(function(aBox) {
if (aBox.nodeType != Node.ELEMENT_NODE) return;
aBox.setAttribute(
'style',
aBox.getAttribute('style').replace(/(-moz-)?border-(top|bottom)(-[^:]*)?.*:[^;]+;?/g, '') +
'; border-'+topBottom+': solid transparent '+indent+'px !important;'+colors
);
}, this);
}
var regexp = this.indentRulesRegExp; var regexp = this.indentRulesRegExp;
if ( if (
!this.animationEnabled || !this.animationEnabled ||