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);
+ }
+ });
+ }
}