diff options
author | Eike Stepper | 2012-08-01 16:00:50 +0000 |
---|---|---|
committer | Eike Stepper | 2012-08-01 16:00:50 +0000 |
commit | 1626ff34f20c5a74a8622754eb38932a104823b7 (patch) | |
tree | 17562a5ccb23059db84c9af63fc3cba180eb5264 /plugins | |
parent | e68b1376a2c2e665edadadb44a30111ca30fba41 (diff) | |
download | cdo-1626ff34f20c5a74a8622754eb38932a104823b7.tar.gz cdo-1626ff34f20c5a74a8622754eb38932a104823b7.tar.xz cdo-1626ff34f20c5a74a8622754eb38932a104823b7.zip |
Consolidate viewer refreshs
Diffstat (limited to 'plugins')
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() |