From a14119360e781c66dd90a83041b5ca314ff19b09 Mon Sep 17 00:00:00 2001 From: Sergey Vasiliev Date: Fri, 7 Apr 2006 14:14:51 +0400 Subject: [PATCH] added merge queue for commitable panel --- .../ui/CommitablePanelUserActivityListener.java | 30 +++++++--- .../intellij/util/xml/tree/DomModelTreeView.java | 64 +++++++++------------- 2 files changed, 46 insertions(+), 48 deletions(-) diff --git a/openapi/src/com/intellij/util/xml/ui/CommitablePanelUserActivityListener.java b/openapi/src/com/intellij/util/xml/ui/CommitablePanelUserActivityListener.java index 635b3d6bbd..ac5720d597 100644 --- a/openapi/src/com/intellij/util/xml/ui/CommitablePanelUserActivityListener.java +++ b/openapi/src/com/intellij/util/xml/ui/CommitablePanelUserActivityListener.java @@ -19,6 +19,8 @@ package com.intellij.util.xml.ui; import com.intellij.ui.UserActivityListener; import com.intellij.openapi.application.ApplicationManager; +import com.intellij.util.ui.update.MergingUpdateQueue; +import com.intellij.util.ui.update.Update; /** * User: Sergey.Vasiliev @@ -28,29 +30,39 @@ public class CommitablePanelUserActivityListener implements UserActivityListener CommittablePanel myPanel; + private MergingUpdateQueue myUpdateQueue; + public CommitablePanelUserActivityListener() { } public CommitablePanelUserActivityListener(final CommittablePanel panel) { myPanel = panel; + myUpdateQueue = new MergingUpdateQueue("DomCommitableUpdateQueue", 239, true, myPanel.getComponent()); } final public void stateChanged() { if (!myResetting) { - ApplicationManager.getApplication().invokeLater(new Runnable() { + myUpdateQueue.queue(new Update("DoActivityUpdate") { public void run() { - myResetting = true; - try { - applyChanges(); - } - finally { - myResetting = false; - } - doAfterApply(); + doActivity(); } }); } + } + protected void doActivity() { + ApplicationManager.getApplication().invokeLater(new Runnable() { + public void run() { + + myResetting = true; + try { + applyChanges(); + } finally { + myResetting = false; + } + doAfterApply(); + } + }); } protected void applyChanges() { diff --git a/source/com/intellij/util/xml/tree/DomModelTreeView.java b/source/com/intellij/util/xml/tree/DomModelTreeView.java index ffc7bea8f0..bd4a2a0a5f 100644 --- a/source/com/intellij/util/xml/tree/DomModelTreeView.java +++ b/source/com/intellij/util/xml/tree/DomModelTreeView.java @@ -8,6 +8,7 @@ import com.intellij.util.ui.tree.TreeUtil; import com.intellij.util.xml.DomElement; import com.intellij.util.xml.DomEventListener; import com.intellij.util.xml.DomManager; +import com.intellij.util.xml.DomChangeListener; import com.intellij.util.xml.events.*; import jetbrains.fabrique.ui.treeStructure.*; import jetbrains.fabrique.ui.treeStructure.actions.CollapseAllAction; @@ -18,9 +19,10 @@ import javax.swing.event.TreeExpansionListener; import javax.swing.event.TreeExpansionEvent; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeModel; +import javax.swing.tree.TreePath; import java.awt.*; -import java.util.Map; -import java.util.ArrayList; +import java.util.*; +import java.util.List; import org.jetbrains.annotations.Nullable; @@ -54,6 +56,7 @@ public class DomModelTreeView extends Wrapper implements DataProvider { }; myBuilder = new SimpleTreeBuilder(myTree, (DefaultTreeModel)myTree.getModel(), treeStructure, WeightBasedComparator.INSTANCE); + myBuilder.setNodeDescriptorComparator(null); myBuilder.initRoot(); @@ -78,36 +81,12 @@ public class DomModelTreeView extends Wrapper implements DataProvider { } }); - myDomEventListener = new DomEventListener() { - - public void valueChanged(TagValueChangeEvent event) { - super.valueChanged(event); - } - - public void elementDefined(ElementDefinedEvent event) { - super.elementDefined(event); - } - - public void elementUndefined(ElementUndefinedEvent event) { - super.elementUndefined(event); - } - - public void elementChanged(ElementChangedEvent event) { - super.elementChanged(event); - } - - public void childAdded(CollectionElementAddedEvent event) { - super.childAdded(event); - } - - public void childRemoved(CollectionElementRemovedEvent event) { - super.childRemoved(event); - } - - public void eventOccured(DomEvent event) { - myBuilder.updateFromRoot(false); + myDomEventListener = new DomChangeListener() { + protected void elementChanged(DomElement element) { + myBuilder.updateFromRoot(false); } }; + myDomManager = rootElement.getManager(); myDomManager.addDomEventListener(myDomEventListener); @@ -157,7 +136,16 @@ public class DomModelTreeView extends Wrapper implements DataProvider { public void setSelectedDomElement(final DomElement domElement) { if(domElement == null) return; - final java.util.List parentsNodes = new ArrayList(); + final List parentsNodes = getNodesFor(domElement); + + + if(parentsNodes.size() > 0) { + getTree().setSelectedNode(getBuilder(), parentsNodes.get(parentsNodes.size()-1), true); + } + } + + private List getNodesFor(final DomElement domElement) { + final List parentsNodes = new ArrayList(); SimpleNodeVisitor visitor = new SimpleNodeVisitor() { public boolean accept(SimpleNode simpleNode) { @@ -169,8 +157,13 @@ public class DomModelTreeView extends Wrapper implements DataProvider { } return false; } + }; + getTree().accept(getBuilder(), visitor); - private boolean isParent(final DomElement potentialParent, final DomElement domElement) { + return parentsNodes; + } + + private boolean isParent(final DomElement potentialParent, final DomElement domElement) { DomElement currParent = domElement; while(currParent != null) { if(currParent.equals(potentialParent)) return true; @@ -179,12 +172,5 @@ public class DomModelTreeView extends Wrapper implements DataProvider { } return false; } - }; - - getTree().accept(getBuilder(), visitor); - if(parentsNodes.size() > 0) { - getTree().setSelectedNode(getBuilder(), parentsNodes.get(parentsNodes.size()-1), true); - } - }; } -- 2.11.4.GIT