Java tutorial
/* Copyright (C) 2006 NTT DATA Corporation This program is free software; you can redistribute it and/or Modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. */ package com.clustercontrol.viewer; import java.util.ArrayList; import org.eclipse.jface.viewers.CellEditor; import org.eclipse.jface.viewers.IBaseLabelProvider; import org.eclipse.jface.viewers.IColorProvider; import org.eclipse.jface.viewers.IFontProvider; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import org.eclipse.swt.widgets.TableItem; import org.eclipse.swt.widgets.Widget; import com.clustercontrol.bean.TableColumnInfo; import com.clustercontrol.editor.TextAreaDialogCellEditor; import com.clustercontrol.util.WidgetTestUtil; /** * <BR> * * @version 2.2.0 * @since 1.0.0 */ public class CommonTableViewer extends TableViewer { private ArrayList<TableColumnInfo> m_tableColumnList = null; /** * * * @param parent */ public CommonTableViewer(Composite parent) { super(parent); setLabelProvider(new CommonTableLabelProvider(this)); setContentProvider(new CommonTableContentProvider()); setCellModifier(new CommonTableViewerModifier(this)); } /** * * * @param parent * @param style */ public CommonTableViewer(Composite parent, int style) { super(parent, style); setLabelProvider(new CommonTableLabelProvider(this)); setContentProvider(new CommonTableContentProvider()); setCellModifier(new CommonTableViewerModifier(this)); } /** * * * @param table */ public CommonTableViewer(Table table) { super(table); setLabelProvider(new CommonTableLabelProvider(this)); setContentProvider(new CommonTableContentProvider()); setCellModifier(new CommonTableViewerModifier(this)); } /** * ??? * * @param tableColumnList */ public void createTableColumn(ArrayList<TableColumnInfo> tableColumnList, int sortColumnIndex, int sortOrder) { //????????? //-1????? this.createTableColumn(tableColumnList, sortColumnIndex, -1, sortOrder); } /** * ??? * * @param tableColumnList */ public void createTableColumn(ArrayList<TableColumnInfo> tableColumnList, int sortColumnIndex, int sortColumnIndex2, int sortOrder) { this.m_tableColumnList = tableColumnList; //? String[] properties = new String[this.m_tableColumnList.size()]; // ????? CellEditor[] editors = new CellEditor[this.m_tableColumnList.size()]; for (int i = 0; i < this.m_tableColumnList.size(); i++) { TableColumnInfo tableColumnInfo = (TableColumnInfo) this.m_tableColumnList.get(i); TableColumn column = new TableColumn(getTable(), tableColumnInfo.getStyle(), i); WidgetTestUtil.setTestId(this, null, column); //column.setData(ClusterControlPlugin.CUSTOM_WIDGET_ID, "commonTableViewerColumn" + String.valueOf(i)); column.setText(tableColumnInfo.getName()); column.setWidth(tableColumnInfo.getWidth()); //? properties[i] = String.valueOf(i); // ????? if (tableColumnInfo.getType() == TableColumnInfo.TEXT_DIALOG) { TextAreaDialogCellEditor dialog = new TextAreaDialogCellEditor(getTable()); dialog.setTitle(tableColumnInfo.getName()); dialog.setModify(false); editors[i] = dialog; } else { editors[i] = null; } //?? /* if (i == sortColumnIndex) { int order = sortOrder; tableColumnInfo.setOrder(order); setSorter(new CommonTableViewerSorter(i, order)); }*/ if (i == 0) { int order = sortOrder; tableColumnInfo.setOrder(order); setSorter(new CommonTableViewerSorter(sortColumnIndex, sortColumnIndex2, order)); Table table = column.getParent(); table.setSortColumn(column); if (order > 0) { table.setSortDirection(SWT.UP); } else { table.setSortDirection(SWT.DOWN); } } //???? column.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { TableColumn selectedColumn = (TableColumn) e.getSource(); ArrayList<TableColumnInfo> tableColumnList = getTableColumnList(); int order = 0; for (int i = 0; i < tableColumnList.size(); i++) { TableColumnInfo tableColumnInfo = tableColumnList.get(i); if (tableColumnInfo.getName().compareTo(selectedColumn.getText()) == 0) { order = tableColumnInfo.getOrder() * -1; tableColumnInfo.setOrder(order); //1?i ??-1??order(?)? // setSorter(new CommonTableViewerSorter(i, -1, order)); break; } } Table table = selectedColumn.getParent(); table.setSortColumn(selectedColumn); if (order > 0) { table.setSortDirection(SWT.UP); } else { table.setSortDirection(SWT.DOWN); } } }); } //? setColumnProperties(properties); //? setCellEditors(editors); } /* * (non-Javadoc) * * @see org.eclipse.jface.viewers.StructuredViewer#doUpdateItem(org.eclipse.swt.widgets.Widget, * java.lang.Object, boolean) */ @Override protected void doUpdateItem(Widget widget, Object element, boolean fullMap) { if (widget instanceof TableItem) { final TableItem item = (TableItem) widget; WidgetTestUtil.setTestId(this, null, item); // remember element we are showing if (fullMap) { associate(element, item); } else { item.setData(element); mapElement(element, item); } IBaseLabelProvider prov = getLabelProvider(); ICommonTableLabelProvider tprov = null; if (prov instanceof ICommonTableLabelProvider) { tprov = (ICommonTableLabelProvider) prov; int columnCount = super.getTable().getColumnCount(); TableItem ti = item; WidgetTestUtil.setTestId(this, null, ti); // 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 = "";//$NON-NLS-1$ Image image = null; Color color = null; text = tprov.getColumnText(element, column); image = tprov.getColumnImage(element, column); color = tprov.getColumnColor(element, column); ti.setText(column, text); if (ti.getImage(column) != image) { ti.setImage(column, image); } if (color != null) { ti.setBackground(column, color); } } if (prov instanceof IColorProvider) { IColorProvider cprov = (IColorProvider) prov; ti.setForeground(cprov.getForeground(element)); ti.setBackground(cprov.getBackground(element)); } if (prov instanceof IFontProvider) { IFontProvider fprov = (IFontProvider) prov; ti.setFont(fprov.getFont(element)); } } else { //ICommonTableLabelProvider????????? super.doUpdateItem(widget, element, fullMap); } } } /** * ?? * * @return */ public ArrayList<TableColumnInfo> getTableColumnList() { return this.m_tableColumnList; } /** * ?? * * @param type * @return */ public int getTableColumnIndex(int type) { int index = -1; for (int i = 0; i < m_tableColumnList.size(); i++) { TableColumnInfo tableColumn = (TableColumnInfo) m_tableColumnList.get(i); if (type == tableColumn.getType()) { index = i; break; } } return index; } /** * ??????????? * ?????? * */ public void setInput(ArrayList<?> infoList) { super.setInput(infoList); } }