From bbac1917066a66fa4ce4f1d8d35c0ea858cf2382 Mon Sep 17 00:00:00 2001 From: Savva Kolbechev Date: Mon, 25 Aug 2014 12:22:22 +0300 Subject: [PATCH] CAY-1841 Filters for Left-hand project navigator Fix: *Horizontal scroll (due to the long entity names) should not include the toolbar. *When a tree is collapsed, and we check one of the previously excluded options, currently the tree is made to expand. I think it should stay collapsed. --- .../cayenne/modeler/ProjectTreeModel.java | 64 +++++++---------- .../dialog/datadomain/FilterDialog.java | 6 +- .../cayenne/modeler/editor/EditorView.java | 68 ++++++++++--------- 3 files changed, 65 insertions(+), 73 deletions(-) diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ProjectTreeModel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ProjectTreeModel.java index 1d75b82100..8a26199e00 100644 --- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ProjectTreeModel.java +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ProjectTreeModel.java @@ -19,14 +19,6 @@ package org.apache.cayenne.modeler; -import java.util.Comparator; -import java.util.Enumeration; -import java.util.HashMap; - -import javax.swing.tree.DefaultMutableTreeNode; -import javax.swing.tree.DefaultTreeModel; -import javax.swing.tree.MutableTreeNode; - import org.apache.cayenne.configuration.DataNodeDescriptor; import org.apache.cayenne.map.DataMap; import org.apache.cayenne.map.DbEntity; @@ -36,6 +28,13 @@ import org.apache.cayenne.project.Project; import org.apache.cayenne.query.Query; +import javax.swing.tree.DefaultMutableTreeNode; +import javax.swing.tree.DefaultTreeModel; +import javax.swing.tree.MutableTreeNode; +import java.util.Comparator; +import java.util.Enumeration; +import java.util.HashMap; + /** * ProjectTreeModel is a model of Cayenne project tree. @@ -119,7 +118,7 @@ public void positionNode( insertNodeInto(treeNode, parent, ins); } catch(NullPointerException e){ - + } } } @@ -166,63 +165,52 @@ public DefaultMutableTreeNode getNodeForObjectPath(Object[] path) { return currentNode; } - - + + public void setFiltered(HashMap filterMap) { - filter.setFilterMap(filterMap); - Object[] path = {root}; - int[] childIndices = new int[root.getChildCount()]; - Object[] children = new Object[root.getChildCount()]; - - for (int i = 0; i < root.getChildCount(); i++) { - childIndices[i] = i; - children[i] = root.getChildAt(i); - } - - fireTreeStructureChanged(this,path,childIndices, children); } - - + + public int getChildCount(Object parent) { int realCount = super.getChildCount(parent), filterCount =0; - + for (int i=0; i filterMap; boolean pass=true; - + public void setFilterMap(HashMap filterMap) { this.filterMap=filterMap; pass=false; } - - public boolean pass(Object obj) { + + public boolean pass(Object obj) { Object root = ((DefaultMutableTreeNode) obj).getUserObject(); Object firstLeaf = ((DefaultMutableTreeNode) obj).getFirstLeaf().getUserObject(); - + return ((pass) || (root instanceof DataMap) || (root instanceof DataNodeDescriptor) || @@ -232,9 +220,9 @@ public boolean pass(Object obj) { (firstLeaf instanceof Query && filterMap.get("query")) || (firstLeaf instanceof Procedure && filterMap.get("procedure"))); } - - public boolean isFiltered() { - return pass; + + public boolean isFiltered() { + return pass; } - } + } } \ No newline at end of file diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/datadomain/FilterDialog.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/datadomain/FilterDialog.java index bb05266340..3693580cf2 100644 --- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/datadomain/FilterDialog.java +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/datadomain/FilterDialog.java @@ -149,7 +149,7 @@ public void actionPerformed(ActionEvent e) { all.setEnabled(false); filterController.getTreeModel().setFiltered(filterController.getFilterMap()); - filterController.treeExpOrCollPath("expand"); + filterController.getTree().updateUI(); } }); } @@ -189,8 +189,8 @@ public CheckListener(String key) { public void actionPerformed(ActionEvent e) { filterController.getFilterMap().put(key, ((JCheckBoxMenuItem)e.getSource()).isSelected()); filterController.getTreeModel().setFiltered(filterController.getFilterMap()); - filterController.treeExpOrCollPath("expand"); - checkAllStates(); + filterController.getTree().updateUI(); + checkAllStates(); } } diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/EditorView.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/EditorView.java index 0241aebd15..3b1749febe 100644 --- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/EditorView.java +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/EditorView.java @@ -19,20 +19,6 @@ package org.apache.cayenne.modeler.editor; -import java.awt.BorderLayout; -import java.awt.CardLayout; -import java.awt.Component; -import java.awt.Container; -import java.awt.Dimension; - -import javax.swing.Action; -import javax.swing.Box; -import javax.swing.JPanel; -import javax.swing.JScrollPane; -import javax.swing.JSplitPane; -import javax.swing.JTabbedPane; -import javax.swing.JToolBar; - import org.apache.cayenne.modeler.Application; import org.apache.cayenne.modeler.ProjectController; import org.apache.cayenne.modeler.ProjectTreeView; @@ -67,6 +53,21 @@ import org.apache.cayenne.query.SelectQuery; import org.apache.commons.logging.LogFactory; +import javax.swing.Action; +import javax.swing.BorderFactory; +import javax.swing.JButton; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JSplitPane; +import javax.swing.JTabbedPane; +import java.awt.BorderLayout; +import java.awt.CardLayout; +import java.awt.Color; +import java.awt.Component; +import java.awt.Container; +import java.awt.Dimension; +import java.awt.FlowLayout; + /** * Main display area split into the project navigation tree on the left and selected * object editor on the right. @@ -91,6 +92,7 @@ public class EditorView extends JPanel implements ObjEntityDisplayListener, protected ProjectController eventController; protected JSplitPane splitPane; + protected JPanel leftPanel; protected Container detailPanel; protected CardLayout detailLayout; private ProjectTreeView treePanel; @@ -177,30 +179,30 @@ public ProjectController getEventController() { private void initView() { // init widgets - treePanel = new ProjectTreeView(eventController); - JToolBar bar = new JToolBar(); - - bar.setPreferredSize(new Dimension(100,30)); - - bar.add(Box.createHorizontalGlue()); - bar.add(getAction(CollapseTreeAction.class).buildButton()); - bar.add(getAction(FilterAction.class).buildButton()); + JButton collapseButton = getAction(CollapseTreeAction.class).buildButton(); + collapseButton.setPreferredSize(new Dimension(35, 30)); + JButton filterButton = getAction(FilterAction.class).buildButton(); + filterButton.setPreferredSize(new Dimension(35, 30)); actionManager.getAction(CollapseTreeAction.class).setAlwaysOn(true); actionManager.getAction(FilterAction.class).setAlwaysOn(true); - - JPanel treeNavigatePanel = new JPanel(); - treeNavigatePanel.setMinimumSize(new Dimension(50,200)); + + JPanel barPanel = new JPanel(true); + barPanel.setMinimumSize(new Dimension(75, 33)); + barPanel.setLayout(new FlowLayout(FlowLayout.TRAILING, 1, 0)); + barPanel.add(collapseButton); + barPanel.add(filterButton); + barPanel.setBorder(BorderFactory.createLineBorder(Color.gray)); + + treePanel = new ProjectTreeView(eventController); + treePanel.setMinimumSize(new Dimension(75, 180)); + JPanel treeNavigatePanel = new JPanel(); + treeNavigatePanel.setMinimumSize(new Dimension(75, 220)); treeNavigatePanel.setLayout(new BorderLayout()); - treeNavigatePanel.add(bar, BorderLayout.NORTH); treeNavigatePanel.add(treePanel, BorderLayout.CENTER); - - - treePanel.setMinimumSize(new Dimension(50, 180)); - this.detailPanel = new JPanel(); this.splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, true); - + this.leftPanel = new JPanel(new BorderLayout()); // assemble... this.detailLayout = new CardLayout(); @@ -247,7 +249,9 @@ private void initView() { dbDetailView = new DbEntityTabbedView(eventController); detailPanel.add(dbDetailView, DB_VIEW); - splitPane.setLeftComponent(new JScrollPane(treeNavigatePanel)); + leftPanel.add(barPanel, BorderLayout.NORTH); + leftPanel.add(new JScrollPane(treeNavigatePanel), BorderLayout.CENTER); + splitPane.setLeftComponent(leftPanel); splitPane.setRightComponent(detailPanel); setLayout(new BorderLayout());