/*
* Copyright (C) 2010 Brockmann Consult GmbH (info@brockmann-consult.de)
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the Free
* Software Foundation; either version 3 of the License, or (at your option)
* any later version.
* This program 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 General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, see http://www.gnu.org/licenses/
*/
package org.esa.snap.timeseries.ui.graph;
import com.bc.ceres.swing.TableLayout;
import org.esa.snap.core.ui.UIUtils;
import org.esa.snap.core.ui.product.ProductSceneView;
import org.esa.snap.core.ui.tool.ToolButtonFactory;
import org.esa.snap.rcp.SnapApp;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.openide.util.HelpCtx;
import javax.swing.AbstractButton;
import javax.swing.BorderFactory;
import javax.swing.JComponent;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.border.BevelBorder;
import java.awt.Dimension;
import java.awt.Insets;
class TimeSeriesGraphForm {
private JComponent mainPanel;
private AbstractButton showTimeSeriesForSelectedPinsButton;
private AbstractButton showTimeSeriesForAllPinsButton;
private AbstractButton exportTimeSeriesButton;
private AbstractButton showCursorTimeSeriesButton;
private TimeSeriesGraphModel graphModel;
private final ValidatorUI validatorUI;
TimeSeriesGraphForm(TimeSeriesGraphModel graphModel, JFreeChart chart, ValidatorUI validatorUI, final String helpID) {
this.graphModel = graphModel;
this.validatorUI = validatorUI;
createUI(chart, helpID);
}
private void createUI(JFreeChart chart, String helpID) {
final TableLayout tableLayout = new TableLayout(2);
tableLayout.setTablePadding(4, 4);
tableLayout.setTableAnchor(TableLayout.Anchor.NORTHWEST);
tableLayout.setTableFill(TableLayout.Fill.BOTH);
tableLayout.setTableWeightY(1.0);
tableLayout.setColumnWeightX(0, 1.0);
tableLayout.setColumnWeightX(1, 0.0);
tableLayout.setRowWeightY(0, 1.0);
tableLayout.setRowWeightY(1, 0.0);
tableLayout.setCellRowspan(0, 1, 2);
tableLayout.setCellFill(1, 0, TableLayout.Fill.HORIZONTAL);
tableLayout.setCellPadding(1, 0, new Insets(5, 5, 5, 5));
mainPanel = new JPanel(tableLayout);
mainPanel.setPreferredSize(new Dimension(320, 200));
ChartPanel chartPanel = new ChartPanel(chart);
chartPanel.setBorder(BorderFactory.createCompoundBorder(
BorderFactory.createBevelBorder(BevelBorder.LOWERED),
BorderFactory.createEmptyBorder(2, 2, 2, 2)));
mainPanel.add(chartPanel);
mainPanel.add(createButtonPanel(helpID));
mainPanel.add(validatorUI.createUI());
}
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
private JPanel createButtonPanel(final String helpID) {
showTimeSeriesForSelectedPinsButton = ToolButtonFactory.createButton(
UIUtils.loadImageIcon("icons/SelectedPinSpectra24.gif"), true);
showTimeSeriesForSelectedPinsButton.addActionListener(e -> {
if (graphModel.isShowingAllPins()) {
showTimeSeriesForAllPinsButton.setSelected(false);
graphModel.setIsShowingAllPins(false);
}
graphModel.setIsShowingSelectedPins(showTimeSeriesForSelectedPinsButton.isSelected());
});
showTimeSeriesForSelectedPinsButton.setName("showTimeSeriesForSelectedPinsButton");
showTimeSeriesForSelectedPinsButton.setToolTipText("Show time series for selected pin");
//////////////////////////////////////////
showTimeSeriesForAllPinsButton = ToolButtonFactory.createButton(
UIUtils.loadImageIcon("icons/PinSpectra24.gif"), true);
showTimeSeriesForAllPinsButton.addActionListener(e -> {
if (graphModel.isShowingSelectedPins()) {
showTimeSeriesForSelectedPinsButton.setSelected(false);
graphModel.setIsShowingSelectedPins(false);
}
graphModel.setIsShowingAllPins(showTimeSeriesForAllPinsButton.isSelected());
});
showTimeSeriesForAllPinsButton.setName("showTimeSeriesForAllPinsButton");
showTimeSeriesForAllPinsButton.setToolTipText("Show time series for all pins");
//////////////////////////////////////////
showCursorTimeSeriesButton = ToolButtonFactory.createButton(
UIUtils.loadImageIcon("icons/CursorSpectrum24.gif"), true);
showCursorTimeSeriesButton.addActionListener(e -> graphModel.setIsShowingCursorTimeSeries(showCursorTimeSeriesButton.isSelected()));
showCursorTimeSeriesButton.setToolTipText("Show time series for cursor");
showCursorTimeSeriesButton.setSelected(true);
//////////////////////////////////////////
exportTimeSeriesButton = ToolButtonFactory.createButton(
UIUtils.loadImageIcon("icons/Export24.gif"),
false);
exportTimeSeriesButton.addActionListener(e -> {
final ProductSceneView view = SnapApp.getDefault().getSelectedProductSceneView();
JOptionPane.showMessageDialog(view, "Not available in the current version.", "Export data", JOptionPane.INFORMATION_MESSAGE);
//@todo se remove message dialog and fix export that only the visible graph data will be exported
// if (view != null
// && view.getProduct() != null
// && view.getProduct().getProductType().equals(AbstractTimeSeries.TIME_SERIES_PRODUCT_TYPE)
// && TimeSeriesMapper.getInstance().getTimeSeries(view.getProduct()) != null) {
//
// AbstractTimeSeries timeSeries = TimeSeriesMapper.getInstance().getTimeSeries(view.getProduct());
// ExportTimeBasedText.export(mainPanel, timeSeries, helpID);
// }
});
exportTimeSeriesButton.setToolTipText("Export raster data time series of all pins");
exportTimeSeriesButton.setName("exportTimeSeriesButton");
final ProductSceneView sceneView = SnapApp.getDefault().getSelectedProductSceneView();
if (sceneView != null) {
exportTimeSeriesButton.setEnabled(sceneView.getProduct().getPinGroup().getNodeCount() > 0);
} else {
exportTimeSeriesButton.setEnabled(false);
}
AbstractButton helpButton = ToolButtonFactory.createButton(UIUtils.loadImageIcon("icons/Help22.png"), false);
helpButton.addActionListener(e -> new HelpCtx(helpID).display());
helpButton.setToolTipText("Help");
final TableLayout tableLayout = new TableLayout(1);
tableLayout.setTablePadding(4, 4);
tableLayout.setTableAnchor(TableLayout.Anchor.NORTHWEST);
tableLayout.setTableFill(TableLayout.Fill.HORIZONTAL);
tableLayout.setTableWeightX(1.0);
tableLayout.setTableWeightY(0.0);
JPanel buttonPanel = new JPanel(tableLayout);
buttonPanel.add(showTimeSeriesForSelectedPinsButton);
buttonPanel.add(showTimeSeriesForAllPinsButton);
buttonPanel.add(showCursorTimeSeriesButton);
buttonPanel.add(exportTimeSeriesButton);
buttonPanel.add(tableLayout.createVerticalSpacer());
buttonPanel.add(helpButton);
return buttonPanel;
}
JComponent getControl() {
return mainPanel;
}
void setButtonsEnabled(boolean enabled) {
showTimeSeriesForSelectedPinsButton.setEnabled(enabled);
showTimeSeriesForAllPinsButton.setEnabled(enabled);
}
public void setExportEnabled(boolean placemarksSet) {
exportTimeSeriesButton.setEnabled(placemarksSet);
}
static interface ValidatorUI {
JComponent createUI();
}
}