gdx-studio

#libgdx#java#desktop

git clone https://git.pyrossh.dev/gdx-studio

An IDE for creating Games using libgdx and Java supported on all platforms Android, iOS, Desktop


src/gdxstudio/panel/ProjectPanel.java
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());
	}
}