You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by aa...@apache.org on 2013/08/19 21:05:10 UTC
svn commit: r1515560 - in
/cayenne/main/trunk/modeler/cayenne-modeler/src/main:
java/org/apache/cayenne/modeler/ java/org/apache/cayenne/modeler/action/
java/org/apache/cayenne/modeler/dialog/datadomain/
java/org/apache/cayenne/modeler/editor/ resource...
Author: aadamchik
Date: Mon Aug 19 19:05:10 2013
New Revision: 1515560
URL: http://svn.apache.org/r1515560
Log:
CAY-1841 Filters for Left-hand project navigator (kind of like Eclipse panel filters) to show/hide everything/objentities/dbentities/queries
patch by Ilya Vasiuk (original by Artiom Kravchenko)
Added:
cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CollapseTreeAction.java
cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/ExpandTreeAction.java
cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/FilterAction.java
cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/datadomain/FilterController.java
cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/datadomain/FilterDialog.java
cayenne/main/trunk/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-filter.png
cayenne/main/trunk/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-tree-collapse.png
cayenne/main/trunk/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-tree-expand.png
Modified:
cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CayenneModelerController.java
cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ProjectTreeModel.java
cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ProjectTreeView.java
cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/DefaultActionManager.java
cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/EditorView.java
Modified: cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CayenneModelerController.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CayenneModelerController.java?rev=1515560&r1=1515559&r2=1515560&view=diff
==============================================================================
--- cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CayenneModelerController.java (original)
+++ cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CayenneModelerController.java Mon Aug 19 19:05:10 2013
@@ -60,6 +60,7 @@ public class CayenneModelerController ex
protected ProjectController projectController;
protected CayenneModelerFrame frame;
+ private EditorView editorView;
public CayenneModelerController(){}
@@ -211,7 +212,8 @@ public class CayenneModelerController ex
projectController.setProject(project);
- frame.setView(new EditorView(projectController));
+ editorView = new EditorView(projectController);
+ frame.setView(editorView);
projectController.projectOpened();
application.getActionManager().projectOpened();
@@ -260,7 +262,11 @@ public class CayenneModelerController ex
}
}
- /** Adds path to the list of last opened projects in preferences. */
+ public EditorView getEditorView() {
+ return editorView;
+ }
+
+ /** Adds path to the list of last opened projects in preferences. */
public void addToLastProjListAction(String path) {
Preferences frefLastProjFiles = ModelerPreferences.getLastProjFilesPref();
@@ -359,4 +365,6 @@ public class CayenneModelerController ex
getLastDirectory().setDirectory(new File(newPath));
frame.fireRecentFileListChanged();
}
+
+
}
Modified: cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ProjectTreeModel.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ProjectTreeModel.java?rev=1515560&r1=1515559&r2=1515560&view=diff
==============================================================================
--- cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ProjectTreeModel.java (original)
+++ cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ProjectTreeModel.java Mon Aug 19 19:05:10 2013
@@ -21,20 +21,30 @@ 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;
+import org.apache.cayenne.map.Embeddable;
+import org.apache.cayenne.map.ObjEntity;
+import org.apache.cayenne.map.Procedure;
import org.apache.cayenne.project.Project;
+import org.apache.cayenne.query.Query;
+
/**
* ProjectTreeModel is a model of Cayenne project tree.
*/
public class ProjectTreeModel extends DefaultTreeModel {
-
- /**
+ private Filter filter=new Filter();
+
+ /**
* Constructor for ProjectTreeModel.
*/
public ProjectTreeModel(Project project) {
@@ -104,9 +114,13 @@ public class ProjectTreeModel extends De
ins--;
}
}
-
+ try{
// insert
insertNodeInto(treeNode, parent, ins);
+ }
+ catch(NullPointerException e){
+
+ }
}
}
@@ -152,4 +166,75 @@ public class ProjectTreeModel extends De
return currentNode;
}
-}
+
+
+ public void setFiltered(HashMap<String,Boolean> 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<realCount; i++) {
+ DefaultMutableTreeNode dmtn = (DefaultMutableTreeNode)super.getChild(parent,i);
+ if (filter.pass(dmtn)) {
+ filterCount++;
+ }
+ }
+ return filterCount;
+ }
+
+ public Object getChild(Object parent, int index) {
+ int cnt=-1;
+ for (int i=0; i<super.getChildCount(parent); i++) {
+ Object child = super.getChild(parent,i);
+ if (filter.pass(child)) {
+ cnt++;
+ }
+ if (cnt==index) {
+ return child;
+ }
+ }
+ return null;
+ }
+
+ class Filter {
+ private HashMap<String, Boolean> filterMap;
+ boolean pass=true;
+
+ public void setFilterMap(HashMap<String, Boolean> filterMap) {
+ this.filterMap=filterMap;
+ pass=false;
+ }
+
+ public boolean pass(Object obj) {
+ Object root = ((DefaultMutableTreeNode) obj).getUserObject();
+ Object firstLeaf = ((DefaultMutableTreeNode) obj).getFirstLeaf().getUserObject();
+
+ return ((pass) ||
+ (root instanceof DataMap) ||
+ (root instanceof DataNodeDescriptor) ||
+ (firstLeaf instanceof DbEntity && filterMap.get("dbEntity")) ||
+ (firstLeaf instanceof ObjEntity && filterMap.get("objEntity")) ||
+ (firstLeaf instanceof Embeddable && filterMap.get("embeddable")) ||
+ (firstLeaf instanceof Query && filterMap.get("query")) ||
+ (firstLeaf instanceof Procedure && filterMap.get("procedure")));
+ }
+
+ public boolean isFiltered() {
+ return pass;
+ }
+ }
+}
\ No newline at end of file
Modified: cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ProjectTreeView.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ProjectTreeView.java?rev=1515560&r1=1515559&r2=1515560&view=diff
==============================================================================
--- cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ProjectTreeView.java (original)
+++ cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ProjectTreeView.java Mon Aug 19 19:05:10 2013
@@ -204,7 +204,7 @@ public class ProjectTreeView extends JTr
/**
* Returns tree model cast to ProjectTreeModel.
*/
- ProjectTreeModel getProjectModel() {
+ public ProjectTreeModel getProjectModel() {
return (ProjectTreeModel) getModel();
}
Added: cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CollapseTreeAction.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CollapseTreeAction.java?rev=1515560&view=auto
==============================================================================
--- cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CollapseTreeAction.java (added)
+++ cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CollapseTreeAction.java Mon Aug 19 19:05:10 2013
@@ -0,0 +1,27 @@
+package org.apache.cayenne.modeler.action;
+
+import java.awt.event.ActionEvent;
+
+import org.apache.cayenne.modeler.Application;
+import org.apache.cayenne.modeler.util.CayenneAction;
+
+public class CollapseTreeAction extends CayenneAction {
+ private final static String COLLAPSE = "collapse";
+
+ public static String getActionName() {
+ return "Collapse tree";
+ }
+
+ public String getIconName() {
+ return "icon-tree-collapse.png";
+ }
+
+ public CollapseTreeAction(Application application) {
+ super(getActionName(), application);
+ }
+
+ @Override
+ public void performAction(ActionEvent e) {
+ getApplication().getFrameController().getEditorView().getFilterController().treeExpOrCollPath(COLLAPSE);
+ }
+}
Modified: cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/DefaultActionManager.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/DefaultActionManager.java?rev=1515560&r1=1515559&r2=1515560&view=diff
==============================================================================
--- cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/DefaultActionManager.java (original)
+++ cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/DefaultActionManager.java Mon Aug 19 19:05:10 2013
@@ -132,6 +132,10 @@ public class DefaultActionManager implem
registerAction(new CreateEmbeddableAction(application));
registerAction(new ShowGraphEntityAction(application));
+
+ registerAction(new CollapseTreeAction(application));
+ registerAction(new ExpandTreeAction(application));
+ registerAction(new FilterAction(application));
}
private void initActions() {
Added: cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/ExpandTreeAction.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/ExpandTreeAction.java?rev=1515560&view=auto
==============================================================================
--- cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/ExpandTreeAction.java (added)
+++ cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/ExpandTreeAction.java Mon Aug 19 19:05:10 2013
@@ -0,0 +1,29 @@
+package org.apache.cayenne.modeler.action;
+
+import java.awt.event.ActionEvent;
+
+import org.apache.cayenne.modeler.Application;
+
+import org.apache.cayenne.modeler.util.CayenneAction;
+
+public class ExpandTreeAction extends CayenneAction {
+ private final static String EXPAND = "expand";
+
+ public static String getActionName() {
+ return "Expand tree";
+ }
+
+ @Override
+ public String getIconName() {
+ return "icon-tree-expand.png";
+ }
+
+ public ExpandTreeAction(Application application) {
+ super(getActionName(), application);
+ }
+
+ @Override
+ public void performAction(ActionEvent e) {
+ getApplication().getFrameController().getEditorView().getFilterController().treeExpOrCollPath(EXPAND);
+ }
+}
Added: cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/FilterAction.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/FilterAction.java?rev=1515560&view=auto
==============================================================================
--- cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/FilterAction.java (added)
+++ cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/FilterAction.java Mon Aug 19 19:05:10 2013
@@ -0,0 +1,36 @@
+package org.apache.cayenne.modeler.action;
+
+import java.awt.event.ActionEvent;
+
+import javax.swing.JButton;
+import org.apache.cayenne.modeler.Application;
+
+import org.apache.cayenne.modeler.dialog.datadomain.FilterDialog;
+import org.apache.cayenne.modeler.util.CayenneAction;
+
+public class FilterAction extends CayenneAction{
+
+ private FilterDialog filterDialog = null;
+
+ public static String getActionName() {
+ return "Filter tree";
+ }
+
+ public FilterAction(Application application) {
+ super(getActionName(), application);
+ }
+
+ @Override
+ public String getIconName() {
+ return "icon-filter.png";
+ }
+
+ @Override
+ public void performAction(ActionEvent e) {
+ JButton source = (JButton)e.getSource();
+ if(filterDialog == null)
+ filterDialog = new FilterDialog(getApplication().getFrameController().getEditorView().getFilterController());
+ filterDialog.pack();
+ filterDialog.show(source, 0, source.getHeight());
+ }
+}
\ No newline at end of file
Added: cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/datadomain/FilterController.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/datadomain/FilterController.java?rev=1515560&view=auto
==============================================================================
--- cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/datadomain/FilterController.java (added)
+++ cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/datadomain/FilterController.java Mon Aug 19 19:05:10 2013
@@ -0,0 +1,74 @@
+package org.apache.cayenne.modeler.dialog.datadomain;
+
+import java.util.Enumeration;
+import java.util.HashMap;
+
+import javax.swing.JTree;
+import javax.swing.tree.TreeNode;
+import javax.swing.tree.TreePath;
+
+import org.apache.cayenne.modeler.ProjectController;
+import org.apache.cayenne.modeler.ProjectTreeModel;
+import org.apache.cayenne.modeler.ProjectTreeView;
+
+public class FilterController {
+
+ private HashMap<String,Boolean> filterMap = new HashMap<String, Boolean>();
+ private ProjectTreeView tree;
+ private ProjectController eventController;
+ private ProjectTreeModel treeModel;
+
+ public ProjectTreeView getTree() {
+ return tree;
+ }
+
+ public ProjectTreeModel getTreeModel() {
+ return treeModel;
+ }
+
+ public ProjectController getEventController() {
+ return eventController;
+ }
+
+ public HashMap<String, Boolean> getFilterMap() {
+ return filterMap;
+ }
+
+ public FilterController(ProjectController eventController, ProjectTreeView treePanel) {
+
+ this.eventController = eventController;
+ this.tree = treePanel;
+ this.treeModel = tree.getProjectModel();
+
+ filterMap.put("dbEntity",true);
+ filterMap.put("objEntity",true);
+ filterMap.put("embeddable",true);
+ filterMap.put("procedure",true);
+ filterMap.put("query",true);
+ }
+
+
+ public void treeExpOrCollPath(String action) {
+ TreeNode root = (TreeNode) treeModel.getRoot();
+ expandAll(tree, new TreePath(root),action);
+ }
+
+ private void expandAll(JTree tree, TreePath parent, String action) {
+ TreeNode node = (TreeNode) parent.getLastPathComponent();
+
+ if (node.getChildCount() >= 0) {
+ for (Enumeration e = node.children(); e.hasMoreElements();) {
+ TreeNode n = (TreeNode) e.nextElement();
+ TreePath path = parent.pathByAddingChild(n);
+ expandAll(tree, path, action);
+ }
+ }
+ if(action == "expand") {
+ tree.expandPath(parent);
+ }
+ else if(action == "collapse") {
+ tree.collapsePath(parent);
+ }
+ }
+
+}
\ No newline at end of file
Added: cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/datadomain/FilterDialog.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/datadomain/FilterDialog.java?rev=1515560&view=auto
==============================================================================
--- cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/datadomain/FilterDialog.java (added)
+++ cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/datadomain/FilterDialog.java Mon Aug 19 19:05:10 2013
@@ -0,0 +1,204 @@
+package org.apache.cayenne.modeler.dialog.datadomain;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.Set;
+
+import javax.swing.JCheckBoxMenuItem;
+import javax.swing.JComponent;
+import javax.swing.JPopupMenu;
+import javax.swing.JSeparator;
+import javax.swing.MenuSelectionManager;
+import javax.swing.plaf.ComponentUI;
+import javax.swing.plaf.basic.BasicCheckBoxMenuItemUI;
+
+import org.apache.cayenne.modeler.ProjectController;
+import org.apache.cayenne.swing.BindingBuilder;
+
+public class FilterDialog extends JPopupMenu {
+
+ private String SELECT_ALL = "Select all";
+ private String UNSELECT_ALL = "Unselect all";
+
+ private JCheckBoxMenuItem dbEntity;
+ private JCheckBoxMenuItem objEntity;
+ private JCheckBoxMenuItem embeddable;
+ private JCheckBoxMenuItem procedure;
+ private JCheckBoxMenuItem query;
+ private JCheckBoxMenuItem all;
+ private ProjectController eventController;
+ private FilterController filterController;
+
+ public Boolean getDbEntityFilter() {
+ return filterController.getFilterMap().get("dbEntity");
+ }
+ public void setDbEntityFilter(Boolean value) {
+ filterController.getFilterMap().put("dbEntity", value);
+ }
+
+ public Boolean getObjEntityFilter() {
+ return filterController.getFilterMap().get("objEntity");
+ }
+
+ public void setObjEntityFilter(Boolean value) {
+ filterController.getFilterMap().put("objEntity", value);
+ }
+
+ public Boolean getEmbeddableFilter() {
+ return filterController.getFilterMap().get("embeddable");
+ }
+ public void setEmbeddableFilter(Boolean value) {
+ filterController.getFilterMap().put("embeddable", value);
+ }
+
+ public Boolean getProcedureFilter() {
+ return filterController.getFilterMap().get("procedure");
+ }
+
+ public void setProcedureFilter(Boolean value) {
+ filterController.getFilterMap().put("procedure", value);
+ }
+
+ public Boolean getQueryFilter() {
+ return filterController.getFilterMap().get("query");
+ }
+ public void setQueryFilter(Boolean value) {
+ filterController.getFilterMap().put("query", value);
+ }
+
+ public Boolean getAllFilter() {
+ Set<String> keys=filterController.getFilterMap().keySet();
+
+ for(String key : keys) {
+ if(filterController.getFilterMap().get(key) != true) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ public void setAllFilter(Boolean value) {
+
+ }
+
+ public FilterDialog(FilterController filterController){
+ super();
+ this.filterController=filterController;
+ this.eventController=filterController.getEventController();
+ initView();
+ initController();
+ }
+
+ public void initView(){
+
+ all = new JCheckBoxMenuItem(UNSELECT_ALL);
+ dbEntity = new JCheckBoxMenuItem("DbEntity");
+ objEntity = new JCheckBoxMenuItem("ObjEntity");
+ embeddable = new JCheckBoxMenuItem("Embeddable");
+ procedure = new JCheckBoxMenuItem("Procedure");
+ query = new JCheckBoxMenuItem("Query");
+
+ all.setUI(new StayOpenCheckBoxMenuItemUI());
+ dbEntity.setUI(new StayOpenCheckBoxMenuItemUI());
+ objEntity.setUI(new StayOpenCheckBoxMenuItemUI());
+ embeddable.setUI(new StayOpenCheckBoxMenuItemUI());
+ procedure.setUI(new StayOpenCheckBoxMenuItemUI());
+ query.setUI(new StayOpenCheckBoxMenuItemUI());
+
+ add(all);
+ add(new JSeparator());
+ add(dbEntity);
+ add(objEntity);
+ add(embeddable);
+ add(procedure);
+ add(query);
+ }
+
+ private void initController() {
+ BindingBuilder builder = new BindingBuilder(
+ eventController.getApplication().getBindingFactory(),
+ this);
+
+ builder.bindToStateChange(dbEntity, "dbEntityFilter").updateView();
+ builder.bindToStateChange(objEntity, "objEntityFilter").updateView();
+ builder.bindToStateChange(embeddable, "embeddableFilter").updateView();
+ builder.bindToStateChange(procedure, "procedureFilter").updateView();
+ builder.bindToStateChange(query, "queryFilter").updateView();
+ builder.bindToStateChange(all, "allFilter").updateView();
+
+ dbEntity.addActionListener(new CheckListener("dbEntity"));
+ objEntity.addActionListener(new CheckListener("objEntity"));
+ embeddable.addActionListener(new CheckListener("embeddable"));
+ procedure.addActionListener(new CheckListener("procedure"));
+ query.addActionListener(new CheckListener("query"));
+
+ all.addActionListener(new ActionListener() {
+
+ public void actionPerformed(ActionEvent e) {
+ dbEntity.setState(all.getState());
+ objEntity.setState(all.getState());
+ embeddable.setState(all.getState());
+ procedure.setState(all.getState());
+ query.setState(all.getState());
+ all.setText(all.getState() ? UNSELECT_ALL : SELECT_ALL);
+
+ filterController.getTreeModel().setFiltered(filterController.getFilterMap());
+ filterController.treeExpOrCollPath("expand");
+ }
+ });
+ }
+
+ void checkAllStates() {
+ if(isAll(true)) {
+ all.setState(false);
+ all.setText(SELECT_ALL);
+ }
+ else if(isAll(false)) {
+ all.setState(true);
+ all.setText(UNSELECT_ALL);
+ }
+ }
+
+ private boolean isAll(boolean state) {
+ Set<String> keys=filterController.getFilterMap().keySet();
+
+ for(String key : keys) {
+ if(filterController.getFilterMap().get(key) == state) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+
+ private class CheckListener implements ActionListener {
+
+ String key;
+
+ public CheckListener(String key) {
+ this.key = key;
+ }
+
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ filterController.getFilterMap().put(key, ((JCheckBoxMenuItem)e.getSource()).getState());
+ filterController.getTreeModel().setFiltered(filterController.getFilterMap());
+ filterController.treeExpOrCollPath("expand");
+ checkAllStates();
+ }
+ }
+
+ public static class StayOpenCheckBoxMenuItemUI extends BasicCheckBoxMenuItemUI {
+
+ @Override
+ protected void doClick(MenuSelectionManager msm) {
+ menuItem.doClick();
+ }
+
+ public static ComponentUI createUI(JComponent c) {
+ return new StayOpenCheckBoxMenuItemUI();
+ }
+ }
+}
\ No newline at end of file
Modified: cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/EditorView.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/EditorView.java?rev=1515560&r1=1515559&r2=1515560&view=diff
==============================================================================
--- cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/EditorView.java (original)
+++ cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/EditorView.java Mon Aug 19 19:05:10 2013
@@ -25,14 +25,22 @@ 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;
+import org.apache.cayenne.modeler.action.ActionManager;
+import org.apache.cayenne.modeler.action.CollapseTreeAction;
+import org.apache.cayenne.modeler.action.ExpandTreeAction;
+import org.apache.cayenne.modeler.action.FilterAction;
+import org.apache.cayenne.modeler.dialog.datadomain.FilterController;
import org.apache.cayenne.modeler.editor.datanode.DataNodeEditor;
import org.apache.cayenne.modeler.editor.dbentity.DbEntityTabbedView;
import org.apache.cayenne.modeler.event.DataMapDisplayEvent;
@@ -98,8 +106,16 @@ public class EditorView extends JPanel i
private SQLTemplateTabbedView sqlTemplateView;
private EjbqlTabbedView ejbqlQueryView;
private JTabbedPane dataNodeView;
+
- public SelectQueryTabbedView getSelectQueryView() {
+ protected ActionManager actionManager;
+ private FilterController filterController;
+
+ public FilterController getFilterController() {
+ return filterController;
+ }
+
+ public SelectQueryTabbedView getSelectQueryView() {
return selectQueryView;
}
@@ -142,19 +158,50 @@ public class EditorView extends JPanel i
public JTabbedPane getDataNodeView() {
return dataNodeView;
}
+
+ public ProjectTreeView getTreePanel() {
+ return treePanel;
+ }
public EditorView(ProjectController eventController) {
this.eventController = eventController;
+ this.actionManager= eventController.getApplication().getActionManager();
initView();
initController();
+
}
- private void initView() {
+ public ProjectController getEventController() {
+ return eventController;
+ }
- // init widgets
- treePanel = new ProjectTreeView(eventController);
- treePanel.setMinimumSize(new Dimension(50, 200));
+ private void initView() {
+ // init widgets
+ treePanel = new ProjectTreeView(eventController);
+ JToolBar bar = new JToolBar();
+
+ bar.setFloatable(false);
+ bar.setPreferredSize(new Dimension(100,30));
+
+ bar.add(Box.createHorizontalGlue());
+ bar.add(getAction(ExpandTreeAction.class).buildButton());
+ bar.add(getAction(CollapseTreeAction.class).buildButton());
+ bar.add(getAction(FilterAction.class).buildButton());
+ actionManager.getAction(ExpandTreeAction.class).setAlwaysOn(true);
+ actionManager.getAction(CollapseTreeAction.class).setAlwaysOn(true);
+ actionManager.getAction(FilterAction.class).setAlwaysOn(true);
+
+ JPanel treeNavigatePanel = new JPanel();
+ treeNavigatePanel.setMinimumSize(new Dimension(50,200));
+ 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);
@@ -204,14 +251,23 @@ public class EditorView extends JPanel i
dbDetailView = new DbEntityTabbedView(eventController);
detailPanel.add(dbDetailView, DB_VIEW);
- splitPane.setLeftComponent(new JScrollPane(treePanel));
+ splitPane.setLeftComponent(new JScrollPane(treeNavigatePanel));
splitPane.setRightComponent(detailPanel);
setLayout(new BorderLayout());
add(splitPane, BorderLayout.CENTER);
+
+
}
+
+ private <T extends Action> T getAction(Class<T> type) {
+ return actionManager.getAction(type);
+ }
+
- private void initController() {
+ private void initController() {
+ this.filterController = new FilterController(eventController,treePanel);
+
eventController.addDomainDisplayListener(this);
eventController.addDataNodeDisplayListener(this);
eventController.addDataMapDisplayListener(this);
@@ -221,7 +277,7 @@ public class EditorView extends JPanel i
eventController.addQueryDisplayListener(this);
eventController.addMultipleObjectsDisplayListener(this);
eventController.addEmbeddableDisplayListener(this);
-
+
/**
* Moving this to try-catch block per CAY-940. Exception will be stack-traced
*/
@@ -312,4 +368,4 @@ public class EditorView extends JPanel i
else
detailLayout.show(detailPanel, EMBEDDABLE_VIEW);
}
-}
+}
\ No newline at end of file
Added: cayenne/main/trunk/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-filter.png
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-filter.png?rev=1515560&view=auto
==============================================================================
Files cayenne/main/trunk/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-filter.png (added) and cayenne/main/trunk/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-filter.png Mon Aug 19 19:05:10 2013 differ
Added: cayenne/main/trunk/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-tree-collapse.png
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-tree-collapse.png?rev=1515560&view=auto
==============================================================================
Files cayenne/main/trunk/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-tree-collapse.png (added) and cayenne/main/trunk/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-tree-collapse.png Mon Aug 19 19:05:10 2013 differ
Added: cayenne/main/trunk/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-tree-expand.png
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-tree-expand.png?rev=1515560&view=auto
==============================================================================
Files cayenne/main/trunk/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-tree-expand.png (added) and cayenne/main/trunk/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-tree-expand.png Mon Aug 19 19:05:10 2013 differ