package org.marketcetera.photon.views.fixmessagedetail.dialogs.executionreport; import org.eclipse.jface.action.IAction; import org.eclipse.jface.action.IMenuListener; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.layout.TableColumnLayout; import org.eclipse.jface.viewers.ColumnWeightData; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.TableViewerColumn; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import org.marketcetera.photon.Messages; import org.marketcetera.photon.actions.RemoveExecutionFieldAction; import org.marketcetera.photon.views.fixmessagedetail.dialogs.executionreport.providers.ExecutionReportComparator; import org.marketcetera.photon.views.fixmessagedetail.dialogs.executionreport.providers.ExecutionReportContentProvider; import org.marketcetera.photon.views.fixmessagedetail.dialogs.executionreport.providers.ExecutionReportLabelProvider; /** * Execution report table * * @author milan * */ public class ExecutionReportViewer { /** Parent dialog*/ private final AddExecutionReportDialog fParentDialog; /** Execution report table */ private TableViewer fExecutionReportViewer; public ExecutionReportViewer(AddExecutionReportDialog parentDialog) { fParentDialog = parentDialog; } public void createViewer(Composite parent, Object dataModel) { TableColumnLayout columnLayout = new TableColumnLayout(); parent.setLayout(columnLayout); fExecutionReportViewer = new TableViewer(parent, SWT.BORDER | SWT.FULL_SELECTION | SWT.SINGLE); // Context menu registerContextMenu(fExecutionReportViewer); Table table = fExecutionReportViewer.getTable(); table.setHeaderVisible(true); table.setLinesVisible(false); createColumn(Messages.ADD_EXECUTION_REPORT_DIALOG_TABLE_COLUMN_FIELD.getText(), fExecutionReportViewer, columnLayout, 20); createColumn(Messages.ADD_EXECUTION_REPORT_DIALOG_TABLE_COLUMN_VALUE.getText(), fExecutionReportViewer, columnLayout, 20); fExecutionReportViewer.setLabelProvider(new ExecutionReportLabelProvider()); fExecutionReportViewer.setContentProvider(new ExecutionReportContentProvider()); fExecutionReportViewer.setComparator(new ExecutionReportComparator()); fExecutionReportViewer.setInput(dataModel); } /** * Register the context menu for the viewer so that commands may be added to * it. */ private void registerContextMenu(TableViewer tableViewer) { MenuManager contextMenu = new MenuManager(); contextMenu.setRemoveAllWhenShown(true); contextMenu.addMenuListener(new ContextMenuListener(contextMenu)); Table table = tableViewer.getTable(); Menu menu = contextMenu.createContextMenu(table); table.setMenu(menu); } /** * Fill context menu for the Reports table * * @param contextMenu of type <code></code> */ private void fillContextMenu(MenuManager contextMenu) { // Remove execution field action IAction cancelOrderAction = new RemoveExecutionFieldAction(fExecutionReportViewer, fParentDialog); contextMenu.add(cancelOrderAction); } /** * Creates a default TableViewer Column and appends it to * <code>tableViewer</code> * * @param columnDescription of type <code>String</code> * @param tableViewer of type <code>TableViewer</code> * @param columnLayout of type <code>TableColumnLayout</code> * @param width of type <code>int</code> * * @return created table column of type <code>TableColumn</code> */ protected TableColumn createColumn(String columnDescription, TableViewer tableViewer, TableColumnLayout columnLayout, int width) { TableViewerColumn viewerColumn = new TableViewerColumn(tableViewer, SWT.LEFT); final TableColumn tableColumn = viewerColumn.getColumn(); tableColumn.setText(columnDescription); columnLayout.setColumnData(tableColumn, new ColumnWeightData(width, width)); return tableColumn; } /** * Refresh table data */ public void refreshData() { fExecutionReportViewer.refresh(); } /** * Context menu listener class * * @author milan * */ private class ContextMenuListener implements IMenuListener { private MenuManager fContextMenu; public ContextMenuListener(MenuManager contextMenu) { fContextMenu = contextMenu; } @Override public void menuAboutToShow(IMenuManager manager) { if(fExecutionReportViewer.getTable().getSelectionCount() == 0) return; fillContextMenu(fContextMenu); } } public void update() { fExecutionReportViewer.refresh(); } public void addSelectionChangedListener( ISelectionChangedListener iSelectionChangedListener) { fExecutionReportViewer.addSelectionChangedListener(iSelectionChangedListener); } }