package com.clearlyspam23.GLE.basic.layers.tile.gui.tileset;
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import javax.imageio.ImageIO;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.border.EmptyBorder;
import javax.swing.filechooser.FileNameExtensionFilter;
import com.clearlyspam23.GLE.GUI.util.VectorComponent;
import com.clearlyspam23.GLE.basic.layers.tile.TilesetHandle;
import com.clearlyspam23.GLE.basic.layers.tile.resources.BasicTilesetHandle;
public class TilesetEditPanel extends JPanel {
/**
*
*/
private static final long serialVersionUID = 1L;
private JTextField nameField;
private JTextField fileNameField;
private VectorComponent tileSizeComponent;
private VectorComponent tileSpaceComponent;
private TilesetViewPanel tilesetGridPanel;
private JButton browseButton;
private int id = 0;
public static void main(String[] args){
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException
| IllegalAccessException | UnsupportedLookAndFeelException e1) {
//honestly, if this doesnt work, whatever we'll use default. should fail silently.
}
// ResourceManager.get().registerResourceType(Tileset.class);
// ResourceManager.get().registerResourceType(TilesetHandle.class);
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
BasicTilesetHandle basic = new BasicTilesetHandle("test", "bad file", 10, 10, 0, 0);
TilesetEditPanel panel = new TilesetEditPanel();
panel.setToTileset(basic);
JFrame frame = new JFrame();
frame.getContentPane().setLayout(new GridLayout(1, 1, 0, 0));
frame.getContentPane().add(panel);
//JScrollPane scroll = new JScrollPane(panel);
//frame.getContentPane().add(scroll);
frame.setSize(500, 400);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
private JFileChooser imageChooser = new JFileChooser();
/**
* Create the panel.
*/
public TilesetEditPanel() {
setBorder(new EmptyBorder(4, 4, 4, 4));
setLayout(new BorderLayout(0, 4));
//setMinimumSize(new Dimension(370, 300));
// imageChooser.addChoosableFileFilter();
imageChooser.setFileFilter(new FileNameExtensionFilter("Image files", ImageIO.getReaderFileSuffixes()));
JScrollPane scrollPane_1 = new JScrollPane();
add(scrollPane_1, BorderLayout.CENTER);
tilesetGridPanel = new TilesetViewPanel();
tilesetGridPanel.toggleButtonSelection(false);
tilesetGridPanel.toggleBorders(true);
scrollPane_1.setViewportView(tilesetGridPanel);
JPanel panel_2 = new JPanel();
add(panel_2, BorderLayout.SOUTH);
GridBagLayout gbl_panel_2 = new GridBagLayout();
gbl_panel_2.columnWidths = new int[]{40, 235, 0, 0, 0};
gbl_panel_2.rowHeights = new int[]{0, 0, 0, 0, 0, 0};
gbl_panel_2.columnWeights = new double[]{0.0, 0.0, 1.0, 0.0, Double.MIN_VALUE};
gbl_panel_2.rowWeights = new double[]{0.0, 0.0, 1.0, 1.0, 1.0, Double.MIN_VALUE};
panel_2.setLayout(gbl_panel_2);
JLabel lblName = new JLabel("Name");
GridBagConstraints gbc_lblName = new GridBagConstraints();
gbc_lblName.insets = new Insets(0, 0, 5, 5);
gbc_lblName.anchor = GridBagConstraints.EAST;
gbc_lblName.gridx = 0;
gbc_lblName.gridy = 0;
panel_2.add(lblName, gbc_lblName);
nameField = new JTextField();
GridBagConstraints gbc_nameField = new GridBagConstraints();
gbc_nameField.insets = new Insets(0, 0, 5, 0);
gbc_nameField.fill = GridBagConstraints.HORIZONTAL;
gbc_nameField.gridx = 1;
gbc_nameField.gridy = 0;
panel_2.add(nameField, gbc_nameField);
nameField.setColumns(10);
JLabel lblNewLabel = new JLabel("Tile Size");
GridBagConstraints gbc_lblNewLabel = new GridBagConstraints();
gbc_lblNewLabel.anchor = GridBagConstraints.EAST;
gbc_lblNewLabel.insets = new Insets(0, 0, 5, 5);
gbc_lblNewLabel.gridx = 0;
gbc_lblNewLabel.gridy = 2;
panel_2.add(lblNewLabel, gbc_lblNewLabel);
JLabel lblImageFile = new JLabel("Image File");
GridBagConstraints gbc_lblImageFile = new GridBagConstraints();
gbc_lblImageFile.anchor = GridBagConstraints.EAST;
gbc_lblImageFile.insets = new Insets(0, 0, 5, 5);
gbc_lblImageFile.gridx = 0;
gbc_lblImageFile.gridy = 1;
panel_2.add(lblImageFile, gbc_lblImageFile);
fileNameField = new JTextField();
fileNameField.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
updateTilesetView();
}
});
GridBagConstraints gbc_fileNameField = new GridBagConstraints();
gbc_fileNameField.gridwidth = 2;
gbc_fileNameField.insets = new Insets(0, 0, 5, 5);
gbc_fileNameField.fill = GridBagConstraints.HORIZONTAL;
gbc_fileNameField.gridx = 1;
gbc_fileNameField.gridy = 1;
panel_2.add(fileNameField, gbc_fileNameField);
fileNameField.setColumns(10);
browseButton = new JButton("Browse");
browseButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
imageChooser.setSelectedFile(new File(fileNameField.getText()));
if(imageChooser.showOpenDialog(TilesetEditPanel.this)==JFileChooser.APPROVE_OPTION){
fileNameField.setText(imageChooser.getSelectedFile().getPath());
updateTilesetView();
}
}
});
GridBagConstraints gbc_browseButton = new GridBagConstraints();
gbc_browseButton.insets = new Insets(0, 0, 5, 0);
gbc_browseButton.gridx = 3;
gbc_browseButton.gridy = 1;
panel_2.add(browseButton, gbc_browseButton);
tileSizeComponent = new VectorComponent(false, false);
tileSizeComponent.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent arg0) {
updateTilesetView();
}
});
GridBagConstraints gbc_tileSizeComponent = new GridBagConstraints();
gbc_tileSizeComponent.insets = new Insets(0, 0, 5, 5);
gbc_tileSizeComponent.fill = GridBagConstraints.BOTH;
gbc_tileSizeComponent.gridx = 1;
gbc_tileSizeComponent.gridy = 2;
panel_2.add(tileSizeComponent, gbc_tileSizeComponent);
JLabel lblTileSpacing = new JLabel("Tile Spacing");
GridBagConstraints gbc_lblTileSpacing = new GridBagConstraints();
gbc_lblTileSpacing.anchor = GridBagConstraints.EAST;
gbc_lblTileSpacing.insets = new Insets(0, 0, 5, 5);
gbc_lblTileSpacing.gridx = 0;
gbc_lblTileSpacing.gridy = 3;
panel_2.add(lblTileSpacing, gbc_lblTileSpacing);
tileSpaceComponent = new VectorComponent(false, false);
tileSpaceComponent.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent arg0) {
updateTilesetView();
}
});
GridBagConstraints gbc_tileSpaceComponent = new GridBagConstraints();
gbc_tileSpaceComponent.insets = new Insets(0, 0, 5, 5);
gbc_tileSpaceComponent.fill = GridBagConstraints.BOTH;
gbc_tileSpaceComponent.gridx = 1;
gbc_tileSpaceComponent.gridy = 3;
panel_2.add(tileSpaceComponent, gbc_tileSpaceComponent);
toggleFields(false);
}
private void updateTilesetView(){
tilesetGridPanel.setToTileset(null);
if(isImageFileValid()&&isSizeValid()){
try{
TilesetHandle h = getTileset();
tilesetGridPanel.setToTileset(h);
}
catch(Exception e){
e.printStackTrace();
tilesetGridPanel.setToTileset(null); //no matter how many tiles were placed properly, cut them all out
}
}
else{
if(!isImageFileValid()){
System.out.println(fileNameField.getText() + " is not valid");
}
else{
System.out.println("size is not valid");
}
}
revalidate();
repaint();
}
private void toggleFields(boolean flag){
nameField.setEnabled(flag);
fileNameField.setEnabled(flag);
tileSizeComponent.setEnabled(flag);
tileSpaceComponent.setEnabled(flag);
browseButton.setEnabled(flag);
if(!flag){
nameField.setText("");
fileNameField.setText("");
tileSizeComponent.setXField(0);
tileSizeComponent.setYField(0);
tileSpaceComponent.setXField(0);
tileSpaceComponent.setYField(0);
}
}
public void setToTileset(TilesetHandle tileset){
toggleFields(tileset!=null);
id = 0;
if(tileset!=null){
nameField.setText(tileset.getName());
fileNameField.setText(tileset.getFilename());
tileSizeComponent.setXField(tileset.getTileWidth());
tileSizeComponent.setYField(tileset.getTileHeight());
tileSpaceComponent.setXField(tileset.getTileXSpacing());
tileSpaceComponent.setYField(tileset.getTileYSpacing());
id = tileset.getID();
}
updateTilesetView();
}
public void updateName(String name){
nameField.setText(name);
}
public BasicTilesetHandle getTileset(){
BasicTilesetHandle tileset = new BasicTilesetHandle(nameField.getText(), fileNameField.getText(),
(int) tileSizeComponent.getVector().x, (int) tileSizeComponent.getVector().y,
(int) tileSpaceComponent.getVector().x, (int) tileSpaceComponent.getVector().y, id);
return tileset;
}
public boolean isNameValid(){
return nameField.getText()!=null&&!"".equals(nameField.getText());
}
public boolean isImageFileValid(){
File f = new File(fileNameField.getText());
return f.exists()&&f.canRead();
}
public boolean isSizeValid(){
return tileSizeComponent.getVector().x>0&&tileSizeComponent.getVector().y>0;
}
}