You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pivot.apache.org by tv...@apache.org on 2009/03/24 18:58:12 UTC
svn commit: r757925 - in /incubator/pivot/trunk/wtk/src/pivot/wtk/content:
TreeViewNodeEditor.java TreeViewNodeRenderer.java
Author: tvolkert
Date: Tue Mar 24 17:58:10 2009
New Revision: 757925
URL: http://svn.apache.org/viewvc?rev=757925&view=rev
Log:
Updated TreeViewNodeEditor to not use popup and to use TreeViewNodeRenderer#getTextBounds(), updated TreeViewNodeRenderer to provide #getTextBounds()
Modified:
incubator/pivot/trunk/wtk/src/pivot/wtk/content/TreeViewNodeEditor.java
incubator/pivot/trunk/wtk/src/pivot/wtk/content/TreeViewNodeRenderer.java
Modified: incubator/pivot/trunk/wtk/src/pivot/wtk/content/TreeViewNodeEditor.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/wtk/src/pivot/wtk/content/TreeViewNodeEditor.java?rev=757925&r1=757924&r2=757925&view=diff
==============================================================================
--- incubator/pivot/trunk/wtk/src/pivot/wtk/content/TreeViewNodeEditor.java (original)
+++ incubator/pivot/trunk/wtk/src/pivot/wtk/content/TreeViewNodeEditor.java Tue Mar 24 17:58:10 2009
@@ -22,8 +22,12 @@
import pivot.wtk.Bounds;
import pivot.wtk.Component;
import pivot.wtk.ComponentKeyListener;
+import pivot.wtk.Container;
+import pivot.wtk.ContainerMouseListener;
import pivot.wtk.Display;
+import pivot.wtk.Insets;
import pivot.wtk.Keyboard;
+import pivot.wtk.Mouse;
import pivot.wtk.Point;
import pivot.wtk.TextInput;
import pivot.wtk.TreeView;
@@ -60,6 +64,10 @@
}
public void windowOpened(Window window) {
+ // Add this as a container mouse listener on display
+ Display display = window.getDisplay();
+ display.getContainerMouseListeners().add(displayMouseHandler);
+
treeView.getTreeViewListeners().add(treeViewHandler);
treeView.getTreeViewBranchListeners().add(treeViewHandler);
treeView.getTreeViewNodeListeners().add(treeViewHandler);
@@ -76,6 +84,7 @@
public void windowClosed(Window window, Display display) {
// Clean up
+ display.getContainerMouseListeners().remove(displayMouseHandler);
treeView.getTreeViewListeners().remove(treeViewHandler);
treeView.getTreeViewBranchListeners().remove(treeViewHandler);
treeView.getTreeViewNodeListeners().remove(treeViewHandler);
@@ -142,6 +151,47 @@
};
/**
+ * Responsible for closing the popup whenever the user clicks outside the
+ * bounds of the popup.
+ *
+ * @author tvolkert
+ */
+ private ContainerMouseListener displayMouseHandler = new ContainerMouseListener() {
+ public void mouseMove(Container container, int x, int y) {
+ }
+
+ public void mouseDown(Container container, Mouse.Button button, int x, int y) {
+ // If the event did not occur within a window that is owned by
+ // this popup, close the popup
+ Display display = (Display)container;
+ Window window = (Window)display.getComponentAt(x, y);
+
+ if (popup != null
+ && (window == null
+ || !popup.isOwner(window))) {
+ popup.close();
+ }
+ }
+
+ public void mouseUp(Container container, Mouse.Button button, int x, int y) {
+ }
+
+ public void mouseWheel(Container container, Mouse.ScrollType scrollType,
+ int scrollAmount, int wheelRotation, int x, int y) {
+ // If the event did not occur within a window that is owned by
+ // this popup, close the popup
+ Display display = (Display)container;
+ Window window = (Window)display.getComponentAt(x, y);
+
+ if (popup != null
+ && (window == null
+ || !popup.isOwner(window))) {
+ popup.close();
+ }
+ }
+ };
+
+ /**
* Responsible for cancelling the edit if any relevant changes are made to
* the tree view while we're editing.
*/
@@ -261,40 +311,47 @@
List<?> treeData = treeView.getTreeData();
TreeNode nodeData = (TreeNode)Sequence.Tree.get(treeData, path);
+ // Calculate the bounds of the renderer within the tree view
+ Bounds rendererBounds = treeView.getNodeBounds(path);
+ int nodeIndent = treeView.getNodeIndent(path.getLength());
+ rendererBounds.x += nodeIndent;
+ rendererBounds.width -= nodeIndent;
+
// Render the data, enabling us to query the renderer for layout info
TreeViewNodeRenderer nodeRenderer = (TreeViewNodeRenderer)treeView.getNodeRenderer();
- Component textComponent = nodeRenderer.get(1);
nodeRenderer.render(nodeData, treeView, false, false,
TreeView.NodeCheckState.UNCHECKED, false, false);
+ nodeRenderer.setSize(rendererBounds.width, rendererBounds.height);
- // Calculate the indent to the node's text
- int textIndent = treeView.getNodeIndent(path.getLength());
- textIndent += textComponent.getX();
-
- // Calculate the bounds of the node's text
- Bounds textBounds = treeView.getNodeBounds(path);
- textBounds.x += textIndent;
- textBounds.width -= textIndent;
-
- // Scroll to make the text as visible as possible
- int textWidth = textComponent.getPreferredWidth(-1);
- treeView.scrollAreaToVisible(textBounds.x, textBounds.y, textWidth, textBounds.height);
-
- // Constrain the bounds by what is visible through Viewport ancestors
- treeView.constrainToViewportBounds(textBounds);
-
- TextInput textInput = new TextInput();
- textInput.setText(nodeData.getText());
- textInput.setPreferredWidth(textBounds.width);
- textInput.getComponentKeyListeners().add(textInputKeyHandler);
-
- popup = new Window(textInput, true);
- Point displayCoordinates = treeView.mapPointToAncestor(treeView.getDisplay(), 0, 0);
- popup.setLocation(displayCoordinates.x + textBounds.x, displayCoordinates.y +
- textBounds.y + (textBounds.height - textInput.getPreferredHeight(-1)) / 2);
- popup.getWindowStateListeners().add(popupStateHandler);
- popup.open(treeView.getWindow());
+ // Calculate the bounds of the text within the renderer
+ Bounds rendererTextBounds = nodeRenderer.getTextBounds();
- textInput.requestFocus();
+ if (rendererTextBounds != null) {
+ // Calculate the bounds of what we're editing
+ Bounds editBounds = new Bounds(rendererBounds);
+ editBounds.x += rendererTextBounds.x;
+ editBounds.width -= rendererTextBounds.x;
+
+ // Scroll to make the text as visible as possible
+ treeView.scrollAreaToVisible(editBounds.x, editBounds.y,
+ rendererTextBounds.width, editBounds.height);
+
+ // Constrain the bounds by what is visible through Viewport ancestors
+ treeView.constrainToViewportBounds(editBounds);
+
+ TextInput textInput = new TextInput();
+ textInput.setText(nodeData.getText());
+ textInput.setPreferredWidth(editBounds.width);
+ textInput.getComponentKeyListeners().add(textInputKeyHandler);
+
+ popup = new Window(textInput);
+ Point displayCoordinates = treeView.mapPointToAncestor(treeView.getDisplay(), 0, 0);
+ popup.setLocation(displayCoordinates.x + editBounds.x, displayCoordinates.y +
+ editBounds.y + (editBounds.height - textInput.getPreferredHeight(-1)) / 2);
+ popup.getWindowStateListeners().add(popupStateHandler);
+ popup.open(treeView.getWindow());
+
+ textInput.requestFocus();
+ }
}
}
Modified: incubator/pivot/trunk/wtk/src/pivot/wtk/content/TreeViewNodeRenderer.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/wtk/src/pivot/wtk/content/TreeViewNodeRenderer.java?rev=757925&r1=757924&r2=757925&view=diff
==============================================================================
--- incubator/pivot/trunk/wtk/src/pivot/wtk/content/TreeViewNodeRenderer.java (original)
+++ incubator/pivot/trunk/wtk/src/pivot/wtk/content/TreeViewNodeRenderer.java Tue Mar 24 17:58:10 2009
@@ -18,6 +18,7 @@
import java.awt.Color;
import java.awt.Font;
+import pivot.wtk.Bounds;
import pivot.wtk.Component;
import pivot.wtk.FlowPane;
import pivot.wtk.HorizontalAlignment;
@@ -165,4 +166,15 @@
public void setShowIcon(boolean showIcon) {
imageView.setDisplayable(showIcon);
}
+
+ /**
+ * Gets the bounds of the text that is rendered by this renderer.
+ *
+ * @return
+ * The bounds of the rendered text, or <tt>null</tt> if this renderer did
+ * not render any text.
+ */
+ public Bounds getTextBounds() {
+ return (label.isVisible() ? label.getBounds() : null);
+ }
}