// BookmarkEditor.java
package net.sf.gogui.gui;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;
import javax.swing.Box;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import static net.sf.gogui.gui.I18n.i18n;
/** Dialog for displaying and editing a bookmark. */
public class BookmarkEditor
implements ObjectListEditor.ItemEditor<Bookmark>
{
public Bookmark editItem(Component parent, Bookmark object,
MessageDialogs messageDialogs)
{
return editItem(parent, i18n("TIT_BOOKMARKEDITOR"),
(Bookmark)object, false, messageDialogs);
}
public Bookmark editItem(Component parent, String title,
Bookmark bookmark, boolean selectName,
MessageDialogs messageDialogs)
{
JPanel panel = new JPanel(new BorderLayout(GuiUtil.SMALL_PAD, 0));
m_panelLeft = new JPanel(new GridLayout(0, 1, 0, GuiUtil.PAD));
panel.add(m_panelLeft, BorderLayout.WEST);
m_panelRight =
new JPanel(new GridLayout(0, 1, 0, GuiUtil.PAD));
panel.add(m_panelRight, BorderLayout.CENTER);
m_name = createEntry("LB_BOOKMARKEDITOR_NAME", 25, bookmark.m_name);
String file = "";
if (bookmark.m_file != null)
file = bookmark.m_file.toString();
m_file = createEntry("LB_BOOKMARKEDITOR_FILE", 25, file);
String move = "";
if (bookmark.m_move > 0)
move = Integer.toString(bookmark.m_move);
m_move = createEntry("LB_BOOKMARKEDITOR_MOVE", 10, move);
m_variation = createEntry("LB_BOOKMARKEDITOR_VARIATION", 10,
bookmark.m_variation);
JOptionPane optionPane = new JOptionPane(panel,
JOptionPane.PLAIN_MESSAGE,
JOptionPane.OK_CANCEL_OPTION);
JDialog dialog = optionPane.createDialog(parent, title);
boolean done = false;
while (! done)
{
if (selectName)
m_name.selectAll();
dialog.addWindowListener(new WindowAdapter() {
public void windowActivated(WindowEvent e) {
m_name.requestFocusInWindow();
}
});
dialog.setVisible(true);
Object value = optionPane.getValue();
if (! (value instanceof Integer)
|| ((Integer)value).intValue() != JOptionPane.OK_OPTION)
return null;
done = validate(parent, messageDialogs);
}
String newName = m_name.getText().trim();
File newFile = new File(m_file.getText());
int newMove = getMove();
String newVariation = m_variation.getText().trim();
Bookmark newBookmark =
new Bookmark(newName, newFile, newMove, newVariation);
dialog.dispose();
return newBookmark;
}
public String getItemLabel(Bookmark object)
{
return object.m_name;
}
public Bookmark cloneItem(Bookmark object)
{
return new Bookmark(object);
}
private JPanel m_panelLeft;
private JPanel m_panelRight;
private JTextField m_name;
private JTextField m_file;
private JTextField m_move;
private JTextField m_variation;
private JTextField createEntry(String labelText, int cols, String text)
{
Box boxLabel = Box.createHorizontalBox();
boxLabel.add(Box.createHorizontalGlue());
JLabel label = new JLabel(i18n(labelText));
label.setAlignmentY(Component.CENTER_ALIGNMENT);
boxLabel.add(label);
m_panelLeft.add(boxLabel);
JPanel fieldPanel = new JPanel(new FlowLayout(FlowLayout.LEFT, 0, 0));
JTextField field = new JTextField(cols);
field.setText(text);
fieldPanel.add(field);
m_panelRight.add(fieldPanel);
return field;
}
private int getMove()
{
String text = m_move.getText().trim();
if (text.equals(""))
return 0;
try
{
return Integer.parseInt(text);
}
catch (NumberFormatException e)
{
return -1;
}
}
private boolean validate(Component parent, MessageDialogs messageDialogs)
{
if (m_name.getText().trim().equals(""))
{
messageDialogs.showError(parent,
i18n("MSG_BOOKMARKEDITOR_EMPTYNAME"),
i18n("MSG_BOOKMARKEDITOR_EMPTYNAME_2"),
false);
return false;
}
if (getMove() < 0)
{
messageDialogs.showError(parent,
i18n("MSG_BOOKMARKEDITOR_INVALIDMOVE"),
i18n("MSG_BOOKMARKEDITOR_INVALIDMOVE_2"),
false);
return false;
}
File file = new File(m_file.getText().trim());
if (! file.exists())
{
messageDialogs.showError(parent,
i18n("MSG_BOOKMARKEDITOR_FILENOTEXIST"),
i18n("MSG_BOOKMARKEDITOR_FILENOTEXIST_2"),
false);
return false;
}
return true;
}
}