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 2008/12/24 16:11:59 UTC

svn commit: r729319 - in /cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler: CayenneModelerFrame.java action/FindAction.java dialog/FindDialog.java dialog/FindDialogView.java

Author: aadamchik
Date: Wed Dec 24 07:11:59 2008
New Revision: 729319

URL: http://svn.apache.org/viewvc?rev=729319&view=rev
Log:
CAY-1156 Modeler search improvement

Modified:
    cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CayenneModelerFrame.java
    cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/FindAction.java
    cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/FindDialog.java
    cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/FindDialogView.java

Modified: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CayenneModelerFrame.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CayenneModelerFrame.java?rev=729319&r1=729318&r2=729319&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CayenneModelerFrame.java (original)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CayenneModelerFrame.java Wed Dec 24 07:11:59 2008
@@ -22,12 +22,14 @@
 
 import java.awt.AWTEvent;
 import java.awt.BorderLayout;
+import java.awt.Color;
 import java.awt.Component;
 import java.awt.FlowLayout;
 import java.awt.Font;
 import java.awt.Toolkit;
 import java.awt.event.AWTEventListener;
 import java.awt.event.KeyEvent;
+import java.awt.event.KeyListener;
 import java.util.List;
 import java.util.Vector;
 
@@ -365,18 +367,40 @@
 
         JPanel east = new JPanel(new BorderLayout());   // is used to place search feature components the most right on a toolbar  
         final JTextField findField = new JTextField(10);
+        findField.addKeyListener(new KeyListener(){
+
+            public void keyPressed(KeyEvent e) {
+                if (e.getKeyCode() != KeyEvent.VK_ENTER){
+                     findField.setBackground(Color.white);
+                }
+            }
+
+            public void keyReleased(KeyEvent e) {
+            }
+
+            public void keyTyped(KeyEvent e) {
+            }
+            
+        });
         findField.setAction(getAction(FindAction.getActionName()));
         JLabel findLabel = new JLabel("Search:");
         findLabel.setLabelFor(findField);
         Toolkit.getDefaultToolkit().addAWTEventListener(new AWTEventListener() {
             public void eventDispatched(AWTEvent event) {
+               
+                
                 if (event instanceof KeyEvent) {
-                    if (((KeyEvent) event).getModifiers() == Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()
-                            && ((KeyEvent) event).getKeyCode() == KeyEvent.VK_F)
-                                findField.requestFocus();
-                }
-            }
+                   
+                   if (((KeyEvent) event).getModifiers() == Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()
+                            && ((KeyEvent) event).getKeyCode() == KeyEvent.VK_F){                               
+                               findField.requestFocus();                               
+                   }                    
+                }                      
+            }    
+            
         }, AWTEvent.KEY_EVENT_MASK);
+        
+        
         JPanel box = new JPanel();  // is used to place label and text field one after another
         box.setLayout(new BoxLayout(box, BoxLayout.X_AXIS));
         box.add(findLabel);

Modified: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/FindAction.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/FindAction.java?rev=729319&r1=729318&r2=729319&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/FindAction.java (original)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/FindAction.java Wed Dec 24 07:11:59 2008
@@ -18,6 +18,7 @@
  ****************************************************************/
 package org.apache.cayenne.modeler.action;
 
+import java.awt.Color;
 import java.awt.event.ActionEvent;
 import java.util.ArrayList;
 import java.util.Iterator;
@@ -41,13 +42,8 @@
 import org.apache.cayenne.map.Relationship;
 import org.apache.cayenne.modeler.Application;
 import org.apache.cayenne.modeler.CayenneModelerFrame;
-import org.apache.cayenne.modeler.ProjectTreeModel;
 import org.apache.cayenne.modeler.dialog.FindDialog;
-import org.apache.cayenne.modeler.dialog.FindDialogView;
 import org.apache.cayenne.modeler.editor.EditorView;
