/** * */ package com.hundsun.ares.studio.ui.editor.blocks; import java.util.Map; import org.eclipse.jface.dialogs.IDialogSettings; import org.eclipse.jface.viewers.ColumnViewerEditor; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.TableViewerEditor; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.TableColumn; import org.eclipse.ui.forms.widgets.FormToolkit; import com.hundsun.ares.studio.ui.FilteredTable; import com.hundsun.ares.studio.ui.TableViewerPatternFilter; import com.hundsun.ares.studio.ui.editor.decorators.EnterForNewLineTableViewerBlockDecorator; /** * @author gongyf * */ public abstract class TableViewerBlock extends ColumnViewerBlock<TableViewer> { /* (non-Javadoc) * @see com.hundsun.ares.studio.jres.ui.pages.ColumnViewerBlock#doCreateColumnViewer(org.eclipse.swt.widgets.Composite, org.eclipse.ui.forms.widgets.FormToolkit) */ @Override protected TableViewer doCreateColumnViewer(Composite parent, FormToolkit toolkit) { FilteredTable table = new FilteredTable(parent, FormWidgetUtils.getDefaultTreeStyles(), new TableViewerPatternFilter(), true) { /* (non-Javadoc) * @see com.hundsun.ares.studio.jres.ui.common.FilteredTable#getRefreshJobDelay() */ @Override protected long getRefreshJobDelay() { return getColumnViewer().getTable().getItemCount() / 40 + 100; } }; toolkit.adapt(table); table.getViewer().getTable().setHeaderVisible(true); table.getViewer().getTable().setLinesVisible(true); return table.getViewer(); } @Override protected void restoreState(IDialogSettings settings) { super.restoreState(settings); TableViewer viewer = getColumnViewer(); { // �ָ��п����� String[] savedWidthes = settings.getArray(SAVED_WIDTHES); if (savedWidthes != null) { int[] saved = new int[savedWidthes.length]; for (int i = 0; i < savedWidthes.length; i++) { saved[i] = Integer.parseInt(savedWidthes[i]); } if (viewer.getTable().getColumns().length == saved.length) { for (int i=0;i<saved.length;i++) { viewer.getTable().getColumns()[i].setWidth(saved[i]); } } } } { // �ָ���˳�� String[] savedOrder = settings.getArray(SAVED_COLUMNS); if (savedOrder != null) { int[] saved = new int[savedOrder.length]; for (int i = 0; i < savedOrder.length; i++) { saved[i] = Integer.parseInt(savedOrder[i]); } if (saved.length > 0 && saved.length == viewer.getTable().getColumns().length) { viewer.getTable().setColumnOrder(saved); } } } } @Override protected void storeState(IDialogSettings settings) { super.storeState(settings); { // ������ TableColumn[] columns = getColumnViewer().getTable().getColumns(); String[] widthes = new String[columns.length]; for (int i = 0; i < columns.length; i++) { widthes[i] = String.valueOf(columns[i].getWidth()); } settings.put(SAVED_WIDTHES, widthes); } { // ������ int[] order = getColumnViewer().getTable().getColumnOrder(); String[] strOrder = new String[order.length]; for (int i = 0; i < order.length; i++) { strOrder[i] = String.valueOf(order[i]); } settings.put(SAVED_COLUMNS, strOrder); } } /* (non-Javadoc) * @see com.hundsun.ares.studio.jres.ui.pages.ColumnViewerBlock#configureColumnViewer(org.eclipse.jface.viewers.ColumnViewer) */ @Override protected void configureColumnViewer(final TableViewer viewer) { // ���������ϵ��celleditor��һЩ��������Ҫ���ȵ��� TableViewerEditor.create(viewer, createColumnViewerEditorActivationStrategy(viewer), ColumnViewerEditor.TABBING_HORIZONTAL | ColumnViewerEditor.TABBING_MOVE_TO_ROW_NEIGHBOR ); super.configureColumnViewer(viewer); } /* (non-Javadoc) * @see com.hundsun.ares.studio.jres.ui.pages.ColumnViewerBlock#configureDecorators(java.util.Map) */ @Override protected void configureDecorators( Map<String, IColumnViewerBlockDecorator<TableViewer>> decorators) { super.configureDecorators(decorators); decorators.put(EnterForNewLineTableViewerBlockDecorator.ID, new EnterForNewLineTableViewerBlockDecorator()); } }