Skip to content

Commit 60e8187

Browse files
committed
Selection changed listener added on plugin start up to filter Update context menu item.
1 parent 9b309dc commit 60e8187

File tree

4 files changed

+145
-26
lines changed

4 files changed

+145
-26
lines changed

src/ServiceStackEclipse/plugin.xml

Lines changed: 33 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -17,25 +17,12 @@
1717
id="net.servicestack.eclipse.newAction">
1818
</action>
1919
</objectContribution>
20-
<objectContribution
21-
adaptable="true"
22-
objectClass="org.eclipse.core.resources.IFile"
23-
id="net.servicestack.eclipse.updateReference">
24-
<action
25-
label="Update ServiceStack Reference"
26-
class="net.servicestack.eclipse.popup.actions.UpdateReference"
27-
menubarPath="additions"
28-
enablesFor="1"
29-
icon="icons/logo-16.png"
30-
id="net.servicestack.eclipse.updateAction">
31-
</action>
32-
</objectContribution>
3320
</extension>
34-
<!--<extension
21+
<extension
3522
point="org.eclipse.ui.commands">
3623
<command
3724
id="net.servicestack.eclipse.commands.sampleCommand"
38-
name="Add ServiceStack Reference...">
25+
name="Update ServiceStack Reference">
3926
</command>
4027
</extension>
4128
<extension
@@ -59,11 +46,37 @@
5946
<menuContribution
6047
locationURI="popup:org.eclipse.jdt.ui.PackageExplorer">
6148
<command
62-
commandId="net.servicestack.eclipse.commands.sampleCommand"
63-
id="net.servicestack.eclipse.menus.sampleCommand"
64-
mnemonic="S">
49+
commandId="net.servicestack.eclipse.commands.sampleCommand"
50+
icon="icons/logo-16.png"
51+
id="net.servicestack.eclipse.menus.sampleCommand"
52+
mnemonic="M">
53+
<visibleWhen
54+
checkEnabled="true">
55+
<with
56+
variable="net.servicestack.eclipse.sourceprovider.active">
57+
<equals
58+
value="ENABLED">
59+
</equals>
60+
</with>
61+
</visibleWhen>
6562
</command>
6663
</menuContribution>
67-
</extension>-->
68-
64+
</extension>
65+
<extension
66+
point="org.eclipse.ui.services">
67+
<sourceProvider
68+
provider="net.servicestack.eclipse.handlers.UpdateCommandState">
69+
<variable
70+
name="net.servicestack.eclipse.handlers.active"
71+
priorityLevel="workbench">
72+
</variable>
73+
</sourceProvider>
74+
</extension>
75+
<extension
76+
id="net.servicetack.eclipse.startup"
77+
point="org.eclipse.ui.startup">
78+
<startup
79+
class="net.servicestack.eclipse.startup.PluginStartup">
80+
</startup>
81+
</extension>
6982
</plugin>

src/ServiceStackEclipse/src/net/servicestack/eclipse/handlers/SampleHandler.java

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import org.eclipse.core.commands.ExecutionException;
66
import org.eclipse.ui.IWorkbenchWindow;
77
import org.eclipse.ui.handlers.HandlerUtil;
8+
import org.eclipse.ui.services.ISourceProviderService;
89
import org.eclipse.jface.dialogs.MessageDialog;
910

1011
/**
@@ -24,12 +25,14 @@ public SampleHandler() {
2425
* from the application context.
2526
*/
2627
public Object execute(ExecutionEvent event) throws ExecutionException {
27-
IWorkbenchWindow window = HandlerUtil.getActiveWorkbenchWindowChecked(event);
28-
MessageDialog.openInformation(
29-
window.getShell(),
30-
"Eclipse",
31-
"Hello, Eclipse world");
32-
return null;
28+
// Get the source provider service
29+
ISourceProviderService sourceProviderService = (ISourceProviderService) HandlerUtil
30+
.getActiveWorkbenchWindow(event).getService(ISourceProviderService.class);
31+
// now get my service
32+
UpdateCommandState commandStateService = (UpdateCommandState) sourceProviderService
33+
.getSourceProvider(UpdateCommandState.MY_STATE);
34+
commandStateService.enabled = false;
35+
return null;
3336
}
3437

3538

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package net.servicestack.eclipse.handlers;
2+
3+
import java.awt.List;
4+
import java.util.HashMap;
5+
import java.util.Map;
6+
7+
import org.eclipse.ui.AbstractSourceProvider;
8+
9+
public class UpdateCommandState extends AbstractSourceProvider {
10+
public final static String MY_STATE = "net.servicestack.eclipse.handlers.active";
11+
public final static String ENABLED = "ENABLED";
12+
public final static String DISENABLED = "DISENABLED";
13+
public boolean enabled = true;
14+
15+
@Override
16+
public void dispose() {
17+
// TODO Auto-generated method stub
18+
19+
}
20+
21+
@Override
22+
public Map getCurrentState() {
23+
Map map = new HashMap(1);
24+
String value = enabled ? ENABLED : DISENABLED;
25+
map.put(MY_STATE, value);
26+
return map;
27+
}
28+
29+
@Override
30+
public String[] getProvidedSourceNames() {
31+
return new String[] { MY_STATE };
32+
}
33+
34+
}
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
package net.servicestack.eclipse.startup;
2+
3+
import org.eclipse.jface.viewers.ISelection;
4+
import org.eclipse.ui.ISelectionListener;
5+
import org.eclipse.ui.ISelectionService;
6+
import org.eclipse.ui.IStartup;
7+
import org.eclipse.ui.IWindowListener;
8+
import org.eclipse.ui.IWorkbench;
9+
import org.eclipse.ui.IWorkbenchPart;
10+
import org.eclipse.ui.IWorkbenchWindow;
11+
import org.eclipse.ui.PlatformUI;
12+
13+
public class PluginStartup implements IStartup, ISelectionListener {
14+
15+
@Override
16+
public void earlyStartup() {
17+
final IWorkbench workbench = PlatformUI.getWorkbench();
18+
workbench.addWindowListener(new IWindowListener() {
19+
20+
@Override
21+
public void windowOpened(IWorkbenchWindow window) {
22+
addSelectionListener(window);
23+
}
24+
25+
@Override
26+
public void windowClosed(IWorkbenchWindow window) {
27+
removeSelectionListener(window);
28+
}
29+
30+
@Override
31+
public void windowActivated(IWorkbenchWindow window) {
32+
// TODO Auto-generated method stub
33+
34+
}
35+
36+
@Override
37+
public void windowDeactivated(IWorkbenchWindow window) {
38+
// TODO Auto-generated method stub
39+
40+
}
41+
});
42+
43+
workbench.getDisplay().asyncExec(new Runnable() {
44+
public void run() {
45+
for (IWorkbenchWindow window : workbench.getWorkbenchWindows()) {
46+
addSelectionListener(window);
47+
}
48+
}
49+
});
50+
}
51+
52+
private void addSelectionListener(IWorkbenchWindow window) {
53+
if (window != null) {
54+
window.getSelectionService().addSelectionListener("org.eclipse.jdt.ui.PackageExplorer", this);
55+
}
56+
}
57+
58+
private void removeSelectionListener(IWorkbenchWindow window) {
59+
if (window != null) {
60+
window.getSelectionService().removeSelectionListener("org.eclipse.jdt.ui.PackageExplorer", this);
61+
}
62+
}
63+
64+
@Override
65+
public void selectionChanged(IWorkbenchPart part, ISelection selection) {
66+
// TODO handle selection changes
67+
System.out.println("selection changed");
68+
}
69+
}

0 commit comments

Comments
 (0)