blob: b53e1c08aca7258d5ccd3b6fda18e5b212773b26 [file] [log] [blame]
/**
* Copyright (c) 2011 Forschungszentrum Juelich GmbH
* 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:
* Claudia Knobloch
*/
package org.eclipse.ptp.rm.lml.ui.views;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.ptp.rm.lml.core.ILMLManager;
import org.eclipse.ptp.rm.lml.core.LMLCorePlugin;
import org.eclipse.ptp.rm.lml.core.events.IJobListSortedEvent;
import org.eclipse.ptp.rm.lml.core.listeners.ILMLListener;
import org.eclipse.ptp.rm.lml.core.model.ILguiItem;
import org.eclipse.ptp.rm.lml.core.model.ITableColumnLayout;
import org.eclipse.ptp.rm.lml.ui.actions.TableViewPullDownMenuAction;
import org.eclipse.ptp.rm.lml.ui.providers.LMLViewPart;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ControlAdapter;
import org.eclipse.swt.events.ControlEvent;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.FillLayout;
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;
/**
*
* @author Claudia Knobloch
*
*/
public class TableView extends LMLViewPart {
private final class LMLJobsListListener implements ILMLListener {
/*
* (non-Javadoc)
*
* @see
* org.eclipse.ptp.rm.lml.core.listeners.ILguiListener#
* handleEvent
* (org.eclipse.ptp.core.events.IJobListSortEvent)
*/
public void handleEvent(IJobListSortedEvent e) {
viewer.getTable().removeAll();
viewer.add(fSelectedLguiItem.getTableHandler().getTableData(tableType));
}
}
private Composite composite;
private Table table;
private TableColumn[] tableColumns;
public TableViewer viewer;
public Point sizeViewer;
public ILguiItem fSelectedLguiItem = null;
public int tableNumber = 0;
public String tableType = null;
private ILMLListener lmlListener = new LMLJobsListListener();
private ILMLManager lmlManager = LMLCorePlugin.getDefault().getLMLManager();
public void createPartControl(Composite parent) {
this.composite = parent;
parent.setLayout(new FillLayout());
viewer = new TableViewer(parent, SWT.V_SCROLL | SWT.SINGLE | SWT.FULL_SELECTION | SWT.BORDER| SWT.Resize);
viewer.setLabelProvider(new ITableLabelProvider() {
public void addListener(ILabelProviderListener listener) {
}
public void dispose() {
}
public boolean isLabelProperty(Object element, String property) {
return false;
}
public void removeListener(ILabelProviderListener listener) {
}
public Image getColumnImage(Object element, int columnIndex) {
return null;
}
public String getColumnText(Object element, int columnIndex) {
return ((String[]) element)[columnIndex];
}
});
viewer.setContentProvider(new ArrayContentProvider());
lmlManager.addListener(lmlListener, this.getClass().getName());
composite.addControlListener(new ControlAdapter() {
public void controlResized(ControlEvent e) {
if (fSelectedLguiItem == null) {
return;
}
TableColumn[] tableColumns = table.getColumns();
Double[] widths = new Double[tableColumns.length];
Double widthColumn = Integer.valueOf(sizeViewer.x).doubleValue() / tableColumns.length;
for (int i = 0; i < tableColumns.length; i++) {
widths[i] = tableColumns[i].getWidth() / widthColumn;
fSelectedLguiItem.getTableHandler().changeTableColumnsWidth(widths, tableType);
}
disposeTable();
createTable();
}
});
}
public void generateTable(int tableNumber) {
this.tableNumber = tableNumber;
fSelectedLguiItem = lmlManager.getSelectedLguiItem();
createTable();
}
private void disposeTable() {
if (fSelectedLguiItem != null) {
viewer.getTable().removeAll();
TableColumn[] oldColumns = viewer.getTable().getColumns();
for (int i = 0; i < oldColumns.length; i++) {
Listener[] oldListeners = oldColumns[i].getListeners(SWT.Selection);
for (int j = 0; j < oldListeners.length; j++) {
oldColumns[i].removeListener(SWT.Selection, oldListeners[j]);
}
oldColumns[i].dispose();
}
}
this.getViewSite().getActionBars().getMenuManager().removeAll();
}
private void createTable() {
table = viewer.getTable();
table.setLinesVisible(true);
table.setHeaderVisible(true);
tableType = fSelectedLguiItem.getTableHandler().getTableTitle(tableNumber);
createColumns();
viewer.add(fSelectedLguiItem.getTableHandler().getTableData(tableType));
}
public void setFocus() {
}
private int getColumnAlignment(String alignment) {
if (alignment.equals("LEFT")) {
return SWT.LEAD;
}
if (alignment.equals("RIGHT")) {
return SWT.TRAIL;
}
return 0;
}
/**
*
* @param tableViewer
* @param fSelected
*/
private void createColumns() {
this.setPartName(tableType);
tableColumns = new TableColumn[fSelectedLguiItem.getTableHandler().getTableColumnNumber(tableType)];
sizeViewer = composite.getSize();
ITableColumnLayout[] jobTableColumnLayouts = fSelectedLguiItem.getTableHandler().getTableColumnLayout(tableType, sizeViewer.x);
if (fSelectedLguiItem.isLayout()) {
return;
}
for (int i = 0; i < jobTableColumnLayouts.length; i++) {
TableColumn tableColumn = new TableColumn(table, getColumnAlignment(jobTableColumnLayouts[i].getStyle()));
tableColumn.setText(jobTableColumnLayouts[i].getTitle());
tableColumn.setWidth(jobTableColumnLayouts[i].getWidth());
tableColumn.setMoveable(true);
tableColumns[i] = tableColumn;
}
Listener sortListener = new Listener() {
public void handleEvent(Event e) {
TableColumn currentColumn = (TableColumn) e.widget;
if (table.getSortColumn() == currentColumn) {
table.setSortDirection(table.getSortDirection() == SWT.UP ? SWT.DOWN : SWT.UP);
} else {
table.setSortColumn(currentColumn);
table.setSortDirection(SWT.UP);
}
int sortIndex = 0;
for (int i = 0; i < tableColumns.length; i++) {
if (tableColumns[i] == table.getSortColumn()) {
sortIndex = i;
}
}
fSelectedLguiItem.getTableHandler().sort(tableType, SWT.UP, sortIndex, table.getSortDirection());
table.setSortDirection(table.getSortDirection());
LMLCorePlugin.getDefault().getLMLManager().sortLgui();
}
};
for (int i = 0; i < tableColumns.length; i++) {
tableColumns[i].addListener(SWT.Selection, sortListener);
}
String[] tableColumnNonActive = fSelectedLguiItem.getTableHandler().getTableColumnNonActive(tableType);
for (int i = 0; i < tableColumnNonActive.length; i++) {
this.getViewSite().getActionBars().getMenuManager().add(new TableViewPullDownMenuAction(tableColumnNonActive[i]));
}
}
public void prepareDispose() {
TableColumn[] tableColumns = table.getColumns();
Double[] widths = new Double[tableColumns.length];
Double widthColumn = Integer.valueOf(sizeViewer.x).doubleValue() / tableColumns.length;
for (int i = 0; i < tableColumns.length; i++) {
widths[i] = tableColumns[i].getWidth() / widthColumn;
fSelectedLguiItem.getTableHandler().changeTableColumnsWidth(widths, tableType);
}
lmlManager.removeListener(lmlListener);
}
}