-import org.apache.cayenne.modeler.event.AttributeDisplayEvent;
-import org.apache.cayenne.modeler.event.EntityDisplayEvent;
-import org.apache.cayenne.modeler.event.RelationshipDisplayEvent;
 import org.apache.cayenne.modeler.util.CayenneAction;
 import org.apache.cayenne.modeler.util.CayenneController;
 import org.apache.cayenne.project.ProjectPath;
@@ -88,10 +84,12 @@
             }
         }
      
-        if(paths.size()!=1){
+        if(paths.size()==0){
+            source.setBackground(Color.pink);
+        } else if(paths.size()!=1){
             new FindDialog(getApplication().getFrameController(), paths).startupAction();
         } else {
-            
+           
             Iterator it = paths.iterator();
             int index = 0;
             if (it.hasNext()) {

Modified: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/FindDialog.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/FindDialog.java?rev=729319&r1=729318&r2=729319&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/FindDialog.java (original)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/FindDialog.java Wed Dec 24 07:11:59 2008
@@ -25,7 +25,6 @@
 import java.awt.event.ActionListener;
 import java.awt.event.KeyEvent;
 import java.awt.event.KeyListener;
-import java.awt.image.ColorModel;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
@@ -88,11 +87,14 @@
             }
 
             if (path[path.length - 1] instanceof Attribute) {
-                attrNames.put(new Integer(index++), ((Attribute) path[path.length - 1]).getName());
+                Object parentObject = ((Attribute) path[path.length - 1]).getParent(); 
+                attrNames.put(new Integer(index++), getParentName(path, parentObject) +"."+ ((Attribute) path[path.length - 1]).getName());
+           
             }
 
             if (path[path.length - 1] instanceof Relationship) {
-                relatNames.put(new Integer(index++), ((Relationship) path[path.length - 1]).getName());
+                Object parentObject = ((Relationship) path[path.length - 1]).getParent(); 
+                relatNames.put(new Integer(index++), getParentName(path, parentObject) +"."+ ((Relationship) path[path.length - 1]).getName());                
             }
         }
 
@@ -136,12 +138,10 @@
             b.addKeyListener(new JumpToResultsKeyListener());  
             EntityButtonsIdListAndButtonId.put(((FindDialogView.EntityButtonModel) b.getModel()).getIndex().intValue(), idEntityButtons);
             idEntityButtons++;
-        }
-        
+        }        
         if (view.getEntityButtons().size() > 0) {
             selectedButton = 0;
-            ((JButton) view.getEntityButtons().get(selectedButton)).setFont(fontSelected);
-            
+            ((JButton) view.getEntityButtons().get(selectedButton)).setFont(fontSelected);            
         }
     }
 
@@ -227,17 +227,41 @@
                 .getFrameController().getView()).getView();
         
         public void keyPressed(KeyEvent e) { 
-            
+            if (e.getKeyCode() == KeyEvent.VK_PAGE_UP) {
+                if (view.getEntityButtons().size() > 0 && selectedButton - 1 >= 0) {
+                    if(selectedButton - 13 >= 0){
+                        setSelectedButton(selectedButton-13);
+                    } else {
+                        setSelectedButton(0);
+                    }
+               }
+            }
+            if (e.getKeyCode() == KeyEvent.VK_PAGE_DOWN) {
+                    if (view.getEntityButtons().size() > 0 && selectedButton + 2 <= view.getEntityButtons().size()) {
+                    if(selectedButton + 14 <= view.getEntityButtons().size()) {   
+                        setSelectedButton(selectedButton+13);
+                    } else {
+                        setSelectedButton(view.getEntityButtons().size()-1); 
+                    }
+               }
+            }
             if (e.getKeyCode() == KeyEvent.VK_UP) {
                 if (view.getEntityButtons().size() > 0 && selectedButton - 1 >= 0) {
                     setSelectedButton(selectedButton-1);
-                  }
+               }
             }
             if (e.getKeyCode() == KeyEvent.VK_DOWN) {
                     if (view.getEntityButtons().size() > 0 && selectedButton + 2 <= view.getEntityButtons().size()) {
                     setSelectedButton(selectedButton+1);
-                }
+               }
             }
