Skip to content

Commit

Permalink
[PerspectivePersistence] Added an Addon for saving the initial
Browse files Browse the repository at this point in the history
Perspective state

Change-Id: Ib58493d2d172e02b7e43960ba7901ee2f6d55d44
Signed-off-by: Simon Scholz <simon.scholz@vogella.com>
  • Loading branch information
SimonScholz committed Jun 17, 2015
1 parent 4bd0afd commit 7dfd558
Show file tree
Hide file tree
Showing 3 changed files with 59 additions and 25 deletions.
21 changes: 12 additions & 9 deletions com.vogella.rcp.jface.translation/META-INF/MANIFEST.MF
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,16 @@ Bundle-Name: WizardTranslation
Bundle-SymbolicName: com.vogella.rcp.jface.translation;singleton:=true
Bundle-Version: 1.0.0.qualifier
Require-Bundle: javax.inject;bundle-version="1.0.0",
org.eclipse.core.runtime;bundle-version="3.10.0",
org.eclipse.swt;bundle-version="3.103.0",
org.eclipse.e4.ui.model.workbench;bundle-version="1.1.0",
org.eclipse.jface;bundle-version="3.10.0",
org.eclipse.e4.ui.services;bundle-version="1.1.0",
org.eclipse.e4.ui.workbench;bundle-version="1.1.0",
org.eclipse.e4.core.di;bundle-version="1.4.0",
org.eclipse.e4.ui.di;bundle-version="1.0.0",
org.eclipse.e4.core.contexts;bundle-version="1.3.100"
org.eclipse.core.runtime,
org.eclipse.swt,
org.eclipse.e4.ui.model.workbench,
org.eclipse.jface,
org.eclipse.e4.ui.services,
org.eclipse.e4.ui.workbench,
org.eclipse.e4.core.di,
org.eclipse.e4.ui.di,
org.eclipse.e4.core.contexts,
org.eclipse.e4.core.services,
org.eclipse.e4.core.di.extensions,
org.eclipse.osgi.services
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@

package wizardtranslation.addon;

import javax.inject.Inject;

import org.eclipse.e4.core.di.annotations.Optional;
import org.eclipse.e4.core.di.extensions.EventTopic;
import org.eclipse.e4.ui.model.application.ui.advanced.MPerspective;
import org.eclipse.e4.ui.model.application.ui.basic.MWindow;
import org.eclipse.e4.ui.workbench.UIEvents;
import org.eclipse.e4.ui.workbench.UIEvents.EventTags;
import org.eclipse.e4.ui.workbench.modeling.EModelService;
import org.osgi.service.event.Event;

@SuppressWarnings("restriction")
public class InitialPerspectiveStorageAddon {

@Inject
@Optional
public void selectedElement(@EventTopic(UIEvents.ElementContainer.TOPIC_SELECTEDELEMENT) Event event, EModelService modelService) {
if (!UIEvents.isSET(event)) {
return;
}

Object newlySelectedPerspective = event.getProperty(EventTags.NEW_VALUE);
if (newlySelectedPerspective instanceof MPerspective) {
MPerspective perspectiveToBeCloned = (MPerspective) newlySelectedPerspective;

MWindow topLevelWindow = modelService.getTopLevelWindowFor(perspectiveToBeCloned);

// try to find already existing snippet
if (null == modelService.findSnippet(topLevelWindow, perspectiveToBeCloned.getElementId())) {
// clone perspective in case there is no snippet yet
modelService.cloneElement(perspectiveToBeCloned, topLevelWindow);
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,33 +11,26 @@

public class RestorePerspectiveHandler {
@Execute
public void execute(EModelService modelService, MWindow window,
EPartService partService) {
public void execute(EModelService modelService, MWindow window, EPartService partService) {

// get active perpective and find stored snippet of this perspective
MPerspective activePerspective = modelService
.getActivePerspective(window);
MUIElement findSnippet = modelService.findSnippet(window,
activePerspective.getElementId());
MPerspective activePerspective = modelService.getActivePerspective(window);
MUIElement perspectiveSnippet = modelService.cloneSnippet(window, activePerspective.getElementId(), window);

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

// add stored perspective snippet and switch to it
parent.getChildren().add(findSnippet);
partService.switchPerspective((MPerspective) findSnippet);
parent.getChildren().add(perspectiveSnippet);
partService.switchPerspective((MPerspective) perspectiveSnippet);
}



@CanExecute
public boolean canExecute(EModelService modelService, MWindow window) {

// check whether a snippet for the active perspective exists
MPerspective activePerspective = modelService
.getActivePerspective(window);
return modelService.findSnippet(window,
activePerspective.getElementId()) != null;
MPerspective activePerspective = modelService.getActivePerspective(window);
return modelService.findSnippet(window, activePerspective.getElementId()) != null;
}

}
}

0 comments on commit 7dfd558

Please sign in to comment.