Download
Getting Started
Members
Projects
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
More
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
Toggle navigation
Bugzilla – Attachment 142435 Details for
Bug 277879
Fortran files have C icon in Fortran Projects view
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
[patch]
Patch and icons to distinguish Fortran files and projects
photran_nature_patch.txt (text/plain), 16.99 KB, created by
Matt Scarpino
on 2009-07-23 14:45:30 EDT
(
hide
)
Description:
Patch and icons to distinguish Fortran files and projects
Filename:
MIME Type:
Creator:
Matt Scarpino
Created:
2009-07-23 14:45:30 EDT
Size:
16.99 KB
patch
obsolete
>### Eclipse Workspace Patch 1.0 >#P org.eclipse.photran.ui >Index: plugin.xml >=================================================================== >RCS file: /cvsroot/technology/org.eclipse.photran/org.eclipse.photran.ui/plugin.xml,v >retrieving revision 1.20 >diff -u -r1.20 plugin.xml >--- plugin.xml 11 Feb 2009 18:00:52 -0000 1.20 >+++ plugin.xml 23 Jul 2009 18:38:39 -0000 >@@ -230,4 +230,16 @@ > id="sourceViewerConfig" > name="Source Viewer Configuration" > schema="schema/sourceViewerConfig.exsd"/> >+ >+ <!--=============================================--> >+ <!-- Image Associated with Photran Projects --> >+ <!--=============================================--> >+ <extension >+ point="org.eclipse.ui.ide.projectNatureImages"> >+ <image >+ icon="icons/full/obj16/f_ovr.gif" >+ natureId="org.eclipse.photran.core.fnature" >+ id="org.eclipse.photran.ui.fProjectNatureImage"> >+ </image> >+ </extension> > </plugin> >#P org.eclipse.photran.core >Index: plugin.xml >=================================================================== >RCS file: /cvsroot/technology/org.eclipse.photran/org.eclipse.photran.core/plugin.xml,v >retrieving revision 1.16 >diff -u -r1.16 plugin.xml >--- plugin.xml 27 Aug 2008 21:38:59 -0000 1.16 >+++ plugin.xml 23 Jul 2009 18:38:40 -0000 >@@ -129,4 +129,18 @@ > priority="high"/> > </extension> > >+<!-- =================================================================================== --> >+<!-- Photran Nature for Fortran Projects --> >+<!-- =================================================================================== --> >+ <extension >+ id="fnature" >+ name="%fnature.name" >+ point="org.eclipse.core.resources.natures"> >+ <runtime> >+ <run >+ class="org.eclipse.photran.core.FProjectNature"> >+ </run> >+ </runtime> >+ </extension> >+ > </plugin> >Index: src/org/eclipse/photran/core/FProjectNature.java >=================================================================== >RCS file: src/org/eclipse/photran/core/FProjectNature.java >diff -N src/org/eclipse/photran/core/FProjectNature.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/photran/core/FProjectNature.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,122 @@ >+/******************************************************************************* >+ * Copyright (c) 2004 QNX Software Systems and others. >+ * All rights reserved. This program and the accompanying materials >+ * are made available under the terms of the Eclipse Public License v1.0 >+ * which accompanies this distribution, and is available at >+ * http://www.eclipse.org/legal/epl-v10.html >+ * >+ * Contributors: >+ * QNX Software Systems - initial API and implementation >+ *******************************************************************************/ >+ >+package org.eclipse.photran.core; >+ >+import java.util.ArrayList; >+import java.util.Arrays; >+import java.util.List; >+ >+import org.eclipse.core.resources.IProject; >+import org.eclipse.core.resources.IProjectDescription; >+import org.eclipse.core.resources.IProjectNature; >+import org.eclipse.core.runtime.CoreException; >+import org.eclipse.core.runtime.IProgressMonitor; >+ >+/** >+ * This file copied (mostly) from org.eclipse.cdt.core.CProjectNature. >+ * >+ * @author Matt Scarpino >+ */ >+public class FProjectNature implements IProjectNature { >+ >+ public static final String F_NATURE_ID = "org.eclipse.photran.core.fnature"; //$NON-NLS-1$ >+ >+ private IProject fProject; >+ >+ public FProjectNature() { >+ } >+ >+ public FProjectNature(IProject project) { >+ setProject(project); >+ } >+ >+ public static void addFNature(IProject project, IProgressMonitor mon) throws CoreException { >+ addNature(project, F_NATURE_ID, mon); >+ } >+ >+ public static void removeFNature(IProject project, IProgressMonitor mon) throws CoreException { >+ removeNature(project, F_NATURE_ID, mon); >+ } >+ >+ /** >+ * Utility method for adding a nature to a project. >+ * >+ * @param project >+ * the project to add the nature >+ * @param natureId >+ * the id of the nature to assign to the project >+ * @param monitor >+ * a progress monitor to indicate the duration of the operation, >+ * or <code>null</code> if progress reporting is not required. >+ * >+ */ >+ public static void addNature(IProject project, String natureId, IProgressMonitor monitor) throws CoreException { >+ IProjectDescription description = project.getDescription(); >+ String[] prevNatures = description.getNatureIds(); >+ for(int i=0; i<prevNatures.length; i++) { >+ if (natureId.equals(prevNatures[i])) >+ return; >+ } >+ String[] newNatures = new String[prevNatures.length + 1]; >+ System.arraycopy(prevNatures, 0, newNatures, 1, prevNatures.length); >+ newNatures[0] = natureId; >+ description.setNatureIds(newNatures); >+ project.setDescription(description, monitor); >+ } >+ >+ /** >+ * Utility method for removing a project nature from a project. >+ * >+ * @param project >+ * the project to remove the nature from >+ * @param natureId >+ * the nature id to remove >+ * @param monitor >+ * a progress monitor to indicate the duration of the operation, >+ * or <code>null</code> if progress reporting is not required. >+ */ >+ public static void removeNature(IProject project, String natureId, IProgressMonitor monitor) throws CoreException { >+ IProjectDescription description = project.getDescription(); >+ String[] prevNatures = description.getNatureIds(); >+ List newNatures = new ArrayList(Arrays.asList(prevNatures)); >+ newNatures.remove(natureId); >+ description.setNatureIds((String[])newNatures.toArray(new String[newNatures.size()])); >+ project.setDescription(description, monitor); >+ } >+ >+ /** >+ * @see IProjectNature#configure >+ */ >+ public void configure() throws CoreException { >+ } >+ >+ /** >+ * @see IProjectNature#deconfigure >+ */ >+ public void deconfigure() throws CoreException { >+ } >+ >+ /** >+ * @see IProjectNature#getProject >+ */ >+ public IProject getProject() { >+ return fProject; >+ } >+ >+ /** >+ * @see IProjectNature#setProject >+ */ >+ public void setProject(IProject project) { >+ fProject = project; >+ } >+} >+ >#P org.eclipse.photran.cdtinterface >Index: src/org/eclipse/photran/cdtinterface/ui/FortranProjectWizard.java >=================================================================== >RCS file: /cvsroot/technology/org.eclipse.photran/org.eclipse.photran.cdtinterface/src/org/eclipse/photran/cdtinterface/ui/FortranProjectWizard.java,v >retrieving revision 1.2 >diff -u -r1.2 FortranProjectWizard.java >--- src/org/eclipse/photran/cdtinterface/ui/FortranProjectWizard.java 16 Aug 2007 22:49:56 -0000 1.2 >+++ src/org/eclipse/photran/cdtinterface/ui/FortranProjectWizard.java 23 Jul 2009 18:38:41 -0000 >@@ -10,15 +10,29 @@ > *******************************************************************************/ > package org.eclipse.photran.cdtinterface.ui; > >+import java.io.ByteArrayInputStream; >+import java.io.FileNotFoundException; >+import java.io.IOException; >+import java.io.RandomAccessFile; >+import java.util.ArrayList; >+import java.util.Iterator; >+ > import org.eclipse.cdt.core.CProjectNature; >+import org.eclipse.cdt.core.model.CoreModel; >+import org.eclipse.cdt.core.settings.model.ICProjectDescription; >+import org.eclipse.cdt.core.settings.model.ICProjectDescriptionManager; > import org.eclipse.cdt.ui.newui.UIMessages; > import org.eclipse.cdt.ui.wizards.CDTCommonProjectWizard; >+import org.eclipse.core.resources.IFile; > import org.eclipse.core.resources.IProject; >+import org.eclipse.core.resources.IProjectDescription; > import org.eclipse.core.runtime.CoreException; > import org.eclipse.core.runtime.NullProgressMonitor; >+import org.eclipse.photran.core.FProjectNature; > > /** > * @author ??? >+ * @author Matt Scarpino - 7/20/2009 - Updated to include Fortran nature in project > */ > public class FortranProjectWizard extends CDTCommonProjectWizard > { >@@ -31,18 +45,100 @@ > > public String[] getNatures() > { >- return new String[] { CProjectNature.C_NATURE_ID }; >+ return new String[] { FProjectNature.F_NATURE_ID, CProjectNature.C_NATURE_ID }; > } > >+ /** >+ * This method is called immediately after the createIProject() method in >+ * the CDTCommonProjectWizard class >+ */ > protected IProject continueCreation(IProject prj) > { > try > { >- CProjectNature.addCNature(prj, new NullProgressMonitor()); >+ // Add C nature to the project >+ CProjectNature.addCNature(prj, new NullProgressMonitor()); >+ >+ // Add Fortran nature to the project >+ FProjectNature.addFNature(prj, new NullProgressMonitor()); > } > catch (CoreException e) {} > > return prj; >- } >+ } >+ >+ /** >+ * This method is called within the performFinish() method of the >+ * CDTCommonProjectWizard class. Among other things, it sets the Photran >+ * nature first in the project's nature list. This ensures that the project >+ * will be displayed as a Fortran project in the Photran navigator. >+ */ >+ protected boolean setCreated() throws CoreException >+ { >+ ICProjectDescriptionManager mngr = CoreModel.getDefault().getProjectDescriptionManager(); >+ >+ ICProjectDescription des = mngr.getProjectDescription(newProject, false); >+ if(des.isCdtProjectCreating()) >+ { >+ des = mngr.getProjectDescription(newProject, true); >+ des.setCdtProjectCreated(); >+ mngr.setProjectDescription(newProject, des, false, null); >+ return true; >+ } >+ >+ // Access the .project file in the recently-created project >+ final IFile projFile = (IFile)newProject.findMember(IProjectDescription.DESCRIPTION_FILE_NAME); >+ if(projFile.exists()) >+ { >+ try >+ { >+ // Create a list of lines in .project file >+ RandomAccessFile raFile = new RandomAccessFile(projFile.getLocation().toOSString(), "rws"); >+ ArrayList lineList = new ArrayList(); >+ String line; >+ while((line = raFile.readLine()) != null) >+ lineList.add(line); >+ raFile.close(); >+ >+ // Find the natures in the list >+ Iterator itr = lineList.iterator(); >+ int first_index = 0, phot_index = 0; >+ while (itr.hasNext()) >+ { >+ line = (String)itr.next(); >+ if(line.trim().equals("<natures>")) >+ first_index = lineList.indexOf(line) + 1; >+ else if(line.contains("photran")) >+ phot_index = lineList.indexOf(line); >+ } >+ >+ // Swap the photran nature with the first nature >+ String temp = (String)lineList.get(first_index); >+ lineList.set(first_index, lineList.get(phot_index)); >+ lineList.set(phot_index, temp); >+ >+ // Write the new lines to the .project file >+ itr = lineList.iterator(); >+ StringBuffer content = new StringBuffer(""); >+ while (itr.hasNext()) >+ { >+ content.append((String)itr.next() + "\n"); >+ } >+ projFile.setContents(new ByteArrayInputStream(content.toString().getBytes()), IFile.FORCE, null); > >+ // Deallocate >+ lineList.clear(); >+ } >+ catch (FileNotFoundException e) { >+ e.printStackTrace(); >+ } >+ catch (IOException e) { >+ e.printStackTrace(); >+ } >+ catch (CoreException e) { >+ e.printStackTrace(); >+ } >+ } >+ return false; >+ } > } >Index: src/org/eclipse/photran/cdtinterface/ui/FortranView.java >=================================================================== >RCS file: /cvsroot/technology/org.eclipse.photran/org.eclipse.photran.cdtinterface/src/org/eclipse/photran/cdtinterface/ui/FortranView.java,v >retrieving revision 1.3 >diff -u -r1.3 FortranView.java >--- src/org/eclipse/photran/cdtinterface/ui/FortranView.java 16 Aug 2007 22:49:56 -0000 1.3 >+++ src/org/eclipse/photran/cdtinterface/ui/FortranView.java 23 Jul 2009 18:38:41 -0000 >@@ -11,13 +11,22 @@ > package org.eclipse.photran.cdtinterface.ui; > > import org.eclipse.cdt.internal.ui.cview.CView; >+import org.eclipse.cdt.internal.ui.cview.CViewLabelProvider; >+import org.eclipse.cdt.internal.ui.viewsupport.AppearanceAwareLabelProvider; >+import org.eclipse.cdt.internal.ui.viewsupport.CElementImageProvider; >+import org.eclipse.cdt.internal.ui.viewsupport.CUILabelProvider; > > /** > * The Fortran Projects View is just the C/C++ Projects View with a different name. > * > * @author Jeff Overbey >+ * @author Matt Scarpino - 7/20/2009 - Updated to access Fortran-specific label provider. > */ > public class FortranView extends CView > { > public static final String FORTRAN_VIEW_ID = "org.eclipse.photran.ui.FortranView"; >-} >+ >+ protected CUILabelProvider createLabelProvider() { >+ return new FViewLabelProvider(AppearanceAwareLabelProvider.DEFAULT_TEXTFLAGS, AppearanceAwareLabelProvider.DEFAULT_IMAGEFLAGS | CElementImageProvider.SMALL_ICONS); >+ } >+} >\ No newline at end of file >Index: src/org/eclipse/photran/cdtinterface/ui/FViewLabelProvider.java >=================================================================== >RCS file: src/org/eclipse/photran/cdtinterface/ui/FViewLabelProvider.java >diff -N src/org/eclipse/photran/cdtinterface/ui/FViewLabelProvider.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/photran/cdtinterface/ui/FViewLabelProvider.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,62 @@ >+/******************************************************************************* >+ * Copyright (c) 2009 Matthew Scarpino, Eclipse Engineering LLC >+ * All rights reserved. This program and the accompanying materials >+ * are made available under the terms of the Eclipse Public License v1.0 >+ * which accompanies this distribution, and is available at >+ * http://www.eclipse.org/legal/epl-v10.html >+ * >+ *******************************************************************************/ >+package org.eclipse.photran.cdtinterface.ui; >+ >+import org.eclipse.cdt.internal.core.model.TranslationUnit; >+import org.eclipse.cdt.internal.ui.cview.CViewLabelProvider; >+import org.eclipse.core.runtime.Platform; >+import org.eclipse.core.runtime.content.IContentType; >+import org.eclipse.jface.resource.ImageDescriptor; >+import org.eclipse.photran.cdtinterface.CDTInterfacePlugin; >+import org.eclipse.swt.graphics.Image; >+ >+/** >+ * This class provides images to the FortranView. Specifically, it checks for the contentType >+ * of source files in the view and returns the Photran icon for files with Fortran-based content. >+ * >+ * @author Matt Scarpino >+ */ >+public class FViewLabelProvider extends CViewLabelProvider >+{ >+ public static final String FIXED_FORM_CONTENT_TYPE = "org.eclipse.photran.core.fixedFormFortranSource"; >+ public static final String FREE_FORM_CONTENT_TYPE = "org.eclipse.photran.core.freeFormFortranSource"; >+ >+ Image fortranFileImage; >+ >+ public FViewLabelProvider(int textFlags, int imageFlags) >+ { >+ super(textFlags, imageFlags); >+ } >+ >+ // This is something of a hack. Originally I tried using AdapterFactory objects and WorkspaceAdapters, >+ // but they never seemed to work. This works, but it's not particularly elegant and the image only >+ // shows up in the Fortran navigator. >+ public Image getImage(Object element) >+ { >+ if (element instanceof TranslationUnit) >+ { >+ String fileName = ((TranslationUnit)element).getFile().getName(); >+ IContentType contentType = Platform.getContentTypeManager().findContentTypeFor(fileName); >+ if(contentType.getId().equals(FIXED_FORM_CONTENT_TYPE) || contentType.getId().equals(FREE_FORM_CONTENT_TYPE)) >+ { >+ if(fortranFileImage == null) { >+ fortranFileImage = CDTInterfacePlugin.getImageDescriptor("icons/obj16/f_file_obj.gif").createImage(); >+ } >+ return fortranFileImage; >+ } >+ } >+ return super.getImage(element); >+ } >+ >+ public void dispose() { >+ if(fortranFileImage != null) >+ fortranFileImage.dispose(); >+ super.dispose(); >+ } >+}
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Flags:
g.watson
:
iplog+
Actions:
View
|
Diff
Attachments on
bug 277879
:
141948
|
141949
| 142435