Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAnsgar Radermacher2013-11-15 15:04:21 +0000
committerAnsgar Radermacher2013-11-15 15:07:52 +0000
commitc221a6d288b433ea074865a24c1f480205c45a0c (patch)
treebdb48ba0a6430e8dbc0f5af4e61610c3fadf92dc /extraplugins/codegen
parent87c39719bf04ae68ed300e770ffbf75667c00859 (diff)
downloadorg.eclipse.papyrus-c221a6d288b433ea074865a24c1f480205c45a0c.tar.gz
org.eclipse.papyrus-c221a6d288b433ea074865a24c1f480205c45a0c.tar.xz
org.eclipse.papyrus-c221a6d288b433ea074865a24c1f480205c45a0c.zip
- bug 420372 - Cannot generate C++ code from new Papyrus model, amended: avoid dialog to apply C++ nature, when triggered via model listener
Diffstat (limited to 'extraplugins/codegen')
-rw-r--r--extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.ui/src/org/eclipse/papyrus/cpp/codegen/ui/handlers/GenerateCodeHandler.java2
-rw-r--r--extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/utils/LocateCppProject.java15
-rw-r--r--extraplugins/codegen/org.eclipse.papyrus.texteditor.cdt/src/org/eclipse/papyrus/texteditor/cdt/handler/PapyrusCDTEditorHandler.java15
-rw-r--r--extraplugins/codegen/org.eclipse.papyrus.texteditor.cdt/src/org/eclipse/papyrus/texteditor/cdt/sync/SyncModelToCDT.java2
4 files changed, 25 insertions, 9 deletions
diff --git a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.ui/src/org/eclipse/papyrus/cpp/codegen/ui/handlers/GenerateCodeHandler.java b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.ui/src/org/eclipse/papyrus/cpp/codegen/ui/handlers/GenerateCodeHandler.java
index 9fb2e7dd0ca..742d89f2a44 100644
--- a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.ui/src/org/eclipse/papyrus/cpp/codegen/ui/handlers/GenerateCodeHandler.java
+++ b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.ui/src/org/eclipse/papyrus/cpp/codegen/ui/handlers/GenerateCodeHandler.java
@@ -65,7 +65,7 @@ public class GenerateCodeHandler extends CmdHandler {
if(selectedEObject instanceof PackageableElement) {
PackageableElement pe = (PackageableElement)selectedEObject;
- IProject modelProject = LocateCppProject.getTargetProject(pe);
+ IProject modelProject = LocateCppProject.getTargetProject(pe, true);
if(modelProject == null) {
return null;
}
diff --git a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/utils/LocateCppProject.java b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/utils/LocateCppProject.java
index 2fe7fceff1a..f44a38875ff 100644
--- a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/utils/LocateCppProject.java
+++ b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/utils/LocateCppProject.java
@@ -24,13 +24,17 @@ import org.eclipse.uml2.uml.PackageableElement;
public class LocateCppProject {
/**
- * Locate and return the target project for the given packagable element. Return null if
+ * Locate and return the target project for the given packageable element. Return null if
* no target project can be found.
*
* Ensures that the target project is correctly setup to contain generated C/C++ code. Does
* not create a new project, but may modify existing ones.
- */
- public static IProject getTargetProject(PackageableElement pe) {
+ *
+ * @param pe a packageable element within a model
+ * @param interactive if true, ask the user to apply the C++ nature if required.
+ * @return the associated project, if the C++ nature is applied.
+ */
+ public static IProject getTargetProject(PackageableElement pe, boolean interactive) {
URI uri = pe.eResource().getURI();
IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
@@ -44,8 +48,9 @@ public class LocateCppProject {
// Make sure the target project has the C and C++ build natures.
try {
if(!modelProject.hasNature(CCProjectNature.CC_NATURE_ID)) {
- boolean apply = MessageDialog.openQuestion(new Shell(),
- "Need to apply C++ nature", "Code generation requires that the underlying project has a C++ nature. Do you want to apply this nature?");
+ boolean apply = interactive && MessageDialog.openQuestion(new Shell(),
+ Messages.LocateCppProject_0,
+ Messages.LocateCppProject_1);
if (!apply) {
return null;
}
diff --git a/extraplugins/codegen/org.eclipse.papyrus.texteditor.cdt/src/org/eclipse/papyrus/texteditor/cdt/handler/PapyrusCDTEditorHandler.java b/extraplugins/codegen/org.eclipse.papyrus.texteditor.cdt/src/org/eclipse/papyrus/texteditor/cdt/handler/PapyrusCDTEditorHandler.java
index 56d94f54026..55191a90107 100644
--- a/extraplugins/codegen/org.eclipse.papyrus.texteditor.cdt/src/org/eclipse/papyrus/texteditor/cdt/handler/PapyrusCDTEditorHandler.java
+++ b/extraplugins/codegen/org.eclipse.papyrus.texteditor.cdt/src/org/eclipse/papyrus/texteditor/cdt/handler/PapyrusCDTEditorHandler.java
@@ -36,6 +36,7 @@ import org.eclipse.papyrus.infra.core.sasheditor.contentprovider.ISashWindowsCon
import org.eclipse.papyrus.infra.core.sasheditor.di.contentprovider.DiSashModelManager;
import org.eclipse.papyrus.infra.core.sasheditor.editor.ISashWindowsContainer;
import org.eclipse.papyrus.infra.core.sashwindows.di.PageRef;
+import org.eclipse.papyrus.infra.core.sashwindows.di.SashPanel;
import org.eclipse.papyrus.infra.core.sashwindows.di.TabFolder;
import org.eclipse.papyrus.infra.core.services.ServiceException;
import org.eclipse.papyrus.infra.core.services.ServicesRegistry;
@@ -141,7 +142,7 @@ public class PapyrusCDTEditorHandler extends CmdHandler {
IPageManager pageMngr = ServiceUtils.getInstance().getIPageManager(serviceRegistry);
Classifier classifierToEdit = getClassifierToEdit();
- if (LocateCppProject.getTargetProject(classifierToEdit) == null) {
+ if (LocateCppProject.getTargetProject(classifierToEdit, true) == null) {
return;
}
@@ -164,10 +165,20 @@ public class PapyrusCDTEditorHandler extends CmdHandler {
DiSashModelManager modelMngr = ServiceUtils.getInstance().getService(DiSashModelManager.class, serviceRegistry);
ISashWindowsContentProvider sashContentProvider = modelMngr.getISashWindowsContentProvider();
Object rootModel = sashContentProvider.getRootModel();
+
if (rootModel instanceof TabFolder) {
+ // root = tabFolder, i.e. there is a single folder
ISashWindowsContainer sashContainer = ServiceUtils.getInstance().getISashWindowsContainer(serviceRegistry);
int index = lookupIndex((TabFolder) rootModel, editorModel);
- sashContentProvider.createFolder(sashContainer.getSelectedTabFolderModel(), index, sashContainer.getSelectedTabFolderModel(), SWT.RIGHT);
+ if (index != -1) {
+ sashContentProvider.createFolder(sashContainer.getSelectedTabFolderModel(), index, sashContainer.getSelectedTabFolderModel(), SWT.RIGHT);
+ }
+ }
+ else if (rootModel instanceof SashPanel) {
+ // multiple tab-folders exist. Find existing one and move editorModel to other
+ // TODO
+ // ISashWindowsContainer sashContainer = ServiceUtils.getInstance().getISashWindowsContainer(serviceRegistry);
+ // sashContentProvider.movePage(sashContainer.getSelectedTabFolderModel(), lookupIndex(sourceTab, editorModel), targetTabModel, -1);
}
}
diff --git a/extraplugins/codegen/org.eclipse.papyrus.texteditor.cdt/src/org/eclipse/papyrus/texteditor/cdt/sync/SyncModelToCDT.java b/extraplugins/codegen/org.eclipse.papyrus.texteditor.cdt/src/org/eclipse/papyrus/texteditor/cdt/sync/SyncModelToCDT.java
index 427b314b1dd..90c2b9b1d33 100644
--- a/extraplugins/codegen/org.eclipse.papyrus.texteditor.cdt/src/org/eclipse/papyrus/texteditor/cdt/sync/SyncModelToCDT.java
+++ b/extraplugins/codegen/org.eclipse.papyrus.texteditor.cdt/src/org/eclipse/papyrus/texteditor/cdt/sync/SyncModelToCDT.java
@@ -42,7 +42,7 @@ public class SyncModelToCDT {
return null;
}
- IProject modelProject = LocateCppProject.getTargetProject(classifier);
+ IProject modelProject = LocateCppProject.getTargetProject(classifier, false);
if(modelProject == null) {
return null;
}

Back to the top