1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-07-09 10:05:24 +02:00

Bug 160111. Support deferred queries in monitor view so that we don't have to wait for job completion via Subsystem.scheduleJob();

This commit is contained in:
David McKnight 2006-10-10 18:00:38 +00:00
parent f48c0a5007
commit a8b41f73cb
3 changed files with 158 additions and 10 deletions

View file

@ -0,0 +1,45 @@
package org.eclipse.rse.ui.view;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.progress.DeferredTreeContentManager;
public class SystemDeferredTableTreeContentManager extends
DeferredTreeContentManager {
private SystemTableTreeViewProvider _provider;
private SystemTableTreeView _view;
public SystemDeferredTableTreeContentManager(SystemTableTreeViewProvider provider, SystemTableTreeView viewer) {
super(provider, viewer);
_provider = provider;
_view = viewer;
}
protected void addChildren(Object parent, Object[] children, IProgressMonitor monitor) {
super.addChildren(parent, children, monitor);
_provider.setCachedObjects(parent, children);
Display.getDefault().asyncExec(new RelayoutView(parent));
}
public class RelayoutView implements Runnable
{
private Object _parent;
public RelayoutView(Object parent)
{
_parent = parent;
}
public void run()
{
_view.computeLayout();
_view.refresh(true);
//SystemRegistry registry = RSEUIPlugin.getTheSystemRegistry();
//registry.fireEvent(new SystemResourceChangeEvent(_parent, ISystemResourceChangeEvents.EVENT_PROPERTYSHEET_UPDATE, _parent));
}
}
}

View file

@ -108,6 +108,7 @@ import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.dialogs.PropertyDialogAction; import org.eclipse.ui.dialogs.PropertyDialogAction;
import org.eclipse.ui.part.EditorInputTransfer; import org.eclipse.ui.part.EditorInputTransfer;
import org.eclipse.ui.part.PluginTransfer; import org.eclipse.ui.part.PluginTransfer;
import org.eclipse.ui.progress.PendingUpdateAdapter;
import org.eclipse.ui.views.properties.IPropertyDescriptor; import org.eclipse.ui.views.properties.IPropertyDescriptor;
@ -571,7 +572,7 @@ implements IMenuListener, ISystemDeleteTarget, ISystemRenameTarget, ISystemSelec
Object[] children = provider.getChildren(_objectInput); Object[] children = provider.getChildren(_objectInput);
// if no children, don't update // if no children, don't update
if (children == null || children.length == 0) if (children == null || children.length == 0 || (children.length == 1 && children[0] instanceof PendingUpdateAdapter))
{ {
return; return;
} }
@ -1102,12 +1103,15 @@ implements IMenuListener, ISystemDeleteTarget, ISystemRenameTarget, ISystemSelec
public ISystemViewElementAdapter getAdapterForContents() public ISystemViewElementAdapter getAdapterForContents()
{ {
SystemTableTreeViewProvider provider = (SystemTableTreeViewProvider) getContentProvider(); SystemTableTreeViewProvider provider = (SystemTableTreeViewProvider) getContentProvider();
if (provider != null)
{
Object[] children = provider.getChildren(getInput()); Object[] children = provider.getChildren(getInput());
if (children != null && children.length > 0) if (children != null && children.length > 0)
{ {
IAdaptable child = (IAdaptable) children[0]; IAdaptable child = (IAdaptable) children[0];
return getAdapter(child); return getAdapter(child);
} }
}
return null; return null;
} }

View file

