From 18b219a6905ae75b809cc57dd26551b788f5188a Mon Sep 17 00:00:00 2001 From: John Camelon Date: Fri, 30 May 2003 15:26:37 +0000 Subject: [PATCH] Patch for Hoda Amer. The user may start the wizard from the navigator view. In this case, the selection is a resource, not a CModel Element, which caused some troubles. This patch fixes this problem. Change log has been updated. --- core/org.eclipse.cdt.ui/ChangeLog | 5 + .../ui/wizards/NewWizardMessages.properties | 1 + .../cdt/ui/wizards/NewClassWizardPage.java | 93 ++++++++++++------- 3 files changed, 66 insertions(+), 33 deletions(-) diff --git a/core/org.eclipse.cdt.ui/ChangeLog b/core/org.eclipse.cdt.ui/ChangeLog index 9c1185fbb1b..9c89fcf3f15 100644 --- a/core/org.eclipse.cdt.ui/ChangeLog +++ b/core/org.eclipse.cdt.ui/ChangeLog @@ -1,3 +1,8 @@ +2003-05-30 Hoda Amer + Added the new class wizard on May 27th + Fixed the inclusion problem on May 28th + Fixed the non-cmodel selection problem May 30th. + 2003-04-27 Alain Magloire PR 36759, the outline does not update diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/wizards/NewWizardMessages.properties b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/wizards/NewWizardMessages.properties index 9da1da9e2a1..6598fe320fa 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/wizards/NewWizardMessages.properties +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/wizards/NewWizardMessages.properties @@ -160,6 +160,7 @@ NewClassWizardPage.warning.ClassNameDiscouraged=Class name is discouraged. {0} NewClassWizardPage.error.InvalidBaseClassName=Base class name is not valid. NewClassWizardPage.warning.BaseClassNotExists=Warning: Base class does not exist in current project. +NewClassWizardPage.operations.getProjectClasses=Looking for classes in project # ------- BaseClassSelectionDialog ----- BaseClassSelectionDialog.title=Classes in this project diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/wizards/NewClassWizardPage.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/wizards/NewClassWizardPage.java index 927e88dec3d..5a41092e480 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/wizards/NewClassWizardPage.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/wizards/NewClassWizardPage.java @@ -197,7 +197,7 @@ public class NewClassWizardPage extends WizardPage implements Listener { setErrorMessage(null); setMessage(null); setControl(composite); - + } protected void createClassNameControls(Composite composite, int nColumns) { @@ -349,12 +349,27 @@ public class NewClassWizardPage extends WizardPage implements Listener { List list= ((IStructuredSelection)sel).toList(); if (list.size() == 1) { Object element= list.get(0); - if ( (element instanceof ICElement) - //&& ((ICElement)element).getElementType() == ICElement.C_CCONTAINER) - ) - { + if (element instanceof ICElement) { return (ICElement)element; - } + } + } + } + return null; + } + + private IResource getSelectionResourceElement(IStructuredSelection sel) { + if (!sel.isEmpty() && sel instanceof IStructuredSelection) { + List list= ((IStructuredSelection)sel).toList(); + if (list.size() == 1) { + Object element= list.get(0); + if (element instanceof IResource) { + if(element instanceof IFile){ + IFile file = (IFile)element; + return (IResource) file.getParent(); + }else { + return (IResource)element; + } + } } } return null; @@ -380,35 +395,39 @@ public class NewClassWizardPage extends WizardPage implements Listener { } private ArrayList findClassElementsInProject(){ - if( elementsOfTypeClassInProject == null ){ - elementsOfTypeClassInProject = new ArrayList(); - IRunnableWithProgress runnable= new IRunnableWithProgress() { - public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { - if (monitor == null) { - monitor= new NullProgressMonitor(); - } - monitor.beginTask("", 5); //$NON-NLS-1$ - try{ - if(eSelection != null){ - ICProject cProject = eSelection.getCProject(); - getChildrenOfTypeClass((IParent)cProject, elementsOfTypeClassInProject, monitor, 1); - } - monitor.worked(5); - } finally{ - monitor.done(); - } + if(eSelection == null){ + return new ArrayList(); + } + + if( elementsOfTypeClassInProject != null ){ + return elementsOfTypeClassInProject; + } + + elementsOfTypeClassInProject = new ArrayList(); + IRunnableWithProgress runnable= new IRunnableWithProgress() { + public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { + if (monitor == null) { + monitor= new NullProgressMonitor(); + } + monitor.beginTask(NewWizardMessages.getString("NewClassWizardPage.operations.getProjectClasses"), 5); //$NON-NLS-1$ + try{ + ICProject cProject = eSelection.getCProject(); + getChildrenOfTypeClass((IParent)cProject, elementsOfTypeClassInProject, monitor, 1); + monitor.worked(5); + } finally{ + monitor.done(); } - }; - - try { - getWizard().getContainer().run(false, true, runnable); - } catch (InvocationTargetException e) { - } catch (InterruptedException e) { - } - finally { } - } - return elementsOfTypeClassInProject; + }; + + try { + getWizard().getContainer().run(false, true, runnable); + } catch (InvocationTargetException e) { + } catch (InterruptedException e) { + } + finally { + } + return elementsOfTypeClassInProject; } protected ICElement chooseBaseClass(){ @@ -613,6 +632,14 @@ public class NewClassWizardPage extends WizardPage implements Listener { // -------------Helper methods for creating the class ------- protected IPath getSelectionPath(){ + if(eSelection == null){ + IResource resourceSelection = getSelectionResourceElement(currentSelection); + if(resourceSelection != null){ + return resourceSelection.getLocation().makeAbsolute(); + } + else + return null; + } // if it is a file, return the parent path if(eSelection instanceof ITranslationUnit) return (eSelection.getParent().getPath());