package com.clearlyspam23.GLE.basic.layers.tile.gui;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import com.clearlyspam23.GLE.basic.layers.tile.TilesetHandle;
import com.clearlyspam23.GLE.basic.layers.tile.gui.tileset.TilesetViewPanel;
import com.clearlyspam23.GLE.basic.layers.tile.gui.tileset.TilesetViewSelectionListener;
public class TilesetSelectionPanel extends JPanel implements TilesetViewSelectionListener{
private static final long serialVersionUID = 1L;
private int selectedX;
private int selectedY;
private TilesetHandle currentTileset;
private List<TilesetHandle> tilesets = new ArrayList<TilesetHandle>();
private JScrollPane scrollPane;
private TilesetViewPanel tilesetView;
// private JPanel panel;
private JPanel panel_1;
private JLabel lblTileset;
private JComboBox<String> comboBox;
/**
* Create the panel.
*/
public TilesetSelectionPanel() {
setLayout(new BorderLayout(5, 5));
scrollPane = new JScrollPane();
add(scrollPane, BorderLayout.CENTER);
tilesetView = new TilesetViewPanel();
tilesetView.toggleButtonSelection(true);
tilesetView.toggleBorders(true);
tilesetView.addListener(this);
// panel = new JPanel();
// JPanel parentPanel = new JPanel(new AspectRatioLayout());
// parentPanel.add(panel);
scrollPane.setViewportView(tilesetView);
// panel.setLayout(new GridLayout(1, 0, 0, 0));
panel_1 = new JPanel();
add(panel_1, BorderLayout.NORTH);
panel_1.setLayout(new BorderLayout(5, 5));
lblTileset = new JLabel("Tileset");
panel_1.add(lblTileset, BorderLayout.WEST);
comboBox = new JComboBox<String>();
comboBox.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
int i = comboBox.getSelectedIndex();
setToTileset(i);
}
});
panel_1.add(comboBox, BorderLayout.CENTER);
this.setPreferredSize(new Dimension(160, 200));
}
private void setToTileset(int index){
if(index>=0&&index<tilesets.size()){
TilesetHandle t = tilesets.get(index);
if(!t.equals(currentTileset)){
selectedX = -1;
selectedY = -1;
}
currentTileset = t;
tilesetView.setToTileset(tilesets.get(index));
if(currentTileset.getWidth()>0)
tilesetView.selectTile(0, 0);
}
else{
currentTileset = null;
selectedX = -1;
selectedY = -1;
}
}
public TilesetHandle getCurrentTileset(){
return currentTileset;
}
public int getSelectedX(){
return selectedX;
}
public int getSelectedY(){
return selectedY;
}
public void addTileset(TilesetHandle tileset){
tilesets.add(tileset);
updateComboBox();
}
public void addAllTilesets(List<TilesetHandle> tilesets){
this.tilesets.addAll(tilesets);
updateComboBox();
}
public void removeTileset(TilesetHandle tileset){
tilesets.remove(tileset);
updateComboBox();
}
public void removeTilesets(List<TilesetHandle> tilesets){
this.tilesets.removeAll(tilesets);
updateComboBox();
}
private void updateComboBox(){
DefaultComboBoxModel<String> model = new DefaultComboBoxModel<String>();
int foundIndex = -1;
for(int i = 0; i < tilesets.size(); i++){
TilesetHandle t = tilesets.get(i);
model.addElement(t.getName());
if(t.equals(currentTileset))
foundIndex = i;
}
comboBox.setModel(model);
if(foundIndex>=0){
comboBox.setSelectedIndex(foundIndex);
}
else if(model.getSize()>0){
setToTileset(0);
}
else{
currentTileset = null;
selectedX = -1;
selectedY = -1;
}
this.revalidate();
this.repaint();
}
public Image getSelectedTile(){
if(currentTileset!=null&&selectedX>=0&&selectedX<currentTileset.getWidth()&&selectedY>=0&&selectedY<currentTileset.getHeight())
return currentTileset.getTileAt(selectedX, selectedY);
return null;
}
public void clearTilesets() {
tilesets.clear();
currentTileset = null;
updateComboBox();
}
@Override
public void onSelection(int x, int y, ActionEvent e) {
selectedX = x;
selectedY = y;
}
}