svn commit: r18025 - trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui
Bob Tarling <[email protected]>
| Newsgroups | gmane.comp.lang.uml.argouml.cvs |
|---|---|
| Message-ID | <[email protected]> |
Author: bobtarling
Date: 2010-02-18 15:11:06-0800
New Revision: 18025
Modified:
trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLMutableLinkedList.java
trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLStateDeferrableEventListModel.java
trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLTransitionTriggerListModel.java
Log:
Issue 5977: Provide popup manus for trigger and defferable events same as previous implementation
Modified: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLMutableLinkedList.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLMutableLinkedList.java?view=diff&pathrev=18025&r1=18024&r2=18025
==============================================================================
--- trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLMutableLinkedList.java (original)
+++ trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLMutableLinkedList.java 2010-02-18 15:11:06-0800
@@ -7,7 +7,7 @@
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
- * bobtarling
+ * Bob Tarling
*****************************************************************************
*
* Some portions of this file was previously release using the BSD License:
@@ -86,6 +86,8 @@
private boolean newPossible = false;
+ // TODO: This should not be an instance variable. It should just be
+ // created and discarded as needed.
private JPopupMenu popupMenu;
private AbstractActionAddModelElement2 addAction = null;
@@ -356,9 +358,7 @@
* @return JPopupMenu
*/
public JPopupMenu getPopupMenu() {
- if (popupMenu == null) {
- popupMenu = new PopupMenu();
- }
+ popupMenu = new PopupMenu();
return popupMenu;
}
Modified: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLStateDeferrableEventListModel.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLStateDeferrableEventListModel.java?view=diff&pathrev=18025&r1=18024&r2=18025
==============================================================================
--- trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLStateDeferrableEventListModel.java (original)
+++ trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLStateDeferrableEventListModel.java 2010-02-18 15:11:06-0800
@@ -7,7 +7,7 @@
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
- * bobtarling
+ * Bob Tarling
*****************************************************************************
*
* Some portions of this file was previously release using the BSD License:
@@ -38,10 +38,20 @@
package org.argouml.core.propertypanels.ui;
+import java.awt.event.ActionEvent;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import javax.swing.JMenu;
import javax.swing.JPopupMenu;
+import org.argouml.i18n.Translator;
+import org.argouml.kernel.ProjectManager;
import org.argouml.model.Model;
-import org.argouml.uml.ui.behavior.state_machines.ActionNewEvent;
+import org.argouml.ui.targetmanager.TargetManager;
+import org.argouml.uml.ui.AbstractActionAddModelElement2;
+import org.argouml.uml.ui.AbstractActionNewModelElement;
/**
* @since Dec 14, 2002
@@ -77,12 +87,137 @@
@Override
public boolean buildPopup(JPopupMenu popup, int index) {
- final PopupMenuNewEvent menu =
- new PopupMenuNewEvent(ActionNewEvent.Roles.DEFERRABLE_EVENT, getTarget());
- menu.buildMenu(popup,
- ActionNewEvent.Roles.DEFERRABLE_EVENT, getTarget(), "action.new");;
+ JMenu subMenu = new JMenu(Translator.localize("action.new"));
+ subMenu.add(new ActionNewEvent(getTarget(), Model.getMetaTypes().getCallEvent(), "button.new-callevent"));
+ subMenu.add(new ActionNewEvent(getTarget(), Model.getMetaTypes().getChangeEvent(), "button.new-changeevent"));
+ subMenu.add(new ActionNewEvent(getTarget(), Model.getMetaTypes().getSignalEvent(), "button.new-signalevent"));
+ subMenu.add(new ActionNewEvent(getTarget(), Model.getMetaTypes().getTimeEvent(), "button.new-timeevent"));
+
+ popup.add(subMenu);
return true;
}
+
+
+ public AbstractActionAddModelElement2 getAddAction() {
+ return new ActionAddEvent();
+ }
+
+ private class ActionAddEvent extends AbstractActionAddModelElement2 {
+
+ /**
+ * Constructor for ActionAddClassifierRoleBase.
+ */
+ public ActionAddEvent() {
+ super();
+ setMultiSelect(true);
+ }
+
+ protected List getChoices() {
+ List vec = new ArrayList();
+ // TODO: the namespace of created events is currently the model.
+ // I think this is wrong, they should be
+ // in the namespace of the activitygraph!
+ // vec.addAll(
+ // Model.getModelManagementHelper().getAllModelElementsOfKind(
+ // Model.getFacade().getNamespace(getTarget()),
+ // Model.getMetaTypes().getEvent()));
+ vec.addAll(Model.getModelManagementHelper().getAllModelElementsOfKind(
+ Model.getFacade().getRoot(getTarget()),
+ Model.getMetaTypes().getEvent()));
+
+ return vec;
+ }
+
+
+ protected List getSelected() {
+ List vec = new ArrayList();
+ Collection events = Model.getFacade().getDeferrableEvents(getTarget());
+ if (events != null) {
+ vec.addAll(events);
+ }
+ return vec;
+ }
+
+
+ protected String getDialogTitle() {
+ return Translator.localize("dialog.title.add-events");
+ }
+
+
+ @Override
+ protected void doIt(Collection selected) {
+ Object state = getTarget();
+ if (!Model.getFacade().isAState(state)) return;
+ Collection oldOnes = new ArrayList(Model.getFacade()
+ .getDeferrableEvents(state));
+ Collection toBeRemoved = new ArrayList(oldOnes);
+ for (Object o : selected) {
+ if (oldOnes.contains(o)) {
+ toBeRemoved.remove(o);
+ } else {
+ Model.getStateMachinesHelper().addDeferrableEvent(state, o);
+ }
+ }
+ for (Object o : toBeRemoved) {
+ Model.getStateMachinesHelper().removeDeferrableEvent(state, o);
+ }
+ }
+ }
+
+
+ private class ActionNewEvent extends AbstractActionNewModelElement {
+
+ private Object eventMetaType;
+
+ /**
+ * Constructor for ActionNewEvent.
+ */
+ public ActionNewEvent(Object transition, Object eventMetaType, String name) {
+ super(name);
+ setTarget(transition);
+ this.eventMetaType = eventMetaType;
+ }
+
+ /**
+ * Implementors should create a concrete event like an instance of
+ * SignalEvent in this method.
+ * @param ns the namespace
+ * @return Object
+ */
+ private Object createEvent(Object ns) {
+ if (eventMetaType.equals(Model.getMetaTypes().getCallEvent())) {
+ return Model.getStateMachinesFactory().buildCallEvent(ns);
+ }
+ if (eventMetaType.equals(Model.getMetaTypes().getChangeEvent())) {
+ return Model.getStateMachinesFactory().buildChangeEvent(ns);
+ }
+ if (eventMetaType.equals(Model.getMetaTypes().getSignalEvent())) {
+ return Model.getStateMachinesFactory().buildSignalEvent(ns);
+ }
+ if (eventMetaType.equals(Model.getMetaTypes().getTimeEvent())) {
+ return Model.getStateMachinesFactory().buildTimeEvent(ns);
+ }
+ throw new IllegalStateException("We expect a metatype which is an Event");
+ }
+
+ /**
+ * Creates the event, sets its role and namespace,
+ * and navigates towards it.
+ *
+ * {@inheritDoc}
+ */
+ public void actionPerformed(ActionEvent e) {
+ super.actionPerformed(e);
+ Object target = getTarget();
+ Object model =
+ ProjectManager.getManager().getCurrentProject().getModel();
+ Object ns = Model.getStateMachinesHelper()
+ .findNamespaceForEvent(target, model);
+ Object event = createEvent(ns);
+ Model.getStateMachinesHelper().addDeferrableEvent(target, event);
+ TargetManager.getInstance().setTarget(event);
+ }
+ }
}
Modified: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLTransitionTriggerListModel.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLTransitionTriggerListModel.java?view=diff&pathrev=18025&r1=18024&r2=18025
==============================================================================
--- trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLTransitionTriggerListModel.java (original)
+++ trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLTransitionTriggerListModel.java 2010-02-18 15:11:06-0800
@@ -1,13 +1,13 @@
/* $Id$
*****************************************************************************
- * Copyright (c) 2009 Contributors - see below
+ * Copyright (c) 2009-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:
- * bobtarling
+ * Bob Tarling
*****************************************************************************
*
* Some portions of this file was previously release using the BSD License:
@@ -39,10 +39,20 @@
// $header$
package org.argouml.core.propertypanels.ui;
+import java.awt.event.ActionEvent;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import javax.swing.JMenu;
import javax.swing.JPopupMenu;
+import org.argouml.i18n.Translator;
+import org.argouml.kernel.ProjectManager;
import org.argouml.model.Model;
-import org.argouml.uml.ui.behavior.state_machines.ActionNewEvent;
+import org.argouml.ui.targetmanager.TargetManager;
+import org.argouml.uml.ui.AbstractActionAddModelElement2;
+import org.argouml.uml.ui.AbstractActionNewModelElement;
/**
* @since Dec 15, 2002
@@ -75,18 +85,138 @@
@Override
public boolean buildPopup(JPopupMenu popup, int index) {
- final PopupMenuNewEvent menu =
- new PopupMenuNewEvent(ActionNewEvent.Roles.TRIGGER, getTarget());
- menu.buildMenu(popup,
- ActionNewEvent.Roles.TRIGGER, getTarget(), "action.new");
+ JMenu subMenu = new JMenu(Translator.localize("action.new"));
+ subMenu.add(new ActionNewEvent(getTarget(), Model.getMetaTypes().getCallEvent(), "button.new-callevent"));
+ subMenu.add(new ActionNewEvent(getTarget(), Model.getMetaTypes().getChangeEvent(), "button.new-changeevent"));
+ subMenu.add(new ActionNewEvent(getTarget(), Model.getMetaTypes().getSignalEvent(), "button.new-signalevent"));
+ subMenu.add(new ActionNewEvent(getTarget(), Model.getMetaTypes().getTimeEvent(), "button.new-timeevent"));
+
+ popup.add(subMenu);
+
return true;
}
+
+ public AbstractActionAddModelElement2 getAddAction() {
+ return new ActionAddEvent();
+ }
@Override
protected boolean hasPopup() {
return true;
}
-
+ private class ActionAddEvent extends AbstractActionAddModelElement2 {
+
+ /**
+ * The uid
+ */
+ private static final long serialVersionUID = -5468330543866735509L;
+
+
+ /**
+ * Constructor for ActionAddEvent.
+ */
+ public ActionAddEvent() {
+ super();
+ setMultiSelect(false);
+ }
+
+
+ protected List getChoices() {
+ List vec = new ArrayList();
+ // TODO: the namespace of enlisted events is currently the model.
+ // I think this is wrong, they should be
+ // in the namespace of the activitygraph!
+// vec.addAll(Model.getModelManagementHelper().getAllModelElementsOfKind(
+// Model.getFacade().getNamespace(getTarget()),
+// Model.getMetaTypes().getEvent()));
+ vec.addAll(Model.getModelManagementHelper().getAllModelElementsOfKind(
+ Model.getFacade().getRoot(getTarget()),
+ Model.getMetaTypes().getEvent()));
+
+ return vec;
+ }
+
+
+ protected List getSelected() {
+ List vec = new ArrayList();
+ Object trigger = Model.getFacade().getTrigger(getTarget());
+ if (trigger != null)
+ vec.add(trigger);
+ return vec;
+ }
+
+
+ protected String getDialogTitle() {
+ return Translator.localize("dialog.title.add-events");
+ }
+
+
+ @Override
+ protected void doIt(Collection selected) {
+ Object trans = getTarget();
+ if (selected == null || selected.size() == 0) {
+ Model.getStateMachinesHelper().setEventAsTrigger(trans, null);
+ } else {
+ Model.getStateMachinesHelper().setEventAsTrigger(trans,
+ selected.iterator().next());
+ }
+ }
+ }
+
+ private class ActionNewEvent extends AbstractActionNewModelElement {
+
+ private Object eventMetaType;
+
+ /**
+ * Constructor for ActionNewEvent.
+ */
+ public ActionNewEvent(Object transition, Object eventMetaType, String name) {
+ super(name);
+ setTarget(transition);
+ this.eventMetaType = eventMetaType;
+ }
+
+ /**
+ * Implementors should create a concrete event like an instance of
+ * SignalEvent in this method.
+ * @param ns the namespace
+ * @return Object
+ */
+ private Object createEvent(Object ns) {
+ if (eventMetaType.equals(Model.getMetaTypes().getCallEvent())) {
+ return Model.getStateMachinesFactory().buildCallEvent(ns);
+ }
+ if (eventMetaType.equals(Model.getMetaTypes().getChangeEvent())) {
+ return Model.getStateMachinesFactory().buildChangeEvent(ns);
+ }
+ if (eventMetaType.equals(Model.getMetaTypes().getSignalEvent())) {
+ return Model.getStateMachinesFactory().buildSignalEvent(ns);
+ }
+ if (eventMetaType.equals(Model.getMetaTypes().getTimeEvent())) {
+ return Model.getStateMachinesFactory().buildTimeEvent(ns);
+ }
+ throw new IllegalStateException("We expect a metatype which is an Event");
+ }
+
+ /**
+ * Creates the event, sets its role and namespace,
+ * and navigates towards it.
+ *
+ * {@inheritDoc}
+ */
+ public void actionPerformed(ActionEvent e) {
+ super.actionPerformed(e);
+ Object target = getTarget();
+ Object model =
+ ProjectManager.getManager().getCurrentProject().getModel();
+ Object ns = Model.getStateMachinesHelper()
+ .findNamespaceForEvent(target, model);
+ Object event = createEvent(ns);
+ Model.getStateMachinesHelper()
+ .setEventAsTrigger(target, event);
+ TargetManager.getInstance().setTarget(event);
+ }
+ }
}
------------------------------------------------------
http://argouml.tigris.org/ds/viewMessage.do?dsForumId=5905&dsMessageId=2448958
To unsubscribe from this discussion, e-mail: [[email protected]].