| /******************************************************************************* |
| * Copyright (c) 2015 Ericsson |
| * |
| * All rights reserved. This program and the accompanying materials are |
| * made available under the terms of the Eclipse Public License v1.0 which |
| * accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * Guy Perron - Initial Implementation |
| ******************************************************************************/ |
| package org.eclipse.egerrit.internal.ui.table; |
| |
| import org.eclipse.egerrit.internal.core.GerritClient; |
| import org.eclipse.egerrit.internal.model.ChangeInfo; |
| import org.eclipse.egerrit.internal.model.ChangeMessageInfo; |
| import org.eclipse.egerrit.internal.ui.table.model.HistoryTableModel; |
| import org.eclipse.egerrit.internal.ui.table.model.HistoryTableSorter; |
| import org.eclipse.egerrit.internal.ui.table.model.ITableModel; |
| import org.eclipse.egerrit.internal.ui.table.provider.HistoryTableMenuBuilder; |
| 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.Event; |
| import org.eclipse.swt.widgets.Listener; |
| import org.eclipse.swt.widgets.Table; |
| import org.eclipse.swt.widgets.TableColumn; |
| |
| /** |
| * This class implements the history table view. |
| * |
| * @since 1.0 |
| */ |
| public class UIHistoryTable { |
| |
| public static final String HISTORY_TABLE = "historyTable"; //$NON-NLS-1$ |
| |
| private static final int TABLE_STYLE = SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION; |
| |
| // ------------------------------------------------------------------------ |
| // Variables |
| // ------------------------------------------------------------------------ |
| private TableViewer fViewer; |
| |
| private HistoryTableMenuBuilder dynamicHistoryMenu = new HistoryTableMenuBuilder(); |
| |
| private GerritClient fGerritClient; |
| |
| // ------------------------------------------------------------------------ |
| // Constructors |
| // ------------------------------------------------------------------------ |
| |
| public UIHistoryTable(GerritClient gerritClient) { |
| this.fGerritClient = gerritClient; |
| |
| } |
| |
| // ------------------------------------------------------------------------ |
| // Methods |
| // ------------------------------------------------------------------------ |
| |
| public TableViewer createTableViewerSection(Composite aParent) { |
| // Create the table viewer |
| fViewer = new TableViewer(aParent, TABLE_STYLE); |
| fViewer = buildAndLayoutTable(fViewer); |
| |
| // Set the content sorter |
| HistoryTableSorter.bind(fViewer); |
| fViewer.setComparator(new HistoryTableSorter(1)); // sort by date, descending |
| // |
| fViewer.getTable().addListener(SWT.Paint, initPaintListener()); |
| |
| return fViewer; |
| |
| } |
| |
| /** |
| * Listener selecting the first item in the table if the table is not empty when available |
| * |
| * @return |
| */ |
| private Listener initPaintListener() { |
| return new Listener() { |
| |
| @Override |
| public void handleEvent(Event event) { |
| if (fViewer.getTable().getItemCount() > 0) { |
| fViewer.getTable().select(0); //initially select the first item in the table |
| ChangeMessageInfo message = (ChangeMessageInfo) fViewer.getTable().getSelection()[0].getData(); |
| ChangeInfo containingChange = (ChangeInfo) message.eContainer(); |
| //By the time we get here, some of the entries we are trying to show may have already been removed from their parent |
| //as part of the loading of the details review (See QueryHelpers.mergeNewInformation()) so we don't want to reveal those. |
| if (containingChange != null) { |
| fViewer.setSelection(fViewer.getSelection()); |
| resizeTable(fViewer.getTable()); |
| fViewer.getTable().removeListener(SWT.Paint, this); |
| } |
| } |
| } |
| }; |
| } |
| |
| /** |
| * Adjust the table column according to the text in each column |
| * |
| * @param table |
| */ |
| private void resizeTable(Table table) { |
| //Not resizing the first column since this is an icon for the comments |
| for (int index = 1; index < table.getColumnCount(); index++) { |
| TableColumn tc = table.getColumn(index); |
| tc.pack(); |
| } |
| } |
| |
| /** |
| * Create each column for the Conflicts with table |
| * |
| * @param aParent |
| * @param aViewer |
| */ |
| private TableViewer buildAndLayoutTable(final TableViewer aViewer) { |
| final Table table = aViewer.getTable(); |
| |
| //Get the review table definition |
| ITableModel[] tableInfo = HistoryTableModel.values(); |
| int size = tableInfo.length; |
| // logger.debug("Table Name Width Resize Moveable"); //$NON-NLS-1$ |
| for (int index = 0; index < size; index++) { |
| createTableViewerColumn(tableInfo[index]); |
| } |
| |
| table.setHeaderVisible(true); |
| table.setLinesVisible(true); |
| table.setData(HISTORY_TABLE); |
| |
| dynamicHistoryMenu.addPulldownMenu(fViewer, fGerritClient); |
| |
| return aViewer; |
| } |
| |
| /** |
| * Create each column in the review table list |
| * |
| * @param ConflictWithTableModel |
| * @return TableViewerColumn |
| */ |
| private TableViewerColumn createTableViewerColumn(ITableModel tableInfo) { |
| final TableViewerColumn viewerColumn = new TableViewerColumn(fViewer, SWT.NONE); |
| final TableColumn column = viewerColumn.getColumn(); |
| column.setText(tableInfo.getName()); |
| column.setWidth(tableInfo.getWidth()); |
| column.setAlignment(tableInfo.getAlignment()); |
| column.setResizable(tableInfo.getResize()); |
| column.setMoveable(tableInfo.getMoveable()); |
| return viewerColumn; |
| |
| } |
| |
| /** |
| * return the table viewer |
| * |
| * @return |
| */ |
| public TableViewer getViewer() { |
| return fViewer; |
| } |
| |
| } |