1 /*******************************************************************************
2 * Copyright 2011 See AUTHORS file.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 ******************************************************************************/
16 package aurelienribon.gdxsetupui.ui.panels;
18 import aurelienribon.gdxsetupui.ui.Ctx;
19 import aurelienribon.ui.css.Style;
20 import aurelienribon.utils.SwingUtils;
21 import java.awt.event.KeyAdapter;
22 import java.awt.event.KeyEvent;
23 import java.awt.event.KeyListener;
24 import java.util.regex.Pattern;
25 import javax.swing.JOptionPane;
26 import javax.swing.JTextField;
29 * @author Aurelien Ribon | http://www.aurelienribon.com/
31 public class AdvancedSettingsPanel extends javax.swing.JPanel {
32 public AdvancedSettingsPanel() {
35 coreSuffixField.setText(Ctx.cfgSetup.suffixCommon);
36 desktopSuffixField.setText(Ctx.cfgSetup.suffixDesktop);
37 androidSuffixField.setText(Ctx.cfgSetup.suffixAndroid);
38 htmlSuffixField.setText(Ctx.cfgSetup.suffixHtml);
39 iosSuffixField.setText(Ctx.cfgSetup.suffixRobovm);
40 androidMinSdkField.setText(Ctx.cfgSetup.androidMinSdkVersion);
41 androidTargetSdkField.setText(Ctx.cfgSetup.androidTargetSdkVersion);
42 androidMaxSdkField.setText(Ctx.cfgSetup.androidMaxSdkVersion);
44 coreSuffixField.addKeyListener(updateOnTypeKeyListener);
45 desktopSuffixField.addKeyListener(updateOnTypeKeyListener);
46 androidSuffixField.addKeyListener(updateOnTypeKeyListener);
47 htmlSuffixField.addKeyListener(updateOnTypeKeyListener);
48 iosSuffixField.addKeyListener(updateOnTypeKeyListener);
49 androidMinSdkField.addKeyListener(updateOnTypeKeyListener);
50 androidTargetSdkField.addKeyListener(updateOnTypeKeyListener);
51 androidMaxSdkField.addKeyListener(updateOnTypeKeyListener);
53 androidMinSdkField.addKeyListener(numbersOnlyKeyListener);
54 androidTargetSdkField.addKeyListener(numbersOnlyKeyListener);
55 androidMaxSdkField.addKeyListener(numbersOnlyKeyListener);
57 Style.registerCssClasses(paintedPanel1, ".optionGroupPanel");
58 Style.registerCssClasses(paintedPanel2, ".optionGroupPanel");
61 private void update() {
62 Ctx.cfgSetup.suffixCommon = coreSuffixField.getText();
63 Ctx.cfgSetup.suffixDesktop = desktopSuffixField.getText();
64 Ctx.cfgSetup.suffixAndroid = androidSuffixField.getText();
65 Ctx.cfgSetup.suffixRobovm = iosSuffixField.getText();
66 Ctx.cfgSetup.androidMinSdkVersion = androidMinSdkField.getText();
67 Ctx.cfgSetup.androidMaxSdkVersion = androidMaxSdkField.getText();
68 Ctx.cfgSetup.androidTargetSdkVersion = androidTargetSdkField.getText();
69 Ctx.fireCfgSetupChanged();
70 Ctx.cfgUpdate.suffixCommon = coreSuffixField.getText();
71 Ctx.cfgUpdate.suffixDesktop = desktopSuffixField.getText();
72 Ctx.cfgUpdate.suffixAndroid = androidSuffixField.getText();
73 Ctx.cfgUpdate.suffixRobovm = iosSuffixField.getText();
74 Ctx.fireCfgSetupChanged();
77 private final KeyListener updateOnTypeKeyListener = new KeyAdapter() {
79 public void keyReleased(KeyEvent e) {
84 private final KeyListener numbersOnlyKeyListener = new KeyAdapter() {
85 private String backup;
88 public void keyPressed(KeyEvent e) {
89 JTextField field = (JTextField) e.getSource();
90 backup = field.getText();
94 public void keyReleased(KeyEvent e) {
95 JTextField field = (JTextField) e.getSource();
96 if (!Pattern.compile("[0-9]*").matcher(field.getText()).matches()) {
97 String msg = "Only numbers are allowed.";
98 JOptionPane.showMessageDialog(SwingUtils.getJFrame(AdvancedSettingsPanel.this), msg);
99 field.setText(backup);
105 // -------------------------------------------------------------------------
107 // -------------------------------------------------------------------------
109 @SuppressWarnings("unchecked")
110 // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
111 private void initComponents() {
113 paintedPanel1 = new aurelienribon.ui.components.PaintedPanel();
114 jLabel7 = new javax.swing.JLabel();
115 androidMaxSdkField = new javax.swing.JTextField();
116 jLabel6 = new javax.swing.JLabel();
117 jLabel5 = new javax.swing.JLabel();
118 androidTargetSdkField = new javax.swing.JTextField();
119 androidMinSdkField = new javax.swing.JTextField();
120 jLabel8 = new javax.swing.JLabel();
121 jLabel10 = new javax.swing.JLabel();
122 paintedPanel2 = new aurelienribon.ui.components.PaintedPanel();
123 jLabel1 = new javax.swing.JLabel();
124 androidSuffixField = new javax.swing.JTextField();
125 jLabel4 = new javax.swing.JLabel();
126 coreSuffixField = new javax.swing.JTextField();
127 desktopSuffixField = new javax.swing.JTextField();
128 htmlSuffixField = new javax.swing.JTextField();
129 jLabel3 = new javax.swing.JLabel();
130 jLabel2 = new javax.swing.JLabel();
131 jLabel9 = new javax.swing.JLabel();
132 iosSuffixField = new javax.swing.JTextField();
133 jLabel11 = new javax.swing.JLabel();
135 jLabel7.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
136 jLabel7.setText("android:maxSdkVersion");
138 jLabel6.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
139 jLabel6.setText("android:targetSdkVersion");
141 jLabel5.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
142 jLabel5.setText("android:minSdkVersion");
144 androidTargetSdkField.setText("15");
146 androidMinSdkField.setText("5");
148 jLabel8.setText("Leave a field blank to unset the value");
150 jLabel10.setText("<html>\nThese three values control the SDK parameters of the Android Manifest file. You can change them later by manually editing the AndroidManifest.xml file in your android project.");
151 jLabel10.setVerticalAlignment(javax.swing.SwingConstants.TOP);
153 javax.swing.GroupLayout paintedPanel1Layout = new javax.swing.GroupLayout(paintedPanel1);
154 paintedPanel1.setLayout(paintedPanel1Layout);
155 paintedPanel1Layout.setHorizontalGroup(
156 paintedPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
157 .addGroup(paintedPanel1Layout.createSequentialGroup()
159 .addComponent(jLabel10, javax.swing.GroupLayout.PREFERRED_SIZE, 223, javax.swing.GroupLayout.PREFERRED_SIZE)
160 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
161 .addGroup(paintedPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
162 .addComponent(jLabel8, javax.swing.GroupLayout.Alignment.TRAILING)
163 .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, paintedPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
164 .addComponent(jLabel6)
165 .addComponent(jLabel7)
166 .addGroup(paintedPanel1Layout.createSequentialGroup()
167 .addComponent(jLabel5)
168 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
169 .addGroup(paintedPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
170 .addComponent(androidMaxSdkField)
171 .addComponent(androidMinSdkField)
172 .addComponent(androidTargetSdkField, javax.swing.GroupLayout.DEFAULT_SIZE, 142, Short.MAX_VALUE)))))
176 paintedPanel1Layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {jLabel5, jLabel6, jLabel7});
178 paintedPanel1Layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {androidMaxSdkField, androidMinSdkField, androidTargetSdkField});
180 paintedPanel1Layout.setVerticalGroup(
181 paintedPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
182 .addGroup(paintedPanel1Layout.createSequentialGroup()
184 .addGroup(paintedPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
185 .addGroup(paintedPanel1Layout.createSequentialGroup()
186 .addGroup(paintedPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
187 .addComponent(jLabel5)
188 .addComponent(androidMinSdkField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
189 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
190 .addGroup(paintedPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
191 .addComponent(jLabel6)
192 .addComponent(androidTargetSdkField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
193 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
194 .addGroup(paintedPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
195 .addComponent(jLabel7)
196 .addComponent(androidMaxSdkField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
198 .addComponent(jLabel8))
199 .addComponent(jLabel10))
200 .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
203 jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
204 jLabel1.setText("Main project suffix");
206 androidSuffixField.setText("-android");
208 jLabel4.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
209 jLabel4.setText("Html project suffix");
211 desktopSuffixField.setText("-desktop");
213 htmlSuffixField.setText("-html");
215 jLabel3.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
216 jLabel3.setText("Android project suffix");
218 jLabel2.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
219 jLabel2.setText("Desktop project suffix");
221 jLabel9.setText("Do not use twice the same suffix to avoid undefined behavior");
223 iosSuffixField.setText("-ios");
224 iosSuffixField.setName(""); // NOI18N
226 jLabel11.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
227 jLabel11.setText("iOS project suffix");
229 javax.swing.GroupLayout paintedPanel2Layout = new javax.swing.GroupLayout(paintedPanel2);
230 paintedPanel2.setLayout(paintedPanel2Layout);
231 paintedPanel2Layout.setHorizontalGroup(
232 paintedPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
233 .addGroup(paintedPanel2Layout.createSequentialGroup()
235 .addGroup(paintedPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
236 .addGroup(paintedPanel2Layout.createSequentialGroup()
237 .addGroup(paintedPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
238 .addGroup(javax.swing.GroupLayout.Alignment.LEADING, paintedPanel2Layout.createSequentialGroup()
239 .addComponent(jLabel2, javax.swing.GroupLayout.PREFERRED_SIZE, 109, javax.swing.GroupLayout.PREFERRED_SIZE)
240 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
241 .addComponent(desktopSuffixField, javax.swing.GroupLayout.PREFERRED_SIZE, 142, javax.swing.GroupLayout.PREFERRED_SIZE))
242 .addGroup(javax.swing.GroupLayout.Alignment.LEADING, paintedPanel2Layout.createSequentialGroup()
243 .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 106, javax.swing.GroupLayout.PREFERRED_SIZE)
244 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
245 .addComponent(coreSuffixField, javax.swing.GroupLayout.PREFERRED_SIZE, 142, javax.swing.GroupLayout.PREFERRED_SIZE)))
247 .addGroup(paintedPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
248 .addComponent(jLabel3, javax.swing.GroupLayout.PREFERRED_SIZE, 107, javax.swing.GroupLayout.PREFERRED_SIZE)
249 .addComponent(jLabel4, javax.swing.GroupLayout.PREFERRED_SIZE, 107, javax.swing.GroupLayout.PREFERRED_SIZE))
250 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
251 .addGroup(paintedPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
252 .addComponent(htmlSuffixField, javax.swing.GroupLayout.PREFERRED_SIZE, 140, javax.swing.GroupLayout.PREFERRED_SIZE)
253 .addComponent(androidSuffixField, javax.swing.GroupLayout.PREFERRED_SIZE, 140, javax.swing.GroupLayout.PREFERRED_SIZE)))
254 .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, paintedPanel2Layout.createSequentialGroup()
255 .addGap(0, 0, Short.MAX_VALUE)
256 .addGroup(paintedPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
257 .addComponent(jLabel9, javax.swing.GroupLayout.Alignment.TRAILING)
258 .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, paintedPanel2Layout.createSequentialGroup()
259 .addComponent(jLabel11, javax.swing.GroupLayout.PREFERRED_SIZE, 107, javax.swing.GroupLayout.PREFERRED_SIZE)
260 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
261 .addComponent(iosSuffixField, javax.swing.GroupLayout.PREFERRED_SIZE, 140, javax.swing.GroupLayout.PREFERRED_SIZE)))))
265 paintedPanel2Layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {jLabel1, jLabel2, jLabel3, jLabel4});
267 paintedPanel2Layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {androidSuffixField, coreSuffixField, desktopSuffixField, htmlSuffixField});
269 paintedPanel2Layout.setVerticalGroup(
270 paintedPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
271 .addGroup(paintedPanel2Layout.createSequentialGroup()
273 .addGroup(paintedPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
274 .addComponent(jLabel1)
275 .addComponent(coreSuffixField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
276 .addComponent(jLabel3)
277 .addComponent(androidSuffixField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
278 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
279 .addGroup(paintedPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
280 .addComponent(jLabel4)
281 .addComponent(htmlSuffixField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
282 .addComponent(jLabel2)
283 .addComponent(desktopSuffixField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
284 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
285 .addGroup(paintedPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
286 .addComponent(jLabel11)
287 .addComponent(iosSuffixField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
289 .addComponent(jLabel9)
290 .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
293 javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
294 this.setLayout(layout);
295 layout.setHorizontalGroup(
296 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
297 .addGroup(layout.createSequentialGroup()
299 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
300 .addComponent(paintedPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
301 .addComponent(paintedPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
302 .addContainerGap(59, Short.MAX_VALUE))
304 layout.setVerticalGroup(
305 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
306 .addGroup(layout.createSequentialGroup()
308 .addComponent(paintedPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
309 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
310 .addComponent(paintedPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
311 .addContainerGap(80, Short.MAX_VALUE))
313 }// </editor-fold>//GEN-END:initComponents
315 // Variables declaration - do not modify//GEN-BEGIN:variables
316 private javax.swing.JTextField androidMaxSdkField;
317 private javax.swing.JTextField androidMinSdkField;
318 private javax.swing.JTextField androidSuffixField;
319 private javax.swing.JTextField androidTargetSdkField;
320 private javax.swing.JTextField coreSuffixField;
321 private javax.swing.JTextField desktopSuffixField;
322 private javax.swing.JTextField htmlSuffixField;
323 private javax.swing.JTextField iosSuffixField;
324 private javax.swing.JLabel jLabel1;
325 private javax.swing.JLabel jLabel10;
326 private javax.swing.JLabel jLabel11;
327 private javax.swing.JLabel jLabel2;
328 private javax.swing.JLabel jLabel3;
329 private javax.swing.JLabel jLabel4;
330 private javax.swing.JLabel jLabel5;
331 private javax.swing.JLabel jLabel6;
332 private javax.swing.JLabel jLabel7;
333 private javax.swing.JLabel jLabel8;
334 private javax.swing.JLabel jLabel9;
335 private aurelienribon.ui.components.PaintedPanel paintedPanel1;
336 private aurelienribon.ui.components.PaintedPanel paintedPanel2;
337 // End of variables declaration//GEN-END:variables