customtableviewer.java

来自「SANCHO」· Java 代码 · 共 215 行

JAVA
215
字号
/* * Copyright (C) 2004-2005 Rutger M. Ovidius for use with the sancho project. * See LICENSE.txt for license information. */package sancho.view.viewer;import org.eclipse.jface.viewers.IBaseLabelProvider;import org.eclipse.jface.viewers.IColorProvider;import org.eclipse.jface.viewers.IFontProvider;import org.eclipse.jface.viewers.ILabelProvider;import org.eclipse.jface.viewers.ISelection;import org.eclipse.jface.viewers.ITableLabelProvider;import org.eclipse.jface.viewers.TableViewer;import org.eclipse.swt.graphics.Color;import org.eclipse.swt.graphics.Font;import org.eclipse.swt.graphics.Image;import org.eclipse.swt.graphics.RGB;import org.eclipse.swt.widgets.Composite;import org.eclipse.swt.widgets.TableItem;import org.eclipse.swt.widgets.Widget;import sancho.view.preferences.PreferenceLoader;import sancho.view.utility.IDSelector;import sancho.view.utility.SResources;public class CustomTableViewer extends TableViewer implements ICustomViewer {  private int[] columnIDs;  private static Color alternateColor;  private static Color tableBGColor;  private static boolean alternateColors;  private boolean adjustFonts = true;  public static Color sortedBGColor;  public static boolean hilightSorted;  //make public for retarded gtk  public void updateSelection(ISelection selection) {    super.updateSelection(selection);  }  public void updateDisplay() {    alternateColor = PreferenceLoader.loadColor("tableAlternateBGColor");    alternateColors = PreferenceLoader.loadBoolean("tableAlternateBGColors");    tableBGColor = PreferenceLoader.loadColor("tablesBackgroundColor");    boolean newHigh = PreferenceLoader.loadBoolean("tableHilightSorted");    sortedBGColor = PreferenceLoader.loadColor("tableSortedColumnBGColor");    if (!newHigh && hilightSorted)      resetSelColumn();    hilightSorted = newHigh;    if (!alternateColors)      resetColors();    else      recolor();  }  public CustomTableViewer(Composite parent, int style) {    super(parent, style);  }  // Start ICustomViewer  public void closeAllTTE() {  }  public void setEditors(boolean b) {  }  // End ICustomViewer  public void setColumnIDs(String string) {    columnIDs = new int[string.length()];    for (int i = 0; i < string.length(); i++) {      columnIDs[i] = string.charAt(i) - IDSelector.MAGIC_NUMBER;    }  }  public int[] getColumnIDs() {    return columnIDs;  }  public void resetColors() {    TableItem[] ti = getTable().getItems();    for (int i = 0; i < ti.length; i++) {      ti[i].setBackground(null);    }  }  public void resetSelColumn() {    int column = ((GSorter) getSorter()).getLastColumnIndex();    TableItem[] ti = getTable().getItems();    for (int i = 0; i < ti.length; i++) {      ti[i].setBackground(column, null);    }  }  public void recolor() {    TableItem[] ti = getTable().getItems();    for (int i = 0; i < ti.length; i++) {      if (i % 2 != 0) {        if (!ti[i].getBackground().getRGB().equals(alternateColor.getRGB()))          ti[i].setBackground(alternateColor);      } else {        if (!ti[i].getBackground().getRGB().equals(tableBGColor.getRGB()))          ti[i].setBackground(tableBGColor);      }    }  }  public void remove(final Object[] elements) {    super.remove(elements);    if (alternateColors)      recolor();  }  // Copyright (c) 2000, 2003 IBM Corporation and others.  // TableViewer.java  protected void doUpdateItem(Widget widget, Object element, boolean fullMap) {    if (widget instanceof TableItem) {      TableItem item = (TableItem) widget;      // remember element we are showing      if (fullMap) {        associate(element, item);      } else {        item.setData(element);        mapElement(element, item);      }      IBaseLabelProvider prov = getLabelProvider();      ITableLabelProvider tprov = null;      ILabelProvider lprov = null;      if (prov instanceof ITableLabelProvider) {        tprov = (ITableLabelProvider) prov;      } else {        lprov = (ILabelProvider) prov;      }      int columnCount = this.getTable().getColumnCount();      TableItem ti = item;      // Also enter loop if no columns added. See 1G9WWGZ: JFUIF:WINNT -      // TableViewer with 0 columns does not work      for (int column = 0; (column < columnCount) || (column == 0); column++) {        // Similar code in TableTreeViewer.doUpdateItem()        String text = SResources.S_ES; //$NON-NLS-1$        Image image = null;        if (tprov != null) {          text = tprov.getColumnText(element, column);          image = tprov.getColumnImage(element, column);        } else {          if (column == 0) {            text = lprov.getText(element);            image = lprov.getImage(element);          }        }        // Only set text if it changes        if (!text.equals(ti.getText(column))) {          ti.setText(column, text);        }        // Apparently a problem to setImage to null if already null        if (ti.getImage(column) != image) {          ti.setImage(column, image);        }        if (hilightSorted) {          RGB curr = ti.getBackground(column).getRGB();          if (((GSorter) getSorter()).getLastColumnIndex() == column) {            if (!curr.equals(alternateColor.getRGB())) {              ti.setBackground(column, alternateColor);            }          } else {            if (!curr.equals(getTable().getBackground().getRGB())) {              ti.setBackground(column, null);            }          }        }      }      if (adjustFonts && prov instanceof IFontProvider) {        IFontProvider fprov = (IFontProvider) prov;        Font f = fprov.getFont(element);        if (f != null && f != ti.getData("fontOn")) {          ti.setFont(f);          ti.setData("fontOn", f);        } else if (f == null && ti.getData("fontOn") != null) {          ti.setData("fontOn", null);          ti.setFont(null);        };      }      if (prov instanceof IColorProvider) {        IColorProvider cprov = (IColorProvider) prov;        if (ti.getForeground() != cprov.getForeground(element)) {          if ((cprov.getForeground(element) != null)              || (!ti.getParent().getForeground().getRGB().equals(ti.getForeground().getRGB()))) {            ti.setForeground(cprov.getForeground(element));          }        }      }      if (alternateColors)        recolor();    }  }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?