From d11239c402eec37ba28edcfa7ea6ca7c1f01147f Mon Sep 17 00:00:00 2001 From: Tuukka Lehtonen Date: Thu, 15 Sep 2016 21:18:22 +0300 Subject: [PATCH] Sync git svn branch with SVN repository r33198. refs #6688 refs #6692 --- .../graph.tg | Bin 16620 -> 16604 bytes .../graph/DocumentUI.pgraph | 5 +- bundles/org.simantics.event.ontology/graph.tg | Bin 12247 -> 12247 bytes .../graph/Event.pgraph | 6 +- .../graph.tg | Bin 11246 -> 11214 bytes .../graph/Selectionview.pgraph | 7 +- .../schema/toolbarCommand.exsd | 25 ++- .../ui/toolbar/ToolBarCommandRegistry.java | 12 ++ .../ui/toolbar/ToolbarContributor.java | 192 +++++++++++++++--- 9 files changed, 216 insertions(+), 31 deletions(-) diff --git a/bundles/org.simantics.document.ui.ontology/graph.tg b/bundles/org.simantics.document.ui.ontology/graph.tg index a32cf12e7b099dd425525150c5fb82651e506854..66fea40388122bceab20c2c2a1b2f110e3a5154e 100644 GIT binary patch literal 16604 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 RNAcYc#ar@K^f#^MzX1XUL*M`a diff --git a/bundles/org.simantics.document.ui.ontology/graph/DocumentUI.pgraph b/bundles/org.simantics.document.ui.ontology/graph/DocumentUI.pgraph index cb7cd6498..3ac065d5e 100644 --- a/bundles/org.simantics.document.ui.ontology/graph/DocumentUI.pgraph +++ b/bundles/org.simantics.document.ui.ontology/graph/DocumentUI.pgraph @@ -15,6 +15,7 @@ UI = : L0.Ontology L0.HasResourceClass "org.simantics.document.ui.DocumentUIResource" UI.Functions : L0.Library +UI.Functions.editorLoaded : L0.Function UI.CSSEditorContribution L0.HasLabel "Wiki Style Editor" @@ -187,7 +188,7 @@ UI.Alternative : VIEWS.Alternative UI.NoDocument UI.Sash : VIEWS.SashForm - VIEWS.onLoaded UI.Functions.editorLoaded : L0.Function + VIEWS.onLoaded UI.Functions.editorLoaded VIEWS.Control.layoutData _ : VIEWS.GridLayout.GridData VIEWS.GridLayout.GridData.horizontalGrab true VIEWS.GridLayout.GridData.verticalGrab true @@ -243,7 +244,7 @@ UI.NoDocument : VIEWS.Composite VIEWS.Button.modifier UI.Functions.onCreateDocumentButton : L0.Function UI.Editor : VIEWS.Composite - VIEWS.onLoaded UI.Functions.editorLoaded : L0.Function + VIEWS.onLoaded UI.Functions.editorLoaded L0.HasValueType "WriteGraph => Variable -> Variable -> Boolean" VIEWS.Control.layoutData _ : VIEWS.GridLayout.GridData VIEWS.GridLayout.GridData.horizontalGrab true diff --git a/bundles/org.simantics.event.ontology/graph.tg b/bundles/org.simantics.event.ontology/graph.tg index ffa0b161cf6e8896f219017ea35028b68cb89b64..ed95dc026f154b526b304d49d7a9caa1fda91329 100644 GIT binary patch delta 785 zcmcZ}e?5Lfl4yMf0|P@E5DNkESs>0r<7cDsbI|yCX#9LMejysa2*^(bVrd{g!oaZk zp(rC$eLRp81H>>#B%<+?(D=z{{1h}k$O2^ZKpsTq*F*U%|ABykVRE8`q$bos4C+9+ zFd&u$;xj-j1?BSq>GMDwKDk*!ofE2)Va4Rb65Az_)dm37z|;m$E|yf^yh<{HyVRL=>NU_=;$JT~vNOgEguEgEJc66^-wP#`i$ug904cfq`iJ5EQ;JBzBQC#B2^$ HZQ%j{44+xa delta 779 zcmZ9|y-EW?6b0a$D98pYWo5^Jx`L)r2!s%Vr6`t4LTrR3@dr^cBrh;c`V{j7l15Sq zQ}_T{8Z0bQ`y_e>X2b4TII!R4E}XmbWS+eBLOm3bJ7f)+Ap>%s{7il#KawBF_wX%J zMm|OCZ&)a54O}5<30Ej<_d(V-he}p-6HA*&dP0L-C)dbT@&S3DyzA|2n3q^7h1r*%yDke`8;^_H z{lO(9t?2H`x=p?ypOeqXr{t5owH)UMazs8P$K-AD7TMjLJ!m86b&)VP5D9E+Z&dmR Dfkj!? diff --git a/bundles/org.simantics.event.ontology/graph/Event.pgraph b/bundles/org.simantics.event.ontology/graph/Event.pgraph index c48cda2d8..bec7cfe4f 100644 --- a/bundles/org.simantics.event.ontology/graph/Event.pgraph +++ b/bundles/org.simantics.event.ontology/graph/Event.pgraph @@ -100,7 +100,8 @@ EVENT.Returns EVENT.Event + <-- EVENT.Event + --> EVENT.Event EVENT.NoReturn L0.HasDescription "A tag for marking events that are not expected to be returned. This can be used as a hint for user interfaces." @@ -111,7 +112,8 @@ EVENT.ReturnEvent L0.HasDescription "Indicates that an event is a return event." @L0.defTag @L0.symmetric - <-- EVENT.Event --> EVENT.Event + <-- EVENT.Event + --> EVENT.Event /* // Future ideas: diff --git a/bundles/org.simantics.selectionview.ontology/graph.tg b/bundles/org.simantics.selectionview.ontology/graph.tg index 67160405a4e25e7e519fbbd66f93893c8d118d5e..757158d3bf4087c45981b5ebc2ddcf5d58127e0e 100644 GIT binary patch literal 11214 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 lxovsbUMbX~AEs)x+D3dq6-SDbn`PHV "Resource -> Resource" + + + @@ -123,6 +127,25 @@ TODO: investigate, if the mechanism could be used with menus aswell. + + + + + + + + + + + + + + + + + + + diff --git a/bundles/org.simantics.ui/src/org/simantics/ui/toolbar/ToolBarCommandRegistry.java b/bundles/org.simantics.ui/src/org/simantics/ui/toolbar/ToolBarCommandRegistry.java index 7287c5ae3..2e2ea3f19 100644 --- a/bundles/org.simantics.ui/src/org/simantics/ui/toolbar/ToolBarCommandRegistry.java +++ b/bundles/org.simantics.ui/src/org/simantics/ui/toolbar/ToolBarCommandRegistry.java @@ -74,6 +74,12 @@ public class ToolBarCommandRegistry implements IExtensionChangeHandler { ext.type = el.getAttribute("type"); ext.value = el.getAttribute("value"); ext.contributorId = el.getContributor().getName(); + for (IConfigurationElement param : el.getChildren("parameter")) { + Parameter parameter = new Parameter(); + parameter.name = param.getAttribute("name"); + parameter.value = param.getAttribute("value"); + ext.parameters.add(parameter); + } tracker.registerObject(el.getDeclaringExtension(), ext, IExtensionTracker.REF_STRONG); extensions.add(ext); @@ -111,6 +117,7 @@ public class ToolBarCommandRegistry implements IExtensionChangeHandler { public String value; public String image; public String contributorId; + public List parameters = new ArrayList<>(); public ToolbarCommandExtension(String commandId) { super(); this.commandId = commandId; @@ -122,5 +129,10 @@ public class ToolBarCommandRegistry implements IExtensionChangeHandler { } } + public class Parameter { + public String name; + public String value; + } + } diff --git a/bundles/org.simantics.ui/src/org/simantics/ui/toolbar/ToolbarContributor.java b/bundles/org.simantics.ui/src/org/simantics/ui/toolbar/ToolbarContributor.java index 84413bb46..0f7d3e26d 100644 --- a/bundles/org.simantics.ui/src/org/simantics/ui/toolbar/ToolbarContributor.java +++ b/bundles/org.simantics.ui/src/org/simantics/ui/toolbar/ToolbarContributor.java @@ -11,6 +11,9 @@ import org.eclipse.core.commands.Command; import org.eclipse.core.commands.CommandEvent; import org.eclipse.core.commands.ExecutionException; import org.eclipse.core.commands.ICommandListener; +import org.eclipse.core.commands.IParameter; +import org.eclipse.core.commands.Parameterization; +import org.eclipse.core.commands.ParameterizedCommand; import org.eclipse.core.commands.State; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IConfigurationElement; @@ -42,11 +45,12 @@ import org.eclipse.ui.handlers.RadioState; import org.eclipse.ui.handlers.RegistryToggleState; import org.eclipse.ui.menus.WorkbenchWindowControlContribution; import org.eclipse.ui.part.EditorActionBarContributor; - import org.simantics.db.common.utils.Logger; import org.simantics.ui.internal.Activator; +import org.simantics.ui.toolbar.ToolBarCommandRegistry.Parameter; import org.simantics.ui.toolbar.ToolBarCommandRegistry.ToolbarCommandExtension; import org.simantics.utils.datastructures.MapList; +import org.simantics.utils.ui.ExceptionUtils; /** @@ -64,7 +68,8 @@ import org.simantics.utils.datastructures.MapList; public class ToolbarContributor extends EditorActionBarContributor implements ICommandListener, IPartListener, CommandStateListener, IExecutableExtension { private static boolean DEBUG = false; // Print debug messages to console - private static boolean REUSE = true; // true: Reuse contribution items / false: delete items on dispose + private boolean REUSE = true; // true: Reuse contribution items (leave toolbar in disabled state when editor closes) + // false: delete items on dispose (remove toolbar editor closes) private static final String PLATFORM = "platform:/plugin/"; @@ -81,6 +86,8 @@ public class ToolbarContributor extends EditorActionBarContributor implements IC MapList actions = new MapList(); CommandStateRegistry stateRegistry; + + IPartListener partListener; private Map menus = new HashMap(); @@ -88,6 +95,28 @@ public class ToolbarContributor extends EditorActionBarContributor implements IC service = (ICommandService) PlatformUI.getWorkbench().getService(ICommandService.class); handlerService = (IHandlerService) PlatformUI.getWorkbench().getService(IHandlerService.class); stateRegistry = CommandStateRegistry.getInstance(); + // we need part listener to be notified for other editor activations (i.e editors that do not use this contributor). + partListener = new IPartListener() { + + @Override + public void partOpened(IWorkbenchPart part) {} + + @Override + public void partDeactivated(IWorkbenchPart part) {} + + @Override + public void partClosed(IWorkbenchPart part) {} + + @Override + public void partBroughtToTop(IWorkbenchPart part) {} + + @Override + public void partActivated(IWorkbenchPart part) { + if (part instanceof IEditorPart) + setContext2((IEditorPart)part); + } + }; + PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().addPartListener(partListener); } @@ -106,7 +135,9 @@ public class ToolbarContributor extends EditorActionBarContributor implements IC if ("toolbar".equals(key)) { toolbarId = value; - } + } else if ("hide".equals(key)) { + REUSE = !Boolean.parseBoolean(value); + } } } @@ -144,6 +175,26 @@ public class ToolbarContributor extends EditorActionBarContributor implements IC if (DEBUG) System.out.println("Adding command to toolbar " +getToolbarId() + " " + ext); String commandId = ext.commandId; Command command = service.getCommand(commandId); + ICommandWrapper wrapper = new CommandWrapper(command); + + ParameterizedCommand parameterizedCommand = null; + + if (ext.parameters.size() > 0) { + try { + Parameterization parameterizations[] = new Parameterization[ext.parameters.size()]; + for (int i = 0; i < ext.parameters.size(); i++) { + Parameter param = ext.parameters.get(i); + IParameter parameter = command.getParameter(param.name); + parameterizations[i] = new Parameterization(parameter, param.value); + } + parameterizedCommand = new ParameterizedCommand(command, parameterizations); + wrapper = new ParameterizedCommandWrapper(parameterizedCommand); + } catch (org.eclipse.core.commands.common.NotDefinedException e) { + e.printStackTrace(); + ExceptionUtils.logError(e); + return; + } + } String type = ext.type; @@ -157,15 +208,15 @@ public class ToolbarContributor extends EditorActionBarContributor implements IC CommandAction a = null; if (type.equals("toggle") && toggleState != null) { - a = new CommandCheckboxAction(command,name,image); + a = new CommandCheckboxAction(wrapper,name,image); stateRegistry.storeDefaultState(commandId); } else if (radioState != null && ext.value != null) { stateRegistry.storeDefaultState(commandId); if (type.equals("radio")) { - a = new CommandRadioAction(command,name,ext.value,image); + a = new CommandRadioAction(wrapper,name,ext.value,image); } else if (type.equals("combo")) { - a = new CommandRadioAction(command,name,ext.value,image); + a = new CommandRadioAction(wrapper,name,ext.value,image); ComboContribution combo = menus.get(commandId); if (REUSE && combo == null) { combo = (ComboContribution)mgr.find(commandId); @@ -190,7 +241,7 @@ public class ToolbarContributor extends EditorActionBarContributor implements IC return; } } else if (type.equals("push")) { - a = new CommandPushAction(command,name,image); + a = new CommandPushAction(wrapper,name,image); } else { if (DEBUG) System.out.println(ext + " is not valid."); Logger.defaultLogError(ext + " is not valid."); @@ -267,6 +318,14 @@ public class ToolbarContributor extends EditorActionBarContributor implements IC setContext((IEditorPart)part); } + private void setContext2(IEditorPart part) { + if (REUSE) + return; + if (this.activePart == part) + return; + setContext(null); + } + private void setContext(IEditorPart part) { this.activePart = part; if (activePart != null && !parts.contains(activePart)) { @@ -289,8 +348,9 @@ public class ToolbarContributor extends EditorActionBarContributor implements IC a.setEnabled(false); } ComboContribution menu = menus.get(commandId); - if (menu != null) + if (menu != null) { menu.setEnabled(false); + } } } @@ -323,13 +383,16 @@ public class ToolbarContributor extends EditorActionBarContributor implements IC actions.clear(); // without this the contributed toolbar widgets would continue reserve the space even when they are destroyed. - // TODO : how to make the toolbar fix its layout? - // Note: Using REUSE flag alleviates the problem, since the widgets are not removed. coolBarManager.update(true); + mgr.update(true); } CommandStateRegistry.getInstance().removeListener(this); super.dispose(); activePart = null; + if (partListener != null) { + PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().addPartListener(partListener); + partListener = null; + } } boolean settingState = false; @@ -354,10 +417,12 @@ public class ToolbarContributor extends EditorActionBarContributor implements IC private void restoreActionStates() { if (activePart == null) return; + if (DEBUG)System.out.println("Restore " + activePart); // toggles Map defaultToggleStates = stateRegistry.getDefaultToggleStates(); for (String commandId : defaultToggleStates.keySet()) { for (CommandAction a : actions.getValues(commandId)) { + if (DEBUG)System.out.println(commandId + " def " + defaultToggleStates.get(commandId)); a.setChecked(defaultToggleStates.get(commandId)); } } @@ -365,6 +430,7 @@ public class ToolbarContributor extends EditorActionBarContributor implements IC if (editorStates != null) { for (String commandId : editorStates.keySet()) { for (CommandAction a : actions.getValues(commandId)) { + if (DEBUG)System.out.println(commandId + " " + editorStates.get(commandId)); a.setChecked(editorStates.get(commandId)); } } @@ -375,6 +441,7 @@ public class ToolbarContributor extends EditorActionBarContributor implements IC String defaultValue = defaultRadioStates.get(commandId); for (CommandAction a : actions.getValues(commandId)) { CommandRadioAction r = (CommandRadioAction)a; + if (DEBUG)System.out.println(commandId + " def " + r.getValue().equals(defaultValue) +" " + r.getValue()); r.setChecked(r.getValue().equals(defaultValue)); } } @@ -385,6 +452,7 @@ public class ToolbarContributor extends EditorActionBarContributor implements IC String defaultValue = editorRadioStates.get(commandId); for (CommandAction a : actions.getValues(commandId)) { CommandRadioAction r = (CommandRadioAction)a; + if (DEBUG)System.out.println(commandId + " " + r.getValue().equals(defaultValue) +" " + r.getValue()); r.setChecked(r.getValue().equals(defaultValue)); } } @@ -434,14 +502,28 @@ public class ToolbarContributor extends EditorActionBarContributor implements IC return (Boolean)toggleState.getValue(); } - private abstract class CommandAction extends Action { + private interface ICommandWrapper { + + public Command getCommand(); + public String getCommandId(); + public void run(); + } + + private class CommandWrapper implements ICommandWrapper{ private Command command; - public CommandAction(Command command, String name, ImageDescriptor image, int style) { - super(name,style); + public CommandWrapper(Command command) { this.command = command; - if (image != null) - setImageDescriptor(image); + } + + @Override + public Command getCommand() { + return command; + } + + @Override + public String getCommandId() { + return command.getId(); } @Override @@ -453,35 +535,93 @@ public class ToolbarContributor extends EditorActionBarContributor implements IC } } + @Override + public boolean equals(Object obj) { + if (obj.getClass() != getClass()) + return false; + CommandWrapper other= (CommandWrapper)obj; + return other.getCommandId().equals(getCommandId()); + } + } + + private class ParameterizedCommandWrapper implements ICommandWrapper{ + private ParameterizedCommand command; + + public ParameterizedCommandWrapper(ParameterizedCommand command) { + this.command = command; + } + + @Override public Command getCommand() { - return command; + return command.getCommand(); } + @Override public String getCommandId() { return command.getId(); } + @Override + public void run() { + try { + handlerService.executeCommand(command, null); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + public boolean equals(Object obj) { + if (obj.getClass() != getClass()) + return false; + ParameterizedCommandWrapper other= (ParameterizedCommandWrapper)obj; + return other.command.equals(command); + } + } + + private abstract class CommandAction extends Action { + private ICommandWrapper command; + + public CommandAction(ICommandWrapper command, String name, ImageDescriptor image, int style) { + super(name,style); + this.command = command; + if (image != null) + setImageDescriptor(image); + } + + @Override + public void run() { + command.run(); + } + + public Command getCommand() { + return command.getCommand(); + } + + public String getCommandId() { + return command.getCommandId(); + } + @Override public boolean equals(Object obj) { if (obj.getClass() != getClass()) return false; CommandAction other= (CommandAction)obj; - if (!other.getCommandId().equals(getCommandId())) - return false; - return true; + return command.equals(other.command); } @Override public int hashCode() { - return command.getId().hashCode(); + return command.getCommandId().hashCode(); } } + private class CommandCheckboxAction extends CommandAction { - public CommandCheckboxAction(Command command, String name, ImageDescriptor image) { + public CommandCheckboxAction(ICommandWrapper command, String name, ImageDescriptor image) { super(command,name,image,Action.AS_CHECK_BOX); } @@ -505,7 +645,7 @@ public class ToolbarContributor extends EditorActionBarContributor implements IC private String value; - public CommandRadioAction(Command command, String name, String value, ImageDescriptor image) { + public CommandRadioAction(ICommandWrapper command, String name, String value, ImageDescriptor image) { super(command,name,image,Action.AS_RADIO_BUTTON); this.value = value; } @@ -543,7 +683,7 @@ public class ToolbarContributor extends EditorActionBarContributor implements IC private class CommandPushAction extends CommandAction { - public CommandPushAction(Command command, String name, ImageDescriptor image) { + public CommandPushAction(ICommandWrapper command, String name, ImageDescriptor image) { super(command,name,image,Action.AS_PUSH_BUTTON); } @@ -615,6 +755,12 @@ public class ToolbarContributor extends EditorActionBarContributor implements IC if (combo != null) combo.setEnabled(enabled); } + + @Override + public void dispose() { + combo.dispose(); + super.dispose(); + } } } -- 2.43.2