summaryrefslogtreecommitdiff
path: root/platform/dvcs-impl/src/com/intellij/dvcs/push/ui/PushLog.java
diff options
context:
space:
mode:
Diffstat (limited to 'platform/dvcs-impl/src/com/intellij/dvcs/push/ui/PushLog.java')
-rw-r--r--platform/dvcs-impl/src/com/intellij/dvcs/push/ui/PushLog.java87
1 files changed, 51 insertions, 36 deletions
diff --git a/platform/dvcs-impl/src/com/intellij/dvcs/push/ui/PushLog.java b/platform/dvcs-impl/src/com/intellij/dvcs/push/ui/PushLog.java
index 0b4bcb0fbef0..1539b94216c0 100644
--- a/platform/dvcs-impl/src/com/intellij/dvcs/push/ui/PushLog.java
+++ b/platform/dvcs-impl/src/com/intellij/dvcs/push/ui/PushLog.java
@@ -15,6 +15,7 @@
*/
package com.intellij.dvcs.push.ui;
+import com.intellij.dvcs.push.PushTargetPanel;
import com.intellij.openapi.actionSystem.CommonShortcuts;
import com.intellij.openapi.actionSystem.DataKey;
import com.intellij.openapi.actionSystem.DataSink;
@@ -25,7 +26,10 @@ import com.intellij.openapi.vcs.VcsDataKeys;
import com.intellij.openapi.vcs.changes.Change;
import com.intellij.openapi.vcs.changes.committed.CommittedChangesTreeBrowser;
import com.intellij.openapi.vcs.changes.ui.ChangesBrowser;
-import com.intellij.ui.*;
+import com.intellij.ui.CheckboxTree;
+import com.intellij.ui.CheckedTreeNode;
+import com.intellij.ui.ColoredTreeCellRenderer;
+import com.intellij.ui.ScrollPaneFactory;
import com.intellij.ui.components.JBTextField;
import com.intellij.util.ArrayUtil;
import com.intellij.util.ui.tree.TreeUtil;
@@ -37,7 +41,10 @@ import javax.swing.event.CellEditorListener;
import javax.swing.event.ChangeEvent;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
-import javax.swing.tree.*;
+import javax.swing.tree.DefaultMutableTreeNode;
+import javax.swing.tree.DefaultTreeModel;
+import javax.swing.tree.TreePath;
+import javax.swing.tree.TreeSelectionModel;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.MouseEvent;
@@ -45,17 +52,14 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.EventObject;
-import java.util.concurrent.locks.ReentrantReadWriteLock;
public class PushLog extends JPanel implements TypeSafeDataProvider {
- private final ReentrantReadWriteLock TREE_CONSTRUCTION_LOCK = new ReentrantReadWriteLock();
-
private static final String START_EDITING = "startEditing";
private final ChangesBrowser myChangesBrowser;
private final CheckboxTree myTree;
private final MyTreeCellRenderer myTreeCellRenderer;
- //private final AtomicBoolean myIgnoreStopEditing = new AtomicBoolean(false);
+ private boolean myEditingSucceeded;
public PushLog(Project project, CheckedTreeNode root) {
DefaultTreeModel treeModel = new DefaultTreeModel(root);
@@ -89,6 +93,23 @@ public class PushLog extends JPanel implements TypeSafeDataProvider {
}
return "";
}
+
+ @Override
+ public boolean stopEditing() {
+ DefaultMutableTreeNode node = (DefaultMutableTreeNode)myTree.getLastSelectedPathComponent();
+ if (node instanceof EditableTreeNode) {
+ JComponent editedComponent = (JComponent)node.getUserObject();
+ InputVerifier verifier = editedComponent.getInputVerifier();
+ if (verifier != null && !verifier.verify(editedComponent)) return false;
+ }
+ myEditingSucceeded = true;
+ try {
+ return super.stopEditing();
+ }
+ finally {
+ myEditingSucceeded = false;
+ }
+ }
};
myTree.setEditable(true);
MyTreeCellEditor treeCellEditor = new MyTreeCellEditor(new JBTextField());
@@ -140,6 +161,9 @@ public class PushLog extends JPanel implements TypeSafeDataProvider {
}
});
myTree.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_F2, 0), START_EDITING);
+ //override default tree behaviour.
+ myTree.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), "");
+
myTree.setRowHeight(0);
ToolTipManager.sharedInstance().registerComponent(myTree);
@@ -197,8 +221,14 @@ public class PushLog extends JPanel implements TypeSafeDataProvider {
@Override
protected boolean processKeyBinding(KeyStroke ks, KeyEvent e, int condition, boolean pressed) {
- if (e.getKeyCode() == KeyEvent.VK_ENTER && myTree.isEditing()) {
- myTree.stopEditing();
+ if (e.getKeyCode() == KeyEvent.VK_ENTER && pressed) {
+ if (myTree.isEditing()) {
+ myTree.stopEditing();
+ }
+ else {
+ DefaultMutableTreeNode node = (DefaultMutableTreeNode)myTree.getLastSelectedPathComponent();
+ myTree.startEditingAtPath(TreeUtil.getPathFromRoot(node));
+ }
return true;
}
return super.processKeyBinding(ks, e, condition, pressed);
@@ -239,7 +269,7 @@ public class PushLog extends JPanel implements TypeSafeDataProvider {
Object tag = me.getClickCount() >= clickCountToStart
? PushLogTreeUtil.getTagAtForRenderer(myTreeCellRenderer, me)
: null;
- return tag instanceof EditorTextField;
+ return tag instanceof PushTargetPanel;
}
//if keyboard event - then anEvent will be null =( See BasicTreeUi
TreePath treePath = myTree.getAnchorSelectionPath();
@@ -251,7 +281,7 @@ public class PushLog extends JPanel implements TypeSafeDataProvider {
//Implement the one CellEditor method that AbstractCellEditor doesn't.
public Object getCellEditorValue() {
- return ((RepositoryWithBranchPanel)editorComponent).getRemoteTargetName();
+ return myEditingSucceeded ? ((RepositoryWithBranchPanel)editorComponent).getEditableValue() : null;
}
}
@@ -285,34 +315,19 @@ public class PushLog extends JPanel implements TypeSafeDataProvider {
public void setChildren(DefaultMutableTreeNode parentNode,
@NotNull Collection<? extends DefaultMutableTreeNode> childrenNodes,
boolean shouldExpand) {
- try {
- TREE_CONSTRUCTION_LOCK.writeLock().lock();
- parentNode.removeAllChildren();
- for (DefaultMutableTreeNode child : childrenNodes) {
- parentNode.add(child);
- }
- final DefaultTreeModel model = ((DefaultTreeModel)myTree.getModel());
- model.nodeStructureChanged(parentNode);
- TreePath path = TreeUtil.getPathFromRoot(parentNode);
- //myIgnoreStopEditing.set(true);
- if (shouldExpand) {
- myTree.expandPath(path);
- }
- else {
- myTree.collapsePath(path);
- }
+ parentNode.removeAllChildren();
+ for (DefaultMutableTreeNode child : childrenNodes) {
+ parentNode.add(child);
}
- finally {
- TREE_CONSTRUCTION_LOCK.writeLock().unlock();
- //myIgnoreStopEditing.set(false);
+ final DefaultTreeModel model = ((DefaultTreeModel)myTree.getModel());
+ model.nodeStructureChanged(parentNode);
+ TreePath path = TreeUtil.getPathFromRoot(parentNode);
+ if (shouldExpand) {
+ myTree.expandPath(path);
}
- }
-
- public void startEditNode(@NotNull TreeNode node) {
- TreePath path = TreeUtil.getPathFromRoot(node);
- if (!myTree.isEditing()) {
- myTree.setSelectionPath(path);
- myTree.startEditingAtPath(path);
+ else {
+ myTree.collapsePath(path);
}
}
+
}