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( BorderFactory.createEmptyBorder( 2, 2, 2, 2 ), getBorder() ) );
97
98 return this;
99 }
100 }
101
102 public List<DesktopPanel> getDesktopPanels()
103 {
104 List<DesktopPanel> result = new ArrayList<DesktopPanel>();
105
106 for( int c = 0; c < desktopPanels.getSize(); c++ )
107 result.add( ( DesktopPanel )desktopPanels.get( c ) );
108
109 return result;
110 }
111
112 private class InternalDesktopListener implements DesktopListener
113 {
114 public void desktopPanelSelected( DesktopPanel desktopPanel )
115 {
116 desktopPanelsList.setSelectedValue( desktopPanel, false );
117 }
118
119 public void desktopPanelCreated( DesktopPanel desktopPanel )
120 {
121 desktopPanels.addElement( desktopPanel );
122 desktopPanelsList.setSelectedValue( desktopPanel, false );
123
124 desktopPanel.addPropertyChangeListener( desktopPanelPropertyListener );
125 }
126
127 public void desktopPanelClosed( DesktopPanel desktopPanel )
128 {
129 desktopPanels.removeElement( desktopPanel );
130 desktopPanel.removePropertyChangeListener( desktopPanelPropertyListener );
131 }
132 }
133
134 public void setDesktop( SoapUIDesktop newDesktop )
135 {
136 if( desktop != null )
137 {
138 desktop.removeDesktopListener( desktopListener );
139
140 while( desktopPanels.size() > 0 )
141 {
142 DesktopPanel desktopPanel = ( DesktopPanel )desktopPanels.getElementAt( 0 );
143 desktopPanel.removePropertyChangeListener( desktopPanelPropertyListener );
144 desktopPanels.remove( 0 );
145 }
146
147 }
148
149 desktop = newDesktop;
150
151 desktop.addDesktopListener( desktopListener );
152
153 for( DesktopPanel desktopPanel : desktop.getDesktopPanels() )
154 {
155 desktopPanel.addPropertyChangeListener( desktopPanelPropertyListener );
156 desktopPanels.addElement( desktopPanel );
157 }
158 }
159
160 public JList getDesktopPanelsList()
161 {
162 return desktopPanelsList;
163 }
164
165 public int getItemsCount()
166 {
167 return desktopPanels.size();
168 }
169 }