Java tutorial
/* * Debrief - the Open Source Maritime Analysis Application * http://debrief.info * * (C) 2000-2014, PlanetMayo Ltd * * This library is free software; you can redistribute it and/or * modify it under the terms of the Eclipse Public License v1.0 * (http://www.eclipse.org/legal/epl-v10.html) * * This library 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. */ package org.mwc.debrief.multipath2; import java.awt.BorderLayout; import java.awt.Frame; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.IToolBarManager; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.swt.SWT; import org.eclipse.swt.awt.SWT_AWT; import org.eclipse.swt.dnd.DND; import org.eclipse.swt.dnd.DropTarget; import org.eclipse.swt.dnd.DropTargetEvent; import org.eclipse.swt.dnd.DropTargetListener; import org.eclipse.swt.dnd.FileTransfer; import org.eclipse.swt.dnd.Transfer; import org.eclipse.swt.events.MouseEvent; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Slider; import org.eclipse.ui.IActionBars; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IMemento; import org.eclipse.ui.IViewSite; import org.eclipse.ui.PartInitException; import org.eclipse.ui.part.ViewPart; import org.jfree.chart.ChartPanel; import org.jfree.chart.JFreeChart; import org.jfree.chart.axis.DateAxis; import org.jfree.chart.axis.NumberAxis; import org.jfree.chart.plot.XYPlot; import org.jfree.chart.renderer.xy.DefaultXYItemRenderer; import org.jfree.data.time.TimeSeries; import org.jfree.data.time.TimeSeriesCollection; import org.jfree.experimental.chart.swt.ChartComposite; import org.mwc.cmap.core.CorePlugin; import org.mwc.cmap.core.DataTypes.TrackData.TrackDataProvider; import org.mwc.debrief.multipath2.views.MultiPathUI; import MWC.GUI.JFreeChart.DateAxisEditor; import MWC.GUI.JFreeChart.RelativeDateAxis; /** */ public class MultiPathView extends ViewPart implements MultiPathPresenter.Display { private static final String HELP_CONTEXT = "org.mwc.debrief.help.MultipathAnalysis"; /** * The ID of the view as specified by the extension. */ public static final String ID = "org.mwc.debrief.MultiPath2"; private MultiPathUI _ui; private XYPlot _thePlot; protected MultiPathPresenter _presenter; private Action _helpAction; /** * The constructor. */ public MultiPathView() { // now sort out the presenter _presenter = new MultiPathPresenter(this); } /** * This is a callback that will allow us to create the viewer and initialize * it. */ public void createPartControl(final Composite parent) { _ui = new MultiPathUI(parent, SWT.EMBEDDED); createPlot(_ui.getChartHolder()); // let the presenter finish off _presenter.bind(); makeActions(); hookContextMenu(); hookDoubleClickAction(); contributeToActionBars(); // and declare our context sensitive help CorePlugin.declareContextHelp(parent, HELP_CONTEXT); } private void createPlot(final Composite ui) { // create a date-formatting axis final DateAxis dateAxis = new RelativeDateAxis(); dateAxis.setStandardTickUnits(DateAxisEditor.createStandardDateTickUnitsAsTickUnits()); final NumberAxis valAxis = new NumberAxis("Delay (Secs)"); final DefaultXYItemRenderer theRenderer = new DefaultXYItemRenderer(); theRenderer.setBaseShapesVisible(false); _thePlot = new XYPlot(null, dateAxis, valAxis, theRenderer); final JFreeChart _plotArea = new JFreeChart(_thePlot); final ChartComposite _plotControl = new ChartComposite(ui, SWT.NONE, null, true) { @Override public void mouseUp(MouseEvent event) { super.mouseUp(event); JFreeChart c = getChart(); if (c != null) { c.setNotify(true); // force redraw } } }; _plotControl.setChart(_plotArea); } @Override public void init(final IViewSite site, final IMemento memento) throws PartInitException { super.init(site, memento); // let the parent do the hard work _presenter.init(memento); } @Override public void saveState(final IMemento memento) { super.saveState(memento); // pass it on to the presenter to sort out _presenter.saveState(memento); } private void hookContextMenu() { } private void contributeToActionBars() { final IActionBars bars = getViewSite().getActionBars(); fillLocalPullDown(bars.getMenuManager()); fillLocalToolBar(bars.getToolBarManager()); } private void fillLocalPullDown(final IMenuManager manager) { // and the help link manager.add(_helpAction); } private void fillLocalToolBar(final IToolBarManager manager) { // and the help link manager.add(_helpAction); } private void makeActions() { _helpAction = CorePlugin.createOpenHelpAction(HELP_CONTEXT, "Help on multi-path analysis", this); } private void hookDoubleClickAction() { } private void showMessage(final String message) { MessageDialog.openInformation(this.getSite().getShell(), "Multpath Analysis", message); } /** * Passing the focus request to the viewer's control. */ public void setFocus() { } @Override public void addRangesListener(final FileHandler handler) { configureFileDropSupport(_ui.getRangeHolder(), handler); } @Override public void addSVPListener(final FileHandler handler) { configureFileDropSupport(_ui.getSVPHolder(), handler); } @Override public void addMagicListener(final SelectionListener listener) { _ui.addMagicHandler(listener); } @Override public void addTimeDeltaListener(final FileHandler handler) { configureFileDropSupport(_ui.getIntervalHolder(), handler); } @Override public void addDragHandler(final ValueHandler handler) { final Slider slider = _ui.getSlider(); slider.addSelectionListener(new SelectionListener() { @Override public void widgetSelected(final SelectionEvent e) { handler.newValue(slider.getSelection()); } @Override public void widgetDefaultSelected(final SelectionEvent e) { handler.newValue(slider.getSelection()); } }); } @Override public TrackDataProvider getDataProvider() { TrackDataProvider res = null; // ok, grab the current editor final IEditorPart editor = this.getSite().getPage().getActiveEditor(); final Object provider = editor.getAdapter(TrackDataProvider.class); if (provider != null) { res = (TrackDataProvider) provider; } return res; } @Override public void showError(final String string) { showMessage(string); } @Override public void display(final TimeSeries measured, final TimeSeries calculated) { // collate the data final TimeSeriesCollection coll = new TimeSeriesCollection(); coll.addSeries(measured); coll.addSeries(calculated); // put the series onto the chart _thePlot.setDataset(coll); } @Override public void setEnabled(final boolean b) { _ui.setEnabled(b); if (b) _ui.getSlider().setSelection(MultiPathPresenter.DEFAULT_DEPTH); } /**d * sort out the file-drop target */ private void configureFileDropSupport(final Control _pusher, final FileHandler handler) { final int dropOperation = DND.DROP_COPY; final Transfer[] dropTypes = { FileTransfer.getInstance() }; final DropTarget target = new DropTarget(_pusher, dropOperation); target.setTransfer(dropTypes); target.addDropListener(new DropTargetListener() { public void dragEnter(final DropTargetEvent event) { if (FileTransfer.getInstance().isSupportedType(event.currentDataType)) { if (event.detail != DND.DROP_COPY) { event.detail = DND.DROP_COPY; } } } public void dragLeave(final DropTargetEvent event) { } public void dragOperationChanged(final DropTargetEvent event) { } public void dragOver(final DropTargetEvent event) { } public void drop(final DropTargetEvent event) { String[] fileNames = null; if (FileTransfer.getInstance().isSupportedType(event.currentDataType)) { fileNames = (String[]) event.data; } if (fileNames != null) { if (handler != null) handler.newFile(fileNames[0]); } } public void dropAccept(final DropTargetEvent event) { } }); } @Override public void setSVPName(final String fName) { _ui.setSVPName(fName); } @Override public void setIntervalName(final String fName) { _ui.setIntervalName(fName); } @Override public void setSliderText(final String text) { _ui.setSliderValText(text); } @Override public void setSliderVal(final int value) { _ui.getSlider().setSelection(value); } @Override public void setSliderMax(final int maxDepth) { _ui.getSlider().setMaximum(maxDepth); } }