@ -24,8 +24,10 @@ import java.util.Hashtable;
import java.util.Map; import java.util.Map;
import org.eclipse.core.runtime.IAdaptable; import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.util.ListenerList; import org.eclipse.jface.util.ListenerList;
import org.eclipse.jface.viewers.AbstractTreeViewer;
import org.eclipse.jface.viewers.ILabelProvider; import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.ILabelProviderListener; import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.jface.viewers.ITableLabelProvider; import org.eclipse.jface.viewers.ITableLabelProvider;
@ -33,7 +35,12 @@ import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.Viewer;
import org.eclipse.rse.core.SystemAdapterHelpers; import org.eclipse.rse.core.SystemAdapterHelpers;
import org.eclipse.rse.core.model.ISystemContainer; import org.eclipse.rse.core.model.ISystemContainer;
import org.eclipse.rse.core.subsystems.ISubSystem;
import org.eclipse.rse.ui.ISystemPreferencesConstants;
import org.eclipse.rse.ui.RSEUIPlugin;
import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.Image;
import org.eclipse.ui.model.IWorkbenchAdapter;
import org.eclipse.ui.progress.DeferredTreeContentManager;
import org.eclipse.ui.views.properties.IPropertyDescriptor; import org.eclipse.ui.views.properties.IPropertyDescriptor;
@ -54,6 +61,7 @@ public class SystemTableTreeViewProvider implements ILabelProvider, ITableLabelP
protected SimpleDateFormat _dateFormat = new SimpleDateFormat(); protected SimpleDateFormat _dateFormat = new SimpleDateFormat();
protected Viewer _viewer = null; protected Viewer _viewer = null;
protected int _maxCharsInColumnZero = 0; protected int _maxCharsInColumnZero = 0;
private SystemDeferredTableTreeContentManager manager;
/** /**
* The cache of images that have been dispensed by this provider. * The cache of images that have been dispensed by this provider.
@ -77,6 +85,10 @@ public class SystemTableTreeViewProvider implements ILabelProvider, ITableLabelP
public void inputChanged(Viewer visualPart, Object oldInput, Object newInput) public void inputChanged(Viewer visualPart, Object oldInput, Object newInput)
{ {
_viewer = visualPart; _viewer = visualPart;
if (_viewer instanceof AbstractTreeViewer)
{
manager = new SystemDeferredTableTreeContentManager(this, (SystemTableTreeView)_viewer);
}
} }
public void setCache(Object[] newCache) public void setCache(Object[] newCache)
@ -111,18 +123,35 @@ public class SystemTableTreeViewProvider implements ILabelProvider, ITableLabelP
public Object[] getChildren(Object object) public Object[] getChildren(Object object)
{ {
return getElements(object); return getElements(object);
} }
public Object getParent(Object object) public Object getParent(Object object)
{ {
return getAdapterFor(object).getParent(object); ISystemViewElementAdapter adapter = getAdapterFor(object);
if (adapter != null)
{
return adapter.getParent(object);
}
else
{
return null;
}
} }
public boolean hasChildren(Object object) public boolean hasChildren(Object object)
{ {
return getAdapterFor(object).hasChildren(object); ISystemViewElementAdapter adapter = getAdapterFor(object);
if (adapter != null)
{
return adapter.hasChildren(object);
}
if (manager != null) {
if (manager.isDeferredAdapter(object))
return manager.mayHaveChildren(object);
}
return false;
} }
public Object getElementAt(Object object, int i) public Object getElementAt(Object object, int i)
@ -144,6 +173,10 @@ public class SystemTableTreeViewProvider implements ILabelProvider, ITableLabelP
{ {
result = SystemAdapterHelpers.getAdapter(object); result = SystemAdapterHelpers.getAdapter(object);
} }
if (result == null)
{
return null;
}
result.setPropertySourceInput(object); result.setPropertySourceInput(object);
return result; return result;
} }
@ -160,9 +193,30 @@ public class SystemTableTreeViewProvider implements ILabelProvider, ITableLabelP
{ {
ISystemViewElementAdapter adapter = getAdapterFor(object); ISystemViewElementAdapter adapter = getAdapterFor(object);
adapter.setViewer(_viewer); adapter.setViewer(_viewer);
if (adapter != null && adapter.hasChildren(object)) if (adapter != null && adapter.hasChildren(object))
{
if (supportsDeferredQueries())
{
if (manager != null && adapter.supportsDeferredQueries())
{
ISubSystem ss = adapter.getSubSystem(object);
if (ss != null)
{
// if (ss.isConnected())
{
results = manager.getChildren(object);
}
}
}
}
else
{ {
results = adapter.getChildren(object); results = adapter.getChildren(object);
}
if (adapter instanceof SystemViewRootInputAdapter) if (adapter instanceof SystemViewRootInputAdapter)
{ {
ArrayList filterredResults = new ArrayList(); ArrayList filterredResults = new ArrayList();
@ -193,7 +247,22 @@ public class SystemTableTreeViewProvider implements ILabelProvider, ITableLabelP
public String getText(Object object) public String getText(Object object)
{ {
String result = getAdapterFor(object).getText(object); String result = null;
ISystemViewElementAdapter adapter = getAdapterFor(object);
if (adapter != null)
{
result = adapter.getText(object);
}
else
{
IWorkbenchAdapter wadapter = (IWorkbenchAdapter)((IAdaptable) object).getAdapter(IWorkbenchAdapter.class);
if (wadapter == null)
{
return object.toString();
}
return wadapter.getLabel(object);
}
int len = result.length(); int len = result.length();
if (len > _maxCharsInColumnZero) if (len > _maxCharsInColumnZero)
{ {
@ -209,8 +278,24 @@ public class SystemTableTreeViewProvider implements ILabelProvider, ITableLabelP
public Image getImage(Object object) public Image getImage(Object object)
{ {
ImageDescriptor descriptor = null;
ImageDescriptor descriptor = getAdapterFor(object).getImageDescriptor(object); ISystemViewElementAdapter adapter = getAdapterFor(object);
if (adapter != null)
{
descriptor = adapter.getImageDescriptor(object);
}
else
{
IWorkbenchAdapter wadapter = (IWorkbenchAdapter)((IAdaptable) object).getAdapter(IWorkbenchAdapter.class);
if (wadapter == null)
{
return null;
}
else
{
descriptor = wadapter.getImageDescriptor(object);
}
}
Image image = null; Image image = null;
if (descriptor != null) if (descriptor != null)
@ -243,6 +328,11 @@ public class SystemTableTreeViewProvider implements ILabelProvider, ITableLabelP
index = index - 1; index = index - 1;
ISystemViewElementAdapter adapter = getAdapterFor(obj); ISystemViewElementAdapter adapter = getAdapterFor(obj);
if (adapter == null)
{
return null;
}
IPropertyDescriptor[] descriptors = null; IPropertyDescriptor[] descriptors = null;
if (_columnManager != null) if (_columnManager != null)
@ -323,6 +413,8 @@ public class SystemTableTreeViewProvider implements ILabelProvider, ITableLabelP
*/ */
public void setCachedObjects(Object parent, Object[] children) { public void setCachedObjects(Object parent, Object[] children) {
cache.put(parent, children); cache.put(parent, children);
_lastObject = parent;
_lastResults = children;
} }
/** /**
@ -340,4 +432,11 @@ public class SystemTableTreeViewProvider implements ILabelProvider, ITableLabelP
*/ */
public void dispose() { public void dispose() {
} }
protected boolean supportsDeferredQueries()
{
IPreferenceStore store = RSEUIPlugin.getDefault().getPreferenceStore();
return store.getBoolean(ISystemPreferencesConstants.USE_DEFERRED_QUERIES);
}
} }