gdx-studio
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 | } |