/** * Copyright 2014 * SMEdit https://github.com/StarMade/SMEdit * SMTools https://github.com/StarMade/SMTools * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. */ package jo.util; import java.awt.Color; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.File; import java.io.FileInputStream; import java.io.FileWriter; import java.io.IOException; import java.util.Properties; import java.util.logging.Logger; import static javax.swing.BorderFactory.createEtchedBorder; import static javax.swing.BorderFactory.createTitledBorder; import javax.swing.DefaultComboBoxModel; import javax.swing.GroupLayout; import static javax.swing.GroupLayout.Alignment.BASELINE; import static javax.swing.GroupLayout.Alignment.LEADING; import static javax.swing.GroupLayout.Alignment.TRAILING; import static javax.swing.GroupLayout.DEFAULT_SIZE; import static javax.swing.GroupLayout.PREFERRED_SIZE; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JSpinner; import javax.swing.JTextField; import static javax.swing.LayoutStyle.ComponentPlacement.RELATED; import static javax.swing.LayoutStyle.ComponentPlacement.UNRELATED; import javax.swing.SpinnerNumberModel; import javax.swing.SwingConstants; import javax.swing.WindowConstants; import jo.sm.edit.SMEdit; public class OptionScreen extends JFrame { private static final long serialVersionUID = 1L; private static String[] mArgs; //public final static String fileName = Paths.getOptsFile(); private static final Logger log = Logger.getLogger(OptionScreen.class.getName()); private Properties mProps; private File mStarMadeDir; private SMEdit screen; /* For tile properties dialog */ private JButton jButton1; private JButton jButton2; private JButton jButton3; private JComboBox jComboBox2; private JLabel jLabel1; private JLabel jLabel3; private JLabel jLabel4; private JLabel jLabel5; private JLabel jLabel6; private JLabel jLabel7; private JLabel jLabel8; private JPanel jPanel1; private JPanel jPanel2; private JPanel jPanel3; private JPanel jPanel4; private JSpinner jSpinner1; private JTextField jTextField1; @SuppressWarnings("unchecked") public OptionScreen(final String[] args) { loadJosmProps(); mArgs = args; setIconImage(GlobalConfiguration.getImage(Resources.ICON)); setTitle(GlobalConfiguration.NAME + " version 1.0" + ((float) GlobalConfiguration.getVersion() / 100)); setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); setResizable(false); addWindowListener(new WindowAdapter() { @Override public void windowClosing(final WindowEvent e) { System.exit(0); } }); initComponents(); setVisible(true); } @SuppressWarnings({"unchecked", "unchecked"}) private void initComponents() { jPanel1 = new JPanel(); jLabel1 = new JLabel(); jPanel2 = new JPanel(); jLabel3 = new JLabel(); jSpinner1 = new JSpinner(new SpinnerNumberModel(1, 1, 32, 1)); jLabel4 = new JLabel(); jPanel3 = new JPanel(); jLabel5 = new JLabel(); jLabel6 = new JLabel(); jPanel4 = new JPanel(); jLabel7 = new JLabel(); jLabel8 = new JLabel(); jButton1 = new JButton(); jButton2 = new JButton(); jButton3 = new javax.swing.JButton(); final ImageIcon icon = new ImageIcon(); icon.setImage(GlobalConfiguration.getImage(Resources.SPLASH)); jLabel1.setIcon(icon); jLabel1.setHorizontalAlignment(SwingConstants.CENTER); jSpinner1.setBorder(createEtchedBorder()); if (null != mProps.getProperty("memory", "")) { switch (mProps.getProperty("memory", "")) { case "0": jSpinner1.setValue(1); break; case "1": jSpinner1.setValue(1); break; case "2": jSpinner1.setValue(2); break; case "3": jSpinner1.setValue(3); break; case "4": jSpinner1.setValue(4); break; case "5": jSpinner1.setValue(5); break; case "6": jSpinner1.setValue(6); break; case "7": jSpinner1.setValue(7); break; case "8": jSpinner1.setValue(8); break; case "9": jSpinner1.setValue(9); break; case "10": jSpinner1.setValue(10); break; case "11": jSpinner1.setValue(11); break; case "12": jSpinner1.setValue(12); break; case "13": jSpinner1.setValue(13); break; case "14": jSpinner1.setValue(14); break; case "15": jSpinner1.setValue(15); break; case "16": jSpinner1.setValue(16); break; case "17": jSpinner1.setValue(17); break; case "18": jSpinner1.setValue(18); break; case "19": jSpinner1.setValue(19); break; case "20": jSpinner1.setValue(20); break; case "21": jSpinner1.setValue(21); break; case "22": jSpinner1.setValue(22); break; case "23": jSpinner1.setValue(23); break; case "24": jSpinner1.setValue(24); break; case "25": jSpinner1.setValue(25); break; case "26": jSpinner1.setValue(26); break; case "27": jSpinner1.setValue(27); break; case "28": jSpinner1.setValue(28); break; case "29": jSpinner1.setValue(29); break; case "30": jSpinner1.setValue(30); break; case "31": jSpinner1.setValue(31); break; case "32": jSpinner1.setValue(32); break; } } jPanel1.setBorder(createTitledBorder("Options")); javax.swing.GroupLayout jPanel1Layout = new GroupLayout(jPanel1); jPanel1.setLayout(jPanel1Layout); jPanel1Layout.setHorizontalGroup( jPanel1Layout.createParallelGroup(LEADING) .addGroup(jPanel1Layout.createSequentialGroup() .addContainerGap() .addComponent(jLabel1, PREFERRED_SIZE, 400, PREFERRED_SIZE) .addContainerGap(DEFAULT_SIZE, Short.MAX_VALUE)) ); jPanel1Layout.setVerticalGroup( jPanel1Layout.createParallelGroup(LEADING) .addGroup(jPanel1Layout.createSequentialGroup() .addContainerGap() .addComponent(jLabel1, PREFERRED_SIZE, 218, PREFERRED_SIZE) .addContainerGap(DEFAULT_SIZE, Short.MAX_VALUE)) ); jPanel2.setBorder(createTitledBorder("* System Settings *")); jLabel3.setText("Desired memory use in gigs?"); javax.swing.GroupLayout jPanel2Layout = new GroupLayout(jPanel2); jPanel2.setLayout(jPanel2Layout); jPanel2Layout.setHorizontalGroup( jPanel2Layout.createParallelGroup(LEADING) .addGroup(jPanel2Layout.createSequentialGroup() .addContainerGap() .addComponent(jLabel3, PREFERRED_SIZE, 217, PREFERRED_SIZE) .addPreferredGap(UNRELATED) .addComponent(jSpinner1) .addContainerGap()) ); jPanel2Layout.setVerticalGroup( jPanel2Layout.createParallelGroup(LEADING) .addGroup(jPanel2Layout.createSequentialGroup() .addGap(12, 12, 12) .addGroup(jPanel2Layout.createParallelGroup(LEADING, false) .addComponent(jSpinner1) .addComponent(jLabel3, DEFAULT_SIZE, DEFAULT_SIZE, Short.MAX_VALUE)) .addContainerGap(DEFAULT_SIZE, Short.MAX_VALUE)) ); jLabel4.setFont(new Font("Tahoma", 0, 12)); // NOI18N jLabel4.setForeground(new Color(255, 0, 0)); jLabel4.setText("Be Sure to set the preload options before you begin using SMEdit Classic"); jPanel3.setBorder(createTitledBorder("* Folder Settings *")); jLabel5.setText("Desired texture pack to use?"); jLabel6.setText("StarMade game folder directory?"); //jComboBox2 = new JComboBox<>(new DefaultComboBoxModel<>(new String[]{"Cartoon", "OldStyle", "Pixel", "Realistic", "Custom"})); jComboBox2 = new JComboBox<>(new DefaultComboBoxModel<>(new String[]{"Default", "Pixel", "Realistic"})); jComboBox2.setBorder(createEtchedBorder()); if (null != mProps.getProperty("texture", "")) { switch (mProps.getProperty("texture", "")) { case "Default": jComboBox2.setSelectedIndex(1); break; case "Pixel": jComboBox2.setSelectedIndex(2); break; case "Realistic": jComboBox2.setSelectedIndex(3); break; } } jTextField1 = new JTextField(mProps.getProperty("starmade.home", "")); mStarMadeDir = new File(jTextField1.getText()); javax.swing.GroupLayout jPanel3Layout = new GroupLayout(jPanel3); jPanel3.setLayout(jPanel3Layout); jPanel3Layout.setHorizontalGroup( jPanel3Layout.createParallelGroup(LEADING) .addGroup(TRAILING, jPanel3Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel3Layout.createParallelGroup(TRAILING) .addComponent(jLabel6, LEADING, DEFAULT_SIZE, DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jLabel5, DEFAULT_SIZE, DEFAULT_SIZE, Short.MAX_VALUE)) .addPreferredGap(RELATED) .addGroup(jPanel3Layout.createParallelGroup(TRAILING, false) .addComponent(jTextField1, DEFAULT_SIZE, 169, Short.MAX_VALUE) .addComponent(jComboBox2, 0, DEFAULT_SIZE, Short.MAX_VALUE)) .addContainerGap()) ); jPanel3Layout.setVerticalGroup( jPanel3Layout.createParallelGroup(LEADING) .addGroup(jPanel3Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel3Layout.createParallelGroup(LEADING, false) .addComponent(jComboBox2) .addComponent(jLabel5, DEFAULT_SIZE, DEFAULT_SIZE, Short.MAX_VALUE)) .addPreferredGap(RELATED) .addGroup(jPanel3Layout.createParallelGroup(LEADING, false) .addComponent(jTextField1) .addComponent(jLabel6, DEFAULT_SIZE, DEFAULT_SIZE, Short.MAX_VALUE)) .addContainerGap(DEFAULT_SIZE, Short.MAX_VALUE)) ); jPanel4.setBorder(javax.swing.BorderFactory.createTitledBorder("* Start Up Instructions *")); jLabel7.setText("Be sure to apply any changes before starting the main SMEdit app."); jLabel8.setText("Pressing \"Cancel\" will close the starter app without starting SMEdit."); javax.swing.GroupLayout jPanel4Layout = new javax.swing.GroupLayout(jPanel4); jPanel4.setLayout(jPanel4Layout); jPanel4Layout.setHorizontalGroup( jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel4Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(jLabel8, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jLabel7, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addContainerGap()) ); jPanel4Layout.setVerticalGroup( jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel4Layout.createSequentialGroup() .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jLabel7, javax.swing.GroupLayout.PREFERRED_SIZE, 24, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jLabel8, javax.swing.GroupLayout.PREFERRED_SIZE, 22, javax.swing.GroupLayout.PREFERRED_SIZE)) ); jButton1.setText("Apply"); jButton1.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { saveProps(); } }); jButton2.setText("Cancel"); jButton2.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { System.exit(0); } }); jButton3.setText("Start SMEdit"); jButton3.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { screen = new SMEdit(mArgs); } }); javax.swing.GroupLayout layout = new GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(LEADING) .addComponent(jPanel2, DEFAULT_SIZE, DEFAULT_SIZE, Short.MAX_VALUE) .addGroup(layout.createSequentialGroup() .addComponent(jPanel1, PREFERRED_SIZE, DEFAULT_SIZE, PREFERRED_SIZE) .addGap(0, 0, Short.MAX_VALUE)) .addComponent(jPanel3, DEFAULT_SIZE, DEFAULT_SIZE, Short.MAX_VALUE) .addGroup(TRAILING, layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(LEADING) .addComponent(jLabel4, TRAILING, DEFAULT_SIZE, DEFAULT_SIZE, Short.MAX_VALUE) .addGroup(TRAILING, layout.createSequentialGroup() .addGap(0, 0, Short.MAX_VALUE) .addGroup(layout.createParallelGroup(LEADING, false) .addComponent(jButton3, TRAILING, DEFAULT_SIZE, DEFAULT_SIZE, Short.MAX_VALUE) .addGroup(TRAILING, layout.createSequentialGroup() .addComponent(jButton1) .addPreferredGap(RELATED) .addComponent(jButton2))))) .addContainerGap()) .addComponent(jPanel4, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) ); layout.setVerticalGroup( layout.createParallelGroup(LEADING) .addGroup(layout.createSequentialGroup() .addComponent(jPanel1, PREFERRED_SIZE, DEFAULT_SIZE, PREFERRED_SIZE) .addGap(2, 2, 2) .addComponent(jLabel4) .addPreferredGap(RELATED) .addComponent(jPanel2, PREFERRED_SIZE, DEFAULT_SIZE, PREFERRED_SIZE) .addPreferredGap(RELATED, DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jPanel3, PREFERRED_SIZE, DEFAULT_SIZE, PREFERRED_SIZE) .addPreferredGap(RELATED) .addComponent(jPanel4, PREFERRED_SIZE, DEFAULT_SIZE, PREFERRED_SIZE) .addPreferredGap(RELATED) .addGroup(layout.createParallelGroup(BASELINE) .addComponent(jButton1) .addComponent(jButton2)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jButton3) .addGap(12, 12, 12)) ); pack(); } private void loadJosmProps() { File uHome = new File(System.getProperty("user.home")); File props = new File(uHome, ".josm"); if (props.exists()) { mProps = new Properties(); try { try (FileInputStream fis = new FileInputStream(props)) { mProps.load(fis); } } catch (IOException e) { } } else { mProps = new Properties(); } } private void saveProps() { if (mProps == null) { return; } if (mStarMadeDir != null) { mProps.put("memory", jSpinner1.getValue().toString()); mProps.put("texture", jComboBox2.getSelectedItem().toString()); mProps.put("starmade.home", jTextField1.getText()); } File uHome = new File(System.getProperty("user.home")); File props = new File(uHome, ".josm"); try { try (FileWriter fos = new FileWriter(props)) { mProps.store(fos, "StarMade Utils defaults"); } } catch (IOException e) { } } }