diff options
| author | pguilet | 2017-06-07 14:59:55 +0000 |
|---|---|---|
| committer | pguilet | 2017-06-23 12:59:55 +0000 |
| commit | 7c56d9462359c72248a8c70b683f31759665aeb1 (patch) | |
| tree | 824558ed8413cea99c8de4e59bcdaca62448779f | |
| parent | 2926569faffd8d836c4442c4dacd07c356655fa3 (diff) | |
| download | org.eclipse.sirius-7c56d9462359c72248a8c70b683f31759665aeb1.tar.gz org.eclipse.sirius-7c56d9462359c72248a8c70b683f31759665aeb1.tar.xz org.eclipse.sirius-7c56d9462359c72248a8c70b683f31759665aeb1.zip | |
[517497] Add a close button to aird editor
A button allowing to close the session and thus the aird editor has
been added to the editor's header.
This button is only available for editor pointing at an aird in a
modeling project because it is forbidden to have an opened modeling
project without session loaded.
Bug: 517497
Change-Id: Ic5c455b051afd8865116ceb0bc57f510753d00ad
Signed-off-by: pguilet <pierre.guilet@obeo.fr>
7 files changed, 79 insertions, 16 deletions
diff --git a/plugins/org.eclipse.sirius.ui.editor/plugin.properties b/plugins/org.eclipse.sirius.ui.editor/plugin.properties index 5f2bdb02ca..51e31822ce 100644 --- a/plugins/org.eclipse.sirius.ui.editor/plugin.properties +++ b/plugins/org.eclipse.sirius.ui.editor/plugin.properties @@ -32,5 +32,7 @@ UI_SessionEditor_inputNotHandled_error_message=The aird editor handles only File GraphicalRepresentationHandler_missingDependencies_requirements=Viewpoint ''{0}'' requires viewpoint(s) which are not enabled: {1} GraphicalRepresentationHandler_disabledViewpoint_label=disabled GraphicalRepresentationHandler_representationNumber_label=\u0020({0} representations) +DefaultSessionEditorPage_closeSession_action_label=Unload models +DefaultSessionEditorPage_closeSession_action_tooltip=Unload models and close all associated editors DefaultSessionEditorPage_selectFilterAction_tooltip=Customize view... DefaultSessionEditorPage_collapseAllAction_tooltip=Collapse all
\ No newline at end of file diff --git a/plugins/org.eclipse.sirius.ui.editor/src/org/eclipse/sirius/ui/editor/Messages.java b/plugins/org.eclipse.sirius.ui.editor/src/org/eclipse/sirius/ui/editor/Messages.java index 57250d4f6d..44526b9c86 100644 --- a/plugins/org.eclipse.sirius.ui.editor/src/org/eclipse/sirius/ui/editor/Messages.java +++ b/plugins/org.eclipse.sirius.ui.editor/src/org/eclipse/sirius/ui/editor/Messages.java @@ -82,6 +82,12 @@ public final class Messages { @TranslatableMessage public static String DefaultSessionEditorPage_collapseAllAction_tooltip; + @TranslatableMessage + public static String DefaultSessionEditorPage_closeSession_action_tooltip; + + @TranslatableMessage + public static String DefaultSessionEditorPage_closeSession_action_label; + // CHECKSTYLE:ON private Messages() { diff --git a/plugins/org.eclipse.sirius.ui.editor/src/org/eclipse/sirius/ui/editor/internal/pages/DefaultSessionEditorPage.java b/plugins/org.eclipse.sirius.ui.editor/src/org/eclipse/sirius/ui/editor/internal/pages/DefaultSessionEditorPage.java index a009db32af..69ea72b260 100644 --- a/plugins/org.eclipse.sirius.ui.editor/src/org/eclipse/sirius/ui/editor/internal/pages/DefaultSessionEditorPage.java +++ b/plugins/org.eclipse.sirius.ui.editor/src/org/eclipse/sirius/ui/editor/internal/pages/DefaultSessionEditorPage.java @@ -15,13 +15,17 @@ import java.net.URL; import java.text.MessageFormat; import java.util.stream.Collectors; +import org.eclipse.core.resources.IProject; +import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.Path; import org.eclipse.emf.transaction.RecordingCommand; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.ToolBarManager; import org.eclipse.jface.layout.GridLayoutFactory; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.viewers.TreeViewer; +import org.eclipse.sirius.business.api.modelingproject.ModelingProject; import org.eclipse.sirius.business.api.session.Session; import org.eclipse.sirius.business.api.session.SessionListener; import org.eclipse.sirius.business.api.session.SessionStatus; @@ -29,6 +33,7 @@ import org.eclipse.sirius.ui.editor.Messages; import org.eclipse.sirius.ui.editor.SessionEditor; import org.eclipse.sirius.ui.editor.SessionEditorPlugin; import org.eclipse.sirius.ui.editor.internal.graphicalcomponents.GraphicalSemanticModelsHandler; +import org.eclipse.sirius.ui.tools.internal.actions.session.CloseSessionsAction; import org.eclipse.sirius.ui.tools.internal.graphicalcomponents.GraphicalRepresentationHandler; import org.eclipse.sirius.ui.tools.internal.graphicalcomponents.GraphicalRepresentationHandler.GraphicalRepresentationHandlerBuilder; import org.eclipse.swt.SWT; @@ -127,8 +132,15 @@ public class DefaultSessionEditorPage extends FormPage implements SessionListene @Override protected void createFormContent(final IManagedForm managedForm) { super.createFormContent(managedForm); - final ScrolledForm scrolledForm = managedForm.getForm(); + + if (ResourcesPlugin.getWorkspace() != null && ResourcesPlugin.getWorkspace().getRoot() != null && session.getSessionResource() != null && session.getSessionResource().getURI() != null) { + IProject sessionProject = ResourcesPlugin.getWorkspace().getRoot().getFile(new Path(session.getSessionResource().getURI().toPlatformString(true))).getProject(); + if (!ModelingProject.hasModelingProjectNature(sessionProject)) { + initEditorHeaderToolbar(managedForm); + } + } + FormToolkit toolkit = managedForm.getToolkit(); int sessionUriSegmentSize = session.getSessionResource().getURI().segmentsList().size(); @@ -181,6 +193,21 @@ public class DefaultSessionEditorPage extends FormPage implements SessionListene } /** + * Add the button allowing to close the session and thus the aird editor in + * the editor's header. + * + * @param managedForm + * the form from which we retrieve the toolbar manager to add the + * button. + */ + private void initEditorHeaderToolbar(IManagedForm managedForm) { + CloseSessionsAction closeSessionsAction = new CloseSessionsAction(Messages.DefaultSessionEditorPage_closeSession_action_label, session); + closeSessionsAction.setToolTipText(Messages.DefaultSessionEditorPage_closeSession_action_tooltip); + managedForm.getForm().getToolBarManager().add(closeSessionsAction); + managedForm.getForm().getToolBarManager().update(true); + } + + /** * Create the control allowing to view the semantic models of the session. * * @param toolkit @@ -205,7 +232,7 @@ public class DefaultSessionEditorPage extends FormPage implements SessionListene graphicalSemanticModelsHandler.createControl(modelSectionClient); getSite().setSelectionProvider(graphicalSemanticModelsHandler.getTreeViewer()); - initSectionToolbar(modelSection, graphicalSemanticModelsHandler.getTreeViewer()); + initModelSectionToolbar(modelSection, graphicalSemanticModelsHandler.getTreeViewer()); } /** @@ -217,7 +244,7 @@ public class DefaultSessionEditorPage extends FormPage implements SessionListene * @param treeViewer * {@link TreeViewer} impacted by collapsing and CNF buttons. */ - private void initSectionToolbar(Section section, CommonViewer treeViewer) { + private void initModelSectionToolbar(Section section, CommonViewer treeViewer) { ToolBarManager toolBarManager = new ToolBarManager(SWT.FLAT); ToolBar toolbar = toolBarManager.createControl(section); final Cursor handCursor = Display.getCurrent().getSystemCursor(SWT.CURSOR_HAND); diff --git a/plugins/org.eclipse.sirius.ui/plugin.xml b/plugins/org.eclipse.sirius.ui/plugin.xml index 2523d94777..e1765a7b83 100644 --- a/plugins/org.eclipse.sirius.ui/plugin.xml +++ b/plugins/org.eclipse.sirius.ui/plugin.xml @@ -260,7 +260,7 @@ id="org.eclipse.sirius.ui.fileForSessionTester" type="org.eclipse.core.resources.IFile" namespace="org.eclipse.sirius.ui" - properties="isFileForSessionTester,isSessionFile" + properties="isFileForSessionTester,isSessionFile,isFileInModelingProject" class="org.eclipse.sirius.ui.tools.internal.views.common.FileHandledBySessionTester"> </propertyTester> <propertyTester @@ -658,9 +658,16 @@ <iterate> <adapt type="org.eclipse.core.resources.IResource"> - <test - property="org.eclipse.sirius.ui.isSessionFile"> - </test> + <and> + <test + property="org.eclipse.sirius.ui.isSessionFile"> + </test> + <not> + <test + property="org.eclipse.sirius.ui.isFileInModelingProject"> + </test> + </not> + </and> </adapt> </iterate> </visibleWhen> diff --git a/plugins/org.eclipse.sirius.ui/src/org/eclipse/sirius/ui/tools/internal/actions/session/CloseSessionsAction.java b/plugins/org.eclipse.sirius.ui/src/org/eclipse/sirius/ui/tools/internal/actions/session/CloseSessionsAction.java index 60412d1913..2f3d56f5f9 100644 --- a/plugins/org.eclipse.sirius.ui/src/org/eclipse/sirius/ui/tools/internal/actions/session/CloseSessionsAction.java +++ b/plugins/org.eclipse.sirius.ui/src/org/eclipse/sirius/ui/tools/internal/actions/session/CloseSessionsAction.java @@ -53,6 +53,19 @@ public class CloseSessionsAction extends SelectionListenerAction { } /** + * Constructor. + * + * @param text + * the action text. + * @param session + * the session that should be closed when this action is triggered instead of using selection mechanism. + */ + public CloseSessionsAction(String text, Session session) { + super(text); + sessionsToCloseURI.add(session.getSessionResource().getURI()); + } + + /** * Looks for selected sessions to close. * * {@inheritDoc} diff --git a/plugins/org.eclipse.sirius.ui/src/org/eclipse/sirius/ui/tools/internal/views/common/FileHandledBySessionTester.java b/plugins/org.eclipse.sirius.ui/src/org/eclipse/sirius/ui/tools/internal/views/common/FileHandledBySessionTester.java index 1291e7a620..bbc3d96ffa 100644 --- a/plugins/org.eclipse.sirius.ui/src/org/eclipse/sirius/ui/tools/internal/views/common/FileHandledBySessionTester.java +++ b/plugins/org.eclipse.sirius.ui/src/org/eclipse/sirius/ui/tools/internal/views/common/FileHandledBySessionTester.java @@ -42,6 +42,11 @@ public class FileHandledBySessionTester extends PropertyTester { private static final String SESSION_FILE_PROPERTY = "isSessionFile"; //$NON-NLS-1$ /** + * Property verifying that a given element in an IFile in a modeling project. + */ + private static final String SESSION_IN_MODELING_PROJECT = "isFileInModelingProject"; //$NON-NLS-1$ + + /** * Constructor. */ public FileHandledBySessionTester() { @@ -52,22 +57,26 @@ public class FileHandledBySessionTester extends PropertyTester { */ @Override public boolean test(Object receiver, String property, Object[] args, Object expectedValue) { + boolean result = false; if (SESSION_FILE_PROPERTY.equals(property)) { - return isSessionFile(receiver); + result = isSessionFile(receiver); } else { - boolean result = false; if (receiver instanceof IFile) { IFile receiverFile = (IFile) receiver; - - // Modeling project should show expansion arrows during session load - if (ModelingProject.hasModelingProjectNature(receiverFile.getProject())) { - result = true; + boolean hasModelingProjectNature = ModelingProject.hasModelingProjectNature(receiverFile.getProject()); + if (SESSION_IN_MODELING_PROJECT.equals(property)) { + result = hasModelingProjectNature; } else { - result = new FileQuery(receiverFile.getFileExtension()).isSessionResourceFile() || !FileSessionFinder.getSelectedSessions(Collections.singletonList(receiverFile)).isEmpty(); + // Modeling project should show expansion arrows during session load + if (hasModelingProjectNature) { + result = true; + } else { + result = new FileQuery(receiverFile.getFileExtension()).isSessionResourceFile() || !FileSessionFinder.getSelectedSessions(Collections.singletonList(receiverFile)).isEmpty(); + } } } - return result; } + return result; } /** diff --git a/plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/api/query/FileQuery.java b/plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/api/query/FileQuery.java index 807c13e87c..61c5a092d5 100644 --- a/plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/api/query/FileQuery.java +++ b/plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/api/query/FileQuery.java @@ -59,7 +59,6 @@ public class FileQuery { * @return true if the file extension indicates that it contains a VSM, false otherwise */ public boolean isVSMFile() { - return SiriusUtil.DESCRIPTION_MODEL_EXTENSION.equals(fileExtension); } |
