| /* |
| * Copyright (c) 2007, 2008, 2010-2012 Eike Stepper (Berlin, Germany) and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * Eike Stepper - initial API and implementation |
| */ |
| package org.eclipse.net4j.util.ui; |
| |
| import org.eclipse.net4j.util.event.IEvent; |
| import org.eclipse.net4j.util.event.IListener; |
| 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.jface.viewers.ViewerSorter; |
| import org.eclipse.swt.graphics.Font; |
| import org.eclipse.swt.widgets.Display; |
| |
| /** |
| * @author Eike Stepper |
| */ |
| public abstract class StructuredContentProvider<INPUT> extends ViewerSorter |
| implements IStructuredContentProvider, IListener |
| { |
| private StructuredViewer viewer; |
| |
| private INPUT input; |
| |
| private Font italicFont; |
| |
| private Font boldFont; |
| |
| public StructuredContentProvider() |
| { |
| } |
| |
| public void dispose() |
| { |
| if (input != null) |
| { |
| disconnectInput(input); |
| input = null; |
| } |
| |
| if (italicFont != null) |
| { |
| italicFont.dispose(); |
| italicFont = null; |
| } |
| |
| if (boldFont != null) |
| { |
| boldFont.dispose(); |
| boldFont = null; |
| } |
| } |
| |
| public INPUT getInput() |
| { |
| return input; |
| } |
| |
| public StructuredViewer getViewer() |
| { |
| return viewer; |
| } |
| |
| @SuppressWarnings("unchecked") |
| public void inputChanged(Viewer viewer, Object oldInput, Object newInput) |
| { |
| this.viewer = (StructuredViewer)viewer; |
| if (newInput != input) |
| { |
| if (input != null) |
| { |
| disconnectInput(input); |
| } |
| |
| try |
| { |
| input = (INPUT)newInput; |
| if (input != null) |
| { |
| connectInput(input); |
| } |
| } |
| catch (Exception ex) |
| { |
| OM.LOG.error(ex); |
| input = null; |
| } |
| } |
| } |
| |
| protected void connectInput(INPUT input) |
| { |
| } |
| |
| protected void disconnectInput(INPUT input) |
| { |
| } |
| |
| public void notifyEvent(IEvent event) |
| { |
| refreshViewer(true); |
| } |
| |
| /** |
| * @since 3.0 |
| */ |
| public void refreshViewer(boolean updateLabels) |
| { |
| UIUtil.refreshElement(viewer, null, updateLabels); |
| } |
| |
| /** |
| * @since 3.1 |
| */ |
| public void refreshElement(Object element, boolean updateLabels) |
| { |
| UIUtil.refreshElement(viewer, element, updateLabels); |
| } |
| |
| /** |
| * @since 3.1 |
| * @deprecated Use {@link #refreshElement(Object, boolean)} |
| */ |
| @Deprecated |
| public void refreshSynced(Object element, boolean updateLabels) |
| { |
| refreshElement(element, updateLabels); |
| } |
| |
| /** |
| * @since 3.1 |
| */ |
| public void updateLabels(Object element) |
| { |
| UIUtil.updateElements(viewer, element); |
| } |
| |
| /** |
| * @since 3.1 |
| */ |
| public void revealElement(final Object element) |
| { |
| try |
| { |
| getDisplay().asyncExec(new Runnable() |
| { |
| public void run() |
| { |
| try |
| { |
| viewer.reveal(element); |
| } |
| catch (RuntimeException ignore) |
| { |
| } |
| } |
| }); |
| } |
| catch (RuntimeException ignore) |
| { |
| } |
| } |
| |
| /** |
| * @since 3.1 |
| */ |
| public void selectElement(final Object element, final boolean reveal) |
| { |
| try |
| { |
| getDisplay().asyncExec(new Runnable() |
| { |
| public void run() |
| { |
| try |
| { |
| viewer.setSelection(new StructuredSelection(element), reveal); |
| } |
| catch (RuntimeException ignore) |
| { |
| } |
| } |
| }); |
| } |
| catch (RuntimeException ignore) |
| { |
| } |
| } |
| |
| /** |
| * @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(); |
| if (display == null) |
| { |
| display = UIUtil.getDisplay(); |
| } |
| |
| return display; |
| } |
| |
| /** |
| * @since 3.1 |
| */ |
| protected synchronized Font getItalicFont() |
| { |
| if (italicFont == null && viewer != null) |
| { |
| 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; |
| } |
| } |