1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-07-23 08:55:25 +02:00

bug 339015: Preference "Show source roots at the top of project" should update views immediately

This commit is contained in:
Andrew Gvozdev 2011-03-11 19:12:48 +00:00
parent 112b975c2d
commit 1db8cc744d
4 changed files with 53 additions and 4 deletions

View file

@ -19,6 +19,7 @@ import java.util.List;
import java.util.Set;
import org.eclipse.cdt.core.CCorePlugin;
import org.eclipse.cdt.core.CCorePreferenceConstants;
import org.eclipse.cdt.core.model.CoreModel;
import org.eclipse.cdt.core.settings.model.CProjectDescriptionEvent;
import org.eclipse.cdt.core.settings.model.ICConfigurationDescription;
@ -41,6 +42,9 @@ import org.eclipse.core.resources.IResourceDelta;
import org.eclipse.core.resources.IWorkspace;
import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.preferences.IEclipsePreferences.IPreferenceChangeListener;
import org.eclipse.core.runtime.preferences.IEclipsePreferences.PreferenceChangeEvent;
import org.eclipse.core.runtime.preferences.InstanceScope;
import org.eclipse.jface.viewers.AbstractTreeViewer;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.StructuredViewer;
@ -55,7 +59,9 @@ import org.eclipse.swt.widgets.Display;
* @noextend This class is not intended to be subclassed by clients.
* @noinstantiate This class is not intended to be instantiated by clients.
*/
public class MakeContentProvider implements ITreeContentProvider, IMakeTargetListener, IResourceChangeListener, ICProjectDescriptionListener {
public class MakeContentProvider implements ITreeContentProvider, IMakeTargetListener,
IResourceChangeListener, ICProjectDescriptionListener, IPreferenceChangeListener {
/** presentation of the content, i.e. for MakeView tree of for BuildTargetDialog table */
protected boolean bFlatten;
@ -224,12 +230,14 @@ public class MakeContentProvider implements ITreeContentProvider, IMakeTargetLis
if (oldWorkspace != newWorkspace) {
ICProjectDescriptionManager mngr = CoreModel.getDefault().getProjectDescriptionManager();
if (oldWorkspace != null) {
oldWorkspace.removeResourceChangeListener(this);
InstanceScope.INSTANCE.getNode(CCorePlugin.PLUGIN_ID).removePreferenceChangeListener(this);
mngr.removeCProjectDescriptionListener(this);
oldWorkspace.removeResourceChangeListener(this);
}
if (newWorkspace != null) {
newWorkspace.addResourceChangeListener(this, IResourceChangeEvent.POST_CHANGE);
mngr.addCProjectDescriptionListener(this, CProjectDescriptionEvent.APPLIED);
InstanceScope.INSTANCE.getNode(CCorePlugin.PLUGIN_ID).addPreferenceChangeListener(this);
}
}
}
@ -405,6 +413,21 @@ public class MakeContentProvider implements ITreeContentProvider, IMakeTargetLis
});
}
/**
* {@inheritDoc}
*
* @since 7.1
*/
public void preferenceChange(PreferenceChangeEvent event) {
if (event.getKey().equals(CCorePreferenceConstants.SHOW_SOURCE_ROOTS_AT_TOP_LEVEL_OF_PROJECT)) {
Display.getDefault().asyncExec(new Runnable() {
public void run() {
viewer.refresh();
}
});
}
}
/**
* Get source entries for default setting configuration (i.e. configuration shown in UI).
*/

View file

@ -776,7 +776,7 @@ public class CElementBaseLabels {
buf.append(container.getPath().makeRelative().toString());
} else {
if (CCorePlugin.showSourceRootsAtTopOfProject()) {
buf.append(container.getElementName());
buf.append(container.getElementName());
}
else {
String elementName = container.getElementName();

View file

@ -80,6 +80,7 @@ import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.SubProgressMonitor;
import org.eclipse.core.runtime.content.IContentType;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.core.runtime.preferences.InstanceScope;
import org.osgi.framework.BundleContext;
import com.ibm.icu.text.MessageFormat;
@ -1309,6 +1310,7 @@ public class CCorePlugin extends Plugin {
* @since 5.2
*/
public static boolean showSourceRootsAtTopOfProject() {
return getDefault().getPluginPreferences().getBoolean( CCorePreferenceConstants.SHOW_SOURCE_ROOTS_AT_TOP_LEVEL_OF_PROJECT);
return InstanceScope.INSTANCE.getNode(PLUGIN_ID)
.getBoolean(CCorePreferenceConstants.SHOW_SOURCE_ROOTS_AT_TOP_LEVEL_OF_PROJECT, true);
}
}

View file

@ -23,16 +23,22 @@ import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.preferences.IEclipsePreferences.IPreferenceChangeListener;
import org.eclipse.core.runtime.preferences.IEclipsePreferences.PreferenceChangeEvent;
import org.eclipse.core.runtime.preferences.InstanceScope;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.IMemento;
import org.eclipse.ui.navigator.ICommonContentExtensionSite;
import org.eclipse.ui.navigator.IPipelinedTreeContentProvider;
import org.eclipse.ui.navigator.PipelinedShapeModification;
import org.eclipse.ui.navigator.PipelinedViewerUpdate;
import org.eclipse.cdt.core.CCorePlugin;
import org.eclipse.cdt.core.CCorePreferenceConstants;
import org.eclipse.cdt.core.model.CoreModel;
import org.eclipse.cdt.core.model.ICElement;
import org.eclipse.cdt.core.model.ICModel;
@ -51,6 +57,7 @@ public class CNavigatorContentProvider extends CViewContentProvider implements I
/** The input object as supplied in the call to {@link #inputChanged()} */
private Object fRealInput;
private IPropertyChangeListener fPropertyChangeListener;
private IPreferenceChangeListener fPreferenceChangeListener;
/*
* @see org.eclipse.ui.navigator.ICommonContentProvider#init(org.eclipse.ui.navigator.ICommonContentExtensionSite)
@ -85,6 +92,21 @@ public class CNavigatorContentProvider extends CViewContentProvider implements I
}
};
CUIPlugin.getDefault().getPreferenceStore().addPropertyChangeListener(fPropertyChangeListener);
// Note that this listener listens to CCorePlugin preferences
fPreferenceChangeListener = new IPreferenceChangeListener() {
public void preferenceChange(PreferenceChangeEvent event) {
if (event.getKey().equals(CCorePreferenceConstants.SHOW_SOURCE_ROOTS_AT_TOP_LEVEL_OF_PROJECT)) {
Display.getDefault().asyncExec(new Runnable() {
public void run() {
getViewer().refresh();
}
});
}
}
};
InstanceScope.INSTANCE.getNode(CCorePlugin.PLUGIN_ID).addPreferenceChangeListener(fPreferenceChangeListener);
// TLETODO [CN] use extension state model for view options persistence
// fStateModel.addPropertyChangeListener(listener);
}
@ -94,6 +116,8 @@ public class CNavigatorContentProvider extends CViewContentProvider implements I
*/
@Override
public void dispose() {
InstanceScope.INSTANCE.getNode(CCorePlugin.PLUGIN_ID).removePreferenceChangeListener(fPreferenceChangeListener);
CUIPlugin.getDefault().getPreferenceStore().removePropertyChangeListener(fPropertyChangeListener);
// TLETODO [CN] use extension state model for view options persistence
// fStateModel.removePropertyChangeListener(fPropertyChangeListener);