Package rabbit.ui.internal.viewers

Source Code of rabbit.ui.internal.viewers.Viewers

/*
* Copyright 2010 The Rabbit Eclipse Plug-in Project
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package rabbit.ui.internal.viewers;

import org.eclipse.jface.layout.GridLayoutFactory;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.ITreeSelection;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TreePath;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.TreeViewerColumn;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.dialogs.FilteredTree;
import org.eclipse.ui.dialogs.PatternFilter;

/**
* Utility methods for working with viewers.
*/
public final class Viewers {

  /**
   * Creates a new, configured {@link FilteredTree}.
   * @param parent the parent composite.
   * @param filter the filter for the tree.
   * @return a {@link FilteredTree}.
   */
  public static FilteredTree newFilteredTree(
      Composite parent, PatternFilter filter) {
    GridLayoutFactory.fillDefaults().margins(0, 0).applyTo(parent);

    int style = SWT.VIRTUAL | SWT.V_SCROLL | SWT.H_SCROLL;
    @SuppressWarnings("deprecation")
    // Need this for Eclipse 3.4:
    FilteredTree tree = new FilteredTree(parent, style, filter);
    tree.setBackground(parent.getBackground());
    tree.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

    // Make it look a bit nicer for us:
    GridLayout layout = (GridLayout) tree.getLayout();
    layout.verticalSpacing = 0;
    layout = (GridLayout) tree.getFilterControl().getParent().getLayout();
    layout.marginHeight = 5;
    layout.marginWidth = 5;

    TreeViewer viewer = tree.getViewer();
    viewer.setUseHashlookup(true);
    viewer.getTree().setHeaderVisible(true);
    expandOnDoubleClick(viewer);
    clearEmptySelection(viewer);

    return tree;
  }

  /**
   * Creates a new {@link TreeViewerColumn}.
   * @param viewer the parent viewer.
   * @param style the style of the column.
   * @param text the text of the column.
   * @param width the width of the column
   * @return a column.
   */
  public static TreeViewerColumn newTreeViewerColumn(
      TreeViewer viewer, int style, String text, int width) {
    TreeViewerColumn column = new TreeViewerColumn(viewer, style);
    column.getColumn().setResizable(true);
    column.getColumn().setMoveable(true);
    column.getColumn().setWidth(width);
    column.getColumn().setText(text);
    return column;
  }

  /**
   * Refreshes the given viewer.
   */
  public static void refresh(TreeViewer viewer) {
    viewer.getTree().setRedraw(false);
    viewer.refresh();
    viewer.getTree().setRedraw(true);
  }

  /**
   * Gets the current input of the viewer and calls
   * {@link TreeViewer#setInput(Object)} on it.
   */
  public static void resetInput(TreeViewer viewer) {
    TreePath[] paths = viewer.getExpandedTreePaths();
    viewer.getTree().setRedraw(false);
    viewer.setInput(viewer.getInput());
    viewer.setExpandedTreePaths(paths);
    viewer.getTree().setRedraw(true);
  }

  /**
   * Clears the selection when user clicks on empty area.
   */
  private static void clearEmptySelection(final TreeViewer viewer) {
    viewer.getTree().addMouseListener(new MouseAdapter() {
      @Override
      public void mouseUp(MouseEvent e) {
        super.mouseDown(e);
        if (viewer.getTree().getItem(new Point(e.x, e.y)) == null) {
          viewer.setSelection(StructuredSelection.EMPTY);
        }
      }
    });
  }

  /**
   * Configures the given viewer to expand/collapse an tree branch when double
   * clicked on the item.
   */
  private static void expandOnDoubleClick(final TreeViewer viewer) {
    viewer.addDoubleClickListener(new IDoubleClickListener() {
      @Override
      public void doubleClick(DoubleClickEvent e) {
        if (!(e.getSelection() instanceof ITreeSelection)) {
          return;
        }

        ITreeSelection selection = (ITreeSelection) e.getSelection();
        TreePath[] paths = selection.getPaths();
        if (paths != null && paths.length > 0) {
          viewer.setExpandedState(paths[0], !viewer.getExpandedState(paths[0]));
        }
      }
    });
  }

  private Viewers() {}
}
TOP

Related Classes of rabbit.ui.internal.viewers.Viewers

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.