org.openscada.ui.chart.view.ChartControllerView.java Source code

Java tutorial

Introduction

Here is the source code for org.openscada.ui.chart.view.ChartControllerView.java

Source

/*
 * This file is part of the openSCADA project
 * Copyright (C) 2006-2012 TH4 SYSTEMS GmbH (http://th4-systems.com)
 *
 * openSCADA is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License version 3
 * only, as published by the Free Software Foundation.
 *
 * openSCADA is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License version 3 for more details
 * (a copy is included in the LICENSE file that accompanied this code).
 *
 * You should have received a copy of the GNU Lesser General Public License
 * version 3 along with openSCADA. If not, see
 * <http://opensource.org/licenses/lgpl-3.0.html> for a copy of the LGPLv3 License.
 */

package org.openscada.ui.chart.view;

import java.text.DateFormat;
import java.util.Date;

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.layout.TableColumnLayout;
import org.eclipse.jface.viewers.ColumnPixelData;
import org.eclipse.jface.viewers.ColumnWeightData;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TableViewerColumn;
import org.eclipse.jface.viewers.ViewerCell;
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;
import org.openscada.ui.chart.viewer.ChartViewer;
import org.openscada.ui.chart.viewer.input.ChartInput;

public class ChartControllerView extends AbstractChartManagePart {

    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);

        this.viewer = new TableViewer(wrapper, SWT.FULL_SELECTION);
        this.viewer.getTable().setHeaderVisible(true);

        final TableColumnLayout layout = new TableColumnLayout();
        wrapper.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.setColumnData(col.getColumn(), new ColumnWeightData(100));
            col.setLabelProvider(new ObservableMapCellLabelProvider(
                    BeansObservables.observeMap(provider.getRealizedElements(), "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.setColumnData(col.getColumn(), 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.setColumnData(col.getColumn(), 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.setColumnData(col.getColumn(), new ColumnWeightData(100));
            col.setLabelProvider(new ObservableMapCellLabelProvider(BeansObservables
                    .observeMap(provider.getRealizedElements(), ChartInput.PROP_SELECTED_TIMESTAMP)) {

                @Override
                public void update(final ViewerCell cell) {
                    final Date timestamp = ((ChartInput) cell.getElement()).getSelectedTimestamp();
                    cell.setText(timestamp == null ? null : DateFormat.getDateTimeInstance().format(timestamp));
                }
            });
        }
        {
            final TableViewerColumn col = new TableViewerColumn(this.viewer, SWT.NONE);
            col.getColumn().setText("Selected Value");
            layout.setColumnData(col.getColumn(), new ColumnWeightData(100));
            col.setLabelProvider(new ObservableMapCellLabelProvider(
                    BeansObservables.observeMap(provider.getRealizedElements(), ChartInput.PROP_SELECTED_VALUE)) {

                @Override
                public void update(final ViewerCell cell) {
                    cell.setText(((ChartInput) cell.getElement()).getSelectedValue());
                }
            });
        }
        {
            final TableViewerColumn col = new TableViewerColumn(this.viewer, SWT.NONE);
            col.getColumn().setText("Selected Quality");
            layout.setColumnData(col.getColumn(), new ColumnWeightData(100));
            col.setLabelProvider(new ObservableMapCellLabelProvider(
                    BeansObservables.observeMap(provider.getRealizedElements(), ChartInput.PROP_SELECTED_QUALITY)) {

                @Override
                public void update(final ViewerCell cell) {
                    cell.setText(((ChartInput) cell.getElement()).getSelectedQuality());
                }
            });
        }

        getSite().setSelectionProvider(this.viewer);

        contribueTo(getViewSite());

        attachSelectionService();
    }

    @Override
    public void dispose() {
        this.dbc.dispose();
        super.dispose();
    }

    @Override
    protected 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);
    }

}