Work on Tree

This commit is contained in:
Alexander Lobas
2012-02-21 13:59:18 +04:00
parent c1fc540869
commit 8eb0be03d7
3 changed files with 18 additions and 9 deletions
@@ -96,6 +96,9 @@ public final class ComponentTree extends Tree implements DataProvider {
return null;
}
public int getEdgeSize() {
return Math.max(5, ((JComponent)getCellRenderer()).getPreferredSize().height / 2 - 3);
}
private void installCellRenderer() {
setCellRenderer(new ColoredTreeCellRenderer() {
@@ -36,13 +36,17 @@ public final class ComponentTreeBuilder extends AbstractTreeBuilder implements C
public ComponentTreeBuilder(ComponentTree tree, DesignerEditorPanel designer) {
super(tree, (DefaultTreeModel)tree.getModel(), new TreeContentProvider(designer), null);
initRootNode();
myTreeSelectionModel = getTree().getSelectionModel();
mySurfaceArea = designer.getSurfaceArea();
myTreeArea = new TreeEditableArea(tree, this);
myGlassLayer = new TreeGlassLayer(tree, designer.getToolProvider(), myTreeArea);
// TODO: restore expanded state
select(mySurfaceArea.getSelection().toArray(), null);
addListeners();
}
@@ -184,14 +184,16 @@ public final class TreeEditableArea implements EditableArea, FeedbackTreeLayer {
@Override
public void mark(RadComponent component, int feedback) {
// TODO: INSERT_BEFORE - ensure visible up component
// TODO: INSERT_AFTER - ensure visible down component
if (component != null && feedback == INSERT_SELECTION) {
if (component != null) {
TreePath path = getPath(component);
myTree.scrollPathToVisible(path);
if (!myTree.isExpanded(path)) {
myTreeBuilder.expand(component, null);
if (feedback == INSERT_SELECTION) {
myTree.scrollPathToVisible(path);
if (!myTree.isExpanded(path)) {
myTreeBuilder.expand(component, null);
}
}
else {
myTree.scrollRowToVisible(myTree.getRowForPath(path) + (feedback == INSERT_BEFORE ? -1 : 1));
}
}
myTree.mark(component, feedback);
@@ -200,12 +202,12 @@ public final class TreeEditableArea implements EditableArea, FeedbackTreeLayer {
@Override
public boolean isBeforeLocation(RadComponent component, int x, int y) {
Rectangle bounds = myTree.getPathBounds(getPath(component));
return bounds != null && y - bounds.y < 15;
return bounds != null && y - bounds.y < myTree.getEdgeSize();
}
@Override
public boolean isAfterLocation(RadComponent component, int x, int y) {
Rectangle bounds = myTree.getPathBounds(getPath(component));
return bounds != null && bounds.getMaxY() - y < 15;
return bounds != null && bounds.getMaxY() - y < myTree.getEdgeSize();
}
}