
org.eclipse.ui.internal.Perspective Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of org.eclipse.ui.workbench Show documentation
Show all versions of org.eclipse.ui.workbench Show documentation
This is org.eclipse.ui.workbench jar used by Scout SDK
/*******************************************************************************
* Copyright (c) 2000, 2015 IBM Corporation 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:
* IBM Corporation - initial API and implementation
* Markus Alexander Kuppe, Versant GmbH - bug 215797
* Sascha Zak - bug 282874
* Lars Vogel - Bug 440810, 440136
* Andrey Loskutov - Bug 404348, 421178, 456727
*******************************************************************************/
package org.eclipse.ui.internal;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.runtime.Assert;
import org.eclipse.e4.ui.model.application.ui.advanced.MPerspective;
import org.eclipse.ui.IPerspectiveDescriptor;
import org.eclipse.ui.contexts.IContextService;
import org.eclipse.ui.internal.e4.compatibility.ModeledPageLayout;
import org.eclipse.ui.internal.registry.ActionSetRegistry;
import org.eclipse.ui.internal.registry.IActionSetDescriptor;
import org.eclipse.ui.internal.registry.PerspectiveDescriptor;
/**
*
*/
public class Perspective {
private final PerspectiveDescriptor descriptor;
private final WorkbenchPage page;
private final List alwaysOnActionSets;
private final List alwaysOffActionSets;
private final MPerspective layout;
public Perspective(PerspectiveDescriptor desc, MPerspective layout, WorkbenchPage page) {
Assert.isNotNull(page);
this.page = page;
this.layout = layout;
descriptor = desc;
alwaysOnActionSets = new ArrayList(2);
alwaysOffActionSets = new ArrayList(2);
}
public void initActionSets() {
if (descriptor != null) {
List alwaysOn = ModeledPageLayout.getIds(layout, ModeledPageLayout.ACTION_SET_TAG);
// read explicitly disabled sets.
String hiddenIDs = page.getHiddenItems();
List alwaysOff = new ArrayList();
String[] hiddenIds = hiddenIDs.split(","); //$NON-NLS-1$
for (String id : hiddenIds) {
if (!id.startsWith(ModeledPageLayout.HIDDEN_ACTIONSET_PREFIX)) {
continue;
}
id = id.substring(ModeledPageLayout.HIDDEN_ACTIONSET_PREFIX.length());
if (!alwaysOff.contains(id)) {
alwaysOff.add(id);
}
}
alwaysOn.removeAll(alwaysOff);
for (IActionSetDescriptor descriptor : createInitialActionSets(alwaysOn)) {
if (!alwaysOnActionSets.contains(descriptor)) {
alwaysOnActionSets.add(descriptor);
}
}
for (IActionSetDescriptor descriptor : createInitialActionSets(alwaysOff)) {
if (!alwaysOffActionSets.contains(descriptor)) {
alwaysOffActionSets.add(descriptor);
}
}
}
}
/**
* Create the initial list of action sets.
*
* @return action set descriptors created from given descriptor id's, can be
* empty but never null.
*/
private List createInitialActionSets(List ids) {
List result = new ArrayList();
ActionSetRegistry reg = WorkbenchPlugin.getDefault().getActionSetRegistry();
for (String id : ids) {
IActionSetDescriptor desc = reg.findActionSet(id);
if (desc != null) {
result.add(desc);
} else {
// plugin with actionSet was removed
// we remember then so it's available when added back
}
}
return result;
}
/**
* Returns the perspective.
*
* @return can return null!
*/
public IPerspectiveDescriptor getDesc() {
return descriptor;
}
/**
* Returns the new wizard shortcuts associated with this perspective.
*
* @return an array of new wizard identifiers
*/
public String[] getNewWizardShortcuts() {
return page.getNewWizardShortcuts();
}
/**
* Returns the perspective shortcuts associated with this perspective.
*
* @return an array of perspective identifiers
*/
public String[] getPerspectiveShortcuts() {
return page.getPerspectiveShortcuts();
}
/**
* Returns the show view shortcuts associated with this perspective.
*
* @return an array of view identifiers
*/
public String[] getShowViewShortcuts() {
return page.getShowViewShortcuts();
}
private void removeAlwaysOn(IActionSetDescriptor descriptor) {
if (alwaysOnActionSets.contains(descriptor)) {
alwaysOnActionSets.remove(descriptor);
page.perspectiveActionSetChanged(this, descriptor, ActionSetManager.CHANGE_HIDE);
}
}
private void addAlwaysOff(IActionSetDescriptor descriptor) {
if (!alwaysOffActionSets.contains(descriptor)) {
alwaysOffActionSets.add(descriptor);
page.perspectiveActionSetChanged(this, descriptor, ActionSetManager.CHANGE_MASK);
removeAlwaysOn(descriptor);
}
}
private void addAlwaysOn(IActionSetDescriptor descriptor) {
if (!alwaysOnActionSets.contains(descriptor)) {
alwaysOnActionSets.add(descriptor);
page.perspectiveActionSetChanged(this, descriptor, ActionSetManager.CHANGE_SHOW);
removeAlwaysOff(descriptor);
}
}
private void removeAlwaysOff(IActionSetDescriptor descriptor) {
if (alwaysOffActionSets.contains(descriptor)) {
alwaysOffActionSets.remove(descriptor);
page.perspectiveActionSetChanged(this, descriptor, ActionSetManager.CHANGE_UNMASK);
}
}
public void turnOnActionSets(IActionSetDescriptor[] newArray) {
for (IActionSetDescriptor descriptor : newArray) {
addActionSet(descriptor);
}
}
public void turnOffActionSets(IActionSetDescriptor[] toDisable) {
for (IActionSetDescriptor descriptor : toDisable) {
turnOffActionSet(descriptor);
}
}
public void turnOffActionSet(IActionSetDescriptor toDisable) {
removeActionSet(toDisable);
}
// for dynamic UI
protected void addActionSet(IActionSetDescriptor newDesc) {
IContextService service = page.getWorkbenchWindow().getService(IContextService.class);
try {
service.deferUpdates(true);
for (IActionSetDescriptor desc : alwaysOnActionSets) {
if (desc.getId().equals(newDesc.getId())) {
removeAlwaysOn(desc);
removeAlwaysOff(desc);
break;
}
}
addAlwaysOn(newDesc);
final String actionSetID = newDesc.getId();
// Add Tags
String tag = ModeledPageLayout.ACTION_SET_TAG + actionSetID;
if (!layout.getTags().contains(tag)) {
layout.getTags().add(tag);
}
} finally {
service.deferUpdates(false);
}
}
// for dynamic UI
protected void removeActionSet(IActionSetDescriptor toRemove) {
String id = toRemove.getId();
IContextService service = page.getWorkbenchWindow().getService(IContextService.class);
try {
service.deferUpdates(true);
// this advance for loop only works because it breaks out of it
// right after the removal
for (IActionSetDescriptor desc : alwaysOnActionSets) {
if (desc.getId().equals(id)) {
removeAlwaysOn(desc);
break;
}
}
// this advance for loop only works because it breaks out of it
// right after the removal
for (IActionSetDescriptor desc : alwaysOffActionSets) {
if (desc.getId().equals(id)) {
removeAlwaysOff(desc);
break;
}
}
addAlwaysOff(toRemove);
// not necessary to remove the ModeledPageLayout.ACTION_SET_TAG + id
// tag as the entry is only disabled.
} finally {
service.deferUpdates(false);
}
}
public List getAlwaysOnActionSets() {
return alwaysOnActionSets;
}
public List getAlwaysOffActionSets() {
return alwaysOffActionSets;
}
public void updateActionBars() {
page.getActionBars().getMenuManager().updateAll(true);
page.resetToolBarLayout();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy