1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-07-04 15:45:25 +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.part.EditorInputTransfer;
import org.eclipse.ui.part.PluginTransfer;
import org.eclipse.ui.progress.PendingUpdateAdapter;
import org.eclipse.ui.views.properties.IPropertyDescriptor;
@ -571,7 +572,7 @@ implements IMenuListener, ISystemDeleteTarget, ISystemRenameTarget, ISystemSelec
Object[] children = provider.getChildren(_objectInput);
// 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;
}
@ -1102,12 +1103,15 @@ implements IMenuListener, ISystemDeleteTarget, ISystemRenameTarget, ISystemSelec
public ISystemViewElementAdapter getAdapterForContents()
{
SystemTableTreeViewProvider provider = (SystemTableTreeViewProvider) getContentProvider();
if (provider != null)
{
Object[] children = provider.getChildren(getInput());
if (children != null && children.length > 0)
{
IAdaptable child = (IAdaptable) children[0];
return getAdapter(child);
}
}
return null;
}

View file

@ -24,8 +24,10 @@ import java.util.Hashtable;
import java.util.Map;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.util.ListenerList;
import org.eclipse.jface.viewers.AbstractTreeViewer;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.ILabelProviderListener;
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.rse.core.SystemAdapterHelpers;
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.ui.model.IWorkbenchAdapter;
import org.eclipse.ui.progress.DeferredTreeContentManager;
import org.eclipse.ui.views.properties.IPropertyDescriptor;
@ -54,6 +61,7 @@ public class SystemTableTreeViewProvider implements ILabelProvider, ITableLabelP
protected SimpleDateFormat _dateFormat = new SimpleDateFormat();
protected Viewer _viewer = null;
protected int _maxCharsInColumnZero = 0;
private SystemDeferredTableTreeContentManager manager;
/**
* The cache of images that have been dispensed by this provider.
@ -76,7 +84,11 @@ public class SystemTableTreeViewProvider implements ILabelProvider, ITableLabelP
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)
@ -111,18 +123,35 @@ public class SystemTableTreeViewProvider implements ILabelProvider, ITableLabelP
public Object[] getChildren(Object object)
{
return getElements(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)
{
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)
@ -144,6 +173,10 @@ public class SystemTableTreeViewProvider implements ILabelProvider, ITableLabelP
{
result = SystemAdapterHelpers.getAdapter(object);
}
if (result == null)
{
return null;
}
result.setPropertySourceInput(object);
return result;
}
@ -160,9 +193,30 @@ public class SystemTableTreeViewProvider implements ILabelProvider, ITableLabelP
{
ISystemViewElementAdapter adapter = getAdapterFor(object);
adapter.setViewer(_viewer);
if (adapter != null && adapter.hasChildren(object))
{
results = adapter.getChildren(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);
}
if (adapter instanceof SystemViewRootInputAdapter)
{
ArrayList filterredResults = new ArrayList();
@ -192,8 +246,23 @@ public class SystemTableTreeViewProvider implements ILabelProvider, ITableLabelP
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();
if (len > _maxCharsInColumnZero)
{
@ -209,8 +278,24 @@ public class SystemTableTreeViewProvider implements ILabelProvider, ITableLabelP
public Image getImage(Object object)
{
ImageDescriptor descriptor = getAdapterFor(object).getImageDescriptor(object);
ImageDescriptor descriptor = null;
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;
if (descriptor != null)
@ -243,6 +328,11 @@ public class SystemTableTreeViewProvider implements ILabelProvider, ITableLabelP
index = index - 1;
ISystemViewElementAdapter adapter = getAdapterFor(obj);
if (adapter == null)
{
return null;
}
IPropertyDescriptor[] descriptors = null;
if (_columnManager != null)
@ -323,6 +413,8 @@ public class SystemTableTreeViewProvider implements ILabelProvider, ITableLabelP
*/
public void setCachedObjects(Object parent, Object[] children) {
cache.put(parent, children);
_lastObject = parent;
_lastResults = children;
}
/**
@ -340,4 +432,11 @@ public class SystemTableTreeViewProvider implements ILabelProvider, ITableLabelP
*/
public void dispose() {
}
protected boolean supportsDeferredQueries()
{
IPreferenceStore store = RSEUIPlugin.getDefault().getPreferenceStore();
return store.getBoolean(ISystemPreferencesConstants.USE_DEFERRED_QUERIES);
}
}