View Javadoc

1   /*
2    *  Copyright (C) 2003-2005 SINTEF
3    *  Author:  Fredrik Vraalsen (fredrik dot vraalsen at sintef dot no)
4    *  Webpage: http://coras.sourceforge.net/
5    *
6    *  This program is free software; you can redistribute it and/or
7    *  modify it under the terms of the GNU Lesser General Public License
8    *  as published by the Free Software Foundation; either version 2.1
9    *  of the License, or (at your option) any later version.
10   *
11   *  This program is distributed in the hope that it will be useful,
12   *  but WITHOUT ANY WARRANTY; without even the implied warranty of
13   *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14   *  Lesser General Public License for more details.
15   *
16   *  You should have received a copy of the GNU Lesser General Public
17   *  License along with this program; if not, write to the Free
18   *  Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
19   *  02111-1307 USA
20   */
21  package coras.client.ui;
22  
23  import java.awt.BorderLayout;
24  import java.awt.CardLayout;
25  import java.awt.event.MouseListener;
26  import java.beans.PropertyVetoException;
27  
28  import javax.swing.JDesktopPane;
29  import javax.swing.JInternalFrame;
30  import javax.swing.JPanel;
31  import javax.swing.JScrollPane;
32  import javax.swing.JSplitPane;
33  import javax.swing.JTree;
34  import javax.swing.event.TreeSelectionListener;
35  import javax.swing.tree.DefaultMutableTreeNode;
36  import javax.swing.tree.TreeModel;
37  import javax.swing.tree.TreePath;
38  
39  import coras.common.CorasElement;
40  import coras.common.CorasPackage;
41  /***
42   * @author fvr
43   *
44   * TODO To change the template for this generated type comment go to
45   * Window - Preferences - Java - Code Style - Code Templates
46   */
47  public class PackagePanel extends JPanel {
48  
49  	private JSplitPane horizontalSplitPane = null;
50  	private JSplitPane verticalSplitPane = null;
51  	private JScrollPane treeScrollPane = null;
52  	private JTree tree = null;
53  	private JDesktopPane desktopPane = null;
54      private CorasPackage thePackage;
55  	private JPanel infoPanel = null;
56  	private JPanel noInfoPanel = null;
57  	private PackageDetailsPanel packageDetailsPanel = null;
58  	private ElementDetailsPanel elementDetailsPanel = null;
59  	/***
60  	 * This is the default constructor
61  	 */
62  	public PackagePanel() {
63  		super();
64  		initialize();
65  	}
66  
67  	public void setTreeModel(TreeModel model) {
68  	    getTree().setModel(model);
69  	}
70  
71      public void addTreeSelectionListener(TreeSelectionListener listener) {
72          getTree().addTreeSelectionListener(listener);
73      }
74  
75      public void addTreeMouseListener(MouseListener listener) {
76          getTree().addMouseListener(listener);
77      }
78      
79      /***
80       * @param subprocessNode
81       */
82      public void makeVisible(DefaultMutableTreeNode subprocessNode) {
83          getTree().makeVisible(new TreePath(subprocessNode.getPath()));
84      }
85  	
86      public synchronized void setCategoryEnabled(boolean enabled) {
87          getPackageDetailsPanel().setCategoryEnabled(enabled);
88          getElementDetailsPanel().setCategoryEnabled(enabled);
89      }
90      
91      public synchronized void setDomainEnabled(boolean enabled) {
92          getPackageDetailsPanel().setDomainEnabled(enabled);
93          getElementDetailsPanel().setDomainEnabled(enabled);
94      }
95      
96      /***
97       * @param frame
98       */
99      public void addInternalFrame(JInternalFrame frame) {
100         getDesktopPane().add(frame);
101     }
102 
103     public void removeInternalFrame(JInternalFrame frame) {
104         getDesktopPane().remove(frame);
105     }
106 
107     /***
108      * @param projectFrame
109      */
110     public void setActiveInternalFrame(JInternalFrame frame) {
111         try {
112             frame.setIcon(false);
113         } catch (PropertyVetoException e) {
114             // TODO Auto-generated catch block
115             e.printStackTrace();
116         }
117         getDesktopPane().moveToFront(frame);
118         getDesktopPane().getDesktopManager().activateFrame(frame);
119     }
120     
121     /***
122 	 * This method initializes this
123 	 * 
124 	 * @return void
125 	 */
126 	private void initialize() {
127         this.setLayout(new BorderLayout());
128         this.setBounds(0, 0, 500, 400);
129         this.add(getHorizontalSplitPane(), java.awt.BorderLayout.CENTER);
130 	}
131 	
132 	/***
133 	 * This method initializes jSplitPane	
134 	 * 	
135 	 * @return javax.swing.JSplitPane	
136 	 */    
137 	private JSplitPane getHorizontalSplitPane() {
138 		if (horizontalSplitPane == null) {
139 			horizontalSplitPane = new JSplitPane();
140 			horizontalSplitPane.setLeftComponent(getVerticalSplitPane());
141 			horizontalSplitPane.setRightComponent(getDesktopPane());
142 		}
143 		return horizontalSplitPane;
144 	}
145 	
146 	/***
147 	 * This method initializes jSplitPane1	
148 	 * 	
149 	 * @return javax.swing.JSplitPane	
150 	 */    
151 	private JSplitPane getVerticalSplitPane() {
152 		if (verticalSplitPane == null) {
153 			verticalSplitPane = new JSplitPane();
154 			verticalSplitPane.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT);
155 			verticalSplitPane.setTopComponent(getTreeScrollPane());
156 			verticalSplitPane.setBottomComponent(getInfoPanel());
157 		}
158 		return verticalSplitPane;
159 	}
160 	
161 	/***
162 	 * This method initializes jScrollPane	
163 	 * 	
164 	 * @return javax.swing.JScrollPane	
165 	 */    
166 	private JScrollPane getTreeScrollPane() {
167 		if (treeScrollPane == null) {
168 			treeScrollPane = new JScrollPane();
169 			treeScrollPane.setViewportView(getTree());
170 		}
171 		return treeScrollPane;
172 	}
173 	
174 	/***
175 	 * This method initializes jTree	
176 	 * 	
177 	 * @return javax.swing.JTree	
178 	 */    
179 	private JTree getTree() {
180 		if (tree == null) {
181 			tree = new JTree();
182 			tree.setCellRenderer(new CorasTreeCellRenderer());
183 			tree.setToggleClickCount(-1);
184 			tree.addTreeSelectionListener(new javax.swing.event.TreeSelectionListener() { 
185 				public void valueChanged(javax.swing.event.TreeSelectionEvent e) {
186 				    if (e.isAddedPath()) {
187 				        TreePath path = e.getPath();
188 				        DefaultMutableTreeNode node = (DefaultMutableTreeNode) path.getLastPathComponent();
189 				        Object o = node.getUserObject();
190 				        CardLayout layout = (CardLayout) getInfoPanel().getLayout();
191 				        if (o instanceof CorasPackage) {
192 				            getPackageDetailsPanel().setPackage((CorasPackage) o);
193 				            layout.show(getInfoPanel(), getPackageDetailsPanel().getName());
194 				        } else if (o instanceof CorasElement) {
195 				            getElementDetailsPanel().setElement((CorasElement) o);
196 				            layout.show(getInfoPanel(), getElementDetailsPanel().getName());
197 				        } else {
198 				            layout.show(getInfoPanel(), getNoInfoPanel().getName());
199 				        }
200 				    }
201 				}
202 			});
203 		}
204 		return tree;
205 	}
206 	
207 	/***
208 	 * This method initializes jDesktopPane	
209 	 * 	
210 	 * @return javax.swing.JDesktopPane	
211 	 */    
212 	private JDesktopPane getDesktopPane() {
213 		if (desktopPane == null) {
214 			desktopPane = new JDesktopPane();
215 		}
216 		return desktopPane;
217 	}
218 
219     /***
220 	 * This method initializes jPanel	
221 	 * 	
222 	 * @return javax.swing.JPanel	
223 	 */    
224 	private JPanel getInfoPanel() {
225 		if (infoPanel == null) {
226 			infoPanel = new JPanel();
227 			infoPanel.setLayout(new CardLayout());
228 			infoPanel.add(getNoInfoPanel(), getNoInfoPanel().getName());
229 			infoPanel.add(getPackageDetailsPanel(), getPackageDetailsPanel().getName());
230 			infoPanel.add(getElementDetailsPanel(), getElementDetailsPanel().getName());
231 		}
232 		return infoPanel;
233 	}
234 	/***
235 	 * This method initializes jPanel	
236 	 * 	
237 	 * @return javax.swing.JPanel	
238 	 */    
239 	private JPanel getNoInfoPanel() {
240 		if (noInfoPanel == null) {
241 			noInfoPanel = new JPanel();
242 			noInfoPanel.setName("noInfo");
243 			noInfoPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "No Selection", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null));
244 		}
245 		return noInfoPanel;
246 	}
247 	/***
248 	 * This method initializes packageDetailsPanel	
249 	 * 	
250 	 * @return coras.client.ui.PackageDetailsPanel	
251 	 */    
252 	private PackageDetailsPanel getPackageDetailsPanel() {
253 		if (packageDetailsPanel == null) {
254 			packageDetailsPanel = new PackageDetailsPanel();
255 			packageDetailsPanel.setName("packageDetailsPanel");
256 			packageDetailsPanel.setEditable(false);
257 			packageDetailsPanel.setDomainEnabled(false);
258 			packageDetailsPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Package Info", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null));
259 		}
260 		return packageDetailsPanel;
261 	}
262 	/***
263 	 * This method initializes elementDetailsPanel	
264 	 * 	
265 	 * @return coras.client.ui.ElementDetailsPanel	
266 	 */    
267 	private ElementDetailsPanel getElementDetailsPanel() {
268 		if (elementDetailsPanel == null) {
269 			elementDetailsPanel = new ElementDetailsPanel();
270 			elementDetailsPanel.setName("elementDetailsPanel");
271 			elementDetailsPanel.setEditable(false);
272 			elementDetailsPanel.setDomainEnabled(false);
273 			elementDetailsPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Element Info", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null));
274 		}
275 		return elementDetailsPanel;
276 	}
277 	
278 }