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