/*
* 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.unmixing.ui;
import org.esa.snap.ui.AppContext;
import org.esa.snap.ui.diagram.DiagramCanvas;
import org.esa.snap.ui.tool.ToolButtonFactory;
import javax.swing.AbstractButton;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.plaf.basic.BasicSplitPaneDivider;
import javax.swing.plaf.basic.BasicSplitPaneUI;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
class EndmemberForm extends JPanel {
EndmemberFormModel formModel;
JList endmemberList;
DiagramCanvas diagramCanvas;
JButton addButton;
JButton removeButton;
JButton exportButton;
public EndmemberForm(AppContext appContext) {
this.formModel = new EndmemberFormModel(appContext);
initComponents();
}
public EndmemberFormModel getFormModel() {
return formModel;
}
private void initComponents() {
endmemberList = new JList();
endmemberList.setModel(formModel.getEndmemberListModel());
endmemberList.setSelectionModel(formModel.getEndmemberListSelectionModel());
endmemberList.setPreferredSize(new Dimension(80, 160));
diagramCanvas = new DiagramCanvas();
diagramCanvas.setDiagram(formModel.getEndmemberDiagram());
formModel.getPropertyChangeSupport().addPropertyChangeListener("selectedEndmemberIndex", new PropertyChangeListener() {
public void propertyChange(PropertyChangeEvent evt) {
diagramCanvas.repaint();
}
});
AbstractButton addButton = ToolButtonFactory.createButton(formModel.getAddAction(), false);
AbstractButton removeButton = ToolButtonFactory.createButton(formModel.getRemoveAction(), false);
AbstractButton clearButton = ToolButtonFactory.createButton(formModel.getClearAction(), false);
AbstractButton exportButton = ToolButtonFactory.createButton(formModel.getExportAction(), false);
GridBagLayout gbl = new GridBagLayout();
JPanel actionPanel = new JPanel(gbl);
actionPanel.setBorder(BorderFactory.createEmptyBorder(3, 3, 0, 3));
GridBagConstraints gbc = new GridBagConstraints();
gbc.anchor = GridBagConstraints.WEST;
gbc.fill = GridBagConstraints.BOTH;
gbc.ipady = 2;
gbc.gridy = 0;
actionPanel.add(addButton, gbc);
gbc.gridy++;
actionPanel.add(removeButton, gbc);
gbc.gridy++;
actionPanel.add(clearButton, gbc);
gbc.gridy++;
actionPanel.add(exportButton, gbc);
gbc.gridy++;
gbc.weighty = 1;
actionPanel.add(new JLabel(), gbc);
final Color color = actionPanel.getBackground();
final float[] rgbColors = new float[3];
color.getRGBColorComponents(rgbColors);
final float factor = 0.9f;
actionPanel.setBackground(new Color(rgbColors[0] * factor, rgbColors[1] * factor, rgbColors[2] * factor));
JPanel endmemberSelectionPanel = new JPanel(new BorderLayout());
endmemberSelectionPanel.add(new JScrollPane(endmemberList), BorderLayout.CENTER);
endmemberSelectionPanel.add(actionPanel, BorderLayout.WEST);
JPanel endmemberPreviewPanel = new JPanel(new BorderLayout());
endmemberPreviewPanel.add(diagramCanvas, BorderLayout.CENTER);
JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
splitPane.setLeftComponent(endmemberSelectionPanel);
splitPane.setRightComponent(endmemberPreviewPanel);
splitPane.setBorder(BorderFactory.createEmptyBorder());
splitPane.setUI(createPlainDividerSplitPaneUI());
setLayout(new BorderLayout());
add(splitPane, BorderLayout.CENTER);
}
private BasicSplitPaneUI createPlainDividerSplitPaneUI() {
return new BasicSplitPaneUI() {
@Override
public BasicSplitPaneDivider createDefaultDivider() {
return new BasicSplitPaneDivider(this) {
@Override
public void paint(Graphics g) {
// do nothing
}
};
}
};
}
}