1
2
3
4
5
6
7
8
9
10
11
12
13 package com.eviware.soapui.ui;
14
15 import java.awt.BorderLayout;
16 import java.awt.Component;
17 import java.awt.event.MouseAdapter;
18 import java.awt.event.MouseEvent;
19 import java.beans.PropertyChangeEvent;
20 import java.beans.PropertyChangeListener;
21 import java.util.ArrayList;
22 import java.util.List;
23
24 import javax.swing.BorderFactory;
25 import javax.swing.DefaultListCellRenderer;
26 import javax.swing.DefaultListModel;
27 import javax.swing.JList;
28 import javax.swing.JPanel;
29 import javax.swing.JScrollPane;
30
31 import com.eviware.soapui.ui.desktop.DesktopListener;
32 import com.eviware.soapui.ui.desktop.DesktopPanel;
33 import com.eviware.soapui.ui.desktop.SoapUIDesktop;
34
35 /***
36 * List for displaying current DesktopPanels
37 *
38 * @author Ole.Matzura
39 */
40
41 public class JDesktopPanelsList extends JPanel
42 {
43 private DefaultListModel desktopPanels;
44 private JList desktopPanelsList;
45 private SoapUIDesktop desktop;
46 private DesktopPanelPropertyChangeListener desktopPanelPropertyListener = new DesktopPanelPropertyChangeListener();
47 private InternalDesktopListener desktopListener = new InternalDesktopListener();
48
49 public JDesktopPanelsList(SoapUIDesktop desktop)
50 {
51 super(new BorderLayout());
52 setDesktop( desktop );
53
54 desktopPanels = new DefaultListModel();
55 desktopPanelsList = new JList(desktopPanels);
56 desktopPanelsList.setCellRenderer(new DesktopItemsCellRenderer());
57 desktopPanelsList.setToolTipText("Open windows");
58 desktopPanelsList.addMouseListener(new MouseAdapter()
59 {
60 public void mouseClicked(MouseEvent e)
61 {
62 if (e.getClickCount() < 2)
63 return;
64
65 JDesktopPanelsList.this.desktop.showDesktopPanel((DesktopPanel) desktopPanelsList.getSelectedValue());
66 }
67 });
68
69 add( new JScrollPane( desktopPanelsList ), BorderLayout.CENTER);
70 }
71
72 private class DesktopPanelPropertyChangeListener implements PropertyChangeListener
73 {
74 public void propertyChange(PropertyChangeEvent evt)
75 {
76 DesktopPanel desktopPanel = (DesktopPanel) evt.getSource();
77 int ix = desktopPanels.indexOf(desktopPanel);
78 if (ix >= 0)
79 desktopPanels.set(ix, desktopPanel);
80 }
81 }
82
83 private static class DesktopItemsCellRenderer extends DefaultListCellRenderer
84 {
85 public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected,
86 boolean cellHasFocus)
87 {
88 super.getListCellRendererComponent( list, value, index, isSelected, cellHasFocus );
89
90 DesktopPanel desktopPanel = (DesktopPanel) value;
91 String title = desktopPanel.getTitle();
92 setText(title);
93 setToolTipText(desktopPanel.getDescription());
94 setIcon( desktopPanel.getIcon() );
95
96 setBorder( BorderFactory.createCompoundBorder(
97 BorderFactory.createEmptyBorder( 2, 2, 2, 2 ),
98 getBorder() ));
99
100 return this;
101 }
102 }
103
104 public List<DesktopPanel> getDesktopPanels()
105 {
106 List<DesktopPanel> result = new ArrayList<DesktopPanel>();
107
108 for( int c = 0; c < desktopPanels.getSize(); c++ )
109 result.add( ( DesktopPanel ) desktopPanels.get( c ));
110
111 return result;
112 }
113
114 private class InternalDesktopListener implements DesktopListener
115 {
116 public void desktopPanelSelected(DesktopPanel desktopPanel)
117 {
118 desktopPanelsList.setSelectedValue( desktopPanel, false );
119 }
120
121 public void desktopPanelCreated(DesktopPanel desktopPanel)
122 {
123 desktopPanels.addElement(desktopPanel);
124 desktopPanelsList.setSelectedValue(desktopPanel, false);
125
126 desktopPanel.addPropertyChangeListener( desktopPanelPropertyListener );
127 }
128
129 public void desktopPanelClosed(DesktopPanel desktopPanel)
130 {
131 desktopPanels.removeElement( desktopPanel );
132 desktopPanel.removePropertyChangeListener( desktopPanelPropertyListener );
133 }
134 }
135
136 public void setDesktop( SoapUIDesktop newDesktop )
137 {
138 if( desktop != null )
139 {
140 desktop.removeDesktopListener( desktopListener );
141
142 while( desktopPanels.size() > 0 )
143 {
144 DesktopPanel desktopPanel = ( DesktopPanel ) desktopPanels.getElementAt( 0 );
145 desktopPanel.removePropertyChangeListener( desktopPanelPropertyListener );
146 desktopPanels.remove( 0 );
147 }
148
149 }
150
151 desktop = newDesktop;
152
153 desktop.addDesktopListener( desktopListener );
154
155 for( DesktopPanel desktopPanel : desktop.getDesktopPanels() )
156 {
157 desktopPanel.addPropertyChangeListener( desktopPanelPropertyListener );
158 desktopPanels.addElement( desktopPanel );
159 }
160 }
161
162 public JList getDesktopPanelsList()
163 {
164 return desktopPanelsList;
165 }
166
167 public int getItemsCount()
168 {
169 return desktopPanels.size();
170 }
171 }