Author: bobtarling Date: 2010-03-24 09:30:45-0700 New Revision: 18149 Added: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLComboBoxNavigator.java trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLTransitionTriggerComboBoxModel.java
Log: New classes for triggers in panels Added: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLComboBoxNavigator.java Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLComboBoxNavigator.java?view=markup&pathrev=18149 ============================================================================== --- (empty file) +++ trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLComboBoxNavigator.java 2010-03-24 09:30:45-0700 @@ -0,0 +1,180 @@ +/* $Id: UMLComboBoxNavigator.java 17881 2010-01-12 21:09:28Z linus $ + ***************************************************************************** + * Copyright (c) 2009 Contributors - see below + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * tfmorris + ***************************************************************************** + * + * Some portions of this file was previously release using the BSD License: + */ + +// Copyright (c) 1996-2007 The Regents of the University of California. All +// Rights Reserved. Permission to use, copy, modify, and distribute this +// software and its documentation without fee, and without a written +// agreement is hereby granted, provided that the above copyright notice +// and this paragraph appear in all copies. This software program and +// documentation are copyrighted by The Regents of the University of +// California. The software program and documentation are supplied "AS +// IS", without any accompanying services from The Regents. The Regents +// does not warrant that the operation of the program will be +// uninterrupted or error-free. The end-user understands that the program +// was developed for research purposes and is advised not to rely +// exclusively on the program for any reason. IN NO EVENT SHALL THE +// UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, +// SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, +// ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF +// THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF +// SUCH DAMAGE. THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY +// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE +// PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF +// CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT, +// UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + +package org.argouml.core.propertypanels.ui; + +import java.awt.BorderLayout; +import java.awt.Dimension; +import java.awt.event.ActionListener; +import java.awt.event.ItemEvent; +import java.awt.event.ItemListener; +import java.util.List; + +import javax.swing.AbstractListModel; +import javax.swing.Action; +import javax.swing.ComboBoxModel; +import javax.swing.ImageIcon; +import javax.swing.JButton; +import javax.swing.JComboBox; +import javax.swing.JPanel; + +import org.argouml.application.helpers.ResourceLoaderWrapper; +import org.argouml.ui.targetmanager.TargetManager; +import org.tigris.swidgets.FlexiGridLayout; +import org.tigris.toolbar.toolbutton.PopupToolBoxButton; + +/** + * This class implements a panel that adds a navigation button to the right of + * the combo box + * + * @author Curt Arnold + * @since 0.9 + */ +public class UMLComboBoxNavigator extends JPanel implements ActionListener, + ItemListener { + + private static ImageIcon icon = ResourceLoaderWrapper + .lookupIconResource("ComboNav"); + + private JComboBox theComboBox; + + private JButton theButton; + + + /** + * Constructor + * + * @param tooltip + * Tooltip key for button + * @param box + * Associated combo box + */ + public UMLComboBoxNavigator(String tooltip, UMLComboBox box) { + super(new BorderLayout()); + theButton = new JButton(icon); + theComboBox = box; + theButton.setPreferredSize(new Dimension(icon.getIconWidth() + 6, icon + .getIconHeight() + 6)); + theButton.setToolTipText(tooltip); + theButton.addActionListener(this); + box.addActionListener(this); + box.addItemListener(this); + add(theComboBox, BorderLayout.CENTER); + add(theButton, BorderLayout.EAST); + + ComboBoxModel model = box.getModel(); + if (model instanceof UMLComboBoxModel) { + final List<Action> actions = ((UMLComboBoxModel) model).getActions(); + if (!actions.isEmpty()) { + PopupToolBoxButton tb = new PopupToolBoxButton(actions.get(0), actions.size(), 1, true); + for (Action action : actions) { + tb.add(action); + } + JPanel buttonPanel = + new JPanel(new FlexiGridLayout(2, 1, FlexiGridLayout.ROWCOLPREFERRED)); + buttonPanel.add(tb); + add(buttonPanel, BorderLayout.WEST); + } + } + Object item = theComboBox.getSelectedItem(); + setButtonEnabled(item); + } + + /** + * Enforce that the preferred height is the minimum height. + * This works around a bug in Windows LAF of JRE5 where a change + * in the preferred/min size of a combo has changed and has a knock + * on effect here. + * If the layout manager for prop panels finds the preferred + * height is greater than the minimum height then it will allow + * this component to resize in error. + * See issue 4333 - Sun has now fixed this bug in JRE6 and so this + * method can be removed once JRE5 is no longer supported. + * @return the preferred size + */ + @Override + public Dimension getPreferredSize() { + return new Dimension( + super.getPreferredSize().width, + getMinimumSize().height); + } + + + + /** + * Fired when the button is pushed. Navigates to the currently selected item + * in the combo box. + * + * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent) + */ + public void actionPerformed(final java.awt.event.ActionEvent event) { + // button action: + if (event.getSource() == theButton) { + Object item = theComboBox.getSelectedItem(); + if (item != null) { + TargetManager.getInstance().setTarget(item); + } + + } + if (event.getSource() == theComboBox) { + Object item = theComboBox.getSelectedItem(); + setButtonEnabled(item); + } + } + + public void itemStateChanged(ItemEvent event) { + if (event.getSource() == theComboBox) { + Object item = theComboBox.getSelectedItem(); + setButtonEnabled(item); + + } + } + + private void setButtonEnabled(Object item) { + if (item != null) { + theButton.setEnabled(true); + } else { + theButton.setEnabled(false); + } + } + + public void setEnabled(boolean enabled) { + theComboBox.setEnabled(enabled); + theComboBox.setEditable(enabled); + } +} Added: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLTransitionTriggerComboBoxModel.java Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLTransitionTriggerComboBoxModel.java?view=markup&pathrev=18149 ============================================================================== --- (empty file) +++ trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLTransitionTriggerComboBoxModel.java 2010-03-24 09:30:45-0700 @@ -0,0 +1,116 @@ +/* $Id: + ***************************************************************************** + * Copyright (c) 2010 Contributors - see below + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Bob Tarling + *****************************************************************************/ + +package org.argouml.core.propertypanels.ui; + +import java.awt.event.ActionEvent; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.List; + +import javax.swing.Action; +import javax.swing.event.ChangeEvent; + +import org.argouml.model.Model; +import org.argouml.ui.ActionCreateContainedModelElement; +import org.argouml.ui.UndoableAction; + + +public class UMLTransitionTriggerComboBoxModel extends UMLComboBoxModel { + + public UMLTransitionTriggerComboBoxModel( + final String propertyName, + final Object target) { + super(propertyName, false); + Model.getPump().addClassModelEventListener(this, + Model.getMetaTypes().getNamespace(), "ownedElement"); + setTarget(target); + } + + @SuppressWarnings("unchecked") + @Override + protected void buildMinimalModelList() { + Collection list = new ArrayList(1); + Object element = getSelectedModelElement(); + if (element != null) { + list.add(element); + } + setElements(list); + } + + @Override + protected boolean isLazy() { + return true; + } + + protected void buildModelList() { + Object transition = getTarget(); + removeAllElements(); + final Collection list = + Model.getModelManagementHelper().getAllModelElementsOfKind( + Model.getFacade().getRoot(getTarget()), + Model.getMetaTypes().getEvent()); + setElements(list); + + setSelectedItem(Model.getFacade().getTrigger(transition)); + } + + protected boolean isValidElement(Object m) { + return Model.getFacade().isAEvent(m); + } + + protected Object getSelectedModelElement() { + if (getTarget() != null) { + return Model.getFacade().getTrigger(getTarget()); + } + return null; + } + + public List<Action> getActions() { + final ArrayList<Action> actions = new ArrayList<Action>(); + actions.add(new ActionCreateContainedModelElement( + Model.getMetaTypes().getCallEvent(), getTarget())); + actions.add(new ActionCreateContainedModelElement( + Model.getMetaTypes().getChangeEvent(), getTarget())); + actions.add(new ActionCreateContainedModelElement( + Model.getMetaTypes().getSignalEvent(), getTarget())); + actions.add(new ActionCreateContainedModelElement( + Model.getMetaTypes().getTimeEvent(), getTarget())); + return actions; + } + + public Action getAction() { + + return new SetAction(); + } + + class SetAction extends UndoableAction { + + /** + * Constructor for ActionSetModelElementNamespace. + */ + public SetAction() { + super(); + } + + public void actionPerformed(ActionEvent e) { + final Object source = e.getSource(); + final UMLComboBox box = (UMLComboBox) source; + final Object trigger = box.getSelectedItem(); + if (trigger != Model.getFacade().getTrigger(getTarget())) { + super.actionPerformed(e); + Model.getStateMachinesHelper().setTrigger(getTarget(), trigger); + } + } + } +} ------------------------------------------------------ http://argouml.tigris.org/ds/viewMessage.do?dsForumId=5905&dsMessageId=2464423 To unsubscribe from this discussion, e-mail: [[email protected]].
