diff options
author | Ansgar Radermacher | 2013-11-15 15:04:21 +0000 |
---|---|---|
committer | Ansgar Radermacher | 2013-11-15 15:07:52 +0000 |
commit | c221a6d288b433ea074865a24c1f480205c45a0c (patch) | |
tree | bdb48ba0a6430e8dbc0f5af4e61610c3fadf92dc /extraplugins/codegen | |
parent | 87c39719bf04ae68ed300e770ffbf75667c00859 (diff) | |
download | org.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')
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; } |