インデントの有効無効、折りたたみの有効無効について、水平・垂直それぞれのタブバーに別個に設定を保存できるようにした

git-svn-id: http://www.cozmixng.org/repos/piro/treestyletab/trunk@4666 599a83e7-65a4-db11-8015-0010dcdd6dc2
This commit is contained in:
piro 2009-07-08 00:09:13 +00:00
parent ee0a7e27cc
commit fc33824e01
4 changed files with 85 additions and 47 deletions

View File

@ -25,7 +25,7 @@
http://www.cozmixng.org/repos/piro/fx3-compatibility-lib/trunk/prefs.js http://www.cozmixng.org/repos/piro/fx3-compatibility-lib/trunk/prefs.js
*/ */
(function() { (function() {
const currentRevision = 1; const currentRevision = 2;
if (!('piro.sakura.ne.jp' in window)) window['piro.sakura.ne.jp'] = {}; if (!('piro.sakura.ne.jp' in window)) window['piro.sakura.ne.jp'] = {};
@ -48,19 +48,29 @@
}, },
_Prefs : null, _Prefs : null,
getPref : function(aPrefstring) get DefaultPrefs()
{ {
if (!this._DefaultPrefs) {
this._DefaultPrefs = Components.classes['@mozilla.org/preferences-service;1'].getService(Components.interfaces.nsIPrefService).getDefaultBranch(null);
}
return this._DefaultPrefs;
},
_DefaultPrefs : null,
getPref : function(aPrefstring, aBranch)
{
if (!aBranch) aBranch = this.Prefs;
try { try {
switch (this.Prefs.getPrefType(aPrefstring)) switch (aBranch.getPrefType(aPrefstring))
{ {
case this.Prefs.PREF_STRING: case this.Prefs.PREF_STRING:
return decodeURIComponent(escape(this.Prefs.getCharPref(aPrefstring))); return decodeURIComponent(escape(aBranch.getCharPref(aPrefstring)));
break; break;
case this.Prefs.PREF_INT: case this.Prefs.PREF_INT:
return this.Prefs.getIntPref(aPrefstring); return aBranch.getIntPref(aPrefstring);
break; break;
default: default:
return this.Prefs.getBoolPref(aPrefstring); return aBranch.getBoolPref(aPrefstring);
break; break;
} }
} }
@ -70,9 +80,15 @@
return null; return null;
}, },
setPref : function(aPrefstring, aNewValue) getDefaultPref : function(aPrefstring)
{ {
var pref = this.Prefs ; return this.getPref(aPrefstring, this.DefaultPrefs);
},
setPref : function(aPrefstring, aNewValue, aBranch)
{
if (!aBranch) aBranch = this.Prefs;
var type; var type;
try { try {
type = typeof aNewValue; type = typeof aNewValue;
@ -84,18 +100,23 @@
switch (type) switch (type)
{ {
case 'string': case 'string':
pref.setCharPref(aPrefstring, unescape(encodeURIComponent(aNewValue))); aBranch.setCharPref(aPrefstring, unescape(encodeURIComponent(aNewValue)));
break; break;
case 'number': case 'number':
pref.setIntPref(aPrefstring, parseInt(aNewValue)); aBranch.setIntPref(aPrefstring, parseInt(aNewValue));
break; break;
default: default:
pref.setBoolPref(aPrefstring, aNewValue); aBranch.setBoolPref(aPrefstring, aNewValue);
break; break;
} }
return true; return true;
}, },
setDefaultPref : function(aPrefstring)
{
return this.setPref(aPrefstring, aNewValue, this.DefaultPrefs);
},
clearPref : function(aPrefstring) clearPref : function(aPrefstring)
{ {
try { try {

View File

@ -466,11 +466,6 @@ var TreeStyleTabService = {
var pref = isVertical ? 'tabbar.fixed.vertical' : 'tabbar.fixed.horizontal' ; var pref = isVertical ? 'tabbar.fixed.vertical' : 'tabbar.fixed.horizontal' ;
this.setTreePref(pref, !this.getTreePref(pref)); this.setTreePref(pref, !this.getTreePref(pref));
if (!this.getTreePref('syncRelatedPrefs')) return;
if (!isVertical)
this.setTreePref('enableSubtreeIndent', !this.getTreePref(pref));
}, },
changeTabbarPosition : function(aNewPosition) /* PUBLIC API */ changeTabbarPosition : function(aNewPosition) /* PUBLIC API */
@ -480,12 +475,6 @@ var TreeStyleTabService = {
aNewPosition = aNewPosition.toLowerCase(); aNewPosition = aNewPosition.toLowerCase();
this.setTreePref('tabbar.position', aNewPosition); this.setTreePref('tabbar.position', aNewPosition);
if (!this.getTreePref('syncRelatedPrefs')) return;
var vertical = (aNewPosition == 'left' || aNewPosition == 'right');
this.setTreePref('enableSubtreeIndent', vertical || !this.getTreePref('tabbar.fixed.horizontal'));
this.setTreePref('allowSubtreeCollapseExpand', vertical);
}, },
/* backward compatibility */ /* backward compatibility */
@ -1170,6 +1159,25 @@ var TreeStyleTabService = {
this.overrideExtensionsPreInit(); // hacks.js this.overrideExtensionsPreInit(); // hacks.js
this.registerTabFocusAllowance(this.defaultTabFocusAllowance); this.registerTabFocusAllowance(this.defaultTabFocusAllowance);
// migrate old prefs
switch (this.getTreePref('orientalPrefsMigrated'))
{
case 0:
[
'extensions.treestyletab.tabbar.fixed',
'extensions.treestyletab.enableSubtreeIndent',
'extensions.treestyletab.allowSubtreeCollapseExpand'
].forEach(function(aPref) {
let value = this.getPref(aPref);
if (value === null) return;
this.setPref(aPref+'.horizontal', value);
this.setPref(aPref+'.vertical', value);
}, this);
default:
break;
}
this.setTreePref('orientalPrefsMigrated', 1);
}, },
preInitialized : false, preInitialized : false,

View File

@ -502,7 +502,6 @@ TreeStyleTabBrowser.prototype = {
this.onPrefChange('extensions.treestyletab.tabbar.style'); this.onPrefChange('extensions.treestyletab.tabbar.style');
this.onPrefChange('extensions.treestyletab.twisty.style'); this.onPrefChange('extensions.treestyletab.twisty.style');
this.onPrefChange('extensions.treestyletab.showBorderForFirstTab'); this.onPrefChange('extensions.treestyletab.showBorderForFirstTab');
this.onPrefChange('extensions.treestyletab.enableSubtreeIndent');
this.onPrefChange('extensions.treestyletab.tabbar.invertTabContents'); this.onPrefChange('extensions.treestyletab.tabbar.invertTabContents');
this.onPrefChange('extensions.treestyletab.tabbar.invertScrollbar'); this.onPrefChange('extensions.treestyletab.tabbar.invertScrollbar');
this.onPrefChange('extensions.treestyletab.tabbar.invertClosebox'); this.onPrefChange('extensions.treestyletab.tabbar.invertClosebox');
@ -844,7 +843,7 @@ TreeStyleTabBrowser.prototype = {
b.mStrip.removeAttribute('height'); b.mStrip.removeAttribute('height');
b.mPanelContainer.removeAttribute('height'); b.mPanelContainer.removeAttribute('height');
this.updateTabbarFixedState(); this.updateTabbarState();
if (pos == this.kTABBAR_RIGHT) { if (pos == this.kTABBAR_RIGHT) {
b.setAttribute(this.kTABBAR_POSITION, 'right'); b.setAttribute(this.kTABBAR_POSITION, 'right');
@ -919,7 +918,7 @@ TreeStyleTabBrowser.prototype = {
b.setAttribute(this.kMODE, this.getTreePref('tabbar.multirow') ? 'multirow' : 'horizontal' ); b.setAttribute(this.kMODE, this.getTreePref('tabbar.multirow') ? 'multirow' : 'horizontal' );
b.removeAttribute(this.kTAB_INVERTED); b.removeAttribute(this.kTAB_INVERTED);
this.updateTabbarFixedState(); this.updateTabbarState();
if (pos == this.kTABBAR_BOTTOM) { if (pos == this.kTABBAR_BOTTOM) {
b.setAttribute(this.kTABBAR_POSITION, 'bottom'); b.setAttribute(this.kTABBAR_POSITION, 'bottom');
@ -961,16 +960,19 @@ TreeStyleTabBrowser.prototype = {
scrollInnerBox = null; scrollInnerBox = null;
allTabsButton = null; allTabsButton = null;
}, },
updateTabbarFixedState : function() updateTabbarState : function()
{ {
var b = this.mTabBrowser; var b = this.mTabBrowser;
var orient;
if (this.isVertical) { if (this.isVertical) {
orient = 'vertical';
if (this.getTreePref('tabbar.fixed.vertical')) if (this.getTreePref('tabbar.fixed.vertical'))
b.setAttribute(this.kFIXED, true); b.setAttribute(this.kFIXED, true);
else else
b.removeAttribute(this.kFIXED); b.removeAttribute(this.kFIXED);
} }
else { else {
orient = 'horizontal';
if (this.getTreePref('tabbar.fixed.horizontal')) { if (this.getTreePref('tabbar.fixed.horizontal')) {
b.setAttribute(this.kFIXED, true); b.setAttribute(this.kFIXED, true);
if (!this.isMultiRow()) { if (!this.isMultiRow()) {
@ -983,6 +985,18 @@ TreeStyleTabBrowser.prototype = {
b.mStrip.setAttribute('height', this.getTreePref('tabbar.height')); b.mStrip.setAttribute('height', this.getTreePref('tabbar.height'));
} }
} }
if (this.getTreePref('enableSubtreeIndent.'+orient))
b.setAttribute(this.kINDENTED, 'true');
else
b.removeAttribute(this.kINDENTED);
if (this.getTreePref('allowSubtreeCollapseExpand.'+orient))
b.setAttribute(this.kALLOW_COLLAPSE, 'true');
else
b.removeAttribute(this.kALLOW_COLLAPSE);
this.updateAllTabsIndent();
}, },
destroy : function() destroy : function()
@ -1127,14 +1141,6 @@ TreeStyleTabBrowser.prototype = {
}, this); }, this);
break; break;
case 'extensions.treestyletab.enableSubtreeIndent':
if (value)
b.setAttribute(this.kINDENTED, 'true');
else
b.removeAttribute(this.kINDENTED);
this.updateAllTabsIndent();
break;
case 'extensions.treestyletab.tabbar.style': case 'extensions.treestyletab.tabbar.style':
if (value) { if (value) {
if (/^(default|vertigo|mixed)$/.test(value)) if (/^(default|vertigo|mixed)$/.test(value))
@ -1189,13 +1195,6 @@ TreeStyleTabBrowser.prototype = {
b.removeAttribute(this.kHIDE_ALLTABS); b.removeAttribute(this.kHIDE_ALLTABS);
break; break;
case 'extensions.treestyletab.allowSubtreeCollapseExpand':
if (value)
b.setAttribute(this.kALLOW_COLLAPSE, true);
else
b.removeAttribute(this.kALLOW_COLLAPSE);
break;
case 'extensions.treestyletab.tabbar.autoHide.mode': case 'extensions.treestyletab.tabbar.autoHide.mode':
this.updateAutoHideMode(); this.updateAutoHideMode();
break; break;
@ -1209,9 +1208,13 @@ TreeStyleTabBrowser.prototype = {
this.endListenMouseMove(); this.endListenMouseMove();
break; break;
case 'extensions.treestyletab.enableSubtreeIndent.horizontal':
case 'extensions.treestyletab.enableSubtreeIndent.vertical':
case 'extensions.treestyletab.allowSubtreeCollapseExpand.horizontal':
case 'extensions.treestyletab.allowSubtreeCollapseExpand.vertical':
case 'extensions.treestyletab.tabbar.fixed.vertical': case 'extensions.treestyletab.tabbar.fixed.vertical':
case 'extensions.treestyletab.tabbar.fixed.horizontal': case 'extensions.treestyletab.tabbar.fixed.horizontal':
this.updateTabbarFixedState(); this.updateTabbarState();
break; break;
case 'extensions.treestyletab.tabbar.transparent.style': case 'extensions.treestyletab.tabbar.transparent.style':
@ -2939,7 +2942,8 @@ TreeStyleTabBrowser.prototype = {
var b = this.mTabBrowser; var b = this.mTabBrowser;
if (!aProp) { if (!aProp) {
aProp = this.getTreePref('enableSubtreeIndent') ? this.indentProp : null ; let orient = this.isVertical ? 'vertical' : 'horizontal' ;
aProp = this.getTreePref('enableSubtreeIndent.'+orient) ? this.indentProp : null ;
} }
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;

View File

@ -39,9 +39,11 @@ pref("extensions.treestyletab.tabbar.togglerSize", 5);
pref("extensions.treestyletab.tabbar.fixed.horizontal", true); pref("extensions.treestyletab.tabbar.fixed.horizontal", true);
pref("extensions.treestyletab.tabbar.fixed.vertical", false); pref("extensions.treestyletab.tabbar.fixed.vertical", false);
pref("extensions.treestyletab.syncRelatedPrefs", true); pref("extensions.treestyletab.syncRelatedPrefs", true);
pref("extensions.treestyletab.enableSubtreeIndent", true); pref("extensions.treestyletab.enableSubtreeIndent.horizontal", false);
pref("extensions.treestyletab.enableSubtreeIndent.vertical", true);
pref("extensions.treestyletab.enableSubtreeIndent.allTabsPopup", true); pref("extensions.treestyletab.enableSubtreeIndent.allTabsPopup", true);
pref("extensions.treestyletab.allowSubtreeCollapseExpand", true); pref("extensions.treestyletab.allowSubtreeCollapseExpand.horizontal", false);
pref("extensions.treestyletab.allowSubtreeCollapseExpand.vertical", true);
pref("extensions.treestyletab.showBorderForFirstTab", false); pref("extensions.treestyletab.showBorderForFirstTab", false);
pref("extensions.treestyletab.autoExpand.enabled", true); pref("extensions.treestyletab.autoExpand.enabled", true);
pref("extensions.treestyletab.autoExpand.delay", 500); pref("extensions.treestyletab.autoExpand.delay", 500);
@ -114,5 +116,8 @@ pref("extensions.multipletab.show.multipletab-selection-item-removeTabSubTree",
pref("extensions.treestyletab.TMP.doNotUpdate.isTabVisible", false); pref("extensions.treestyletab.TMP.doNotUpdate.isTabVisible", false);
pref("extensions.treestyletab.orientalPrefsMigrated", 0);
pref("extensions.treestyletab@piro.sakura.ne.jp.name", "chrome://treestyletab/locale/treestyletab.properties"); pref("extensions.treestyletab@piro.sakura.ne.jp.name", "chrome://treestyletab/locale/treestyletab.properties");
pref("extensions.treestyletab@piro.sakura.ne.jp.description", "chrome://treestyletab/locale/treestyletab.properties"); pref("extensions.treestyletab@piro.sakura.ne.jp.description", "chrome://treestyletab/locale/treestyletab.properties");