Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorpguilet2017-06-07 14:59:55 +0000
committerpguilet2017-06-23 12:59:55 +0000
commit7c56d9462359c72248a8c70b683f31759665aeb1 (patch)
tree824558ed8413cea99c8de4e59bcdaca62448779f
parent2926569faffd8d836c4442c4dacd07c356655fa3 (diff)
downloadorg.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>
-rw-r--r--plugins/org.eclipse.sirius.ui.editor/plugin.properties2
-rw-r--r--plugins/org.eclipse.sirius.ui.editor/src/org/eclipse/sirius/ui/editor/Messages.java6
-rw-r--r--plugins/org.eclipse.sirius.ui.editor/src/org/eclipse/sirius/ui/editor/internal/pages/DefaultSessionEditorPage.java33
-rw-r--r--plugins/org.eclipse.sirius.ui/plugin.xml15
-rw-r--r--plugins/org.eclipse.sirius.ui/src/org/eclipse/sirius/ui/tools/internal/actions/session/CloseSessionsAction.java13
-rw-r--r--plugins/org.eclipse.sirius.ui/src/org/eclipse/sirius/ui/tools/internal/views/common/FileHandledBySessionTester.java25
-rw-r--r--plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/api/query/FileQuery.java1
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);
}

Back to the top