package com.dgex.offspring.application.ui.peers; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.TableViewerColumn; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.TableColumn; import com.dgex.offspring.nxtCore.service.INxtService; public class PeerTableViewer extends TableViewer { private final int peerType; private final PeerContentProvider contentProvider; private final PeerComparator comparator = new PeerComparator(); public PeerTableViewer(Composite parent, INxtService nxt, int peerType) { super(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.BORDER); this.peerType = peerType; contentProvider = new PeerContentProvider(peerType); // TODO implement hash function on NXT model objects setUseHashlookup(false); setContentProvider(contentProvider); setInput(nxt); setComparator(comparator); createColumns(); getTable().setHeaderVisible(true); getTable().setLinesVisible(true); refresh(); } private void createColumns() { for (int id : PeerTable.getColumns(peerType)) { TableViewerColumn viewerColumn = new TableViewerColumn(this, SWT.NONE); TableColumn column = viewerColumn.getColumn(); viewerColumn .setLabelProvider(PeerTable.createLabelProvider(id, peerType)); column.addSelectionListener(getSelectionAdapter(column, id)); column.setText(PeerTable.getColumnLabel(id)); column.setAlignment(PeerTable.getColumnAlignment(id)); column.setResizable(PeerTable.getColumnResizable(id)); column.setWidth(PeerTable.getColumnWidth(id)); } } private SelectionAdapter getSelectionAdapter(final TableColumn column, final int index) { SelectionAdapter selectionAdapter = new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { comparator.setColumn(index); int dir = comparator.getDirection(); getTable().setSortDirection(dir); getTable().setSortColumn(column); refresh(); } }; return selectionAdapter; } }