import gdxstudio.Content;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
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;
public Class<?> getColumnClass(int columnIndex) {
public boolean isCellEditable(int row, int column) {
if (column == 1 && row != 0)
static JTable propTable = new JTable(propModel){
private static final long serialVersionUID = 1L;
public TableCellEditor getCellEditor(int row, int column)
int modelColumn = convertColumnIndexToModel( column );
return super.getCellEditor(row, column);
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");
editors.add(BaseTable.createTextFieldEditor());
editors.add(new DefaultCellEditor(versionField));
editors.add(new DefaultCellEditor(targetComboBox));
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);
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));
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));
if(Content.projectExists())
propModel.addTableModelListener(this);
moreBtn.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0) {
if(Frame.projectSettingsPanel.isVisible())
Frame.projectSettingsPanel.setVisible(!Frame.projectSettingsPanel.isVisible());
Frame.projectSettingsPanel.repaint();
TableModelListener tl = propModel.getTableModelListeners()[0];
propModel.removeTableModelListener(tl);
propModel.getDataVector().clear();
File prjFile = new File(Content.getProject()+"icon.png");
prjIcon.setIcon(new ImageIcon(prjFile.getPath()));
propModel.addRow(new String[]{"Project", prjFile.getParentFile().getName()});
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);
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());
public void setProperty(String key, String value){
if(key.isEmpty() || value.isEmpty())
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())
case "Version": propModel.setValueAt(value, 1, 1);break;
case "Target":propModel.setValueAt(value, 2, 1);break;
propModel.addTableModelListener(tl);
public void actionPerformed(ActionEvent e) {
propTable.setVisible(!propTable.isVisible());