Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Stepper2012-08-01 16:00:50 +0000
committerEike Stepper2012-08-01 16:00:50 +0000
commit1626ff34f20c5a74a8622754eb38932a104823b7 (patch)
tree17562a5ccb23059db84c9af63fc3cba180eb5264 /plugins
parente68b1376a2c2e665edadadb44a30111ca30fba41 (diff)
downloadcdo-1626ff34f20c5a74a8622754eb38932a104823b7.tar.gz
cdo-1626ff34f20c5a74a8622754eb38932a104823b7.tar.xz
cdo-1626ff34f20c5a74a8622754eb38932a104823b7.zip
Consolidate viewer refreshs
Diffstat (limited to 'plugins')
-rw-r--r--plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/ui/CDOItemProvider.java21
-rw-r--r--plugins/org.eclipse.net4j.util.ui/META-INF/MANIFEST.MF30
-rw-r--r--plugins/org.eclipse.net4j.util.ui/src/org/eclipse/net4j/util/ui/StructuredContentProvider.java97
-rw-r--r--plugins/org.eclipse.net4j.util.ui/src/org/eclipse/net4j/util/ui/UIUtil.java78
-rw-r--r--plugins/org.eclipse.net4j.util.ui/src/org/eclipse/net4j/util/ui/views/ContainerView.java94
5 files changed, 176 insertions, 144 deletions
diff --git a/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/ui/CDOItemProvider.java b/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/ui/CDOItemProvider.java
index 0bd01f5d60..27e092df41 100644
--- a/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/ui/CDOItemProvider.java
+++ b/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/ui/CDOItemProvider.java
@@ -56,7 +56,6 @@ import org.eclipse.emf.cdo.view.CDOViewTargetChangedEvent;
import org.eclipse.net4j.util.container.IContainer;
import org.eclipse.net4j.util.event.IEvent;
import org.eclipse.net4j.util.event.IListener;
-import org.eclipse.net4j.util.ui.UIUtil;
import org.eclipse.net4j.util.ui.actions.SafeAction;
import org.eclipse.net4j.util.ui.views.ContainerItemProvider;
import org.eclipse.net4j.util.ui.views.IElementFilter;
@@ -86,7 +85,7 @@ import java.util.List;
* {@link org.eclipse.jface.viewers.ILabelProvider label} provider for concepts such as {@link CDOSession},
* {@link CDOView}, {@link CDOResource} and {@link CDOResourceFolder}. It also providers common context menu action over
* those elements.
- *
+ *
* @author Eike Stepper
* @see org.eclipse.jface.viewers.IContentProvider
* @see org.eclipse.jface.viewers.ILabelProvider
@@ -95,8 +94,6 @@ public class CDOItemProvider extends ContainerItemProvider<IContainer<Object>>
{
private IWorkbenchPage page;
- private Font bold;
-
public CDOItemProvider(IWorkbenchPage page, IElementFilter rootElementFilter)
{
super(rootElementFilter);
@@ -109,20 +106,6 @@ public class CDOItemProvider extends ContainerItemProvider<IContainer<Object>>
}
@Override
- protected void connectInput(IContainer<Object> input)
- {
- super.connectInput(input);
- bold = UIUtil.getBoldFont(getViewer().getControl());
- }
-
- @Override
- protected void disconnectInput(IContainer<Object> input)
- {
- bold.dispose();
- super.disconnectInput(input);
- }
-
- @Override
public Object[] getChildren(Object element)
{
if (element instanceof CDOBranchManager)
@@ -269,7 +252,7 @@ public class CDOItemProvider extends ContainerItemProvider<IContainer<Object>>
CDOTransaction transaction = (CDOTransaction)obj;
if (transaction.isDirty())
{
- return bold;
+ return getBoldFont();
}
}
diff --git a/plugins/org.eclipse.net4j.util.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.net4j.util.ui/META-INF/MANIFEST.MF
index 3fec0aa4dd..298da4245f 100644
--- a/plugins/org.eclipse.net4j.util.ui/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.net4j.util.ui/META-INF/MANIFEST.MF
@@ -1,7 +1,7 @@
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-SymbolicName: org.eclipse.net4j.util.ui;singleton:=true
-Bundle-Version: 3.2.0.qualifier
+Bundle-Version: 3.3.0.qualifier
Bundle-Name: %pluginName
Bundle-Vendor: %providerName
Bundle-ActivationPolicy: lazy
@@ -15,17 +15,17 @@ Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.4.0,4.0.0)",
org.eclipse.ui;bundle-version="[3.4.0,4.0.0)";visibility:=reexport,
org.eclipse.net4j.util;bundle-version="[3.0.0,4.0.0)";visibility:=reexport,
org.eclipse.net4j.ui.shared;bundle-version="[4.0.0,5.0.0)"
-Export-Package: org.eclipse.net4j.util.internal.ui;version="3.2.0";x-internal:=true,
- org.eclipse.net4j.util.internal.ui.actions;version="3.2.0";x-internal:=true,
- org.eclipse.net4j.util.internal.ui.bundle;version="3.2.0";x-internal:=true,
- org.eclipse.net4j.util.internal.ui.messages;version="3.2.0";x-internal:=true,
- org.eclipse.net4j.util.internal.ui.views;version="3.2.0";x-internal:=true,
- org.eclipse.net4j.util.ui;version="3.2.0",
- org.eclipse.net4j.util.ui.actions;version="3.2.0",
- org.eclipse.net4j.util.ui.container;version="3.2.0",
- org.eclipse.net4j.util.ui.dnd;version="3.2.0",
- org.eclipse.net4j.util.ui.prefs;version="3.2.0",
- org.eclipse.net4j.util.ui.proposals;version="3.2.0",
- org.eclipse.net4j.util.ui.security;version="3.2.0",
- org.eclipse.net4j.util.ui.views;version="3.2.0",
- org.eclipse.net4j.util.ui.widgets;version="3.2.0"
+Export-Package: org.eclipse.net4j.util.internal.ui;version="3.3.0";x-internal:=true,
+ org.eclipse.net4j.util.internal.ui.actions;version="3.3.0";x-internal:=true,
+ org.eclipse.net4j.util.internal.ui.bundle;version="3.3.0";x-internal:=true,
+ org.eclipse.net4j.util.internal.ui.messages;version="3.3.0";x-internal:=true,
+ org.eclipse.net4j.util.internal.ui.views;version="3.3.0";x-internal:=true,
+ org.eclipse.net4j.util.ui;version="3.3.0",
+ org.eclipse.net4j.util.ui.actions;version="3.3.0",
+ org.eclipse.net4j.util.ui.container;version="3.3.0",
+ org.eclipse.net4j.util.ui.dnd;version="3.3.0",
+ org.eclipse.net4j.util.ui.prefs;version="3.3.0",
+ org.eclipse.net4j.util.ui.proposals;version="3.3.0",
+ org.eclipse.net4j.util.ui.security;version="3.3.0",
+ org.eclipse.net4j.util.ui.views;version="3.3.0",
+ org.eclipse.net4j.util.ui.widgets;version="3.3.0"
diff --git a/plugins/org.eclipse.net4j.util.ui/src/org/eclipse/net4j/util/ui/StructuredContentProvider.java b/plugins/org.eclipse.net4j.util.ui/src/org/eclipse/net4j/util/ui/StructuredContentProvider.java
index fa19784a67..ec810de1b9 100644
--- a/plugins/org.eclipse.net4j.util.ui/src/org/eclipse/net4j/util/ui/StructuredContentProvider.java
+++ b/plugins/org.eclipse.net4j.util.ui/src/org/eclipse/net4j/util/ui/StructuredContentProvider.java
@@ -17,11 +17,9 @@ import org.eclipse.net4j.util.internal.ui.bundle.OM;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.StructuredViewer;
+import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Font;
-import org.eclipse.swt.graphics.FontData;
-import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
/**
@@ -35,6 +33,8 @@ public abstract class StructuredContentProvider<INPUT> implements IStructuredCon
private Font italicFont;
+ private Font boldFont;
+
public StructuredContentProvider()
{
}
@@ -52,6 +52,12 @@ public abstract class StructuredContentProvider<INPUT> implements IStructuredCon
italicFont.dispose();
italicFont = null;
}
+
+ if (boldFont != null)
+ {
+ boldFont.dispose();
+ boldFont = null;
+ }
}
public INPUT getInput()
@@ -109,7 +115,7 @@ public abstract class StructuredContentProvider<INPUT> implements IStructuredCon
*/
public void refreshViewer(boolean updateLabels)
{
- refreshElement(null, updateLabels);
+ UIUtil.refreshElement(viewer, null, updateLabels);
}
/**
@@ -117,40 +123,17 @@ public abstract class StructuredContentProvider<INPUT> implements IStructuredCon
*/
public void refreshElement(final Object element, final boolean updateLabels)
{
- try
- {
- getDisplay().asyncExec(new Runnable()
- {
- public void run()
- {
- try
- {
- refreshSynced(element, updateLabels);
- }
- catch (RuntimeException ignore)
- {
- }
- }
- });
- }
- catch (RuntimeException ignore)
- {
- }
+ UIUtil.refreshElement(viewer, element, updateLabels);
}
/**
* @since 3.1
+ * @deprecated Use {@link #refreshElement(Object, boolean)}
*/
+ @Deprecated
public void refreshSynced(final Object element, final boolean updateLabels)
{
- if (element != null && element != input)
- {
- viewer.refresh(element, updateLabels);
- }
- else
- {
- viewer.refresh(updateLabels);
- }
+ refreshElement(element, updateLabels);
}
/**
@@ -231,6 +214,40 @@ public abstract class StructuredContentProvider<INPUT> implements IStructuredCon
}
}
+ /**
+ * @since 3.3
+ */
+ public void expandElement(final Object element, final int level)
+ {
+ if (element != null)
+ {
+ if (getViewer() instanceof TreeViewer)
+ {
+ final TreeViewer viewer = (TreeViewer)getViewer();
+
+ try
+ {
+ getDisplay().asyncExec(new Runnable()
+ {
+ public void run()
+ {
+ try
+ {
+ viewer.expandToLevel(element, level);
+ }
+ catch (RuntimeException ignore)
+ {
+ }
+ }
+ });
+ }
+ catch (RuntimeException ignore)
+ {
+ }
+ }
+ }
+ }
+
protected Display getDisplay()
{
Display display = viewer.getControl().getDisplay();
@@ -249,12 +266,22 @@ public abstract class StructuredContentProvider<INPUT> implements IStructuredCon
{
if (italicFont == null && viewer != null)
{
- Control control = viewer.getControl();
- FontData data = control.getFont().getFontData()[0];
-
- italicFont = new Font(control.getDisplay(), data.getName(), data.getHeight(), data.getStyle() | SWT.ITALIC);
+ italicFont = UIUtil.getItalicFont(viewer.getControl());
}
return italicFont;
}
+
+ /**
+ * @since 3.3
+ */
+ protected synchronized Font getBoldFont()
+ {
+ if (boldFont == null && viewer != null)
+ {
+ boldFont = UIUtil.getBoldFont(viewer.getControl());
+ }
+
+ return boldFont;
+ }
}
diff --git a/plugins/org.eclipse.net4j.util.ui/src/org/eclipse/net4j/util/ui/UIUtil.java b/plugins/org.eclipse.net4j.util.ui/src/org/eclipse/net4j/util/ui/UIUtil.java
index 9b6ca44b9c..07c7d33860 100644
--- a/plugins/org.eclipse.net4j.util.ui/src/org/eclipse/net4j/util/ui/UIUtil.java
+++ b/plugins/org.eclipse.net4j.util.ui/src/org/eclipse/net4j/util/ui/UIUtil.java
@@ -18,6 +18,9 @@ import org.eclipse.jface.fieldassist.FieldDecoration;
import org.eclipse.jface.fieldassist.FieldDecorationRegistry;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.StructuredViewer;
+import org.eclipse.jface.viewers.TreePath;
+import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.dnd.Clipboard;
@@ -101,6 +104,18 @@ public final class UIUtil
}
}
+ /**
+ * @since 3.3
+ */
+ public static Font getItalicFont(Control control)
+ {
+ FontData[] datas = control.getFont().getFontData().clone();
+ datas[0].setStyle(SWT.ITALIC);
+ Display display = control.getShell().getDisplay();
+ Font font = new Font(display, datas);
+ return font;
+ }
+
public static Font getBoldFont(Control control)
{
FontData[] datas = control.getFont().getFontData().clone();
@@ -353,7 +368,7 @@ public final class UIUtil
/**
* Adds indentation to the control. if indent value is < 0, the control indentation is left unchanged.
- *
+ *
* @since 2.0
*/
public static void setIndentation(Control control, int horizontalIndent, int verticalIndent)
@@ -380,9 +395,9 @@ public final class UIUtil
}
/**
- * @since 2.0
+ * @since 3.3
*/
- public static void refreshViewer(final Viewer viewer)
+ public static void preserveViewerState(final Viewer viewer, final Runnable runnable)
{
try
{
@@ -390,14 +405,32 @@ public final class UIUtil
{
public void run()
{
+ ISelection selection = viewer.getSelection();
+
+ TreePath[] paths = null;
+ if (viewer instanceof TreeViewer)
+ {
+ TreeViewer treeViewer = (TreeViewer)viewer;
+ paths = treeViewer.getExpandedTreePaths();
+ }
+
try
{
- viewer.refresh();
+ runnable.run();
}
catch (RuntimeException ignore)
{
// Do nothing
}
+ finally
+ {
+ if (paths != null)
+ {
+ ((TreeViewer)viewer).setExpandedElements(paths);
+ }
+
+ viewer.setSelection(selection);
+ }
}
});
}
@@ -408,8 +441,43 @@ public final class UIUtil
}
/**
+ * @since 2.0
+ */
+ public static void refreshViewer(final Viewer viewer)
+ {
+ preserveViewerState(viewer, new Runnable()
+ {
+ public void run()
+ {
+ viewer.refresh();
+ }
+ });
+ }
+
+ /**
+ * @since 3.3
+ */
+ public static void refreshElement(final StructuredViewer viewer, final Object element, final boolean updateLabels)
+ {
+ preserveViewerState(viewer, new Runnable()
+ {
+ public void run()
+ {
+ if (element != null && element != viewer.getInput())
+ {
+ viewer.refresh(element, updateLabels);
+ }
+ else
+ {
+ viewer.refresh(updateLabels);
+ }
+ }
+ });
+ }
+
+ /**
* Shows a message in the StatusBar. Image can be omitted by passing a null parameter
- *
+ *
* @since 2.0
*/
public static void setStatusBarMessage(final String message, final Image image)
diff --git a/plugins/org.eclipse.net4j.util.ui/src/org/eclipse/net4j/util/ui/views/ContainerView.java b/plugins/org.eclipse.net4j.util.ui/src/org/eclipse/net4j/util/ui/views/ContainerView.java
index 8f230abf79..7ee9383bcd 100644
--- a/plugins/org.eclipse.net4j.util.ui/src/org/eclipse/net4j/util/ui/views/ContainerView.java
+++ b/plugins/org.eclipse.net4j.util.ui/src/org/eclipse/net4j/util/ui/views/ContainerView.java
@@ -451,8 +451,15 @@ public abstract class ContainerView extends ViewPart implements ISelectionProvid
*/
protected void refreshPressed()
{
- itemProvider.dispose();
- initViewer();
+ UIUtil.refreshViewer(viewer);
+ // UIUtil.preserveViewerState(viewer, new Runnable()
+ // {
+ // public void run()
+ // {
+ // itemProvider.dispose();
+ // initViewer();
+ // }
+ // });
}
protected void closeView()
@@ -532,83 +539,30 @@ public abstract class ContainerView extends ViewPart implements ISelectionProvid
public void refreshViewer(boolean updateLabels)
{
- refreshElement(null, updateLabels);
+ itemProvider.refreshViewer(updateLabels);
}
- public void refreshElement(final Object element, final boolean updateLabels)
+ public void refreshElement(Object element, boolean updateLabels)
{
- try
- {
- getDisplay().asyncExec(new Runnable()
- {
- public void run()
- {
- try
- {
- if (element != null)
- {
- viewer.refresh(element, updateLabels);
- }
- else
- {
- viewer.refresh(updateLabels);
- }
- }
- catch (RuntimeException ignore)
- {
- }
- }
- });
- }
- catch (RuntimeException ignore)
- {
- }
+ itemProvider.refreshElement(element, updateLabels);
}
- public void updateLabels(final Object element)
+ public void updateLabels(Object element)
{
- try
- {
- getDisplay().asyncExec(new Runnable()
- {
- public void run()
- {
- try
- {
- viewer.update(element, null);
- }
- catch (RuntimeException ignore)
- {
- }
- }
- });
- }
- catch (RuntimeException ignore)
- {
- }
+ itemProvider.updateLabels(element);
}
- public void revealElement(final Object element)
+ public void revealElement(Object element)
{
- try
- {
- getDisplay().asyncExec(new Runnable()
- {
- public void run()
- {
- try
- {
- viewer.reveal(element);
- }
- catch (RuntimeException ignore)
- {
- }
- }
- });
- }
- catch (RuntimeException ignore)
- {
- }
+ itemProvider.revealElement(element);
+ }
+
+ /**
+ * @since 3.3
+ */
+ public void expandElement(Object element, int level)
+ {
+ itemProvider.expandElement(element, level);
}
public static ImageDescriptor getAddImageDescriptor()

Back to the top