/*******************************************************************************
* Copyright (c) 2013 hangum.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the GNU Lesser Public License v2.1
* which accompanies this distribution, and is available at
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
*
* Contributors:
* hangum - initial API and implementation
******************************************************************************/
package com.hangum.tadpole.engine.sql.util.tables;
import org.eclipse.jface.viewers.ColumnLabelProvider;
import org.eclipse.jface.viewers.ColumnPixelData;
import org.eclipse.jface.viewers.ColumnViewerEditor;
import org.eclipse.jface.viewers.ColumnViewerEditorActivationEvent;
import org.eclipse.jface.viewers.ColumnViewerEditorActivationStrategy;
import org.eclipse.jface.viewers.FocusCellOwnerDrawHighlighter;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TableViewerColumn;
import org.eclipse.jface.viewers.TableViewerEditor;
import org.eclipse.jface.viewers.TableViewerFocusCellManager;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import com.hangum.tadpole.commons.util.AutoResizeTableLayout;
import com.hangum.tadpole.engine.sql.util.tables.DefaultViewerSorter.COLUMN_TYPE;
/**
* eclipse swt table utils
* @author hangum
*
*/
public class TableUtil {
/**
* make selected single column
*
* @param tv
*/
public static void makeSelectSingleColumn(TableViewer tv) {
TableViewerFocusCellManager focusCellManager = new TableViewerFocusCellManager(tv,new FocusCellOwnerDrawHighlighter(tv));
ColumnViewerEditorActivationStrategy actSupport = new ColumnViewerEditorActivationStrategy(tv) {
protected boolean isEditorActivationEvent(
ColumnViewerEditorActivationEvent event) {
return event.eventType == ColumnViewerEditorActivationEvent.TRAVERSAL
|| event.eventType == ColumnViewerEditorActivationEvent.MOUSE_DOUBLE_CLICK_SELECTION
|| (event.eventType == ColumnViewerEditorActivationEvent.KEY_PRESSED && event.keyCode == SWT.CR)
|| event.eventType == ColumnViewerEditorActivationEvent.PROGRAMMATIC;
}
};
TableViewerEditor.create(tv, focusCellManager, actSupport, ColumnViewerEditor.TABBING_HORIZONTAL
| ColumnViewerEditor.TABBING_MOVE_TO_ROW_NEIGHBOR
| ColumnViewerEditor.TABBING_VERTICAL | ColumnViewerEditor.KEYBOARD_ACTIVATION);
}
public static void makeTableColumns(Table table, String[] headers) {
TableColumn column;
for (int i = 0; i < headers.length; i++) {
column = new TableColumn(table, SWT.NONE);
column.setText(headers[i]);
}
}
public static void alignmentForNumericColumn(Table table, DefaultViewerSorter sorter) {
TableColumn[] columns = table.getColumns();
COLUMN_TYPE type;
for (int i = 0; i < columns.length; i++) {
type = sorter.getColumnType(i);
if ( type != DefaultViewerSorter.COLUMN_TYPE.String )
columns[i].setAlignment(SWT.RIGHT);
}
}
public static void makeTableColumnViewer(TableViewer tableViewer, String[] header) {
Table table = tableViewer.getTable();
int columnCount = table.getColumnCount();
for(int i=0; i<columnCount; i++) {
table.getColumn(0).dispose();
}
for (int i = 0; i < header.length; i++) {
TableViewerColumn column = new TableViewerColumn(tableViewer, SWT.LEFT);
column.getColumn().setText(header[i]);
column.getColumn().setResizable(true);
column.getColumn().setMoveable(true);
column.setLabelProvider(new ColumnLabelProvider() {
@Override
public String getText(Object element) {
return element.toString();
}
});
}
}
public static void packTable(Table table) {
AutoResizeTableLayout layoutColumnLayout = new AutoResizeTableLayout(table);
table.setLayout(layoutColumnLayout);
TableColumn[] columns = table.getColumns();
for (int i = 0; i < columns.length; i++) {
columns[i].pack();
// 10의 숫자는 경험치이고 컬럼이 적었을 경우 좀더 편하게 보이는듯합니다.
layoutColumnLayout.addColumnData(new ColumnPixelData(columns[i].getWidth() + 10));
}
}
}