package com.hundsun.ares.studio.jres.database.ui.editors.dialog.inner; import java.util.HashMap; import java.util.Map; import org.apache.log4j.Logger; import org.eclipse.jface.viewers.ArrayContentProvider; import org.eclipse.jface.viewers.ColumnLabelProvider; import org.eclipse.jface.viewers.EditingSupport; import org.eclipse.jface.viewers.IContentProvider; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.TableViewerColumn; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Layout; import org.eclipse.swt.widgets.Listener; import com.hundsun.ares.studio.core.ConsoleHelper; public abstract class BasicTableViewer extends TableViewer { public static final Logger LOGGER = ConsoleHelper.getLogger(); public static final int DEFAULT_STYLE = SWT.FULL_SELECTION | SWT.BORDER | SWT.V_SCROLL; public BasicTableViewer(Composite parent) { this(parent, DEFAULT_STYLE); } public BasicTableViewer(Composite parent, int style) { super(parent, style); getTable().setHeaderVisible(true); getTable().setLinesVisible(true); Layout layout = (Layout) parent.getLayout(); getTable().setLayoutData( getDefaultLayoutData(layout instanceof GridLayout ? ((GridLayout) layout).numColumns : 1)); getTable().addListener(SWT.MeasureItem, new Listener() { public void handleEvent(Event event) { event.height = height; } }); setContentProvider(createContentProvider()); initColumns(); } /** * Ĭ���и� */ public static int DEFAULT_HEIGHT = 22; private int height = DEFAULT_HEIGHT; /** * �����и� * * @param height */ public void setRowHeight(int height) { this.height = height; } /** * ��ȡ�и� * * @return */ public int getRowHeight() { return height; } /** * ����Ĭ��LayoutData���ڳ�ʼ��ʱ���� * * @param cols�������������� * @return */ protected GridData getDefaultLayoutData(int cols) { GridData data = new GridData(GridData.FILL_HORIZONTAL); data.horizontalSpan = cols; data.heightHint = 220; return data; } private Map<String, TableViewerColumn> colsMap = new HashMap<String, TableViewerColumn>(); /** * ��ȡ��������е��У�Map��Key�DZ���еı��� * * @return */ public Map<String, TableViewerColumn> getColumnsMap() { return colsMap; } protected void initColumns() { String[] titles = createTitles(); int[] titleWidth = createTitlesWidth(); if (titles.length != titleWidth.length) { LOGGER.debug("�������п����ø�����ͬ"); return; } for (int i = 0; i < titles.length; i++) { TableViewerColumn column = new TableViewerColumn(this, SWT.NONE); column.getColumn().setText(titles[i]); column.getColumn().setWidth(titleWidth[i]); colsMap.put(titles[i], column); column.setEditingSupport(createEditingSupport(i)); ColumnLabelProvider labelProvider = createLabelProvider(i); if (labelProvider != null) column.setLabelProvider(labelProvider); } } protected IContentProvider createContentProvider() { return new ArrayContentProvider(); } /** * ��������еı��� * * @return */ protected abstract String[] createTitles(); /** * ����еĿ�� * * @return */ protected abstract int[] createTitlesWidth(); /** * ��������е�LabelProvider���ڱ���ʼ��ʱָ����EditingSupport������������á�����ڳ�ʼ��ʱ���ݲ����Դ���LabelProvider����������Է���null�� * Ȼ��ͨ��{@link #getColumnsMap()} �õ��к������� * * @param index * ����ţ������б�����{@link #createTitles()}���ص������е���� */ protected abstract ColumnLabelProvider createLabelProvider(int index); /** * ��������е�EditingSupport���ڱ���ʼ��ʱ���á�����ڳ�ʼ��ʱ���ݲ����Դ���EditingSupport����������Է���null�� * Ȼ��ͨ��{@link #getColumnsMap()} �õ��к������� * * @param index * ����ţ������б�����{@link #createTitles()}���ص������е���� */ protected abstract EditingSupport createEditingSupport(int index); }