View Javadoc

1   /*
2    *  soapUI, copyright (C) 2004-2009 eviware.com 
3    *
4    *  soapUI is free software; you can redistribute it and/or modify it under the 
5    *  terms of version 2.1 of the GNU Lesser General Public License as published by 
6    *  the Free Software Foundation.
7    *
8    *  soapUI is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without 
9    *  even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
10   *  See the GNU Lesser General Public License for more details at gnu.org.
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 }