package edu.colostate.vchill.gui;
import edu.colostate.vchill.ScaleManager;
import edu.colostate.vchill.bookmark.Bookmark;
import edu.colostate.vchill.bookmark.BookmarkControl;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
/**
* Dialog for viewing/editing bookmarks
*
* @author Jochen Deyke
* @version 2006-09-14
*/
public class BookmarkDialog {
private static final BookmarkControl bmc = BookmarkControl.getInstance();
private static final ScaleManager sm = ScaleManager.getInstance();
private final Bookmark bookmark;
public BookmarkDialog(final Bookmark bookmark) {
this.bookmark = bookmark;
}
public void show() {
final JTabbedPane tabs = new JTabbedPane(/*JTabbedPane.LEFT*/);
final JPanel general = new JPanel();
general.setLayout(new BoxLayout(general, BoxLayout.Y_AXIS));
//comment
final JTextArea comment = new JTextArea(this.bookmark.comment, 15, 30);
tabs.addTab("Comment", new JScrollPane(comment));
final JPanel target = new JPanel();
target.setLayout(new BoxLayout(target, BoxLayout.X_AXIS));
final JPanel left = new JPanel();
left.setLayout(new GridLayout(12, 1));
final JPanel right = new JPanel();
right.setLayout(new GridLayout(12, 1));
//url
final JTextField url = new JTextField(this.bookmark.url, 30);
final JLabel urlLabel = new JLabel(" Connection: ");
urlLabel.setDisplayedMnemonic('C');
urlLabel.setLabelFor(url);
left.add(urlLabel);
right.add(url);
//dir
final JTextField dir = new JTextField(this.bookmark.dir, 30);
final JLabel dirLabel = new JLabel(" Directory: ");
dirLabel.setDisplayedMnemonic('D');
dirLabel.setLabelFor(dir);
left.add(dirLabel);
right.add(dir);
//file
final JTextField file = new JTextField(this.bookmark.file, 30);
final JLabel fileLabel = new JLabel(" File: ");
fileLabel.setDisplayedMnemonic('F');
fileLabel.setLabelFor(file);
left.add(fileLabel);
right.add(file);
//sweep
final JTextField sweep = new JTextField(this.bookmark.sweep, 30);
final JLabel sweepLabel = new JLabel(" Sweep: ");
sweepLabel.setDisplayedMnemonic('S');
sweepLabel.setLabelFor(sweep);
left.add(sweepLabel);
right.add(sweep);
//sweep
final JTextField scan = new JTextField(this.bookmark.scan_type, 30);
final JLabel scanLabel = new JLabel(" Scan Type: ");
scanLabel.setDisplayedMnemonic('a');
scanLabel.setLabelFor(scan);
left.add(scanLabel);
right.add(scan);
//separator
left.add(new JLabel(""));
right.add(new JLabel(""));
//center etc
final JTextField centerX = new JTextField(String.valueOf(bookmark.x), 30);
final JLabel centerXLabel = new JLabel(" Center X: ");
centerXLabel.setDisplayedMnemonic('X');
centerXLabel.setLabelFor(centerX);
left.add(centerXLabel);
right.add(centerX);
final JTextField centerY = new JTextField(String.valueOf(bookmark.y), 30);
final JLabel centerYLabel = new JLabel(" Center Y: ");
centerYLabel.setDisplayedMnemonic('Y');
centerYLabel.setLabelFor(centerY);
left.add(centerYLabel);
right.add(centerY);
final JTextField range = new JTextField(String.valueOf(bookmark.range), 30);
final JLabel rangeLabel = new JLabel(" Plot Range: ");
rangeLabel.setDisplayedMnemonic('R');
rangeLabel.setLabelFor(range);
left.add(rangeLabel);
right.add(range);
final JTextField ring = new JTextField(bookmark.ring, 30);
final JLabel ringLabel = new JLabel(" Ring/Grid Spacing: ");
ringLabel.setDisplayedMnemonic('S');
ringLabel.setLabelFor(ring);
left.add(ringLabel);
right.add(ring);
final JTextField height = new JTextField(bookmark.rhi_height, 30);
final JLabel heightLabel = new JLabel(" RHI Height Limit: ");
heightLabel.setDisplayedMnemonic('H');
heightLabel.setLabelFor(height);
left.add(heightLabel);
right.add(height);
//put it together
target.add(left);
target.add(right);
tabs.addTab("Target", target);
final JPanel scale = new JPanel();
scale.setLayout(new BoxLayout(scale, BoxLayout.X_AXIS));
final int numTypes = this.bookmark.scale.size();
final JPanel labelCol = new JPanel();
labelCol.setLayout(new GridLayout(numTypes + 1, 1));
labelCol.add(new JLabel(""));
final JCheckBox[] autos = new JCheckBox[numTypes];
final JPanel autoCol = new JPanel();
autoCol.setLayout(new GridLayout(numTypes + 1, 1));
autoCol.add(new JLabel("Autoscale"));
final JTextField[] mins = new JTextField[numTypes];
final JPanel minCol = new JPanel();
minCol.setLayout(new GridLayout(numTypes + 1, 1));
minCol.add(new JLabel("Minimum"));
final JTextField[] maxs = new JTextField[numTypes];
final JPanel maxCol = new JPanel();
maxCol.setLayout(new GridLayout(numTypes + 1, 1));
maxCol.add(new JLabel("Maximum"));
{
int i = 0;
for (String type : bookmark.scale.keySet()) {
final JCheckBox cb = new JCheckBox();
labelCol.add(new JLabel(" " + type + ": "));
autoCol.add(autos[i] = cb);
Bookmark.Scale bmScale = this.bookmark.scale.get(type);
cb.setSelected(bmScale.autoscale);
final JTextField min = new JTextField(bmScale.minval, 10);
final JTextField max = new JTextField(bmScale.maxval, 10);
minCol.add(mins[i] = min);
maxCol.add(maxs[i] = max);
min.setEnabled(!cb.isSelected());
max.setEnabled(!cb.isSelected());
cb.addActionListener(new ActionListener() {
public void actionPerformed(final ActionEvent ae) {
boolean selected = cb.isSelected();
min.setEnabled(!selected);
max.setEnabled(!selected);
}
});
++i;
}
}
scale.add(labelCol);
scale.add(autoCol);
scale.add(minCol);
scale.add(maxCol);
tabs.addTab("Scale", scale);
JOptionPane pane = new JOptionPane(new Object[]{
tabs,
}, JOptionPane.QUESTION_MESSAGE, JOptionPane.OK_CANCEL_OPTION);
pane.setWantsInput(false);
JDialog dialog = pane.createDialog(null, "Bookmark Properties");
dialog.pack();
dialog.setVisible(true);
//get result
Integer value = (Integer) pane.getValue();
if (value == null || value.intValue() == JOptionPane.CANCEL_OPTION || value.intValue() == JOptionPane.CLOSED_OPTION)
return;
this.bookmark.url = url.getText();
this.bookmark.dir = dir.getText();
this.bookmark.file = file.getText();
this.bookmark.sweep = sweep.getText();
this.bookmark.scan_type = scan.getText();
this.bookmark.comment = comment.getText();
{
int i = 0;
for (String type : this.bookmark.scale.keySet()) {
Bookmark.Scale bmScale = this.bookmark.scale.get(type);
bmScale.autoscale = autos[i].isSelected();
bmScale.minval = mins[i].getText();
bmScale.maxval = maxs[i].getText();
++i;
}
}
this.bookmark.x = Double.parseDouble(centerX.getText());
this.bookmark.y = Double.parseDouble(centerY.getText());
this.bookmark.range = Double.parseDouble(range.getText());
this.bookmark.ring = ring.getText();
this.bookmark.rhi_height = height.getText();
}
}