Skip to content

Commit 7dfd558

Browse files
committed
[PerspectivePersistence] Added an Addon for saving the initial
Perspective state Change-Id: Ib58493d2d172e02b7e43960ba7901ee2f6d55d44 Signed-off-by: Simon Scholz <simon.scholz@vogella.com>
1 parent 4bd0afd commit 7dfd558

3 files changed

Lines changed: 59 additions & 25 deletions

File tree

com.vogella.rcp.jface.translation/META-INF/MANIFEST.MF

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,16 @@ Bundle-Name: WizardTranslation
44
Bundle-SymbolicName: com.vogella.rcp.jface.translation;singleton:=true
55
Bundle-Version: 1.0.0.qualifier
66
Require-Bundle: javax.inject;bundle-version="1.0.0",
7-
org.eclipse.core.runtime;bundle-version="3.10.0",
8-
org.eclipse.swt;bundle-version="3.103.0",
9-
org.eclipse.e4.ui.model.workbench;bundle-version="1.1.0",
10-
org.eclipse.jface;bundle-version="3.10.0",
11-
org.eclipse.e4.ui.services;bundle-version="1.1.0",
12-
org.eclipse.e4.ui.workbench;bundle-version="1.1.0",
13-
org.eclipse.e4.core.di;bundle-version="1.4.0",
14-
org.eclipse.e4.ui.di;bundle-version="1.0.0",
15-
org.eclipse.e4.core.contexts;bundle-version="1.3.100"
7+
org.eclipse.core.runtime,
8+
org.eclipse.swt,
9+
org.eclipse.e4.ui.model.workbench,
10+
org.eclipse.jface,
11+
org.eclipse.e4.ui.services,
12+
org.eclipse.e4.ui.workbench,
13+
org.eclipse.e4.core.di,
14+
org.eclipse.e4.ui.di,
15+
org.eclipse.e4.core.contexts,
16+
org.eclipse.e4.core.services,
17+
org.eclipse.e4.core.di.extensions,
18+
org.eclipse.osgi.services
1619
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
2+
package wizardtranslation.addon;
3+
4+
import javax.inject.Inject;
5+
6+
import org.eclipse.e4.core.di.annotations.Optional;
7+
import org.eclipse.e4.core.di.extensions.EventTopic;
8+
import org.eclipse.e4.ui.model.application.ui.advanced.MPerspective;
9+
import org.eclipse.e4.ui.model.application.ui.basic.MWindow;
10+
import org.eclipse.e4.ui.workbench.UIEvents;
11+
import org.eclipse.e4.ui.workbench.UIEvents.EventTags;
12+
import org.eclipse.e4.ui.workbench.modeling.EModelService;
13+
import org.osgi.service.event.Event;
14+
15+
@SuppressWarnings("restriction")
16+
public class InitialPerspectiveStorageAddon {
17+
18+
@Inject
19+
@Optional
20+
public void selectedElement(@EventTopic(UIEvents.ElementContainer.TOPIC_SELECTEDELEMENT) Event event, EModelService modelService) {
21+
if (!UIEvents.isSET(event)) {
22+
return;
23+
}
24+
25+
Object newlySelectedPerspective = event.getProperty(EventTags.NEW_VALUE);
26+
if (newlySelectedPerspective instanceof MPerspective) {
27+
MPerspective perspectiveToBeCloned = (MPerspective) newlySelectedPerspective;
28+
29+
MWindow topLevelWindow = modelService.getTopLevelWindowFor(perspectiveToBeCloned);
30+
31+
// try to find already existing snippet
32+
if (null == modelService.findSnippet(topLevelWindow, perspectiveToBeCloned.getElementId())) {
33+
// clone perspective in case there is no snippet yet
34+
modelService.cloneElement(perspectiveToBeCloned, topLevelWindow);
35+
}
36+
}
37+
}
38+
}

com.vogella.rcp.jface.translation/src/wizardtranslation/handlers/RestorePerspectiveHandler.java

Lines changed: 9 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -11,33 +11,26 @@
1111

1212
public class RestorePerspectiveHandler {
1313
@Execute
14-
public void execute(EModelService modelService, MWindow window,
15-
EPartService partService) {
14+
public void execute(EModelService modelService, MWindow window, EPartService partService) {
1615

1716
// get active perpective and find stored snippet of this perspective
18-
MPerspective activePerspective = modelService
19-
.getActivePerspective(window);
20-
MUIElement findSnippet = modelService.findSnippet(window,
21-
activePerspective.getElementId());
17+
MPerspective activePerspective = modelService.getActivePerspective(window);
18+
MUIElement perspectiveSnippet = modelService.cloneSnippet(window, activePerspective.getElementId(), window);
2219

2320
// remove existing active perspective
2421
MElementContainer<MUIElement> parent = activePerspective.getParent();
2522
modelService.removePerspectiveModel(activePerspective, window);
2623

2724
// add stored perspective snippet and switch to it
28-
parent.getChildren().add(findSnippet);
29-
partService.switchPerspective((MPerspective) findSnippet);
25+
parent.getChildren().add(perspectiveSnippet);
26+
partService.switchPerspective((MPerspective) perspectiveSnippet);
3027
}
31-
32-
28+
3329
@CanExecute
3430
public boolean canExecute(EModelService modelService, MWindow window) {
3531

3632
// check whether a snippet for the active perspective exists
37-
MPerspective activePerspective = modelService
38-
.getActivePerspective(window);
39-
return modelService.findSnippet(window,
40-
activePerspective.getElementId()) != null;
33+
MPerspective activePerspective = modelService.getActivePerspective(window);
34+
return modelService.findSnippet(window, activePerspective.getElementId()) != null;
4135
}
42-
43-
}
36+
}

0 commit comments

Comments
 (0)