Skip to content
Snippets Groups Projects
Commit 0867e5dc authored by Simon Barner's avatar Simon Barner
Browse files

Integrate autolayout via context menu

TODO: Use progress monitor of Eclipse Job
refs 2898
parent 0bd5c40e
No related branches found
No related tags found
No related merge requests found
org.fortiss.tooling.base.ui/trunk/icons/autolayout.png

255 B

<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.4"?>
<plugin>
<extension
point="org.eclipse.ui.preferencePages">
<extension point="org.eclipse.ui.preferencePages">
<page
class="org.fortiss.tooling.base.ui.preferences.MainPreferencePage"
id="org.fortiss.tooling.base.ui.preferences.main"
......@@ -11,8 +10,7 @@
</extension>
<!-- Keep ID constant in sync with org.fortiss.tooling.base.ui.annotation.view.IAnnotationViewPart.ANNOTATION_VIEW_ID -->
<extension
point="org.eclipse.ui.views">
<extension point="org.eclipse.ui.views">
<view
class="org.fortiss.tooling.base.ui.annotation.view.generic.GenericAnnotationView"
icon="icons/annotation.gif"
......@@ -21,8 +19,7 @@
restorable="true">
</view>
</extension>
<extension
point="org.fortiss.tooling.kernel.uiMessageHandler">
<extension point="org.fortiss.tooling.kernel.uiMessageHandler">
<uiMessageHandler
handler="org.fortiss.tooling.base.ui.dialog.ModelElementWithRefCopyMessageHandler">
<objectClass
......@@ -30,4 +27,10 @@
</objectClass>
</uiMessageHandler>
</extension>
<extension point="org.fortiss.tooling.kernel.ui.contextMenuContribution">
<contextMenuContribution
contributor="org.fortiss.tooling.base.ui.layout.auto.AutoLayoutMenu">
</contextMenuContribution>
</extension>
</plugin>
/*--------------------------------------------------------------------------+
$Id$
| |
| Copyright 2015 ForTISS GmbH |
| |
| Licensed under the Apache License, Version 2.0 (the "License"); |
| you may not use this file except in compliance with the License. |
| You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
+--------------------------------------------------------------------------*/
package org.fortiss.tooling.base.ui.layout.auto;
import static org.fortiss.tooling.kernel.utils.EcoreUtils.pickInstanceOf;
import static org.fortiss.tooling.kernel.utils.LoggingUtils.error;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.ActionContributionItem;
import org.eclipse.jface.action.IContributionItem;
import org.eclipse.jface.resource.ImageDescriptor;
import org.fortiss.tooling.base.model.element.IHierarchicElement;
import org.fortiss.tooling.base.model.layout.ILayoutedModelElement;
import org.fortiss.tooling.base.ui.ToolingBaseUIActivator;
import org.fortiss.tooling.kernel.model.IProjectRootElement;
import org.fortiss.tooling.kernel.ui.extension.IContextMenuContributor;
import org.fortiss.tooling.kernel.ui.extension.data.ContextMenuContextProvider;
/**
* Context menu entry to automatic layout {@link IHierarchicElement}-based models.
*
* @author barner
* @author $Author$
* @version $Rev$
* @ConQAT.Rating RED Hash: 8F8E5CA68EB166C61147452F3A32BB81
*/
public class AutoLayoutMenu implements IContextMenuContributor {
/** String appearing in the context menu. */
private static String MENU_NAME = "Automatic layout";
/** Declares where is located the icon to use for the menu contribution */
private static String MENU_ICON = "icons/autolayout.png";
/** Returns the icon that is visible in the context menu for this entry. */
protected ImageDescriptor getActionIcon() {
return ToolingBaseUIActivator.getImageDescriptor(MENU_ICON);
}
/** Flag if layout algorithm is currently running. */
private static boolean isActive = false;
/** {@link Action} to execute automatic layout. */
protected class LaunchAutoLayoutAction extends Action {
/** {@link IHierarchicElement} selected by user */
private final IHierarchicElement element;
/** Constructor. */
public LaunchAutoLayoutAction(IHierarchicElement recGraph) {
super(MENU_NAME, getActionIcon());
this.element = recGraph;
setEnabled(!isActive);
}
/** {@inheritDoc} */
@Override
public void run() {
isActive = true;
Job autoLayoutJob = new Job("Automatic Layout") {
@Override
protected IStatus run(IProgressMonitor progressMonitor) {
try {
KAutoLayout.performAutoLayout(element);
} catch(Exception e) {
error(ToolingBaseUIActivator.getDefault(), e.getMessage(), e);
} finally {
isActive = false;
}
return progressMonitor.isCanceled() ? Status.CANCEL_STATUS : Status.OK_STATUS;
}
};
autoLayoutJob.setPriority(Job.SHORT);
}
}
/** {@inheritDoc} */
@Override
public List<IContributionItem> getContributedItems(EObject selection,
ContextMenuContextProvider contextProvider) {
if(selection instanceof IHierarchicElement) {
IHierarchicElement element = (IHierarchicElement)selection;
// Skip single top-level model element (e.g., AF3 component architecture)
if(element instanceof IProjectRootElement && element.getContainedElements().size() == 1) {
// There is exactly one child element
element = element.getContainedElements().get(0);
}
if(!pickInstanceOf(ILayoutedModelElement.class, element.getContainedElements())
.isEmpty()) {
List<IContributionItem> contributionItems = new ArrayList<IContributionItem>();
contributionItems.add(new ActionContributionItem(
new LaunchAutoLayoutAction(element)));
return contributionItems;
}
}
return Collections.emptyList();
}
/** {@inheritDoc} */
@Override
public String getMenuSectionID() {
return null;
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment