ツリー復元時にタブの並び順がぐちゃぐちゃになる問題についてある程度改善

git-svn-id: http://www.cozmixng.org/repos/piro/treestyletab/trunk@5150 599a83e7-65a4-db11-8015-0010dcdd6dc2
This commit is contained in:
piro 2009-09-29 14:31:02 +00:00
parent 29de7954eb
commit 1d5bde0f09

View File

@ -560,7 +560,11 @@ TreeStyleTabBrowser.prototype = {
{ {
if (!aTab.hasAttribute(this.kID)) { if (!aTab.hasAttribute(this.kID)) {
var id = this.getTabValue(aTab, this.kID) || this.makeNewId(); var id = this.getTabValue(aTab, this.kID) || this.makeNewId();
this.setTabValue(aTab, this.kID, id); aTab.setAttribute(this.kID, id);
window.setTimeout(function(aSelf) {
if (!aSelf.getTabValue(aTab, aSelf.kID))
aSelf.setTabValue(aTab, aSelf.kID, id);
}, 0, this);
this.setTabValue(aTab, this.kSUBTREE_COLLAPSED, true); this.setTabValue(aTab, this.kSUBTREE_COLLAPSED, true);
} }
@ -1400,12 +1404,16 @@ TreeStyleTabBrowser.prototype = {
} }
var prev = this.getPreviousSiblingTab(tab); var prev = this.getPreviousSiblingTab(tab);
if (prev) if (prev) {
this.setTabValue(tab, this.kINSERT_AFTER, prev.getAttribute(this.kID));
this.setTabValue(prev, this.kINSERT_BEFORE, tab.getAttribute(this.kID)); this.setTabValue(prev, this.kINSERT_BEFORE, tab.getAttribute(this.kID));
}
var next = this.getNextSiblingTab(tab); var next = this.getNextSiblingTab(tab);
if (next) if (next) {
this.setTabValue(tab, this.kINSERT_BEFORE, next.getAttribute(this.kID));
this.setTabValue(next, this.kINSERT_AFTER, tab.getAttribute(this.kID)); this.setTabValue(next, this.kINSERT_AFTER, tab.getAttribute(this.kID));
}
}, },
onTabRemoved : function(aEvent) onTabRemoved : function(aEvent)
@ -1616,14 +1624,19 @@ TreeStyleTabBrowser.prototype = {
this.updateTabsCount(tab, true); this.updateTabsCount(tab, true);
var prev = this.getPreviousSiblingTab(tab); var prev = this.getPreviousSiblingTab(tab);
if (prev) var next = this.getNextSiblingTab(tab);
if (prev) {
this.setTabValue(prev, this.kINSERT_BEFORE, tab.getAttribute(this.kID));
this.setTabValue(tab, this.kINSERT_AFTER, prev.getAttribute(this.kID)); this.setTabValue(tab, this.kINSERT_AFTER, prev.getAttribute(this.kID));
}
else else
this.deleteTabValue(tab, this.kINSERT_AFTER); this.deleteTabValue(tab, this.kINSERT_AFTER);
var next = this.getNextSiblingTab(tab); if (next) {
if (next) this.setTabValue(next, this.kINSERT_AFTER, tab.getAttribute(this.kID));
this.setTabValue(tab, this.kINSERT_BEFORE, next.getAttribute(this.kID)); this.setTabValue(tab, this.kINSERT_BEFORE, next.getAttribute(this.kID));
}
else else
this.deleteTabValue(tab, this.kINSERT_BEFORE); this.deleteTabValue(tab, this.kINSERT_BEFORE);
@ -1632,14 +1645,19 @@ TreeStyleTabBrowser.prototype = {
old = this.getTabs(b).snapshotItem(old); old = this.getTabs(b).snapshotItem(old);
prev = this.getPreviousSiblingTab(old); prev = this.getPreviousSiblingTab(old);
if (prev) next = this.getNextSiblingTab(old);
if (prev) {
this.setTabValue(prev, this.kINSERT_BEFORE, old.getAttribute(this.kID));
this.setTabValue(old, this.kINSERT_AFTER, prev.getAttribute(this.kID)); this.setTabValue(old, this.kINSERT_AFTER, prev.getAttribute(this.kID));
}
else else
this.deleteTabValue(old, this.kINSERT_AFTER); this.deleteTabValue(old, this.kINSERT_AFTER);
next = this.getNextSiblingTab(old); if (next) {
if (next) this.setTabValue(next, this.kINSERT_AFTER, old.getAttribute(this.kID));
this.setTabValue(old, this.kINSERT_BEFORE, next.getAttribute(this.kID)); this.setTabValue(old, this.kINSERT_BEFORE, next.getAttribute(this.kID));
}
else else
this.deleteTabValue(old, this.kINSERT_BEFORE); this.deleteTabValue(old, this.kINSERT_BEFORE);
@ -1740,11 +1758,9 @@ TreeStyleTabBrowser.prototype = {
{ {
var tab = aTab; var tab = aTab;
var b = this.mTabBrowser; var b = this.mTabBrowser;
var id = this.getTabValue(tab, this.kID);
var maybeDuplicated = false; var maybeDuplicated = false;
var id = this.getTabValue(tab, this.kID);
tab.setAttribute(this.kID+'-temp', id); tab.setAttribute(this.kID+'-temp', id);
if (this.isTabDuplicated(tab)) { // this is a duplicated tab! if (this.isTabDuplicated(tab)) { // this is a duplicated tab!
maybeDuplicated = true; maybeDuplicated = true;
@ -1772,7 +1788,21 @@ TreeStyleTabBrowser.prototype = {
this.updateTabsIndent([tab], undefined, undefined, aWithoutAnimation); this.updateTabsIndent([tab], undefined, undefined, aWithoutAnimation);
} }
this.setTabValue(tab, this.kID, id); if (tab.getAttribute(this.kID) != id) {
this.setTabValue(tab, this.kID, id);
window.setTimeout(function(aSelf) {
aSelf.restoreStructureInternal(tab, aWithoutAnimation, maybeDuplicated);
}, 100, this);
}
else {
this.restoreStructureInternal(tab, aWithoutAnimation, maybeDuplicated);
}
},
restoreStructureInternal : function (aTab, aWithoutAnimation, aMayBeDuplicated)
{
var tab = aTab;
var b = this.mTabBrowser;
var id = this.getTabValue(tab, this.kID);
var isSubTreeCollapsed = (this.getTabValue(tab, this.kSUBTREE_COLLAPSED) == 'true'); var isSubTreeCollapsed = (this.getTabValue(tab, this.kSUBTREE_COLLAPSED) == 'true');
@ -1781,7 +1811,7 @@ TreeStyleTabBrowser.prototype = {
if (children) { if (children) {
tab.removeAttribute(this.kCHILDREN); tab.removeAttribute(this.kCHILDREN);
children = children.split('|'); children = children.split('|');
if (maybeDuplicated) if (aMayBeDuplicated)
children = children.map(function(aChild) { children = children.map(function(aChild) {
return this.redirectId(aChild); return this.redirectId(aChild);
}, this); }, this);
@ -1798,12 +1828,12 @@ TreeStyleTabBrowser.prototype = {
} }
var nextTab = this.getTabValue(tab, this.kINSERT_BEFORE); var nextTab = this.getTabValue(tab, this.kINSERT_BEFORE);
if (nextTab && maybeDuplicated) nextTab = this.redirectId(nextTab); if (nextTab && aMayBeDuplicated) nextTab = this.redirectId(nextTab);
nextTab = this.getTabById(nextTab); nextTab = this.getTabById(nextTab);
if (!nextTab) { if (!nextTab) {
var prevTab = this.getTabValue(tab, this.kINSERT_AFTER); var prevTab = this.getTabValue(tab, this.kINSERT_AFTER);
if (prevTab && maybeDuplicated) prevTab = this.redirectId(prevTab); if (prevTab && aMayBeDuplicated) prevTab = this.redirectId(prevTab);
nextTab = this.getNextSiblingTab(this.getTabById(prevTab)); nextTab = this.getNextSiblingTab(this.getTabById(prevTab));
} }
@ -1811,7 +1841,7 @@ TreeStyleTabBrowser.prototype = {
var parent = null; var parent = null;
for (var i in ancestors) for (var i in ancestors)
{ {
if (maybeDuplicated) ancestors[i] = this.redirectId(ancestors[i]); if (aMayBeDuplicated) ancestors[i] = this.redirectId(ancestors[i]);
parent = this.getTabById(ancestors[i]); parent = this.getTabById(ancestors[i]);
if (parent) { if (parent) {
parent = ancestors[i]; parent = ancestors[i];
@ -1862,7 +1892,7 @@ TreeStyleTabBrowser.prototype = {
this.collapseExpandSubtree(tab, isSubTreeCollapsed, aWithoutAnimation); this.collapseExpandSubtree(tab, isSubTreeCollapsed, aWithoutAnimation);
} }
if (maybeDuplicated) this.clearRedirectionTable(); if (aMayBeDuplicated) this.clearRedirectionTable();
}, },
redirectId : function(aId) redirectId : function(aId)