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
a9b2a64 1
package gdxstudio.panel;
a9b2a64 2
import gdxstudio.Content;
a9b2a64 3
import gdxstudio.Frame;
a9b2a64 4
import gdxstudio.Icon;
a9b2a64 5
import gdxstudio.Style;
a9b2a64 6
a62d533 7
import java.awt.Color;
a62d533 8
import java.awt.Dimension;
7c84877 9
import java.awt.Insets;
a62d533 10
import java.awt.event.ActionEvent;
a62d533 11
import java.awt.event.ActionListener;
a62d533 12
import java.io.File;
a62d533 13
import java.util.ArrayList;
a62d533 14
import java.util.List;
a62d533 15
7c84877 16
import javax.swing.BorderFactory;
a62d533 17
import javax.swing.DefaultCellEditor;
a62d533 18
import javax.swing.ImageIcon;
a62d533 19
import javax.swing.JButton;
a62d533 20
import javax.swing.JComboBox;
a62d533 21
import javax.swing.JLabel;
a62d533 22
import javax.swing.JPanel;
a62d533 23
import javax.swing.JScrollPane;
a62d533 24
import javax.swing.JTable;
a62d533 25
import javax.swing.JTextField;
a62d533 26
import javax.swing.ListSelectionModel;
a62d533 27
import javax.swing.event.TableModelEvent;
a62d533 28
import javax.swing.event.TableModelListener;
a62d533 29
import javax.swing.table.DefaultTableModel;
a62d533 30
import javax.swing.table.TableCellEditor;
a62d533 31
a62d533 32
import web.laf.lite.layout.HorizontalFlowLayout;
a62d533 33
import web.laf.lite.layout.VerticalFlowLayout;
a62d533 34
import web.laf.lite.utils.UIUtils;
a62d533 35
a62d533 36
public class ProjectPanel extends JPanel implements ActionListener, TableModelListener {
a62d533 37
	private static final long serialVersionUID = 1L;
a62d533 38
	static DefaultTableModel propModel = new DefaultTableModel(){
a62d533 39
		private static final long serialVersionUID = 1L;
a62d533 40
a62d533 41
		@Override
a62d533 42
         public Class<?> getColumnClass(int columnIndex) {
a62d533 43
             return String.class;
a62d533 44
         }
a62d533 45
		 
a62d533 46
		 public boolean isCellEditable(int row, int column) {
a62d533 47
	            if (column == 1 && row != 0)
a62d533 48
	                return true;
a62d533 49
	            return false;
a62d533 50
			}
a62d533 51
	};
a62d533 52
	
a62d533 53
	static JTable propTable = new JTable(propModel){
a62d533 54
		private static final long serialVersionUID = 1L;
a62d533 55
a62d533 56
		public TableCellEditor getCellEditor(int row, int column)
a62d533 57
        {
a62d533 58
            int modelColumn = convertColumnIndexToModel( column );
a62d533 59
a62d533 60
            if (modelColumn == 1)
a62d533 61
                return editors.get(row);
a62d533 62
            else
a62d533 63
                return super.getCellEditor(row, column);
a62d533 64
        }
a62d533 65
	};
a62d533 66
	
7c84877 67
	JButton moreBtn;
a62d533 68
	static JLabel prjIcon = new JLabel();
a62d533 69
	static List<TableCellEditor> editors = new ArrayList<TableCellEditor>(3);
a62d533 70
	static JTextField versionField = new JTextField();
a62d533 71
	public static JComboBox<String> targetComboBox = BaseTable.createComboBox("Desktop", "Android", "iOS");
a62d533 72
	static{
a62d533 73
		editors.add(BaseTable.createTextFieldEditor());
a62d533 74
		editors.add(new DefaultCellEditor(versionField));
a62d533 75
		editors.add(new DefaultCellEditor(targetComboBox));
a62d533 76
	}
a62d533 77
	
a62d533 78
	public ProjectPanel(){
a62d533 79
		super(new VerticalFlowLayout());
7c84877 80
		UIUtils.setUndecorated(this, true);
a62d533 81
		UIUtils.setShadeWidth(this, 0);
a62d533 82
		UIUtils.setRound(this, 0);
7c84877 83
		UIUtils.setDrawSides(this, false, false, false, false);
a62d533 84
		propTable.setTableHeader(null);
a62d533 85
		propTable.setDefaultRenderer(String.class, new BaseRenderer());
a62d533 86
		propTable.setShowGrid(true);
a62d533 87
		propTable.setColumnSelectionAllowed(false);
a62d533 88
		propTable.setRowSelectionAllowed(false);
a62d533 89
		propTable.setCellSelectionEnabled(true);
a62d533 90
		propTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
a62d533 91
		propModel.setColumnCount(2);
a62d533 92
		propModel.addRow(new String[]{"Project", "Name"});
a62d533 93
		propModel.addRow(new String[]{"Sink", ""});
a62d533 94
		propModel.addRow(new String[]{"Target", "Desktop"});
a62d533 95
		JScrollPane scrollPane = new JScrollPane(propTable);
a62d533 96
		scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_NEVER);
a62d533 97
		scrollPane.setPreferredSize(new Dimension(168, 48));
a62d533 98
		UIUtils.setDrawBorder(scrollPane, false);
7c84877 99
		add(new Style.TitleButton("Project", this));
a62d533 100
		JPanel hoz1 = new JPanel(new HorizontalFlowLayout(0));
a62d533 101
		hoz1.setBackground(Color.black);
a62d533 102
		hoz1.add(prjIcon);
a62d533 103
		hoz1.add(scrollPane);
a62d533 104
		add(hoz1);
7c84877 105
		moreBtn = new JButton("More");
a62d533 106
		UIUtils.setUndecorated(moreBtn, true);
a62d533 107
		UIUtils.setShadeWidth(moreBtn, 0);
7c84877 108
		UIUtils.setDrawFocus(moreBtn, false);
7c84877 109
		UIUtils.setRound(moreBtn, 0);
7c84877 110
		UIUtils.setRolloverDecoratedOnly(moreBtn, true);
7c84877 111
		moreBtn.setOpaque(false);
7c84877 112
		//moreBtn.setPreferredSize(new Dimension(100, 20));
7c84877 113
		JPanel p = new JPanel();
7c84877 114
		p.setBorder(BorderFactory.createMatteBorder(0, 0, 1, 0, Style.border));
7c84877 115
		//p.setPreferredSize(new Dimension(200, 20));
7c84877 116
		UIUtils.setUndecorated(p, true);
7c84877 117
		UIUtils.setMargin(p, new Insets(0,0,0,0));
7c84877 118
		UIUtils.setMargin(moreBtn, new Insets(0,0,0,0));
7c84877 119
		p.add(moreBtn);
7c84877 120
		add(p);
a62d533 121
		if(Content.projectExists())
a62d533 122
			update();
a62d533 123
		propModel.addTableModelListener(this);
a62d533 124
		moreBtn.addActionListener(new ActionListener(){
a62d533 125
			@Override
a62d533 126
			public void actionPerformed(ActionEvent arg0) {
a62d533 127
				if(Frame.projectSettingsPanel.isVisible())
a62d533 128
					moreBtn.setText("More");
a62d533 129
				else
a62d533 130
					moreBtn.setText("Less");
a62d533 131
				Frame.projectSettingsPanel.setVisible(!Frame.projectSettingsPanel.isVisible());
a62d533 132
				Frame.projectSettingsPanel.repaint();
a62d533 133
			}
a62d533 134
		 });
a62d533 135
	}
