/* * Copyright 2004-2010 Information & Software Engineering Group (188/1) * Institute of Software Technology and Interactive Systems * Vienna University of Technology, Austria * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.ifs.tuwien.ac.at/dm/somtoolbox/license.html * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package at.tuwien.ifs.somtoolbox.apps.viewer; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.ArrayList; import javax.swing.BorderFactory; import javax.swing.JCheckBoxMenuItem; import javax.swing.JMenu; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.ScrollPaneConstants; import org.jdesktop.swingx.VerticalLayout; import at.tuwien.ifs.commons.gui.controls.TitledCollapsiblePanel; import at.tuwien.ifs.somtoolbox.apps.viewer.controls.AbstractViewerControl; public class ControlCollector extends JPanel {// JInternalFrame { /** * */ private static final long serialVersionUID = 1L; private JPanel content; private JMenu controlMenu = null; private ArrayList<AbstractViewerControl> defaultControls = new ArrayList<AbstractViewerControl>(); public ControlCollector(String title, final CommonSOMViewerStateData state) { // super(title); content = new JPanel(); content.setLayout(new VerticalLayout(1)); JScrollPane scp = new JScrollPane(content); scp.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); super.setLayout(new BorderLayout()); super.add(scp, BorderLayout.CENTER); } /** * @param panel the panel to add * @deprecated use {@link #addControl(AbstractViewerControl, boolean)} instead. */ @Deprecated public void addControl(TitledCollapsiblePanel panel) { content.add(panel); revalidate(); } /** * @deprecated use {@link #addControl(AbstractViewerControl, boolean)} directly. */ @Deprecated public void add(AbstractViewerControl avc) { addControl(avc, false); } @Deprecated public void add(TitledCollapsiblePanel comp) { addControl(comp); } @Deprecated public void add(TitledCollapsiblePanel comp, Object contraint) { addControl(comp); } /** * @deprecated use {@link #addControl(AbstractViewerControl, boolean)} directly. */ @Deprecated public void add(AbstractViewerControl avc, Object constraints) { addControl(avc, false); } public void addControl(final AbstractViewerControl avc) { addControl(avc, false); } public void addControl(final AbstractViewerControl avc, boolean isDefaultControl) { addControl(avc, -1, isDefaultControl); } public void addControl(final AbstractViewerControl avc, int index) { addControl(avc, index, false); } public void addControl(final AbstractViewerControl avc, int index, boolean isDefaultControl) { content.add(avc, index); if (controlMenu != null) { controlMenu.add(createMenuEntry(avc), index); } if (isDefaultControl) { defaultControls.add(avc); } revalidate(); } /** * Create and set up a {@link TitledCollapsiblePanel}. Set default colors/borders for Control-Elements. * * @return a ready set up and decorated {@link TitledCollapsiblePanel}. */ @SuppressWarnings("unused") private TitledCollapsiblePanel createCollapsibleControlPanel() { TitledCollapsiblePanel panel = new TitledCollapsiblePanel(); panel.setTitleBackground(Color.decode("#c3d4e8")); // panel.setTitleBackground(Color.RED); panel.setBorder(BorderFactory.createLineBorder(Color.BLACK)); return panel; } public JMenu getControlMenu(String title) { if (controlMenu == null) { controlMenu = new JMenu(title); for (Component c : content.getComponents()) { if (c instanceof AbstractViewerControl) { final AbstractViewerControl avc = (AbstractViewerControl) c; controlMenu.add(createMenuEntry(avc)); } } } return controlMenu; } /** */ private JCheckBoxMenuItem createMenuEntry(final AbstractViewerControl avc) { final JCheckBoxMenuItem chk = new JCheckBoxMenuItem(avc.getTitle(), avc.isVisible()); chk.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { avc.setVisible(chk.isSelected()); } }); avc.addPropertyChangeListener("visible", new PropertyChangeListener() { @Override public void propertyChange(PropertyChangeEvent evt) { if (!evt.getNewValue().equals(chk.isSelected())) { chk.setSelected(evt.getNewValue().equals(Boolean.TRUE)); } } }); return chk; } public ArrayList<AbstractViewerControl> getDefaultControls() { return defaultControls; } }