1 package net.sourceforge.pmd.swingui;
2
3 import net.sourceforge.pmd.swingui.event.RulesEditingEvent;
4
5 import javax.swing.JPanel;
6 import javax.swing.JTabbedPane;
7 import javax.swing.SwingUtilities;
8 import javax.swing.UIManager;
9 import javax.swing.event.ChangeEvent;
10 import javax.swing.event.ChangeListener;
11 import javax.swing.event.TreeSelectionEvent;
12 import javax.swing.event.TreeSelectionListener;
13 import javax.swing.tree.TreePath;
14
15 /***
16 *
17 * @author Donald A. Leckie
18 * @since August 29, 2002
19 * @version $Revision: 1.14 $, $Date: 2003/05/28 18:08:34 $
20 */
21 class RuleEditingTabbedPane extends JTabbedPane {
22
23 private RulesTree m_rulesTree;
24 private RuleAllEditingPanel m_ruleAllPanel;
25 private RuleSetEditingPanel m_ruleSetPanel;
26 private RuleEditingPanel m_rulePanel;
27 private RulePropertyEditingPanel m_rulePropertyPanel;
28 private RulesTreeNode m_currentTreeNode;
29
30 /***
31 *******************************************************************************
32 *
33 * @return
34 */
35 protected RuleEditingTabbedPane(RulesTree rulesTree) {
36 super(JTabbedPane.TOP);
37
38 m_rulesTree = rulesTree;
39 m_ruleAllPanel = new RuleAllEditingPanel();
40 m_ruleSetPanel = new RuleSetEditingPanel();
41 m_rulePanel = new RuleEditingPanel();
42 m_rulePropertyPanel = new RulePropertyEditingPanel();
43
44 addTab("All", m_ruleAllPanel);
45 addTab("Rule Set", m_ruleSetPanel);
46 addTab("Rule", m_rulePanel);
47 addTab("Property", m_rulePropertyPanel);
48 setFont(UIManager.getFont("tabFont"));
49
50 m_ruleAllPanel.setIsEditing(true);
51
52 rulesTree.addTreeSelectionListener(new RulesTreeSelectionListener());
53 addChangeListener(new TabChangeListener());
54 }
55
56 /***
57 *******************************************************************************
58 *
59 * @return
60 */
61 protected RulesTreeNode getSelectedTreeNode() {
62 return m_rulesTree.getSelectedNode();
63 }
64
65 /***
66 *******************************************************************************
67 *
68 */
69 protected void saveData() {
70 if (m_currentTreeNode != null) {
71 RulesEditingEvent.notifySaveData(this, m_currentTreeNode);
72 }
73 }
74
75 /***
76 *******************************************************************************
77 *
78 */
79 private void loadData(RulesTreeNode treeNode) {
80 JPanel editingTab = (JPanel) getSelectedComponent();
81
82 if (editingTab == m_ruleAllPanel) {
83 m_ruleAllPanel.setIsEditing(true);
84 m_rulePanel.setIsEditing(false);
85 m_rulePropertyPanel.setIsEditing(false);
86 } else if (editingTab == m_rulePanel) {
87 m_ruleAllPanel.setIsEditing(false);
88 m_rulePanel.setIsEditing(true);
89 m_rulePropertyPanel.setIsEditing(false);
90 } else {
91 m_ruleAllPanel.setIsEditing(false);
92 m_rulePanel.setIsEditing(false);
93 m_rulePropertyPanel.setIsEditing(true);
94 }
95
96 m_currentTreeNode = treeNode;
97 RulesEditingEvent.notifyLoadData(this, treeNode);
98 }
99
100 /***
101 *******************************************************************************
102 *******************************************************************************
103 *******************************************************************************
104 */
105 private class TabChangeListener implements ChangeListener {
106
107 /***
108 *******************************************************************************
109 *
110 * @param event
111 */
112 public void stateChanged(ChangeEvent event) {
113 RulesTreeNode selectedTreeNode = getSelectedTreeNode();
114 saveData();
115 loadData(selectedTreeNode);
116 SwingUtilities.invokeLater(new SortChildren(selectedTreeNode));
117 }
118 }
119
120 /***
121 *******************************************************************************
122 *******************************************************************************
123 *******************************************************************************
124 */
125 private class RulesTreeSelectionListener implements TreeSelectionListener {
126
127 /***
128 *******************************************************************************
129 *
130 * @param event
131 */
132 public void valueChanged(TreeSelectionEvent event) {
133 TreePath treePath = event.getPath();
134 Object component = treePath.getLastPathComponent();
135
136 if (component instanceof RulesTreeNode) {
137 saveData();
138
139 RulesTreeNode treeNode = (RulesTreeNode) component;
140
141 if (getSelectedComponent() != m_ruleAllPanel) {
142 if (treeNode.isRuleSet()) {
143 setSelectedComponent(m_ruleSetPanel);
144 } else if (treeNode.isRule()) {
145 setSelectedComponent(m_rulePanel);
146 } else if (treeNode.isProperty()) {
147 setSelectedComponent(m_rulePropertyPanel);
148 }
149 }
150
151 if (treeNode.getParent() == null) {
152 // Get next to last tree node in tree path.
153 int pathIndex = treePath.getPathCount() - 2;
154
155 if (pathIndex >= 0) {
156 treeNode = (RulesTreeNode) treePath.getPathComponent(pathIndex);
157 }
158 }
159
160 loadData(treeNode);
161 SwingUtilities.invokeLater(new SortChildren(treeNode));
162 }
163 }
164 }
165
166 /***
167 *******************************************************************************
168 *******************************************************************************
169 *******************************************************************************
170 */
171 private class SortChildren implements Runnable {
172
173 private RulesTreeNode m_parentNode;
174
175 /***
176 ***************************************************************************
177 *
178 * @param parentNode
179 */
180 private SortChildren(RulesTreeNode parentNode) {
181 m_parentNode = parentNode;
182 }
183
184 /***
185 ***************************************************************************
186 *
187 */
188 public void run() {
189 if (m_parentNode != null) {
190 m_parentNode.sortChildren();
191 }
192 }
193 }
194 }
This page was automatically generated by Maven