a62d533 136
	
a62d533 137
	public void update(){
a62d533 138
		TableModelListener tl = propModel.getTableModelListeners()[0];
a62d533 139
		propModel.removeTableModelListener(tl);
a62d533 140
		propModel.getDataVector().clear();
a62d533 141
		File prjFile = new File(Content.getProject()+"icon.png");
a62d533 142
		if(prjFile.exists()){
a62d533 143
			prjIcon.setIcon(new ImageIcon(prjFile.getPath()));
a62d533 144
			propModel.addRow(new String[]{"Project", prjFile.getParentFile().getName()});
a62d533 145
		}
a62d533 146
		else{
a62d533 147
			prjIcon.setIcon(Icon.icon("help"));
a62d533 148
			propModel.addRow(new String[]{"Project", "No Project"});
a62d533 149
		}
a62d533 150
		propModel.addRow(new String[]{"Version", ""});
a62d533 151
		propModel.addRow(new String[]{"Target", "Desktop"});
a62d533 152
		propModel.addTableModelListener(tl);
a62d533 153
	}
a62d533 154
a62d533 155
	@Override
a62d533 156
	public void tableChanged(TableModelEvent e) {
a62d533 157
		if(e.getLastRow() < propModel.getRowCount() && e.getType() == TableModelEvent.UPDATE){
a62d533 158
			String key = (String)propModel.getValueAt(e.getLastRow(), e.getColumn()-1);
a62d533 159
			String value = (String)propModel.getValueAt(e.getLastRow(), e.getColumn());
a62d533 160
			setProperty(key, value);
a62d533 161
		}
a62d533 162
	}
a62d533 163
	
a62d533 164
	public void setProperty(String key, String value){
a62d533 165
		if(key.isEmpty() || value.isEmpty())
a62d533 166
			return ;
a62d533 167
		switch(key){
a62d533 168
			case "Version": Frame.projectSettingsPanel.updateVersion(value);break;
a62d533 169
			case "Target": Frame.projectSettingsPanel.updateTarget(value);break;
a62d533 170
		}
a62d533 171
	}
a62d533 172
	
a62d533 173
	public static void updateProperty(String key, String value){
a62d533 174
		TableModelListener tl = propModel.getTableModelListeners()[0];
a62d533 175
		propModel.removeTableModelListener(tl);
a62d533 176
		if(key.isEmpty() || value.isEmpty())
a62d533 177
			return ;
a62d533 178
		switch(key){
a62d533 179
			case "Version": propModel.setValueAt(value, 1, 1);break;
a62d533 180
			case "Target":propModel.setValueAt(value, 2, 1);break;
a62d533 181
		}
a62d533 182
		propModel.addTableModelListener(tl);
a62d533 183
	}
a62d533 184
a62d533 185
	@Override
a62d533 186
	public void actionPerformed(ActionEvent e) {
a62d533 187
		propTable.setVisible(!propTable.isVisible());
a62d533 188
	}
a62d533 189
}