Repository: cayenne Updated Branches: refs/heads/STABLE-4.0 15471c0a6 -> 20f9d3899
CAY-2475 Modeler: move inheritance icon to name column in objAttr table and objRel table Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/3285651e Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/3285651e Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/3285651e Branch: refs/heads/STABLE-4.0 Commit: 3285651e0c09f3ca60be8c771fc922c970150055 Parents: d3fa7b7 Author: Arseni Bulatski <ancars...@gmail.com> Authored: Mon Sep 17 15:34:31 2018 +0300 Committer: Arseni Bulatski <ancars...@gmail.com> Committed: Tue Sep 25 12:11:51 2018 +0300 ---------------------------------------------------------------------- RELEASE-NOTES.txt | 5 + .../modeler/editor/ObjAttributeTableModel.java | 32 ++--- .../modeler/editor/ObjEntityAttributePanel.java | 117 +++++++------------ .../editor/ObjEntityRelationshipPanel.java | 44 ++++++- 4 files changed, 103 insertions(+), 95 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cayenne/blob/3285651e/RELEASE-NOTES.txt ---------------------------------------------------------------------- diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt index 3766f3b..e2e491c 100644 --- a/RELEASE-NOTES.txt +++ b/RELEASE-NOTES.txt @@ -12,6 +12,11 @@ Release: 4.0.1 Date: ---------------------------------- +======= +Changes/New Features: + +CAY-2475 Modeler: move inheritance icon to name column in objAttr table and objRel table + Bug Fixes: CAY-2320 Modeler: Limit input into numeric fields to 10 digits http://git-wip-us.apache.org/repos/asf/cayenne/blob/3285651e/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjAttributeTableModel.java ---------------------------------------------------------------------- diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjAttributeTableModel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjAttributeTableModel.java index 41739ac..8918ea0 100644 --- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjAttributeTableModel.java +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjAttributeTableModel.java @@ -58,13 +58,12 @@ import java.util.List; public class ObjAttributeTableModel extends CayenneTableModel<ObjAttributeWrapper> { // Columns - public static final int INHERITED = 0; - public static final int OBJ_ATTRIBUTE = 1; - public static final int OBJ_ATTRIBUTE_TYPE = 2; - public static final int DB_ATTRIBUTE = 3; - public static final int DB_ATTRIBUTE_TYPE = 4; - public static final int LOCKING = 5; - public static final int COLUMN_COUNT = 6; + public static final int OBJ_ATTRIBUTE = 0; + public static final int OBJ_ATTRIBUTE_TYPE = 1; + public static final int DB_ATTRIBUTE = 2; + public static final int DB_ATTRIBUTE_TYPE = 3; + public static final int LOCKING = 4; + public static final int COLUMN_COUNT = 5; private ObjEntity entity; private DbEntity dbEntity; @@ -151,8 +150,6 @@ public class ObjAttributeTableModel extends CayenneTableModel<ObjAttributeWrappe public String getColumnName(int column) { switch (column) { - case INHERITED: - return "In"; case OBJ_ATTRIBUTE: return "Name"; case OBJ_ATTRIBUTE_TYPE: @@ -170,10 +167,8 @@ public class ObjAttributeTableModel extends CayenneTableModel<ObjAttributeWrappe public Object getValueAt(int row, int column) { ObjAttributeWrapper attribute = getAttribute(row); - if (column == INHERITED) { - return attribute.isInherited(); - } - else if (column == OBJ_ATTRIBUTE) { + + if (column == OBJ_ATTRIBUTE) { return attribute.getName(); } else if (column == OBJ_ATTRIBUTE_TYPE) { @@ -186,11 +181,9 @@ public class ObjAttributeTableModel extends CayenneTableModel<ObjAttributeWrappe DbAttribute dbAttribute = attribute.getDbAttribute(); if (column == DB_ATTRIBUTE) { return getDBAttribute(attribute, dbAttribute); - } - else if (column == DB_ATTRIBUTE_TYPE) { + } else if(column == DB_ATTRIBUTE_TYPE) { return getDBAttributeType(attribute, dbAttribute); - } - else { + } else { return null; } } @@ -390,7 +383,7 @@ public class ObjAttributeTableModel extends CayenneTableModel<ObjAttributeWrappe return col == DB_ATTRIBUTE; } - return col != DB_ATTRIBUTE_TYPE && col != INHERITED; + return col != DB_ATTRIBUTE_TYPE; } public ObjEntity getEntity() { @@ -417,9 +410,6 @@ public class ObjAttributeTableModel extends CayenneTableModel<ObjAttributeWrappe @Override public void sortByColumn(final int sortCol, boolean isAscent) { switch (sortCol) { - case INHERITED: - sortByElementProperty("inherited", isAscent); - break; case OBJ_ATTRIBUTE: sortByElementProperty("name", isAscent); break; http://git-wip-us.apache.org/repos/asf/cayenne/blob/3285651e/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityAttributePanel.java ---------------------------------------------------------------------- diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityAttributePanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityAttributePanel.java index 7cae33e..4df7ba3 100644 --- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityAttributePanel.java +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityAttributePanel.java @@ -29,63 +29,29 @@ import org.apache.cayenne.map.event.ObjAttributeListener; import org.apache.cayenne.map.event.ObjEntityListener; import org.apache.cayenne.modeler.Application; import org.apache.cayenne.modeler.ProjectController; -import org.apache.cayenne.modeler.action.ActionManager; -import org.apache.cayenne.modeler.action.CopyAttributeRelationshipAction; -import org.apache.cayenne.modeler.action.CutAttributeRelationshipAction; -import org.apache.cayenne.modeler.action.ObjEntityToSuperEntityAction; -import org.apache.cayenne.modeler.action.PasteAction; -import org.apache.cayenne.modeler.action.RemoveAttributeRelationshipAction; +import org.apache.cayenne.modeler.action.*; import org.apache.cayenne.modeler.dialog.objentity.ObjAttributeInfoDialog; import org.apache.cayenne.modeler.editor.wrapper.ObjAttributeWrapper; -import org.apache.cayenne.modeler.event.EntityDisplayEvent; -import org.apache.cayenne.modeler.event.ObjEntityDisplayListener; -import org.apache.cayenne.modeler.event.ProjectOnSaveEvent; -import org.apache.cayenne.modeler.event.ProjectOnSaveListener; -import org.apache.cayenne.modeler.event.TablePopupHandler; +import org.apache.cayenne.modeler.event.*; import org.apache.cayenne.modeler.pref.TableColumnPreferences; -import org.apache.cayenne.modeler.util.CayenneAction; -import org.apache.cayenne.modeler.util.CayenneTable; -import org.apache.cayenne.modeler.util.CayenneTableModel; -import org.apache.cayenne.modeler.util.DbAttributePathComboBoxRenderer; -import org.apache.cayenne.modeler.util.DbAttributePathComboBoxEditor; -import org.apache.cayenne.modeler.util.ModelerUtil; -import org.apache.cayenne.modeler.util.PanelFactory; -import org.apache.cayenne.modeler.util.ProjectUtil; -import org.apache.cayenne.modeler.util.UIUtil; +import org.apache.cayenne.modeler.util.*; import org.apache.cayenne.modeler.util.combo.AutoCompletion; -import org.apache.cayenne.swing.components.image.FilteredIconFactory; - -import javax.swing.BorderFactory; -import javax.swing.Icon; -import javax.swing.ImageIcon; -import javax.swing.JComboBox; -import javax.swing.JDialog; -import javax.swing.JOptionPane; -import javax.swing.JMenuItem; -import javax.swing.JPanel; -import javax.swing.JPopupMenu; -import javax.swing.JTable; -import javax.swing.ListSelectionModel; -import javax.swing.UIManager; + +import javax.swing.*; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import javax.swing.table.DefaultTableCellRenderer; import javax.swing.table.TableCellEditor; +import javax.swing.table.TableCellRenderer; import javax.swing.table.TableColumn; -import java.awt.BorderLayout; -import java.awt.Color; -import java.awt.Component; -import java.awt.Font; +import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.Collection; +import java.util.*; import java.util.List; -import java.util.Map; + /** * Detail view of the ObjEntity attributes. @@ -93,8 +59,6 @@ import java.util.Map; public class ObjEntityAttributePanel extends JPanel implements ObjEntityDisplayListener, ObjEntityListener, ObjAttributeListener, ProjectOnSaveListener { - private static final int INHERITANCE_COLUMN_WIDTH = 35; - private ProjectController mediator; private CayenneTable table; private TableColumnPreferences tablePreferences; @@ -142,10 +106,13 @@ public class ObjEntityAttributePanel extends JPanel implements ObjEntityDisplayL public void mouseReleased(MouseEvent e) { int row = table.rowAtPoint(e.getPoint()); int col = table.columnAtPoint(e.getPoint()); - if (row >= 0 && col == ObjAttributeTableModel.INHERITED) { - if (Boolean.TRUE.equals(table.getValueAt(row, col))) { - ActionManager actionManager = Application.getInstance().getActionManager(); - actionManager.getAction(ObjEntityToSuperEntityAction.class).performAction(null); + ObjAttribute objAttribute = ((ObjAttributeTableModel)table.getModel()).getAttribute(row).getValue(); + int columnFromModel = table.getColumnModel().getColumn(col).getModelIndex(); + if (row >= 0 && columnFromModel == ObjAttributeTableModel.OBJ_ATTRIBUTE) { + if(objAttribute.isInherited()) { + TableCellRenderer renderer = table.getCellRenderer(row, col); + Rectangle rectangle = table.getCellRect(row, col, false); + ((CellRenderer) renderer).mouseClicked(e, rectangle.x); } } } @@ -379,20 +346,17 @@ public class ObjEntityAttributePanel extends JPanel implements ObjEntityDisplayL protected void setUpTableStructure() { Map<Integer, Integer> minSizes = new HashMap<>(); - Map<Integer, Integer> maxSizes = new HashMap<>(); - - minSizes.put(ObjAttributeTableModel.INHERITED, INHERITANCE_COLUMN_WIDTH); - maxSizes.put(ObjAttributeTableModel.INHERITED, INHERITANCE_COLUMN_WIDTH); + minSizes.put(ObjAttributeTableModel.OBJ_ATTRIBUTE, 150); initComboBoxes(); - table.getColumnModel().getColumn(3).setCellRenderer(new DbAttributePathComboBoxRenderer()); - table.getColumnModel().getColumn(3).setCellEditor(new DbAttributePathComboBoxEditor()); + table.getColumnModel().getColumn(ObjAttributeTableModel.DB_ATTRIBUTE).setCellRenderer(new DbAttributePathComboBoxRenderer()); + table.getColumnModel().getColumn(ObjAttributeTableModel.DB_ATTRIBUTE).setCellEditor(new DbAttributePathComboBoxEditor()); tablePreferences.bind( table, minSizes, - maxSizes, + null, null, ObjAttributeTableModel.OBJ_ATTRIBUTE, true); @@ -446,32 +410,39 @@ public class ObjEntityAttributePanel extends JPanel implements ObjEntityDisplayL ObjAttributeTableModel model = (ObjAttributeTableModel) table.getModel(); column = table.getColumnModel().getColumn(column).getModelIndex(); ObjAttribute attribute = model.getAttribute(row).getValue(); - if (column != ObjAttributeTableModel.INHERITED) { - - if (!model.isCellEditable(row, column)) { - setForeground(Color.GRAY); - } else { - setForeground(isSelected && !hasFocus ? table.getSelectionForeground() : table.getForeground()); - } - if (attribute.isInherited()) { - Font font = getFont(); - Font newFont = font.deriveFont(Font.ITALIC); - setFont(newFont); - } - setIcon(null); + if (!model.isCellEditable(row, column)) { + setForeground(isSelected ? new Color(0xCECECE) : Color.GRAY); } else { - if (attribute.isInherited()) { - Icon objEntityIcon = ModelerUtil.buildIcon("icon-inheritance.png"); - setIcon(objEntityIcon); + setForeground(isSelected && !hasFocus ? table.getSelectionForeground() : table.getForeground()); + } + + setIcon(null); + + if (attribute.isInherited()) { + Font font = getFont(); + Font newFont = font.deriveFont(Font.ITALIC); + setFont(newFont); + if(column == ObjAttributeTableModel.OBJ_ATTRIBUTE) { + ImageIcon icon = ModelerUtil.buildIcon("icon-inheritance.png"); + setIcon(icon); } - setText(""); } + setFont(UIManager.getFont("Label.font")); setBorder(BorderFactory.createEmptyBorder(0,5,0,0)); return this; } + + public void mouseClicked(MouseEvent event, int x) { + Point point = event.getPoint(); + ImageIcon icon = ModelerUtil.buildIcon("icon-inheritance.png"); + if(point.x - x <= icon.getIconWidth()) { + ActionManager actionManager = Application.getInstance().getActionManager(); + actionManager.getAction(ObjEntityToSuperEntityAction.class).performAction(null); + } + } } private void resetTableModel() { http://git-wip-us.apache.org/repos/asf/cayenne/blob/3285651e/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityRelationshipPanel.java ---------------------------------------------------------------------- diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityRelationshipPanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityRelationshipPanel.java index b48a68e..8dec1bf 100644 --- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityRelationshipPanel.java +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityRelationshipPanel.java @@ -31,6 +31,7 @@ import org.apache.cayenne.modeler.ProjectController; import org.apache.cayenne.modeler.action.ActionManager; import org.apache.cayenne.modeler.action.CopyAttributeRelationshipAction; import org.apache.cayenne.modeler.action.CutAttributeRelationshipAction; +import org.apache.cayenne.modeler.action.ObjEntityToSuperEntityAction; import org.apache.cayenne.modeler.action.PasteAction; import org.apache.cayenne.modeler.action.RemoveAttributeRelationshipAction; import org.apache.cayenne.modeler.dialog.objentity.ObjRelationshipInfo; @@ -51,6 +52,7 @@ import org.slf4j.LoggerFactory; import javax.swing.BorderFactory; import javax.swing.DefaultCellEditor; import javax.swing.Icon; +import javax.swing.ImageIcon; import javax.swing.JComboBox; import javax.swing.JComponent; import javax.swing.JLabel; @@ -65,12 +67,17 @@ import javax.swing.event.ListSelectionListener; import javax.swing.event.TableModelEvent; import javax.swing.event.TableModelListener; import javax.swing.table.DefaultTableCellRenderer; +import javax.swing.table.TableCellRenderer; import javax.swing.table.TableColumn; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; +import java.awt.Point; +import java.awt.Rectangle; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; import java.util.Collection; import java.util.List; @@ -130,6 +137,24 @@ public class ObjEntityRelationshipPanel extends JPanel implements ObjEntityDispl ObjRelationshipTableModel.class, "objEntity/relationshipTable"); + table.addMouseListener(new MouseAdapter() { + @Override + public void mouseReleased(MouseEvent e) { + int row = table.rowAtPoint(e.getPoint()); + int col = table.columnAtPoint(e.getPoint()); + ObjRelationshipTableModel tableModel = ((ObjRelationshipTableModel) table.getModel()); + ObjRelationship relationship = tableModel.getRelationship(row); + int columnFromModel = table.getColumnModel().getColumn(col).getModelIndex(); + if (row >= 0 && columnFromModel == ObjRelationshipTableModel.REL_NAME) { + if(relationship.getSourceEntity() != tableModel.getEntity()) { + TableCellRenderer renderer = table.getCellRenderer(row, col); + Rectangle rectangle = table.getCellRect(row, col, false); + ((StringRenderer) renderer).mouseClicked(e, rectangle.x); + } + } + } + }); + // Create and install a popup Icon ico = ModelerUtil.buildIcon("icon-edit.png"); resolveMenu = new CayenneAction.CayenneMenuItem("Database Mapping", ico); @@ -424,19 +449,36 @@ public class ObjEntityRelationshipPanel extends JPanel implements ObjEntityDispl .getModel(); ObjRelationship relationship = model.getRelationship(row); + setIcon(null); + + column = table.getColumnModel().getColumn(column).getModelIndex(); if (relationship != null && relationship.getSourceEntity() != model.getEntity()) { - setForeground(Color.GRAY); + setForeground(isSelected ? new Color(0xCECECE) : Color.GRAY); + if(column == ObjRelationshipTableModel.REL_NAME) { + ImageIcon icon = ModelerUtil.buildIcon("icon-inheritance.png"); + setIcon(icon); + } } else { setForeground(isSelected && !hasFocus ? table.getSelectionForeground() : table.getForeground()); } + setBorder(BorderFactory.createEmptyBorder(0,5,0,0)); setFont(UIManager.getFont("Label.font")); return this; } + + public void mouseClicked(MouseEvent event, int x) { + Point point = event.getPoint(); + ImageIcon icon = ModelerUtil.buildIcon("icon-inheritance.png"); + if(point.x - x <= icon.getIconWidth()) { + ActionManager actionManager = Application.getInstance().getActionManager(); + actionManager.getAction(ObjEntityToSuperEntityAction.class).performAction(null); + } + } } private class ObjRelationshipListSelectionListener implements ListSelectionListener {