mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-08-02 13:55:39 +02:00
bug 339015: Preference "Show source roots at the top of project" should update views immediately
This commit is contained in:
parent
112b975c2d
commit
1db8cc744d
4 changed files with 53 additions and 4 deletions
|
@ -19,6 +19,7 @@ import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import org.eclipse.cdt.core.CCorePlugin;
|
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.CoreModel;
|
||||||
import org.eclipse.cdt.core.settings.model.CProjectDescriptionEvent;
|
import org.eclipse.cdt.core.settings.model.CProjectDescriptionEvent;
|
||||||
import org.eclipse.cdt.core.settings.model.ICConfigurationDescription;
|
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.IWorkspace;
|
||||||
import org.eclipse.core.resources.IWorkspaceRoot;
|
import org.eclipse.core.resources.IWorkspaceRoot;
|
||||||
import org.eclipse.core.runtime.CoreException;
|
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.AbstractTreeViewer;
|
||||||
import org.eclipse.jface.viewers.ITreeContentProvider;
|
import org.eclipse.jface.viewers.ITreeContentProvider;
|
||||||
import org.eclipse.jface.viewers.StructuredViewer;
|
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.
|
* @noextend This class is not intended to be subclassed by clients.
|
||||||
* @noinstantiate This class is not intended to be instantiated 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 */
|
/** presentation of the content, i.e. for MakeView tree of for BuildTargetDialog table */
|
||||||
protected boolean bFlatten;
|
protected boolean bFlatten;
|
||||||
|
|
||||||
|
@ -224,12 +230,14 @@ public class MakeContentProvider implements ITreeContentProvider, IMakeTargetLis
|
||||||
if (oldWorkspace != newWorkspace) {
|
if (oldWorkspace != newWorkspace) {
|
||||||
ICProjectDescriptionManager mngr = CoreModel.getDefault().getProjectDescriptionManager();
|
ICProjectDescriptionManager mngr = CoreModel.getDefault().getProjectDescriptionManager();
|
||||||
if (oldWorkspace != null) {
|
if (oldWorkspace != null) {
|
||||||
oldWorkspace.removeResourceChangeListener(this);
|
InstanceScope.INSTANCE.getNode(CCorePlugin.PLUGIN_ID).removePreferenceChangeListener(this);
|
||||||
mngr.removeCProjectDescriptionListener(this);
|
mngr.removeCProjectDescriptionListener(this);
|
||||||
|
oldWorkspace.removeResourceChangeListener(this);
|
||||||
}
|
}
|
||||||
if (newWorkspace != null) {
|
if (newWorkspace != null) {
|
||||||
newWorkspace.addResourceChangeListener(this, IResourceChangeEvent.POST_CHANGE);
|
newWorkspace.addResourceChangeListener(this, IResourceChangeEvent.POST_CHANGE);
|
||||||
mngr.addCProjectDescriptionListener(this, CProjectDescriptionEvent.APPLIED);
|
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).
|
* Get source entries for default setting configuration (i.e. configuration shown in UI).
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -776,7 +776,7 @@ public class CElementBaseLabels {
|
||||||
buf.append(container.getPath().makeRelative().toString());
|
buf.append(container.getPath().makeRelative().toString());
|
||||||
} else {
|
} else {
|
||||||
if (CCorePlugin.showSourceRootsAtTopOfProject()) {
|
if (CCorePlugin.showSourceRootsAtTopOfProject()) {
|
||||||
buf.append(container.getElementName());
|
buf.append(container.getElementName());
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
String elementName = container.getElementName();
|
String elementName = container.getElementName();
|
||||||
|
|
|
@ -80,6 +80,7 @@ import org.eclipse.core.runtime.Status;
|
||||||
import org.eclipse.core.runtime.SubProgressMonitor;
|
import org.eclipse.core.runtime.SubProgressMonitor;
|
||||||
import org.eclipse.core.runtime.content.IContentType;
|
import org.eclipse.core.runtime.content.IContentType;
|
||||||
import org.eclipse.core.runtime.jobs.Job;
|
import org.eclipse.core.runtime.jobs.Job;
|
||||||
|
import org.eclipse.core.runtime.preferences.InstanceScope;
|
||||||
import org.osgi.framework.BundleContext;
|
import org.osgi.framework.BundleContext;
|
||||||
|
|
||||||
import com.ibm.icu.text.MessageFormat;
|
import com.ibm.icu.text.MessageFormat;
|
||||||
|
@ -1309,6 +1310,7 @@ public class CCorePlugin extends Plugin {
|
||||||
* @since 5.2
|
* @since 5.2
|
||||||
*/
|
*/
|
||||||
public static boolean showSourceRootsAtTopOfProject() {
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -23,16 +23,22 @@ import org.eclipse.core.resources.IProject;
|
||||||
import org.eclipse.core.resources.IResource;
|
import org.eclipse.core.resources.IResource;
|
||||||
import org.eclipse.core.resources.IWorkspaceRoot;
|
import org.eclipse.core.resources.IWorkspaceRoot;
|
||||||
import org.eclipse.core.runtime.IAdaptable;
|
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.preference.IPreferenceStore;
|
||||||
import org.eclipse.jface.util.IPropertyChangeListener;
|
import org.eclipse.jface.util.IPropertyChangeListener;
|
||||||
import org.eclipse.jface.util.PropertyChangeEvent;
|
import org.eclipse.jface.util.PropertyChangeEvent;
|
||||||
import org.eclipse.jface.viewers.Viewer;
|
import org.eclipse.jface.viewers.Viewer;
|
||||||
|
import org.eclipse.swt.widgets.Display;
|
||||||
import org.eclipse.ui.IMemento;
|
import org.eclipse.ui.IMemento;
|
||||||
import org.eclipse.ui.navigator.ICommonContentExtensionSite;
|
import org.eclipse.ui.navigator.ICommonContentExtensionSite;
|
||||||
import org.eclipse.ui.navigator.IPipelinedTreeContentProvider;
|
import org.eclipse.ui.navigator.IPipelinedTreeContentProvider;
|
||||||
import org.eclipse.ui.navigator.PipelinedShapeModification;
|
import org.eclipse.ui.navigator.PipelinedShapeModification;
|
||||||
import org.eclipse.ui.navigator.PipelinedViewerUpdate;
|
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.CoreModel;
|
||||||
import org.eclipse.cdt.core.model.ICElement;
|
import org.eclipse.cdt.core.model.ICElement;
|
||||||
import org.eclipse.cdt.core.model.ICModel;
|
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()} */
|
/** The input object as supplied in the call to {@link #inputChanged()} */
|
||||||
private Object fRealInput;
|
private Object fRealInput;
|
||||||
private IPropertyChangeListener fPropertyChangeListener;
|
private IPropertyChangeListener fPropertyChangeListener;
|
||||||
|
private IPreferenceChangeListener fPreferenceChangeListener;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @see org.eclipse.ui.navigator.ICommonContentProvider#init(org.eclipse.ui.navigator.ICommonContentExtensionSite)
|
* @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);
|
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
|
// TLETODO [CN] use extension state model for view options persistence
|
||||||
// fStateModel.addPropertyChangeListener(listener);
|
// fStateModel.addPropertyChangeListener(listener);
|
||||||
}
|
}
|
||||||
|
@ -94,6 +116,8 @@ public class CNavigatorContentProvider extends CViewContentProvider implements I
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void dispose() {
|
public void dispose() {
|
||||||
|
InstanceScope.INSTANCE.getNode(CCorePlugin.PLUGIN_ID).removePreferenceChangeListener(fPreferenceChangeListener);
|
||||||
|
|
||||||
CUIPlugin.getDefault().getPreferenceStore().removePropertyChangeListener(fPropertyChangeListener);
|
CUIPlugin.getDefault().getPreferenceStore().removePropertyChangeListener(fPropertyChangeListener);
|
||||||
// TLETODO [CN] use extension state model for view options persistence
|
// TLETODO [CN] use extension state model for view options persistence
|
||||||
// fStateModel.removePropertyChangeListener(fPropertyChangeListener);
|
// fStateModel.removePropertyChangeListener(fPropertyChangeListener);
|
||||||
|
|
Loading…
Add table
Reference in a new issue