/* * SoapUI, Copyright (C) 2004-2016 SmartBear Software * * Licensed under the EUPL, Version 1.1 or - as soon as they will be approved by the European Commission - subsequent * versions of the EUPL (the "Licence"); * You may not use this work except in compliance with the Licence. * You may obtain a copy of the Licence at: * * http://ec.europa.eu/idabc/eupl * * Unless required by applicable law or agreed to in writing, software distributed under the Licence is * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the Licence for the specific language governing permissions and limitations * under the Licence. */ package com.eviware.soapui.ui; import com.eviware.soapui.ui.desktop.DesktopListener; import com.eviware.soapui.ui.desktop.DesktopPanel; import com.eviware.soapui.ui.desktop.SoapUIDesktop; import javax.swing.BorderFactory; import javax.swing.DefaultListCellRenderer; import javax.swing.DefaultListModel; import javax.swing.JList; import javax.swing.JPanel; import javax.swing.JScrollPane; import java.awt.BorderLayout; import java.awt.Component; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.ArrayList; import java.util.List; /** * List for displaying current DesktopPanels * * @author Ole.Matzura */ public class JDesktopPanelsList extends JPanel { private DefaultListModel desktopPanels; private JList desktopPanelsList; private SoapUIDesktop desktop; private DesktopPanelPropertyChangeListener desktopPanelPropertyListener = new DesktopPanelPropertyChangeListener(); private InternalDesktopListener desktopListener = new InternalDesktopListener(); public JDesktopPanelsList(SoapUIDesktop desktop) { super(new BorderLayout()); setDesktop(desktop); desktopPanels = new DefaultListModel(); desktopPanelsList = new JList(desktopPanels); desktopPanelsList.setCellRenderer(new DesktopItemsCellRenderer()); desktopPanelsList.setToolTipText("Open windows"); desktopPanelsList.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { if (e.getClickCount() < 2) { return; } JDesktopPanelsList.this.desktop.showDesktopPanel((DesktopPanel) desktopPanelsList.getSelectedValue()); } }); add(new JScrollPane(desktopPanelsList), BorderLayout.CENTER); } private class DesktopPanelPropertyChangeListener implements PropertyChangeListener { public void propertyChange(PropertyChangeEvent evt) { DesktopPanel desktopPanel = (DesktopPanel) evt.getSource(); int ix = desktopPanels.indexOf(desktopPanel); if (ix >= 0) { desktopPanels.set(ix, desktopPanel); } } } private static class DesktopItemsCellRenderer extends DefaultListCellRenderer { public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); DesktopPanel desktopPanel = (DesktopPanel) value; String title = desktopPanel.getTitle(); setText(title); setToolTipText(desktopPanel.getDescription()); setIcon(desktopPanel.getIcon()); setBorder(BorderFactory.createCompoundBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2), getBorder())); return this; } } public List<DesktopPanel> getDesktopPanels() { List<DesktopPanel> result = new ArrayList<DesktopPanel>(); for (int c = 0; c < desktopPanels.getSize(); c++) { result.add((DesktopPanel) desktopPanels.get(c)); } return result; } private class InternalDesktopListener implements DesktopListener { public void desktopPanelSelected(DesktopPanel desktopPanel) { desktopPanelsList.setSelectedValue(desktopPanel, false); } public void desktopPanelCreated(DesktopPanel desktopPanel) { desktopPanels.addElement(desktopPanel); desktopPanelsList.setSelectedValue(desktopPanel, false); desktopPanel.addPropertyChangeListener(desktopPanelPropertyListener); } public void desktopPanelClosed(DesktopPanel desktopPanel) { desktopPanels.removeElement(desktopPanel); desktopPanel.removePropertyChangeListener(desktopPanelPropertyListener); } } public void setDesktop(SoapUIDesktop newDesktop) { if (desktop != null) { desktop.removeDesktopListener(desktopListener); while (desktopPanels.size() > 0) { DesktopPanel desktopPanel = (DesktopPanel) desktopPanels.getElementAt(0); desktopPanel.removePropertyChangeListener(desktopPanelPropertyListener); desktopPanels.remove(0); } } desktop = newDesktop; desktop.addDesktopListener(desktopListener); for (DesktopPanel desktopPanel : desktop.getDesktopPanels()) { desktopPanel.addPropertyChangeListener(desktopPanelPropertyListener); desktopPanels.addElement(desktopPanel); } } public JList getDesktopPanelsList() { return desktopPanelsList; } public int getItemsCount() { return desktopPanels.size(); } }