Revision: 3681
Author: [email protected]
Date: Tue Jul  6 15:01:13 2010
Log: NEW - bug 2458: Create Critic Manager
http://trillian.sqlpower.ca/bugzilla/show_bug.cgi?id=2458

Finally fixed the resizing of the critic manager panel. The editor panels for the individual critic settings ended up being quite difficult to size correctly as their columns need to align but they are panels rendered into a JTree that are in the grouping panel and the grouping panels are collected in the manger's panel.
http://code.google.com/p/power-architect/source/detail?r=3681

Modified:
/trunk/src/main/java/ca/sqlpower/architect/swingui/critic/CriticGroupingPanel.java /trunk/src/main/java/ca/sqlpower/architect/swingui/critic/CriticManagerPanel.java /trunk/src/main/java/ca/sqlpower/architect/swingui/critic/CriticSettingsPanel.java

=======================================
--- /trunk/src/main/java/ca/sqlpower/architect/swingui/critic/CriticGroupingPanel.java Tue Jul 6 10:54:22 2010 +++ /trunk/src/main/java/ca/sqlpower/architect/swingui/critic/CriticGroupingPanel.java Tue Jul 6 15:01:13 2010
@@ -1,6 +1,7 @@
 package ca.sqlpower.architect.swingui.critic;

 import java.awt.Component;
+import java.awt.Dimension;
 import java.beans.PropertyChangeEvent;
 import java.beans.PropertyChangeListener;
 import java.util.ArrayList;
@@ -124,11 +125,10 @@
* Tree model to be used with a {...@link CriticGrouping}. Can be used with a
      * renderer to display all of the settings editors of a single
      * {...@link CriticGrouping}.
-     * TODO Pull a generic tree model off of this tree model for later use.
      */
-    private final TreeModel treeModel;
-
-    private static class CriticSettingsTreeModel implements TreeModel {
+    private final CriticSettingsTreeModel treeModel;
+
+    private class CriticSettingsTreeModel implements TreeModel {

         /**
          * Tree listeners.
@@ -187,19 +187,37 @@
         public void addTreeModelListener(TreeModelListener l) {
             treeListeners.add(l);
         }
+
+        public void repaintTreeNodes() {
+ for (CriticSettingsPanel settingsPanel : settingsPanels.values()) {
+                for (int i = treeListeners.size() - 1; i >= 0; i--) {
+ treeListeners.get(i).treeNodesChanged(new TreeModelEvent( + CriticGroupingPanel.this, new Object[]{grouping, settingsPanel.getSettings()}));
+                }
+            }
+        }
     }

+
     /**
      * Displays the settings editor panels in a tree for easier navigation.
      */
private final TreeCellRenderer treeCellRenderer = new TreeCellRenderer() {

+
public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded,
                 boolean leaf, int row, boolean hasFocus) {
             if (value instanceof CriticGrouping) {
return new JLabel(((CriticGrouping) value).getPlatformType());
             } else if (value instanceof CriticAndSettings) {
+                int preferredCriticPanelSize = 0;
+                for (CriticSettingsPanel panel : settingsPanels.values()) {
+ preferredCriticPanelSize = Math.max(preferredCriticPanelSize, panel.getPanel().getPreferredSize().width);
+                }
+ preferredCriticPanelSize = Math.max(parentPanel.getPreferredCriticPanelSize(), preferredCriticPanelSize); + parentPanel.setPreferredCriticPanelSize(preferredCriticPanelSize); JComponent thisSettingsPanel = settingsPanels.get((CriticAndSettings) value).getPanel(); + thisSettingsPanel.setPreferredSize(new Dimension(preferredCriticPanelSize, thisSettingsPanel.getPreferredSize().height));
                 return thisSettingsPanel;
             }
             return null;
@@ -224,9 +242,17 @@
             }
         }
     };
-
-    public CriticGroupingPanel(CriticGrouping grouping) {
+
+    /**
+ * The parent panel to this grouping panel. One special need for this panel + * is the critic settings panels need to line up with the panels in other
+     * grouping panels.
+     */
+    private final CriticManagerPanel parentPanel;
+
+ public CriticGroupingPanel(CriticGrouping grouping, CriticManagerPanel parentPanel) {
         this.grouping = grouping;
+        this.parentPanel = parentPanel;

         panel = new JPanel();
         DefaultFormBuilder builder = new DefaultFormBuilder(new FormLayout(
@@ -298,4 +324,7 @@
         }
     }

-}
+    public void revalidateTree() {
+        treeModel.repaintTreeNodes();
+    }
+}
=======================================
--- /trunk/src/main/java/ca/sqlpower/architect/swingui/critic/CriticManagerPanel.java Tue Jul 6 11:49:13 2010 +++ /trunk/src/main/java/ca/sqlpower/architect/swingui/critic/CriticManagerPanel.java Tue Jul 6 15:01:13 2010
@@ -60,6 +60,12 @@
      */
     private CriticManager criticManager;

+    /**
+ * The preferred size of the critic settings panels. This lets the columns
+     * in the critic settings panel to line up.
+     */
+    private int preferredCriticPanelSize = 0;
+
     public CriticManagerPanel(ArchitectSwingSession session) {

         mainPanel = new JPanel();
@@ -67,7 +73,7 @@

         criticManager = session.getWorkspace().getCriticManager();
for (CriticGrouping grouping : criticManager.getCriticGroupings()) { - CriticGroupingPanel criticGroupingPanel = new CriticGroupingPanel(grouping); + CriticGroupingPanel criticGroupingPanel = new CriticGroupingPanel(grouping, this);
             builder.append(criticGroupingPanel.getPanel());
             builder.nextLine();
             groupingPanels.add(criticGroupingPanel);
@@ -147,4 +153,19 @@
             panel.cleanup();
         }
     }
-}
+
+    public void setPreferredCriticPanelSize(int preferredCriticPanelSize) {
+        int oldSize = this.preferredCriticPanelSize;
+        this.preferredCriticPanelSize = preferredCriticPanelSize;
+        if (oldSize != preferredCriticPanelSize) {
+            for (CriticGroupingPanel groupPanel : groupingPanels) {
+                groupPanel.revalidateTree();
+            }
+        }
+    }
+
+    public int getPreferredCriticPanelSize() {
+        return preferredCriticPanelSize;
+    }
+
+}
=======================================
--- /trunk/src/main/java/ca/sqlpower/architect/swingui/critic/CriticSettingsPanel.java Tue Jul 6 10:54:22 2010 +++ /trunk/src/main/java/ca/sqlpower/architect/swingui/critic/CriticSettingsPanel.java Tue Jul 6 15:01:13 2010
@@ -89,7 +89,7 @@
         severityCombo.setSelectedItem(settings.getSeverity());
//It would be nice if the layout used a pref:grow style for the first //column but it makes it difficult to set the preferred size correctly. - DefaultFormBuilder builder = new DefaultFormBuilder(new FormLayout("225dlu, 5dlu, pref"), panel); + DefaultFormBuilder builder = new DefaultFormBuilder(new FormLayout("fill:pref:grow, 5dlu, pref"), panel);
         builder.append(settings.getName());
         builder.append(severityCombo);

Reply via email to