+            if (e.getKeyCode() == KeyEvent.VK_HOME) {
+                setSelectedButton(0);               
+            }
+            if (e.getKeyCode() == KeyEvent.VK_END) {
+                setSelectedButton(view.getEntityButtons().size()-1);
+            }
+            
             if (e.getKeyCode() == KeyEvent.VK_ENTER) {
                 JButton source = (JButton) view.getEntityButtons().get(selectedButton);
                 
@@ -253,7 +277,6 @@
 
         public void keyTyped(KeyEvent e) {
         }
-
     }
 
     private class JumpToResultActionListener implements ActionListener {
@@ -294,9 +317,24 @@
     }
     
     private void setSelectedButton(Integer newSelectedButton) {
-        ((JButton) view.getEntityButtons().get(selectedButton)).setFont(font);
+        ((JButton) view.getEntityButtons().get(selectedButton)).setFont(font);        
         selectedButton = newSelectedButton;
-        ((JButton) view.getEntityButtons().get(selectedButton)).setFont(fontSelected);
+        FindDialogView.scrollPaneToPosition((selectedButton)*((JButton) view.getEntityButtons().get(selectedButton)).getHeight());        
+        ((JButton) view.getEntityButtons().get(selectedButton)).setFont(fontSelected);       
     }    
+    
+    private String getParentName(Object[] path, Object  parentObject) {
+        String nameParent = null;
+        
+        if(parentObject  instanceof ObjEntity){
+            ObjEntity objEntity = (ObjEntity)parentObject;
+            nameParent = objEntity.getName();
+        }
+        if(parentObject  instanceof DbEntity){
+            DbEntity dbEntity = (DbEntity)parentObject;
+            nameParent = dbEntity.getName();                    
+        }
+        return nameParent;
+    }  
 
 }

Modified: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/FindDialogView.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/FindDialogView.java?rev=729319&r1=729318&r2=729319&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/FindDialogView.java (original)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/FindDialogView.java Wed Dec 24 07:11:59 2008
@@ -36,6 +36,7 @@
 import javax.swing.JLabel;
 import javax.swing.JPanel;
 import javax.swing.JScrollPane;
+import javax.swing.SwingUtilities;
 import javax.swing.border.EmptyBorder;
 
 import org.apache.cayenne.map.DbEntity;
@@ -51,6 +52,7 @@
 
     private JButton okButton;
     private java.util.List entityButtons;
+    private static JScrollPane scrollPane;
 
     public FindDialogView(Map objEntityNames, Map dbEntityNames, Map attrNames,
             Map relatNames) {
@@ -82,12 +84,15 @@
             JComponent contentPane = (JComponent) getContentPane();
             
             contentPane.setLayout(new BorderLayout());
-            contentPane.add(new JScrollPane(
+            
+            scrollPane = new JScrollPane(
                     panel,
                     JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
-                    JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED));
+                    JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+            
+            contentPane.add(scrollPane);
             contentPane.add(okPanel, BorderLayout.SOUTH);
-
+            
             contentPane.setPreferredSize(new Dimension(400, 325));            
             setTitle("Search results"); 
     }
@@ -131,4 +136,34 @@
             return index;
         }
     }
+
+    
+    public static void scrollPaneToBottom() {
+        
+        SwingUtilities.invokeLater(new Runnable() {
+            public void run() {
+                scrollPane.getVerticalScrollBar().setValue(
+                        scrollPane.getVerticalScrollBar().getMaximum());
+            }
+        });
+    }
+    
+    public static void scrollPaneToUp() {
+        
+        SwingUtilities.invokeLater(new Runnable() {
+            public void run() {
+                scrollPane.getVerticalScrollBar().setValue(
+                        scrollPane.getVerticalScrollBar().getMinimum());
+            }
+        });
+    }
+  
+    public static void scrollPaneToPosition(final int position) {
+      
+      SwingUtilities.invokeLater(new Runnable() {
+          public void run() {
+              scrollPane.getVerticalScrollBar().setValue(position);
+          }
+      });
+   }
 }