X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.simulation.ui%2Fsrc%2Forg%2Fsimantics%2Fsimulation%2Fui%2Fhandlers%2Fe4%2FSetDuration.java;fp=bundles%2Forg.simantics.simulation.ui%2Fsrc%2Forg%2Fsimantics%2Fsimulation%2Fui%2Fhandlers%2Fe4%2FSetDuration.java;h=01a2ff5b75efcfbbae5f7c8e06324f579c3df4ba;hp=71e72c9e8e7086ac3482951cf157ed78fd863cba;hb=ca59190923cb45fbcde8d18d78c9c1418c1f0471;hpb=5e340942bc7de041b75c6ba281617eb0c800f30a diff --git a/bundles/org.simantics.simulation.ui/src/org/simantics/simulation/ui/handlers/e4/SetDuration.java b/bundles/org.simantics.simulation.ui/src/org/simantics/simulation/ui/handlers/e4/SetDuration.java index 71e72c9e8..01a2ff5b7 100644 --- a/bundles/org.simantics.simulation.ui/src/org/simantics/simulation/ui/handlers/e4/SetDuration.java +++ b/bundles/org.simantics.simulation.ui/src/org/simantics/simulation/ui/handlers/e4/SetDuration.java @@ -11,41 +11,62 @@ *******************************************************************************/ package org.simantics.simulation.ui.handlers.e4; +import javax.inject.Inject; + import org.eclipse.e4.core.di.annotations.Execute; +import org.eclipse.e4.core.di.annotations.Optional; import org.eclipse.e4.core.services.events.IEventBroker; -import org.eclipse.e4.ui.internal.workbench.E4Workbench; +import org.eclipse.e4.ui.di.UIEventTopic; +import org.eclipse.e4.ui.model.application.MApplication; +import org.eclipse.e4.ui.model.application.ui.menu.MMenuItem; +import org.eclipse.e4.ui.workbench.modeling.EModelService; import org.eclipse.jface.dialogs.InputDialog; import org.eclipse.ui.PlatformUI; import org.osgi.service.prefs.BackingStoreException; import org.simantics.simulation.SimulationEvents; import org.simantics.simulation.ui.preferences.SimulationPreferenceUtil; import org.simantics.simulation.ui.preferences.SimulationPreferences; +import org.simantics.simulation.ui.preferences.SimulationPreferences.StepMode; import org.simantics.utils.ui.ExceptionUtils; -import org.simantics.utils.ui.validators.DoubleValidator; public class SetDuration { + private static final String SET_DURATION_ITEM_ID = "org.simantics.simulation.ui.handledmenuitem.setduration"; + + @Inject + private EModelService modelService; + + @Inject private IEventBroker eventBroker; - - public SetDuration() { - eventBroker = E4Workbench.getServiceContext().get(IEventBroker.class); - } - + @Execute - public void execute() { + public void execute(MMenuItem item) { + // This is a radio menu item, execute is called also when it is deselected + if (!item.isSelected()) + return; + SimulationPreferences prefs = SimulationPreferenceUtil.getPrefs(); - InputDialog dialog = new InputDialog(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), - "Set Simulation Step Duration", "Simulation step duration in seconds", "" + prefs.stepDuration, new DoubleValidator()); + TimeInputDialog dialog = new TimeInputDialog(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), + "Set Simulation Step Duration", "simulation step duration", "" + prefs.stepDuration); if (dialog.open() == InputDialog.OK) { final double duration = Double.parseDouble(dialog.getValue()); try { - SimulationPreferenceUtil.flushPrefs(new SimulationPreferences(duration)); + SimulationPreferenceUtil.flushPrefs(prefs.withDuration(duration).withStepMode(StepMode.DURATION)); eventBroker.post(SimulationEvents.TOPIC_STEP_DURATION, duration); + eventBroker.post(SimulationEvents.TOPIC_STEP_MODE, StepMode.DURATION); } catch (BackingStoreException e) { ExceptionUtils.logAndShowError(e); } + } else { + eventBroker.post(SimulationEvents.TOPIC_STEP_MODE, prefs.stepMode); } } + @Inject + @Optional + public void updateElement(@Optional @UIEventTopic(SimulationEvents.TOPIC_STEP_MODE) StepMode mode, MApplication application) { + WorkbenchUtil.setMenuItemSelected(modelService, application, Step.HANDLED_ITEM_ID, SET_DURATION_ITEM_ID, mode == StepMode.DURATION); + } + }