diff options
author | Tobias Schwarz | 2014-04-15 06:10:01 +0000 |
---|---|---|
committer | Tobias Schwarz | 2014-04-15 06:10:01 +0000 |
commit | a94360980e202068af5fd3c0853da81ce1da04c0 (patch) | |
tree | e3c141668424c99afc7628e10192686c79405993 /target_explorer/plugins | |
parent | 996921d220bde0395f48b898d1756366a9a86612 (diff) | |
download | org.eclipse.tcf-a94360980e202068af5fd3c0853da81ce1da04c0.tar.gz org.eclipse.tcf-a94360980e202068af5fd3c0853da81ce1da04c0.tar.xz org.eclipse.tcf-a94360980e202068af5fd3c0853da81ce1da04c0.zip |
Target Explorer: rework action history
Diffstat (limited to 'target_explorer/plugins')
14 files changed, 504 insertions, 25 deletions
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/META-INF/MANIFEST.MF b/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/META-INF/MANIFEST.MF index eb727ce4f..1d623a84c 100644 --- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/META-INF/MANIFEST.MF +++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/META-INF/MANIFEST.MF @@ -42,6 +42,7 @@ Export-Package: org.eclipse.tcf.te.tcf.ui.activator, org.eclipse.tcf.te.tcf.ui.editor.sections, org.eclipse.tcf.te.tcf.ui.filter, org.eclipse.tcf.te.tcf.ui.handler, + org.eclipse.tcf.te.tcf.ui.handler.images, org.eclipse.tcf.te.tcf.ui.help, org.eclipse.tcf.te.tcf.ui.interfaces, org.eclipse.tcf.te.tcf.ui.internal;x-internal:=true, diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/plugin.properties b/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/plugin.properties index c962dcc26..2fdfa0c2b 100644 --- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/plugin.properties +++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/plugin.properties @@ -31,7 +31,7 @@ ImportWizards.Peer=Connections ImportWizards.PeerDescription=Import connection into the System Management view. ExportWizards.Category.TCF=System Management -ExportWizards.Peer=Configurations +ExportWizards.Peer=Connections ExportWizards.PeerDescription=Export connection from the System Management view. # ***** Decorators ***** diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/plugin.xml b/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/plugin.xml index 4b9453eed..6dccc54ae 100644 --- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/plugin.xml +++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/plugin.xml @@ -350,6 +350,7 @@ <separator name="group.connect" visible="false"/> <separator name="group.launch" visible="true"/> <separator name="group.launch.rundebug" visible="true"/> + <separator name="group.history" visible="true"/> <separator name="group.open" visible="true"/> <separator name="group.delete" visible="false"/> <separator name="group.new" visible="false"/> @@ -611,7 +612,8 @@ </menuContribution> <menuContribution locationURI="menu:org.eclipse.tcf.te.tcf.ui.DefaultContextActionsToolbarContribution?after=group.history"> - <menu + <command commandId="org.eclipse.tcf.te.tcf.ui.toolbar.command.history"/> + <!--menu label="%command.history.label" tooltip="%command.history.tooltip"> <dynamic @@ -622,7 +624,7 @@ <test property="org.eclipse.tcf.te.tcf.ui.hasHistory"/> </with> </visibleWhen> - </menu> + </menu--> </menuContribution> <menuContribution locationURI="menu:org.eclipse.tcf.te.tcf.ui.DefaultContextActionsToolbarContribution?after=group.launch.rundebug"> <command commandId="org.eclipse.tcf.te.tcf.ui.toolbar.command.debug"> @@ -658,6 +660,10 @@ <command commandId="org.eclipse.tcf.te.tcf.ui.toolbar.command.delete"/> </menuContribution> + <menuContribution locationURI="menu:org.eclipse.tcf.te.tcf.ui.main.menu.system?after=group.history"> + <command commandId="org.eclipse.tcf.te.tcf.ui.toolbar.command.history"/> + </menuContribution> + <menuContribution locationURI="menu:org.eclipse.tcf.te.tcf.ui.main.menu.system?after=group.new"> <separator name="group.connections" visible="true"/> <command commandId="org.eclipse.tcf.te.tcf.ui.toolbar.command.select"/> @@ -717,6 +723,13 @@ name="%command.debug.label" description="%command.debug.tooltip"> </command> + <command + id="org.eclipse.tcf.te.tcf.ui.toolbar.command.history" + categoryId="org.eclipse.tcf.te.ui.commands.category" + helpContextId="org.eclipse.tcf.te.tcf.ui.command_History" + name="%command.history.label" + description="%command.history.tooltip"> + </command> </extension> <!-- Command shortcuts --> @@ -725,6 +738,10 @@ contextId="org.eclipse.ui.contexts.window" schemeId="org.eclipse.ui.defaultAcceleratorConfiguration" sequence="M1+M2+C"/> + <key commandId="org.eclipse.tcf.te.tcf.ui.toolbar.command.history" + contextId="org.eclipse.ui.contexts.window" + schemeId="org.eclipse.ui.defaultAcceleratorConfiguration" + sequence="M2+F11"/> </extension> <!-- Command image contributions --> @@ -966,6 +983,27 @@ </with> </enabledWhen> </handler> + + <handler commandId="org.eclipse.tcf.te.tcf.ui.toolbar.command.history"> + <class class="org.eclipse.tcf.te.tcf.ui.handler.ActionHistoryHandler"/> + <activeWhen> + <with variable="defaultContextSelection"> + <instanceof value="org.eclipse.tcf.te.tcf.locator.interfaces.nodes.IPeerNode"/> + </with> + </activeWhen> + <enabledWhen> + <with variable="defaultContextSelection"> + <and> + <test property="org.eclipse.tcf.te.tcf.ui.hasHistory"/> + <adapt type="org.eclipse.tcf.te.core.interfaces.IConnectable"> + <test forcePluginActivation="true" + property="org.eclipse.tcf.te.core.isConnectState" + value="connect"/> + </adapt> + </and> + </with> + </enabledWhen> + </handler> </extension> <!-- Tabbed properties view contributions --> diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/delegates/AbstractDefaultContextToolbarDelegate.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/delegates/AbstractDefaultContextToolbarDelegate.java index b6d416f6e..a6d40c6b3 100644 --- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/delegates/AbstractDefaultContextToolbarDelegate.java +++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/delegates/AbstractDefaultContextToolbarDelegate.java @@ -10,7 +10,7 @@ package org.eclipse.tcf.te.tcf.ui.delegates; -import org.eclipse.jface.resource.ImageDescriptor; +import org.eclipse.swt.graphics.Image; import org.eclipse.tcf.te.tcf.locator.interfaces.nodes.IPeerNode; import org.eclipse.tcf.te.tcf.ui.interfaces.IDefaultContextToolbarDelegate; @@ -44,10 +44,18 @@ public abstract class AbstractDefaultContextToolbarDelegate implements IDefaultC } /* (non-Javadoc) - * @see org.eclipse.tcf.te.tcf.ui.interfaces.IDefaultContextToolbarDelegate#getImageDescriptor(org.eclipse.tcf.te.tcf.locator.interfaces.nodes.IPeerNode, java.lang.String, java.lang.String) + * @see org.eclipse.tcf.te.tcf.ui.interfaces.IDefaultContextToolbarDelegate#getDescription(org.eclipse.tcf.te.tcf.locator.interfaces.nodes.IPeerNode, java.lang.String, java.lang.String) */ @Override - public ImageDescriptor getImageDescriptor(IPeerNode peerNode, String historyId, String entry) { + public String getDescription(IPeerNode peerNode, String historyId, String entry) { + return getLabel(peerNode, historyId, entry); + } + + /* (non-Javadoc) + * @see org.eclipse.tcf.te.tcf.ui.interfaces.IDefaultContextToolbarDelegate#getImage(IPeerNode, String, String) + */ + @Override + public Image getImage(IPeerNode peerNode, String historyId, String entry) { return null; } @@ -57,4 +65,12 @@ public abstract class AbstractDefaultContextToolbarDelegate implements IDefaultC @Override public void execute(IPeerNode peerNode, String historyId, String entry, boolean showDialog) { } + + /* (non-Javadoc) + * @see org.eclipse.tcf.te.tcf.ui.interfaces.IDefaultContextToolbarDelegate#validate(org.eclipse.tcf.te.tcf.locator.interfaces.nodes.IPeerNode, java.lang.String, java.lang.String) + */ + @Override + public boolean validate(IPeerNode peerNode, String historyId, String entry) { + return true; + } } diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/dialogs/AbstractArraySelectionDialog.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/dialogs/AbstractArraySelectionDialog.java index 961463c13..b23b0582d 100644 --- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/dialogs/AbstractArraySelectionDialog.java +++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/dialogs/AbstractArraySelectionDialog.java @@ -13,9 +13,12 @@ import org.eclipse.core.runtime.Assert; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.dialogs.IMessageProvider; import org.eclipse.jface.viewers.ArrayContentProvider; +import org.eclipse.jface.viewers.ColumnViewerToolTipSupport; import org.eclipse.jface.viewers.ColumnWeightData; import org.eclipse.jface.viewers.DecoratingLabelProvider; import org.eclipse.jface.viewers.DoubleClickEvent; +import org.eclipse.jface.viewers.IBaseLabelProvider; +import org.eclipse.jface.viewers.IContentProvider; import org.eclipse.jface.viewers.IDoubleClickListener; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.ISelectionChangedListener; @@ -104,6 +107,8 @@ public abstract class AbstractArraySelectionDialog extends CustomTitleAreaDialog @SuppressWarnings("unused") TableColumn column = new TableColumn(table, SWT.LEFT); + ColumnViewerToolTipSupport.enableFor(viewer); + TableLayout tableLayout = new TableLayout(); tableLayout.addColumnData(new ColumnWeightData(100)); table.setLayout(tableLayout); @@ -111,9 +116,8 @@ public abstract class AbstractArraySelectionDialog extends CustomTitleAreaDialog GridData layoutData = new GridData(SWT.FILL, SWT.FILL, true, true); table.setLayoutData(layoutData); - viewer.setContentProvider(new ArrayContentProvider()); - DelegatingLabelProvider labelProvider = new DelegatingLabelProvider(); - viewer.setLabelProvider(new DecoratingLabelProvider(labelProvider, labelProvider)); + viewer.setContentProvider(getContentProvider()); + viewer.setLabelProvider(getLabelProvider()); // Subclasses may customize the viewer before setting the input configureTableViewer(viewer); @@ -138,6 +142,15 @@ public abstract class AbstractArraySelectionDialog extends CustomTitleAreaDialog updateEnablement(viewer); } + protected IContentProvider getContentProvider() { + return new ArrayContentProvider(); + } + + protected IBaseLabelProvider getLabelProvider() { + DelegatingLabelProvider labelProvider = new DelegatingLabelProvider(); + return new DecoratingLabelProvider(labelProvider, labelProvider); + } + protected void refresh() { ExecutorsUtil.executeInUI(new Runnable() { @Override diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/dialogs/ActionHistorySelectionDialog.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/dialogs/ActionHistorySelectionDialog.java new file mode 100644 index 000000000..fc02598c6 --- /dev/null +++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/dialogs/ActionHistorySelectionDialog.java @@ -0,0 +1,241 @@ +/******************************************************************************* + * Copyright (c) 2014 Wind River Systems, Inc. and others. 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: + * Wind River Systems - initial API and implementation + *******************************************************************************/ + +package org.eclipse.tcf.te.tcf.ui.dialogs; + +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +import org.eclipse.jface.dialogs.IDialogConstants; +import org.eclipse.jface.viewers.CellLabelProvider; +import org.eclipse.jface.viewers.IBaseLabelProvider; +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.jface.viewers.TableViewer; +import org.eclipse.jface.viewers.ViewerCell; +import org.eclipse.osgi.util.NLS; +import org.eclipse.swt.graphics.Image; +import org.eclipse.swt.widgets.Button; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Shell; +import org.eclipse.tcf.te.runtime.persistence.history.HistoryManager; +import org.eclipse.tcf.te.runtime.services.ServiceManager; +import org.eclipse.tcf.te.runtime.services.interfaces.IDelegateService; +import org.eclipse.tcf.te.runtime.services.interfaces.IService; +import org.eclipse.tcf.te.tcf.locator.interfaces.nodes.IPeerNode; +import org.eclipse.tcf.te.tcf.locator.interfaces.services.IDefaultContextService; +import org.eclipse.tcf.te.tcf.ui.activator.UIPlugin; +import org.eclipse.tcf.te.tcf.ui.handler.images.ActionHistoryImageDescriptor; +import org.eclipse.tcf.te.tcf.ui.interfaces.IDefaultContextToolbarDelegate; +import org.eclipse.tcf.te.tcf.ui.nls.Messages; +import org.eclipse.tcf.te.ui.jface.images.AbstractImageDescriptor; +import org.eclipse.tcf.te.ui.swt.SWTControlUtil; + +/** + * ActionHistorySelectionDialog + */ +public class ActionHistorySelectionDialog extends AbstractArraySelectionDialog { + + protected static class Entry { + String historyId; + IPeerNode peerNode; + IDefaultContextToolbarDelegate delegate; + String data; + } + + /** + * Constructor. + * @param shell + * @param contextHelpId + */ + public ActionHistorySelectionDialog(Shell shell, String contextHelpId) { + super(shell, contextHelpId); + } + + /* (non-Javadoc) + * @see org.eclipse.jface.dialogs.Dialog#createButtonsForButtonBar(org.eclipse.swt.widgets.Composite) + */ + @Override + protected void createButtonsForButtonBar(Composite parent) { + createButton(parent, IDialogConstants.CLIENT_ID, Messages.ActionHistorySelectionDialog_button_edit, true); + createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true); + createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false); + } + + /* (non-Javadoc) + * @see org.eclipse.jface.dialogs.Dialog#buttonPressed(int) + */ + @Override + protected void buttonPressed(int buttonId) { + if (IDialogConstants.CLIENT_ID == buttonId) { + editPressed(); + } + else { + super.buttonPressed(buttonId); + } + } + + protected void editPressed() { + Entry entry = getSelectedEntry(); + if (entry != null) { + entry.delegate.execute(entry.peerNode, entry.historyId, entry.data, true); + } + } + + /* (non-Javadoc) + * @see org.eclipse.tcf.te.tcf.ui.dialogs.AbstractArraySelectionDialog#okPressed() + */ + @Override + protected void okPressed() { + Entry entry = getSelectedEntry(); + super.okPressed(); + if (entry != null) { + entry.delegate.execute(entry.peerNode, entry.historyId, entry.data, true); + } + } + + protected Entry getSelectedEntry() { + ISelection sel = viewer.getSelection(); + if (sel instanceof IStructuredSelection && !((IStructuredSelection)sel).isEmpty()) { + Object first = ((IStructuredSelection)sel).getFirstElement(); + if (first instanceof Entry) { + return (Entry)first; + } + } + return null; + } + + /* (non-Javadoc) + * @see org.eclipse.tcf.te.tcf.ui.dialogs.AbstractArraySelectionDialog#updateEnablement(org.eclipse.jface.viewers.TableViewer) + */ + @Override + protected void updateEnablement(TableViewer viewer) { + Entry entry = getSelectedEntry(); + + // Adjust the OK button enablement + Button okButton = getButton(IDialogConstants.OK_ID); + SWTControlUtil.setEnabled(okButton, entry != null && entry.delegate.validate(entry.peerNode, entry.historyId, entry.data)); + + // Adjust the edit button enablement + Button editButton = getButton(IDialogConstants.CLIENT_ID); + SWTControlUtil.setEnabled(editButton, entry != null); + } + + /* (non-Javadoc) + * @see org.eclipse.tcf.te.tcf.ui.dialogs.AbstractArraySelectionDialog#getInput() + */ + @Override + protected Object[] getInput() { + final IPeerNode peerNode = ServiceManager.getInstance().getService(IDefaultContextService.class).getDefaultContext(null); + + IService[] services = ServiceManager.getInstance().getServices(peerNode, IDelegateService.class, false); + Map<String, IDefaultContextToolbarDelegate> historyIds = new LinkedHashMap<String, IDefaultContextToolbarDelegate>(); + String[] ids = new String[0]; + for (IService service : services) { + if (service instanceof IDelegateService) { + IDefaultContextToolbarDelegate delegate = ((IDelegateService)service).getDelegate(peerNode, IDefaultContextToolbarDelegate.class); + if (delegate != null) { + ids = delegate.getToolbarHistoryIds(peerNode, ids); + for (String newId : ids) { + if (!historyIds.containsKey(newId)) { + historyIds.put(newId, delegate); + } + } + } + } + } + + List<Entry> actions = new ArrayList<Entry>(); + for (final String historyId : ids) { + String[] entries = HistoryManager.getInstance().getHistory(historyId); + final IDefaultContextToolbarDelegate delegate = historyIds.get(historyId); + if (entries != null && entries.length > 0) { + for (final String entry : entries) { + Entry action = new Entry(); + action.peerNode = peerNode; + action.historyId = historyId; + action.delegate = delegate; + action.data = entry; + + actions.add(action); + } + } + } + return actions.toArray(); + } + + /* (non-Javadoc) + * @see org.eclipse.tcf.te.tcf.ui.dialogs.AbstractArraySelectionDialog#getLabelProvider() + */ + @Override + protected IBaseLabelProvider getLabelProvider() { + return new CellLabelProvider() { + /* (non-Javadoc) + * @see org.eclipse.jface.viewers.CellLabelProvider#update(org.eclipse.jface.viewers.ViewerCell) + */ + @Override + public void update(ViewerCell cell) { + cell.setText(getText(cell.getElement())); + cell.setImage(getImage(cell.getElement())); + } + + /* (non-Javadoc) + * @see org.eclipse.jface.viewers.CellLabelProvider#getToolTipText(java.lang.Object) + */ + @Override + public String getToolTipText(Object element) { + Entry entry = (Entry)element; + return entry.delegate.getDescription(entry.peerNode, entry.historyId, entry.data); + } + + public String getText(Object element) { + Entry entry = (Entry)element; + return entry.delegate.getLabel(entry.peerNode, entry.historyId, entry.data); + } + + public Image getImage(Object element) { + Entry entry = (Entry)element; + AbstractImageDescriptor descriptor = new ActionHistoryImageDescriptor( + UIPlugin.getDefault().getImageRegistry(), + entry.delegate.getImage(entry.peerNode, entry.historyId, entry.data), + entry.delegate.validate(entry.peerNode, entry.historyId, entry.data)); + return UIPlugin.getSharedImage(descriptor); + } + }; + } + + /* (non-Javadoc) + * @see org.eclipse.tcf.te.tcf.ui.dialogs.AbstractArraySelectionDialog#getDialogTitle() + */ + @Override + protected String getDialogTitle() { + return Messages.ActionHistorySelectionDialog_dialogTitle; + } + + /* (non-Javadoc) + * @see org.eclipse.tcf.te.tcf.ui.dialogs.AbstractArraySelectionDialog#getTitle() + */ + @Override + protected String getTitle() { + IPeerNode peerNode = ServiceManager.getInstance().getService(IDefaultContextService.class).getDefaultContext(null); + return NLS.bind(Messages.ActionHistorySelectionDialog_title, peerNode.getName()); + } + + /* (non-Javadoc) + * @see org.eclipse.tcf.te.tcf.ui.dialogs.AbstractArraySelectionDialog#getDefaultMessage() + */ + @Override + protected String getDefaultMessage() { + return Messages.ActionHistorySelectionDialog_message; + } + +} diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/handler/ActionHistoryHandler.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/handler/ActionHistoryHandler.java new file mode 100644 index 000000000..b08d16e60 --- /dev/null +++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/handler/ActionHistoryHandler.java @@ -0,0 +1,33 @@ +/******************************************************************************* + * Copyright (c) 2014 Wind River Systems, Inc. and others. 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: + * Wind River Systems - initial API and implementation + *******************************************************************************/ + +package org.eclipse.tcf.te.tcf.ui.handler; + +import org.eclipse.core.commands.ExecutionEvent; +import org.eclipse.core.commands.ExecutionException; +import org.eclipse.tcf.te.tcf.ui.dialogs.ActionHistorySelectionDialog; +import org.eclipse.tcf.te.ui.views.handler.OpenEditorHandler; +import org.eclipse.ui.handlers.HandlerUtil; + +/** + * OpenEditorToolbarCommandHandler + */ +public class ActionHistoryHandler extends OpenEditorHandler { + + /* (non-Javadoc) + * @see org.eclipse.tcf.te.ui.views.handler.OpenEditorHandler#execute(org.eclipse.core.commands.ExecutionEvent) + */ + @Override + public Object execute(ExecutionEvent event) throws ExecutionException { + ActionHistorySelectionDialog dialog = new ActionHistorySelectionDialog(HandlerUtil.getActiveShell(event), null); + dialog.open(); + return null; + } +} diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/handler/ActionHistoryToolbarContribution.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/handler/ActionHistoryToolbarContribution.java index 58f7572eb..f689e7834 100644 --- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/handler/ActionHistoryToolbarContribution.java +++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/handler/ActionHistoryToolbarContribution.java @@ -15,11 +15,14 @@ import org.eclipse.swt.widgets.Event; import org.eclipse.tcf.te.core.interfaces.IConnectable; import org.eclipse.tcf.te.runtime.persistence.history.HistoryManager; import org.eclipse.tcf.te.runtime.services.ServiceManager; +import org.eclipse.tcf.te.runtime.services.interfaces.IDelegateService; import org.eclipse.tcf.te.runtime.services.interfaces.IService; -import org.eclipse.tcf.te.runtime.services.interfaces.IUIService; import org.eclipse.tcf.te.tcf.locator.interfaces.nodes.IPeerNode; import org.eclipse.tcf.te.tcf.locator.interfaces.services.IDefaultContextService; +import org.eclipse.tcf.te.tcf.ui.activator.UIPlugin; +import org.eclipse.tcf.te.tcf.ui.handler.images.ActionHistoryImageDescriptor; import org.eclipse.tcf.te.tcf.ui.interfaces.IDefaultContextToolbarDelegate; +import org.eclipse.tcf.te.ui.jface.images.AbstractImageDescriptor; import org.eclipse.ui.actions.CompoundContributionItem; import org.eclipse.ui.menus.IWorkbenchContribution; import org.eclipse.ui.services.IServiceLocator; @@ -49,12 +52,12 @@ public class ActionHistoryToolbarContribution extends CompoundContributionItem i final IPeerNode peerNode = ServiceManager.getInstance().getService(IDefaultContextService.class).getDefaultContext(null); boolean enabled = (peerNode != null && peerNode.getConnectState() == IConnectable.STATE_CONNECTED); - IService[] services = ServiceManager.getInstance().getServices(peerNode, IUIService.class, false); + IService[] services = ServiceManager.getInstance().getServices(peerNode, IDelegateService.class, false); Map<String, IDefaultContextToolbarDelegate> historyIds = new LinkedHashMap<String, IDefaultContextToolbarDelegate>(); String[] ids = new String[0]; for (IService service : services) { - if (service instanceof IUIService) { - IDefaultContextToolbarDelegate delegate = ((IUIService)service).getDelegate(peerNode, IDefaultContextToolbarDelegate.class); + if (service instanceof IDelegateService) { + IDefaultContextToolbarDelegate delegate = ((IDelegateService)service).getDelegate(peerNode, IDefaultContextToolbarDelegate.class); if (delegate != null) { ids = delegate.getToolbarHistoryIds(peerNode, ids); for (String newId : ids) { @@ -89,7 +92,13 @@ public class ActionHistoryToolbarContribution extends CompoundContributionItem i } }; action.setEnabled(enabled); - action.setImageDescriptor(delegate.getImageDescriptor(peerNode, historyId, entry)); + AbstractImageDescriptor descriptor = new ActionHistoryImageDescriptor( + UIPlugin.getDefault().getImageRegistry(), + delegate.getImage(peerNode, historyId, entry), + delegate.validate(peerNode, historyId, entry)); + UIPlugin.getSharedImage(descriptor); + + action.setImageDescriptor(UIPlugin.getImageDescriptor(descriptor.getDecriptorKey())); IContributionItem item = new ActionContributionItem(action); items.add(item); } diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/handler/NewToolbarWizardHandler.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/handler/NewToolbarWizardHandler.java index eb968df11..3f1f691b6 100644 --- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/handler/NewToolbarWizardHandler.java +++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/handler/NewToolbarWizardHandler.java @@ -16,8 +16,8 @@ import java.util.List; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.jface.wizard.IWizard; import org.eclipse.tcf.te.runtime.services.ServiceManager; +import org.eclipse.tcf.te.runtime.services.interfaces.IDelegateService; import org.eclipse.tcf.te.runtime.services.interfaces.IService; -import org.eclipse.tcf.te.runtime.services.interfaces.IUIService; import org.eclipse.tcf.te.tcf.locator.interfaces.nodes.IPeerModel; import org.eclipse.tcf.te.tcf.locator.model.ModelManager; import org.eclipse.tcf.te.tcf.ui.interfaces.IDefaultContextToolbarDelegate; @@ -51,11 +51,11 @@ public class NewToolbarWizardHandler extends AbstractNewSingleWizardHandler { @Override protected String getWizardId(ExecutionEvent event) { IPeerModel peerModel = ModelManager.getPeerModel(); - IService[] services = ServiceManager.getInstance().getServices(peerModel, IUIService.class, false); + IService[] services = ServiceManager.getInstance().getServices(peerModel, IDelegateService.class, false); List<String> ids = new ArrayList<String>(); for (IService service : services) { - if (service instanceof IUIService) { - IDefaultContextToolbarDelegate delegate = ((IUIService)service).getDelegate(peerModel, IDefaultContextToolbarDelegate.class); + if (service instanceof IDelegateService) { + IDefaultContextToolbarDelegate delegate = ((IDelegateService)service).getDelegate(peerModel, IDefaultContextToolbarDelegate.class); if (delegate != null) { String[] newIds = delegate.getToolbarNewConfigWizardIds(peerModel); if (newIds != null) { diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/handler/images/ActionHistoryImageDescriptor.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/handler/images/ActionHistoryImageDescriptor.java new file mode 100644 index 000000000..cbe5b6ce7 --- /dev/null +++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/handler/images/ActionHistoryImageDescriptor.java @@ -0,0 +1,97 @@ +/******************************************************************************* + * Copyright (c) 2014 Wind River Systems, Inc. and others. 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: + * Wind River Systems - initial API and implementation + *******************************************************************************/ +package org.eclipse.tcf.te.tcf.ui.handler.images; + +import org.eclipse.jface.resource.ImageRegistry; +import org.eclipse.swt.graphics.Image; +import org.eclipse.swt.graphics.Point; +import org.eclipse.tcf.te.tcf.ui.internal.ImageConsts; +import org.eclipse.tcf.te.ui.jface.images.AbstractImageDescriptor; + + +/** + * Action history toolbar action image descriptor implementation. + */ +public class ActionHistoryImageDescriptor extends AbstractImageDescriptor { + // the base image to decorate with overlays + private Image baseImage; + // the image size + private Point imageSize; + + // Flags representing the valid state to decorate + private boolean valid; + + + /** + * Constructor. + */ + public ActionHistoryImageDescriptor(final ImageRegistry registry, final Image baseImage, boolean valid) { + super(registry); + + this.baseImage = baseImage; + imageSize = new Point(baseImage.getImageData().width, baseImage.getImageData().height); + + // Determine the current object state to decorate + initialize(valid); + + // build up the key for the image registry + defineKey(baseImage.hashCode()); + } + + /** + * Initialize the image descriptor from the peer model. + * + * @param node The peer model. Must not be <code>null</code>. + */ + protected void initialize(boolean valid) { + this.valid = valid; + } + + /** + * Define the peer image descriptor key. + * + * @param hashCode The hash code of the base image. + */ + protected void defineKey(int hashCode) { + String key = "AHID:" + //$NON-NLS-1$ + hashCode + ":" + //$NON-NLS-1$ + valid; + + setDecriptorKey(key); + } + + /* (non-Javadoc) + * @see org.eclipse.jface.resource.CompositeImageDescriptor#drawCompositeImage(int, int) + */ + @Override + protected void drawCompositeImage(int width, int height) { + drawCentered(baseImage, width, height); + + if (!valid) { + drawTopLeft(ImageConsts.RED_X_OVR); + } + } + + /* (non-Javadoc) + * @see org.eclipse.jface.resource.CompositeImageDescriptor#getSize() + */ + @Override + protected Point getSize() { + return imageSize; + } + + /* (non-Javadoc) + * @see org.eclipse.tcf.te.tcf.ide.util.ui.AbstractImageDescriptor#getBaseImage() + */ + @Override + protected Image getBaseImage() { + return baseImage; + } +} diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/interfaces/IDefaultContextToolbarDelegate.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/interfaces/IDefaultContextToolbarDelegate.java index 157c068b4..aec284435 100644 --- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/interfaces/IDefaultContextToolbarDelegate.java +++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/interfaces/IDefaultContextToolbarDelegate.java @@ -10,7 +10,7 @@ package org.eclipse.tcf.te.tcf.ui.interfaces; -import org.eclipse.jface.resource.ImageDescriptor; +import org.eclipse.swt.graphics.Image; import org.eclipse.tcf.te.tcf.locator.interfaces.nodes.IPeerNode; import org.eclipse.tcf.te.tcf.ui.handler.DefaultContextSelectorToolbarContribution; @@ -45,13 +45,22 @@ public interface IDefaultContextToolbarDelegate { public String getLabel(IPeerNode peerNode, String historyId, String entry); /** - * Get the image descriptor for a history action. + * Get the description for a history action. * @param peerNode * @param historyId * @param entry * @return */ - public ImageDescriptor getImageDescriptor(IPeerNode peerNode, String historyId, String entry); + public String getDescription(IPeerNode peerNode, String historyId, String entry); + + /** + * Get the image for a history action. + * @param peerNode + * @param historyId + * @param entry + * @return + */ + public Image getImage(IPeerNode peerNode, String historyId, String entry); /** * Execute a history action. @@ -62,4 +71,14 @@ public interface IDefaultContextToolbarDelegate { * @param showDialog */ public void execute(IPeerNode peerNode, String historyId, String entry, boolean showDialog); + + /** + * Validate the entry. + * @param peerNode + * @param historyId + * @param entry + * @return + */ + public boolean validate(IPeerNode peerNode, String historyId, String entry); + } diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/internal/PropertyTester.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/internal/PropertyTester.java index e420ae047..4f9ab8171 100644 --- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/internal/PropertyTester.java +++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/internal/PropertyTester.java @@ -17,8 +17,8 @@ import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.tcf.te.runtime.persistence.history.HistoryManager; import org.eclipse.tcf.te.runtime.services.ServiceManager; +import org.eclipse.tcf.te.runtime.services.interfaces.IDelegateService; import org.eclipse.tcf.te.runtime.services.interfaces.IService; -import org.eclipse.tcf.te.runtime.services.interfaces.IUIService; import org.eclipse.tcf.te.tcf.locator.interfaces.nodes.IPeerNode; import org.eclipse.tcf.te.tcf.locator.interfaces.services.IDefaultContextService; import org.eclipse.tcf.te.tcf.locator.model.ModelManager; @@ -52,10 +52,10 @@ public class PropertyTester extends org.eclipse.core.expressions.PropertyTester if ("hasHistory".equals(property) && receiver instanceof IPeerNode) { //$NON-NLS-1$ IPeerNode peerNode = (IPeerNode)receiver; - IService[] services = ServiceManager.getInstance().getServices(peerNode, IUIService.class, false); + IService[] services = ServiceManager.getInstance().getServices(peerNode, IDelegateService.class, false); for (IService service : services) { - if (service instanceof IUIService) { - IDefaultContextToolbarDelegate delegate = ((IUIService)service).getDelegate(peerNode, IDefaultContextToolbarDelegate.class); + if (service instanceof IDelegateService) { + IDefaultContextToolbarDelegate delegate = ((IDelegateService)service).getDelegate(peerNode, IDefaultContextToolbarDelegate.class); if (delegate != null) { String[] newIds = delegate.getToolbarHistoryIds(peerNode, new String[0]); if (newIds != null) { diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/nls/Messages.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/nls/Messages.java index 12550367a..b8a0bd6a2 100644 --- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/nls/Messages.java +++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/nls/Messages.java @@ -151,6 +151,12 @@ public class Messages extends NLS { public static String PeerNodeSelectionDialog_title; public static String PeerNodeSelectionDialog_message; + public static String ActionHistorySelectionDialog_dialogTitle; + public static String ActionHistorySelectionDialog_title; + public static String ActionHistorySelectionDialog_message; + public static String ActionHistorySelectionDialog_button_edit; + public static String ActionHistorySelectionDialog_button_execute; + public static String RedirectHandler_error_title; public static String RedirectHandler_error_redirectFailed; diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/nls/Messages.properties b/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/nls/Messages.properties index db8da4f2f..893be6f61 100644 --- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/nls/Messages.properties +++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/nls/Messages.properties @@ -107,6 +107,12 @@ PeerNodeSelectionDialog_dialogTitle=Select PeerNodeSelectionDialog_title=Select Connection PeerNodeSelectionDialog_message=Select the connection for the operation to perform. +ActionHistorySelectionDialog_dialogTitle=Action History +ActionHistorySelectionDialog_title=Select an Action for ''{0}'' +ActionHistorySelectionDialog_message=Select an action from the history to execute or edit. +ActionHistorySelectionDialog_button_edit=Edit +ActionHistorySelectionDialog_button_execute=Ok + RedirectHandler_error_title=Error RedirectHandler_error_redirectFailed=Failed to redirect target communication. |