/* * JBoss, Home of Professional Open Source. * * See the LEGAL.txt file distributed with this work for information regarding copyright ownership and licensing. * * See the AUTHORS.txt file distributed with this work for a full listing of individual contributors. */ package org.teiid.designer.ui.common.table; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IAction; import org.eclipse.jface.action.Separator; import org.eclipse.jface.action.ToolBarManager; import org.eclipse.jface.viewers.DoubleClickEvent; import org.eclipse.jface.viewers.IDoubleClickListener; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.ToolBar; import org.teiid.designer.ui.common.widget.ButtonProvider; /** * @param <T> * * @since 8.0 */ public final class TableAndToolBar<T> { private final Table<T> table; private final ToolBarManager toolBarMgr; /** * @param <V> * @param parent the parent panel (never <code>null</code>) * @param span the layout data horizontal span * @param tableProvider the table provider * @param columnProviders the column providers */ public <V> TableAndToolBar( final Composite parent, final int span, final TableProvider<T> tableProvider, final ColumnProvider<T, V>... columnProviders ) { this(parent,-1,span,tableProvider,columnProviders); } /** * @param <V> * @param parent the parent panel (never <code>null</code>) * @param tableStyle the table style * @param span the layout data horizontal span * @param tableProvider the table provider * @param columnProviders the column providers */ public <V> TableAndToolBar( final Composite parent, final int tableStyle, final int span, final TableProvider<T> tableProvider, final ColumnProvider<T, V>... columnProviders ) { // Create table if(tableStyle==-1) { table = new Table<T>(parent, tableProvider, columnProviders); } else { table = new Table<T>(parent,tableStyle,tableProvider,columnProviders); } // Create button bar ToolBar toolBar = new ToolBar(parent, SWT.PUSH | SWT.BORDER); this.toolBarMgr = new ToolBarManager(toolBar); // add doubleclick listener if (tableProvider.isDoubleClickSupported()) { getViewer().addDoubleClickListener(new IDoubleClickListener() { @Override public void doubleClick( final DoubleClickEvent event ) { tableProvider.doubleClicked((T)((IStructuredSelection)event.getSelection()).getFirstElement()); } }); } } /** * @param buttonProvider the button provider (may not be <code>null</code>) */ public void add( final ButtonProvider buttonProvider ) { assert (buttonProvider != null); // add a separator between toolbar buttons if (this.toolBarMgr.getItems().length != 0) { this.toolBarMgr.add(new Separator()); } // create action using information from button provider final IAction action = new Action(buttonProvider.getText(), SWT.BORDER) { @Override public void run() { // let provider know button was pushed and refresh tree buttonProvider.selected((IStructuredSelection)getViewer().getSelection()); getViewer().refresh(); } }; action.setToolTipText(buttonProvider.getToolTip()); action.setImageDescriptor(buttonProvider.getImageDescriptor()); this.toolBarMgr.add(action); // add to toolbar // initial enablement if (!buttonProvider.isEnabled((IStructuredSelection)getViewer().getSelection())) { action.setEnabled(false); } // update toolbar to show new action this.toolBarMgr.update(true); // add viewer selection listener getViewer().addSelectionChangedListener(new ISelectionChangedListener() { @Override public void selectionChanged(SelectionChangedEvent event) { boolean enabled = buttonProvider.isEnabled((IStructuredSelection)event.getSelection()); if (enabled != action.isEnabled()) { action.setEnabled(enabled); } } }); } /** * @return table the table (never <code>null</code>) */ public Table<T> getTable() { return table; } /** * @return the table viewer (never <code>null</code>) */ public TableViewer getViewer() { return table.getViewer(); } /** * @param input the viewer input */ public void setInput( final Object input ) { table.setInput(input); } }