Java tutorial
/******************************************************************************* * Copyright (c) 2012, 2014 TH4 SYSTEMS GmbH and others. * 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: * TH4 SYSTEMS GmbH - initial API and implementation * IBH SYSTEMS GmbH - fix table column layout, enhancements for legends * IBH SYSTEMS GmbH - allow setting the chart configuration *******************************************************************************/ package org.eclipse.scada.ui.chart.view; import java.text.DateFormat; import java.text.NumberFormat; import java.util.Calendar; import org.eclipse.core.databinding.DataBindingContext; import org.eclipse.core.databinding.beans.BeansObservables; import org.eclipse.jface.action.IMenuListener; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.action.Separator; import org.eclipse.jface.databinding.viewers.ObservableListContentProvider; import org.eclipse.jface.databinding.viewers.ObservableMapCellLabelProvider; import org.eclipse.jface.viewers.ColumnPixelData; import org.eclipse.jface.viewers.ColumnWeightData; import org.eclipse.jface.viewers.TableLayout; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.TableViewerColumn; import org.eclipse.jface.viewers.ViewerCell; import org.eclipse.scada.chart.swt.render.legend.SeriesInformation; import org.eclipse.scada.ui.chart.viewer.ChartViewer; import org.eclipse.scada.ui.chart.viewer.input.ChartInput; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Menu; import org.eclipse.ui.IViewSite; import org.eclipse.ui.IWorkbenchActionConstants; public class ChartControllerView extends AbstractChartManagePart { public static final String VIEW_ID = "org.eclipse.scada.ui.chart.ChartController"; private TableViewer viewer; private DataBindingContext dbc; @Override public void createPartControl(final Composite parent) { this.dbc = new DataBindingContext(); parent.setLayout(new FillLayout()); final Composite wrapper = new Composite(parent, SWT.NONE); wrapper.setLayout(new FillLayout()); this.viewer = new TableViewer(wrapper, SWT.FULL_SELECTION); this.viewer.getTable().setHeaderVisible(true); final TableLayout layout = new TableLayout(); this.viewer.getTable().setLayout(layout); final ObservableListContentProvider provider = new ObservableListContentProvider(); this.viewer.setContentProvider(provider); { final TableViewerColumn col = new TableViewerColumn(this.viewer, SWT.NONE); col.getColumn().setText("Input"); layout.addColumnData(new ColumnWeightData(100)); col.setLabelProvider(new ObservableMapCellLabelProvider( BeansObservables.observeMap(provider.getRealizedElements(), SeriesInformation.PROP_LABEL)) { @Override public void update(final ViewerCell cell) { cell.setText(((ChartInput) cell.getElement()).getLabel()); } }); } { final TableViewerColumn col = new TableViewerColumn(this.viewer, SWT.NONE); col.getColumn().setText("Preview"); col.getColumn().setAlignment(SWT.CENTER); layout.addColumnData(new ColumnPixelData(50)); col.setLabelProvider(new ObservableMapCellLabelProvider( BeansObservables.observeMap(provider.getRealizedElements(), ChartInput.PROP_PREVIEW)) { @Override public void update(final ViewerCell cell) { final Rectangle rect = cell.getImageBounds(); if (rect != null && rect.width > 0 && rect.height > 0) { cell.setImage(((ChartInput) cell.getElement()).getPreview(rect.width, rect.height)); } else { cell.setImage(((ChartInput) cell.getElement()).getPreview(50, 20)); } } }); } { final TableViewerColumn col = new TableViewerColumn(this.viewer, SWT.NONE); col.getColumn().setText("State"); layout.addColumnData(new ColumnWeightData(100)); col.setLabelProvider(new ObservableMapCellLabelProvider( BeansObservables.observeMap(provider.getRealizedElements(), ChartInput.PROP_STATE)) { @Override public void update(final ViewerCell cell) { cell.setText(((ChartInput) cell.getElement()).getState()); } }); } { final TableViewerColumn col = new TableViewerColumn(this.viewer, SWT.NONE); col.getColumn().setText("Selected Timestamp"); layout.addColumnData(new ColumnWeightData(100)); col.setLabelProvider(new ObservableMapCellLabelProvider(BeansObservables .observeMap(provider.getRealizedElements(), SeriesInformation.PROP_SELECTED_TIMESTAMP)) { @Override public void update(final ViewerCell cell) { final Calendar timestamp = ((ChartInput) cell.getElement()).getSelectedTimestamp(); cell.setText(timestamp == null ? null : DateFormat.getDateTimeInstance().format(timestamp.getTime())); } }); } { final TableViewerColumn col = new TableViewerColumn(this.viewer, SWT.NONE); col.getColumn().setText("Selected Value"); layout.addColumnData(new ColumnWeightData(100)); col.setLabelProvider(new ObservableMapCellLabelProvider(BeansObservables .observeMap(provider.getRealizedElements(), SeriesInformation.PROP_SELECTED_VALUE)) { @Override public void update(final ViewerCell cell) { final Double value = ((ChartInput) cell.getElement()).getSelectedValue(); if (value == null) { cell.setText("<none>"); } else { cell.setText(NumberFormat.getNumberInstance().format(value)); } } }); } { final TableViewerColumn col = new TableViewerColumn(this.viewer, SWT.NONE); col.getColumn().setText("Selected Quality"); layout.addColumnData(new ColumnWeightData(100)); col.setLabelProvider(new ObservableMapCellLabelProvider(BeansObservables .observeMap(provider.getRealizedElements(), SeriesInformation.PROP_SELECTED_QUALITY)) { @Override public void update(final ViewerCell cell) { final Double quality = ((ChartInput) cell.getElement()).getSelectedQuality(); if (quality == null) { cell.setText(null); } else { cell.setText(NumberFormat.getPercentInstance().format(quality)); } } }); } getSite().setSelectionProvider(this.viewer); contribueTo(getViewSite()); attachSelectionService(); } @Override public void dispose() { this.dbc.dispose(); super.dispose(); } @Override public void setChartViewer(final ChartViewer chartViewer) { // attach if (chartViewer != null) { if (!this.viewer.getControl().isDisposed()) { this.viewer.setInput(chartViewer.getItems()); } } } @Override public void setFocus() { this.viewer.getControl().setFocus(); } private void hookContextMenu(final IViewSite viewSite) { final MenuManager menuMgr = new MenuManager("#PopupMenu"); //$NON-NLS-1$ menuMgr.setRemoveAllWhenShown(true); menuMgr.addMenuListener(new IMenuListener() { @Override public void menuAboutToShow(final IMenuManager manager) { fillContextMenu(manager); } }); final Menu menu = menuMgr.createContextMenu(this.viewer.getControl()); this.viewer.getControl().setMenu(menu); viewSite.registerContextMenu(menuMgr, this.viewer); } private void fillContextMenu(final IMenuManager manager) { // Other plug-ins can contribute there actions here manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); } public void contribueTo(final IViewSite viewSite) { hookContextMenu(viewSite); } }