fable.framework.ui.editors.ColumnFilePlotEditor.java Source code

Java tutorial

Introduction

Here is the source code for fable.framework.ui.editors.ColumnFilePlotEditor.java

Source

/*
 * Copyright (c) 2012 European Synchrotron Radiation Facility,
 *                    Diamond Light Source Ltd.
 *
 * 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
 */
package fable.framework.ui.editors;

import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorSite;
import org.eclipse.ui.ISelectionListener;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.part.EditorPart;
import org.eclipse.ui.part.FileEditorInput;

import fable.framework.internal.IPropertyVarKeys;
import fable.framework.ui.actions.SaveAsColumnFileEditorAction;
import fable.framework.ui.actions.SaveColumnFileEditorAction;
import fable.framework.ui.views.ColFileXYPlot;

/**
 * ColumnFilePlotEditor will create a plot Editor for a columnFile.
 * <p>
 * A Columnfile is a file containing columns of data to plot in ASCII format. <br>
 * Columnfiles are produced by Fable programs e.g. by ImageD11 and PolyXSim for
 * example.
 * </p>
 * 
 * @author Gaelle Suchet
 * 
 */
public class ColumnFilePlotEditor extends EditorPart
        implements ISelectionListener, org.eclipse.jface.util.IPropertyChangeListener, IColumnFileEditor {

    private ColFileXYPlot xyplot;
    /** Unique ID for this plot Editor */
    private static final String ID = "fable.framework.ui.ColumnFilePlotEditor";

    // private JLDataView current_dataView = null;
    // private JLDataView dataViewForUniccells;
    // private Vector<ColumnFile> array_columns = new Vector<ColumnFile>();
    // private HashMap<String, JLDataView> dataToPlot = new HashMap<String,
    // JLDataView>();
    /** Column editor input. */
    private ColumnFileEditorInput columnInput;
    private boolean dirty = false;

    private SaveColumnFileEditorAction saveAction;
    private SaveAsColumnFileEditorAction saveasAction;

    // ColumnFile columnFile=null;
    /*
     * (non-Javadoc)
     * 
     * @see org.eclipse.ui.part.EditorPart#init(org.eclipse.ui.IEditorSite,
     * org.eclipse.ui.IEditorInput)
     */
    @Override
    public void init(IEditorSite site, IEditorInput input) throws PartInitException {
        setSite(site);
        setInput(input);
        if (input instanceof ColumnFileEditorInput) {
            columnInput = (ColumnFileEditorInput) input;
        } else if (input instanceof FileEditorInput) {
            IPath ipath = ((FileEditorInput) input).getPath();
            if (ipath != null) {
                columnInput = new ColumnFileEditorInput(ipath.toString());
            }

        }
        if (columnInput != null) {
            this.setPartName(columnInput.getColumn().getFileName());
            columnInput.getColumn().addPropertyChangeListener(this);
        }
    }

    /*
     * (non-Javadoc)
     * 
     * @see
     * org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets
     * .Composite)
     */
    @Override
    public void createPartControl(Composite parent) {
        parent.setLayout(new GridLayout(1, false));
        // To do
        xyplot = new ColFileXYPlot(parent, "", "X", "Y");
        xyplot.addColumnFile(columnInput.getColumn());
        getSite().getWorkbenchWindow().getSelectionService().addSelectionListener(this);

        makeActions();
        // contributetoActionBar();
    }

    /*
     * private void contributetoActionBar() { IActionBars bars =
     * this.getEditorSite().getActionBars();
     * fillLocalToolBar(bars.getToolBarManager());
     * 
     * 
     * }
     * 
     * 
     * private void fillLocalToolBar(IToolBarManager toolBarManager) {
     * toolBarManager.add(saveAction); toolBarManager.add(saveasAction); }
     */

    private void makeActions() {
        saveAction = new SaveColumnFileEditorAction() {
            @Override
            public void run(IColumnFileEditor editor) {
                ((ColumnFilePlotEditor) editor).doSave(null);
            }
        };
        saveAction.setProps("Save column file");
        saveasAction = new SaveAsColumnFileEditorAction() {
            @Override
            public void run(IColumnFileEditor editor) {
                ((ColumnFilePlotEditor) editor).doSaveAs();
            }
        };

        saveasAction.setProps("Save column file as...");
    }

    /*
     * (non-Javadoc)
     * 
     * @see org.eclipse.ui.part.WorkbenchPart#setFocus()
     */
    @Override
    public void setFocus() {

    }

    /**
     * @return The ColFileXYPlot.
     */
    public ColFileXYPlot getxyPlot() {
        return xyplot;
    }

    /**
     * This has been made for transform, add unit cell peaks
     */
    /*
     * public void addData(final float x[] ){
     * if(!Display.getCurrent().isDisposed()){ Display.getCurrent().syncExec(new
     * Runnable(){
     * 
     * public void run() {
     * 
     * if(x!= null ){ if(!xyplot.getChart().getY1Axis().equals("") &&
     * !xyplot.getChart().getXAxis().equals("")){
     * if(dataViewForUniccells==null){ dataViewForUniccells = new JLDataView();
     * xyplot.getVectordataview().add(dataViewForUniccells);
     * dataViewForUniccells.setMarker( JLDataView.MARKER_VERT_LINE);
     * dataViewForUniccells.setLineWidth(0);
     * dataViewForUniccells.setMarkerColor( java.awt.Color.MAGENTA); }else{
     * dataViewForUniccells.reset(); //if we cleared plot, unit cell
     * doesn'exists if(!xyplot.getVectordataview().contains(
     * dataViewForUniccells)){ xyplot.getVectordataview().add(
     * dataViewForUniccells); } } for(int i=0; i<x.length; i++){
     * dataViewForUniccells.add(new Point2D.Double(x[i],0));
     * dataViewForUniccells.setMarkerSize(10);
     * dataViewForUniccells.setName("Unit cell"); }
     * xyplot.getChart().getY1Axis().addDataView(dataViewForUniccells);
     * xyplot.getChart().getXAxis().setName("tth"); String[] label={"tth", ""};
     * xyplot.plotData(label); xyplot.getChart().getY1Axis().setName(""); }
     * }else { xyplot.getChart().setNoValueString("No value to display"); }
     * xyplot.repaint(); } }); } }
     */

    /**
     * open a new column file and add it to the list of column files to plot
     * 
     * @param fileName
     *            - name of column file
     */
    /*
     * public void openColumnFile(String fileName) { try { columnFile = new
     * ColumnFile(fileName); columnFile.addPropertyChangeListener(this);
     * columnFile.setFileName(fileName); xyplot.addColumnFile(columnFile); }
     * catch (JepException e) { // TODO Auto-generated catch block
     * e.printStackTrace(); } }
     */

    /*
     * public void browseColumnFile() { IWorkbenchWindow activeWindow =
     * PlatformUI.getWorkbench().getActiveWorkbenchWindow(); if (activeWindow !=
     * null) { try { FileDialog fileDlg = new FileDialog(new Shell(),
     * SWT.MULTI); // Change the title bar textfileDlg.setText(
     * "Select one or more file(s) containing columns of data to plot"); String
     * file = fileDlg.open(); if (file != null){ String[] files =
     * fileDlg.getFileNames(); for (int i=0; i<files.length; i++) { file =
     * fileDlg.getFilterPath()+File.separatorChar+files[i];
     * openColumnFile(file); } } } catch (Exception e) {
     * MessageDialog.openError(activeWindow.getShell(), "Error",
     * "Error opening view:" + e.getMessage()); } }
     * 
     * }
     */
    /**
     * listen for property change events fired by the Column File since we use
     * an input for Editors
     */
    /*
     * public void propertyChange(PropertyChangeEvent event) {
     * if(((String)event.getProperty()).equals(IPropertyVarKeys.ADDCOLUMN)){
     * xyplot.addColumnFile(((ColumnFile)event.getNewValue())); } else
     * if(((String)event.getProperty()).equals(IPropertyVarKeys.UPDATECOLUMN)){
     * xyplot.updateColumnFile(((ColumnFile)event.getNewValue())); } else
     * if(((String)event.getProperty()).equals(IPropertyVarKeys.ADDUNITCELL)){
     * //addData(((ColumnFile)event.getNewValue()).getUnitCell()); }else
     * if(((String)event.getProperty()).equals("PlotData")){ //July, 8 2008 plot
     * last columns computed, i.e. tth eta String[] xyLabel =
     * (String[])event.getNewValue(); xyplot.plotData(xyLabel); }else
     * if(((String)event.getProperty()).equals("removeAll")){ //July, 11 2008
     * remove existing plots for transformer
     * 
     * xyplot.clearAllPlots(); }
     * 
     * }
     */

    /*
     * (non-Javadoc)
     * 
     * @see org.eclipse.ui.part.WorkbenchPart#dispose()
     */
    @Override
    public void dispose() {
        try {
            getSite().getWorkbenchWindow().getSelectionService().removeSelectionListener((ISelectionListener) this);
            columnInput.getColumn().removePropertyrChangeListener(this);
            if (xyplot != null) {
                xyplot.dispose();
            }
            xyplot = null;
        } finally {
            super.dispose();
        }
    }

    /*
     * (non-Javadoc)
     * 
     * @seeorg.eclipse.ui.ISelectionListener#selectionChanged(org.eclipse.ui.
     * IWorkbenchPart, org.eclipse.jface.viewers.ISelection)
     */
    @Override
    public void selectionChanged(IWorkbenchPart part, ISelection selection) {
        if (part != this) {
            if (selection instanceof IStructuredSelection) {
                IStructuredSelection sSelection = (IStructuredSelection) selection;

                Object first = sSelection.getFirstElement();
                Object[] list = sSelection.toArray();
                // System.out.println("user has selected: " + first);
                if (first instanceof float[]) {
                    float[] r = (float[]) first;
                    double[] indices = null;
                    if (columnInput.getColumn() != null) {
                        int indexColumnId = columnInput.getColumn().getColumnIDIndex();
                        if (list.length > 1 && indexColumnId >= 0) {

                            indices = new double[list.length];

                            for (int j = 0; j < list.length; j++) {

                                indices[j] = (double) ((float[]) list[j])[indexColumnId];
                            }
                        } else if (indexColumnId >= 0) {
                            indices = new double[1];
                            indices[0] = (double) r[indexColumnId];

                        }

                        // Now you have to color the selected spot
                        // get its spot_id
                        if (indices != null && indices.length > 0) {
                            xyplot.markSelectedRows(indices, columnInput.getColumn().getColumnfileId());
                        }
                    }
                }

            }
        }

    }

    /*
     * (non-Javadoc)
     * 
     * @seeorg.eclipse.ui.part.EditorPart#doSave(org.eclipse.core.runtime.
     * IProgressMonitor)
     */
    @Override
    public void doSave(IProgressMonitor monitor) {
        columnInput.save();
        dirty = false;
        firePropertyChange(PROP_DIRTY);

    }

    /*
     * (non-Javadoc)
     * 
     * @see org.eclipse.ui.part.EditorPart#doSaveAs()
     */
    @Override
    public void doSaveAs() {
        if (columnInput.saveAs()) {
            dirty = false;
            firePropertyChange(PROP_DIRTY);
            this.setPartName(columnInput.getColumn().getFileName());
        }
    }

    /*
     * (non-Javadoc)
     * 
     * @see org.eclipse.ui.part.EditorPart#isDirty()
     */
    @Override
    public boolean isDirty() {
        return dirty;
    }

    /*
     * (non-Javadoc)
     * 
     * @see org.eclipse.ui.part.EditorPart#isSaveAsAllowed()
     */
    @Override
    public boolean isSaveAsAllowed() {
        return dirty;
    }

    /**
     * 
     * @return unique id
     */
    public static String getId() {
        return ID;
    }

    /*
     * private void fillLocalPullDown(IMenuManager manager) { //
     * manager.add(saveAction); manager.add(saveasAction); }
     * 
     * private void fillLocalToolBar(IToolBarManager manager) {
     * manager.add(saveasAction); // manager.add(saveAction);
     * 
     * }
     */

    /*
     * (non-Javadoc)
     * 
     * @see org.eclipse.ui.part.EditorPart#isSaveOnCloseNeeded()
     */
    @Override
    public boolean isSaveOnCloseNeeded() {

        return true;
    }

    /*
     * private void makeActions() {
     * 
     * saveasAction = new Action() { public void run() { doSaveAs(); } }; //
     * saveasAction.setText("Save as");
     * saveasAction.setToolTipText("Save this column file as ... ");
     * saveasAction.setImageDescriptor(saveAs);
     * 
     * }
     */

    // @Override
    /*
     * (non-Javadoc)
     * 
     * @see
     * org.eclipse.jface.util.IPropertyChangeListener#propertyChange(org.eclipse
     * .jface.util.PropertyChangeEvent)
     */
    public void propertyChange(org.eclipse.jface.util.PropertyChangeEvent arg0) {
        if (arg0.getProperty().equals(IPropertyVarKeys.UPDATECOLUMN)) {
            dirty = true;
            firePropertyChange(PROP_DIRTY);
            xyplot.updateChart();

        } else if (arg0.getProperty().equals(IPropertyVarKeys.PROPDIRTY)) {
            dirty = (Boolean) arg0.getNewValue();
            firePropertyChange(PROP_DIRTY);
            this.setPartName(columnInput.getColumn().getFileName());

        } else if (arg0.getProperty().equals(IPropertyVarKeys.ADDCOLUMN)) {

            xyplot.addColumnFile(columnInput.getColumn());
        }

    }
}