TileMangler/src/tm/modaldialog/TMImportInternalPaletteDial...

186 lines
5.4 KiB
Java

/*
*
* Copyright (C) 2003 Kent Hansen.
*
* This file is part of Tile Mangler.
*
* Tile Mangler 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 2 of the License, or
* (at your option) any later version.
*
* Tile Mangler 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.
*
*/
package tm.modaldialog;
import tm.colorcodecs.ColorCodec;
import tm.utils.DecimalNumberVerifier;
import tm.utils.HexadecimalNumberVerifier;
import javax.swing.*;
import javax.swing.border.*;
import java.awt.*;
import java.util.Vector;
/**
*
*
*
**/
public class TMImportInternalPaletteDialog extends TMModalDialog {
private JLabel offsetLabel;
private JTextField offsetField;
private JLabel sizeLabel;
private JTextField sizeField;
private JLabel formatLabel;
private JComboBox codecCombo;
private JRadioButton littleRadio;
private JRadioButton bigRadio;
private JCheckBox copyCheck;
/**
*
* Creates the dialog.
*
**/
public TMImportInternalPaletteDialog(Frame owner, tm.utils.Xlator xl) {
super(owner, "Import_Internal_Palette_Dialog_Title", xl);
}
/**
*
*
*
**/
protected JPanel getDialogPane() {
offsetLabel = new JLabel(xlate("Offset_Prompt"));
offsetField = new JTextField();
sizeLabel = new JLabel(xlate("Size_Prompt"));
sizeField = new JTextField();
formatLabel = new JLabel(xlate("Format"));
codecCombo = new JComboBox();
copyCheck = new JCheckBox(xlate("Copy"));
offsetField.setColumns(8);
sizeField.setColumns(4);
offsetField.getDocument().addDocumentListener(new TMDocumentListener());
offsetField.addKeyListener(new HexadecimalNumberVerifier());
sizeField.getDocument().addDocumentListener(new TMDocumentListener());
sizeField.addKeyListener(new DecimalNumberVerifier());
JPanel endiannessPane = new JPanel();
endiannessPane.setBorder(new TitledBorder(new EtchedBorder(), xlate("Endianness")));
endiannessPane.setLayout(new BoxLayout(endiannessPane, BoxLayout.Y_AXIS));
littleRadio = new JRadioButton(xlate("Little_Endian")+" ");
bigRadio = new JRadioButton(xlate("Big_Endian")+" ");
endiannessPane.add(littleRadio);
endiannessPane.add(bigRadio);
ButtonGroup endiannessButtonGroup = new ButtonGroup();
endiannessButtonGroup.add(littleRadio);
endiannessButtonGroup.add(bigRadio);
littleRadio.setSelected(true);
JPanel p = new JPanel();
GridBagLayout gbl = new GridBagLayout();
p.setLayout(gbl);
GridBagConstraints gbc = new GridBagConstraints();
gbc.anchor = GridBagConstraints.WEST;
gbc.fill = GridBagConstraints.NONE;
buildConstraints(gbc, 0, 0, 1, 1, 20, 10);
gbl.setConstraints(offsetLabel, gbc);
p.add(offsetLabel);
buildConstraints(gbc, 1, 0, 1, 1, 30, 10);
gbl.setConstraints(offsetField, gbc);
p.add(offsetField);
buildConstraints(gbc, 2, 0, 1, 1, 20, 10);
gbl.setConstraints(sizeLabel, gbc);
p.add(sizeLabel);
buildConstraints(gbc, 3, 0, 1, 1, 30, 10);
gbl.setConstraints(sizeField, gbc);
p.add(sizeField);
buildConstraints(gbc, 0, 1, 1, 1, 20, 10);
gbl.setConstraints(formatLabel, gbc);
p.add(formatLabel);
buildConstraints(gbc, 1, 1, 2, 1, 55, 10);
gbl.setConstraints(codecCombo, gbc);
p.add(codecCombo);
buildConstraints(gbc, 3, 1, 1, 1, 25, 10);
gbl.setConstraints(endiannessPane, gbc);
p.add(endiannessPane);
buildConstraints(gbc, 0, 2, 1, 1, 25, 10);
gbl.setConstraints(copyCheck, gbc);
p.add(copyCheck);
p.setPreferredSize(new Dimension(450, 150));
return p;
}
public int getOffset() {
return Integer.parseInt(offsetField.getText(), 16);
}
public int getPaletteSize() {
return Integer.parseInt(sizeField.getText());
}
public int getEndianness() {
return littleRadio.isSelected() ? ColorCodec.LITTLE_ENDIAN : ColorCodec.BIG_ENDIAN;
}
public ColorCodec getCodec() {
return (ColorCodec)codecCombo.getSelectedItem();
}
public boolean getCopy() {
return copyCheck.isSelected();
}
/**
*
*
*
**/
public void setCodecs(Vector codecs) {
codecCombo.removeAllItems();
for (int i=0; i<codecs.size(); i++) {
codecCombo.addItem(codecs.get(i));
}
codecCombo.setSelectedIndex(0);
}
/**
*
*
*
**/
public int showDialog() {
// offsetField.setText("");
// sizeField.setText("");
maybeEnableOKButton();
SwingUtilities.invokeLater( new Runnable() {
public void run() {
offsetField.requestFocus();
}
});
return super.showDialog();
}
public boolean inputOK() {
return (!offsetField.getText().equals("") && !sizeField.getText().equals("")
&& (getPaletteSize() > 0));
}
}