package gdxstudio.panel;
import gdxstudio.Content;
import gdxstudio.Frame;
import gdxstudio.Icon;
import gdxstudio.Style;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import javax.swing.BorderFactory;
import javax.swing.DefaultCellEditor;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.ListSelectionModel;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellEditor;
import web.laf.lite.layout.HorizontalFlowLayout;
import web.laf.lite.layout.VerticalFlowLayout;
import web.laf.lite.utils.UIUtils;
public class ProjectPanel extends JPanel implements ActionListener, TableModelListener {
private static final long serialVersionUID = 1L;
static DefaultTableModel propModel = new DefaultTableModel(){
private static final long serialVersionUID = 1L;
@Override
public Class<?> getColumnClass(int columnIndex) {
return String.class;
}
public boolean isCellEditable(int row, int column) {
if (column == 1 && row != 0)
return true;
return false;
}
};
static JTable propTable = new JTable(propModel){
private static final long serialVersionUID = 1L;
public TableCellEditor getCellEditor(int row, int column)
{
int modelColumn = convertColumnIndexToModel( column );
if (modelColumn == 1)
return editors.get(row);
else
return super.getCellEditor(row, column);
}
};
JButton moreBtn;
static JLabel prjIcon = new JLabel();
static List<TableCellEditor> editors = new ArrayList<TableCellEditor>(3);
static JTextField versionField = new JTextField();
public static JComboBox<String> targetComboBox = BaseTable.createComboBox("Desktop", "Android", "iOS");
static{
editors.add(BaseTable.createTextFieldEditor());
editors.add(new DefaultCellEditor(versionField));
editors.add(new DefaultCellEditor(targetComboBox));
}
public ProjectPanel(){
super(new VerticalFlowLayout());
UIUtils.setUndecorated(this, true);
UIUtils.setShadeWidth(this, 0);
UIUtils.setRound(this, 0);
UIUtils.setDrawSides(this, false, false, false, false);
propTable.setTableHeader(null);
propTable.setDefaultRenderer(String.class, new BaseRenderer());
propTable.setShowGrid(true);
propTable.setColumnSelectionAllowed(false);
propTable.setRowSelectionAllowed(false);
propTable.setCellSelectionEnabled(true);
propTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
propModel.setColumnCount(2);
propModel.addRow(new String[]{"Project", "Name"});
propModel.addRow(new String[]{"Sink", ""});
propModel.addRow(new String[]{"Target", "Desktop"});
JScrollPane scrollPane = new JScrollPane(propTable);
scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_NEVER);
scrollPane.setPreferredSize(new Dimension(168, 48));
UIUtils.setDrawBorder(scrollPane, false);
add(new Style.TitleButton("Project", this));
JPanel hoz1 = new JPanel(new HorizontalFlowLayout(0));
hoz1.setBackground(Color.black);
hoz1.add(prjIcon);
hoz1.add(scrollPane);
add(hoz1);
moreBtn = new JButton("More");
UIUtils.setUndecorated(moreBtn, true);
UIUtils.setShadeWidth(moreBtn, 0);
UIUtils.setDrawFocus(moreBtn, false);
UIUtils.setRound(moreBtn, 0);
UIUtils.setRolloverDecoratedOnly(moreBtn, true);
moreBtn.setOpaque(false);
//moreBtn.setPreferredSize(new Dimension(100, 20));
JPanel p = new JPanel();
p.setBorder(BorderFactory.createMatteBorder(0, 0, 1, 0, Style.border));
//p.setPreferredSize(new Dimension(200, 20));
UIUtils.setUndecorated(p, true);
UIUtils.setMargin(p, new Insets(0,0,0,0));
UIUtils.setMargin(moreBtn, new Insets(0,0,0,0));
p.add(moreBtn);
add(p);
if(Content.projectExists())
update();
propModel.addTableModelListener(this);
moreBtn.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent arg0) {
if(Frame.projectSettingsPanel.isVisible())
moreBtn.setText("More");
else
moreBtn.setText("Less");
Frame.projectSettingsPanel.setVisible(!Frame.projectSettingsPanel.isVisible());
Frame.projectSettingsPanel.repaint();
}
});
}
public void update(){
TableModelListener tl = propModel.getTableModelListeners()[0];
propModel.removeTableModelListener(tl);
propModel.getDataVector().clear();
File prjFile = new File(Content.getProject()+"icon.png");
if(prjFile.exists()){
prjIcon.setIcon(new ImageIcon(prjFile.getPath()));
propModel.addRow(new String[]{"Project", prjFile.getParentFile().getName()});
}
else{
prjIcon.setIcon(Icon.icon("help"));
propModel.addRow(new String[]{"Project", "No Project"});
}
propModel.addRow(new String[]{"Version", ""});
propModel.addRow(new String[]{"Target", "Desktop"});
propModel.addTableModelListener(tl);
}
@Override
public void tableChanged(TableModelEvent e) {
if(e.getLastRow() < propModel.getRowCount() && e.getType() == TableModelEvent.UPDATE){
String key = (String)propModel.getValueAt(e.getLastRow(), e.getColumn()-1);
String value = (String)propModel.getValueAt(e.getLastRow(), e.getColumn());
setProperty(key, value);
}
}
public void setProperty(String key, String value){
if(key.isEmpty() || value.isEmpty())
return ;
switch(key){
case "Version": Frame.projectSettingsPanel.updateVersion(value);break;
case "Target": Frame.projectSettingsPanel.updateTarget(value);break;
}
}
public static void updateProperty(String key, String value){
TableModelListener tl = propModel.getTableModelListeners()[0];
propModel.removeTableModelListener(tl);
if(key.isEmpty() || value.isEmpty())
return ;
switch(key){
case "Version": propModel.setValueAt(value, 1, 1);break;
case "Target":propModel.setValueAt(value, 2, 1);break;
}
propModel.addTableModelListener(tl);
}
@Override
public void actionPerformed(ActionEvent e) {
propTable.setVisible(!propTable.isVisible());
}
}