Skip to main content



      Home
Home » Language IDEs » C / C++ IDE (CDT) » Decorating labels in "C/C++ Projects" View
Decorating labels in "C/C++ Projects" View [message #85223] Thu, 06 November 2003 09:23 Go to next message
Eclipse UserFriend
Originally posted by: bharatkhatri2000.yahoo.com

Hello,

I am developing a plugin that, for some action by the use, decorates some
projects with a special label and, on some other event, resets the
decoration. I want this to happen in the C/C++ Projects view also. I am
using the code given in the article on decorators. When the action is
taken, the labels in the navigator view get updated instantly, but the
ones in C/C++ projects view do not update. They do update in the C/C++
projects view when I restart eclipse. Here is my code ( I call the method
refreshProjectLabel() with the selected project as parameter when the
event occurs):

plugin.xml

<extension point="org.eclipse.ui.decorators">
<decorator
id="ProjectDecorator"
label="Project decorator"
state="true"
class="util.ProjectDecorator"
objectClass="org.eclipse.core.resources.IProject"
adaptable="true">
<description>
</description>
</decorator>

</extension>


class util.ProjectDecorator

package util;

import org.eclipse.core.resources.IProject;
import org.eclipse.jface.viewers.ILabelDecorator;
import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.LabelProviderChangedEvent;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.IDecoratorManager;
import org.eclipse.cdt.internal.core.model.CProject;

import projectProperties.AampBuildConfigurationPage;
import projectProperties.ConfigurationFilesPage;



public class ProjectDecorator extends LabelProvider implements
ILabelDecorator {

public ProjectDecorator() {
super();
}
// Method to decorate Image
public Image decorateImage(Image image, Object object) {
// Return null to specify no decoration
return null;
}

// Method to decorate Text
public String decorateText(String label, Object object) {
// return null to specify no decoration

IProject project = null;
if(object instanceof IProject)
project = (IProject) object;
else if(object instanceof CProject)
project = (IProject)(((CProject)object).getResource());

if(project!=null) {
try {
String selected = project.getPersistentProperty
(ConfigurationPage.lastSelectedName);
if(selected!=null)
return project.getName() + "(*)"
} catch(Exception e) {
}
}
return null;
}
public void addListener(ILabelProviderListener listener) {
super.addListener(listener);
}

public void dispose() {
}
public boolean isLabelProperty(Object element, String property) {
return false;
}
public void removeListener(ILabelProviderListener listener) {
super.removeListener(listener);
}

public static ProjectDecorator getProjectDecorator() {
IDecoratorManager manager =
cdtAampPlugin.getDefault().getWorkbench().getDecoratorManage r();
if(manager.getEnabled("aampProjectDecorator")) {

return
(ProjectDecorator)(manager.getLabelDecorator("aampProjectDecorator "));

}
return null;
}

public static void refreshProjectLabel(IProject project) {

System.out.println("Inside refresh 1");
if(getProjectDecorator()==null) {
System.out.println(" Decorator null for project "+project.getName());
return;
}
getProjectDecorator().refreshLabel(project);
}

public void refreshLabel(IProject project) {

final LabelProviderChangedEvent event = new
LabelProviderChangedEvent(getProjectDecorator(),new Object [] {project});

Display.getDefault().asyncExec(new Runnable() {
public void run() {
System.out.println(" Inside run");
fireLabelProviderChanged(event);
}
});
}
Re: Decorating labels in "C/C++ Projects" View [message #85253 is a reply to message #85223] Thu, 06 November 2003 13:22 Go to previous message
Eclipse UserFriend
This is the same problem addressed by
https://bugs.eclipse.org/bugs/show_bug.cgi?id=36837
The c/c++ project view does not properly refresh the corresponding
ICElement in the view when the underlying IResource changes.

bharat wrote:
> Hello,
>
> I am developing a plugin that, for some action by the use, decorates some
> projects with a special label and, on some other event, resets the
> decoration. I want this to happen in the C/C++ Projects view also. I am
> using the code given in the article on decorators. When the action is
> taken, the labels in the navigator view get updated instantly, but the
> ones in C/C++ projects view do not update. They do update in the C/C++
> projects view when I restart eclipse. Here is my code ( I call the method
> refreshProjectLabel() with the selected project as parameter when the
> event occurs):
>
> plugin.xml
>
> <extension point="org.eclipse.ui.decorators">
> <decorator
> id="ProjectDecorator"
> label="Project decorator"
> state="true"
> class="util.ProjectDecorator"
> objectClass="org.eclipse.core.resources.IProject"
> adaptable="true">
> <description>
> </description>
> </decorator>
>
> </extension>
>
>
> class util.ProjectDecorator
>
> package util;
>
> import org.eclipse.core.resources.IProject;
> import org.eclipse.jface.viewers.ILabelDecorator;
> import org.eclipse.jface.viewers.ILabelProviderListener;
> import org.eclipse.jface.viewers.LabelProvider;
> import org.eclipse.jface.viewers.LabelProviderChangedEvent;
> import org.eclipse.swt.graphics.Image;
> import org.eclipse.swt.widgets.Display;
> import org.eclipse.ui.IDecoratorManager;
> import org.eclipse.cdt.internal.core.model.CProject;
>
> import projectProperties.AampBuildConfigurationPage;
> import projectProperties.ConfigurationFilesPage;
>
>
>
> public class ProjectDecorator extends LabelProvider implements
> ILabelDecorator {
>
> public ProjectDecorator() {
> super();
> }
> // Method to decorate Image
> public Image decorateImage(Image image, Object object) {
> // Return null to specify no decoration
> return null;
> }
>
> // Method to decorate Text
> public String decorateText(String label, Object object) {
> // return null to specify no decoration
>
> IProject project = null;
> if(object instanceof IProject)
> project = (IProject) object;
> else if(object instanceof CProject)
> project = (IProject)(((CProject)object).getResource());
>
> if(project!=null) {
> try {
> String selected = project.getPersistentProperty
> (ConfigurationPage.lastSelectedName);
> if(selected!=null)
> return project.getName() + "(*)"
> } catch(Exception e) {
> }
> }
> return null;
> }
> public void addListener(ILabelProviderListener listener) {
> super.addListener(listener);
> }
>
> public void dispose() {
> }
> public boolean isLabelProperty(Object element, String property) {
> return false;
> }
> public void removeListener(ILabelProviderListener listener) {
> super.removeListener(listener);
> }
>
> public static ProjectDecorator getProjectDecorator() {
> IDecoratorManager manager =
> cdtAampPlugin.getDefault().getWorkbench().getDecoratorManage r();
> if(manager.getEnabled("aampProjectDecorator")) {
>
> return
> (ProjectDecorator)(manager.getLabelDecorator("aampProjectDecorator "));
>
> }
> return null;
> }
>
> public static void refreshProjectLabel(IProject project) {
>
> System.out.println("Inside refresh 1");
> if(getProjectDecorator()==null) {
> System.out.println(" Decorator null for project "+project.getName());
> return;
> }
> getProjectDecorator().refreshLabel(project);
> }
>
> public void refreshLabel(IProject project) {
>
> final LabelProviderChangedEvent event = new
> LabelProviderChangedEvent(getProjectDecorator(),new Object [] {project});
>
> Display.getDefault().asyncExec(new Runnable() {
> public void run() {
> System.out.println(" Inside run");
> fireLabelProviderChanged(event);
> }
> });
> }
>
>
>
>
>
>
>
>
>
Previous Topic:Error : `abs' undeclared (first use this function)
Next Topic:View source of libstdc++ class while debugging program
Goto Forum:
  


Current Time: Wed Apr 16 13:32:07 EDT 2025

Powered by FUDForum. Page generated in 0.02381 seconds
.:: Contact :: Home ::.

Powered by: FUDforum 3.0.2.
Copyright ©2001-2010 FUDforum Bulletin Board Software

Back to the top