package pipe.actions.gui; import java.beans.PropertyChangeListener; import java.beans.PropertyChangeSupport; import java.io.Serializable; /** * This class contains information about the underlying state of the application * For example whether it is in animation mode and what action is currently selected */ @SuppressWarnings("serial") public class PipeApplicationModel implements Serializable { /** * Message fired when animation mode is toggled */ public static final String TOGGLE_ANIMATION_MODE = "Toggle animation"; /** * Message fired when the action type is changed on the tool bar */ public static final String TYPE_ACTION_CHANGE_MESSAGE = "Type action change"; /** * Property change support for publish-subscribe architecture */ protected final PropertyChangeSupport changeSupport = new PropertyChangeSupport(this); /** * Zoom percentages */ private final String[] zoomExamples = new String[]{"40%", "60%", "80%", "100%", "120%", "140%", "160%", "180%", "200%", "300%"}; /** * Application name */ private final String name; /** * True if edition to the Petri net is allowed */ private boolean editionAllowed = true; /** * Legacy mode selected */ private int mode; /** * Legacy old mode */ private int oldMode; /** * Determines if PIPE is viewing in animation mode or not */ private boolean inAnimationMode; /** * Type that is currently selected on the petrinet */ private CreateAction selectedType; /** * Constructor * @param version e.g. 5 */ public PipeApplicationModel(String version) { name = "PIPE: Platform Independent Petri Net Editor " + version; } /** * Adds a listener for changes in this model. * @param listener to add */ public void addPropertyChangeListener(PropertyChangeListener listener) { changeSupport.addPropertyChangeListener(listener); } /** * Remove a listener from this model * @param listener to remove */ public void removePropertyChangeListener(PropertyChangeListener listener) { changeSupport.removePropertyChangeListener(listener); } /** * * @return true if the net is in animation mode */ public boolean isInAnimationMode() { return inAnimationMode; } /** * Set whether the Petri net should be in animation mode or not * @param inAnimationMode true for animation mode, false for edit mode */ public void setInAnimationMode(boolean inAnimationMode) { boolean old = this.inAnimationMode; this.inAnimationMode = inAnimationMode; if (old != inAnimationMode) { changeSupport.firePropertyChange(TOGGLE_ANIMATION_MODE, old, inAnimationMode); } } /** * * @return zoom percentages to be displayed */ public String[] getZoomExamples() { return zoomExamples; } /** * * @return name of the application */ public String getName() { return name; } /** * * @return true if edition is allowed */ public boolean isEditionAllowed() { return editionAllowed; } /** * * Set whether changes are allowed to be made to the Petri net at the given time * * @param flag true if edition is allowed, false otherwise */ public void setEditionAllowed(boolean flag) { editionAllowed = flag; } /** * * @return current mode */ public int getMode() { return mode; } /** * * Set the current GUIAction mode * @param mode for GUI actions */ public void setMode(int mode) { this.mode = mode; } /** * * @param action set the currently selected action on the tool bar */ public void selectTypeAction(CreateAction action) { CreateAction old = this.selectedType; selectedType = action; changeSupport.firePropertyChange(TYPE_ACTION_CHANGE_MESSAGE, old, selectedType); } /** * * @return the currently selected action on the tool bar */ public CreateAction getSelectedAction() { return selectedType; } }