/* * Copyright (C) 2006-2007 Gabriel Burca (gburca dash virtmus at ebixio dot com) * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ package com.ebixio.virtmus.options; import com.ebixio.virtmus.MainApp; import java.awt.Frame; import java.io.File; import java.util.Enumeration; import java.util.prefs.Preferences; import javax.swing.AbstractButton; import javax.swing.ButtonGroup; import javax.swing.JFileChooser; import javax.swing.SpinnerNumberModel; import org.openide.util.NbPreferences; import org.openide.windows.WindowManager; final class VirtmusPanel extends javax.swing.JPanel { private final VirtmusOptionsPanelController controller; private final Preferences pref = NbPreferences.forModule(MainApp.class); VirtmusPanel(VirtmusOptionsPanelController controller) { this.controller = controller; initComponents(); this.openGLOptions.setVisible(false); pageScrollPercentage.setModel(new SpinnerNumberModel(new Float(0), new Float(0), new Float(100), new Float(1))); // Can listen to changes in form fields and call controller.changed() // Only need to do this if we want the changes to be noticed before the user selects "OK" } /** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */ // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents private void initComponents() { orientationButtonGroup = new javax.swing.ButtonGroup(); scrollDirGroup = new javax.swing.ButtonGroup(); jLabel1 = new javax.swing.JLabel(); playListDir = new javax.swing.JTextField(); playListDirChange = new javax.swing.JButton(); jPanel1 = new javax.swing.JPanel(); jToggleButton1 = new javax.swing.JToggleButton(); jToggleButton2 = new javax.swing.JToggleButton(); jToggleButton3 = new javax.swing.JToggleButton(); jToggleButton4 = new javax.swing.JToggleButton(); jLabel2 = new javax.swing.JLabel(); songDir = new javax.swing.JTextField(); songDirChange = new javax.swing.JButton(); jPanel3 = new javax.swing.JPanel(); jPanel2 = new javax.swing.JPanel(); scrollVertical = new javax.swing.JToggleButton(); scrollHorizontal = new javax.swing.JToggleButton(); jLabel3 = new javax.swing.JLabel(); pageScrollPercentage = new javax.swing.JSpinner(); jLabel4 = new javax.swing.JLabel(); openGLOptions = new javax.swing.JPanel(); useOpenGL = new javax.swing.JCheckBox(); jLabel5 = new javax.swing.JLabel(); svgEditor = new javax.swing.JTextField(); svgEditorChange = new javax.swing.JButton(); jTextField1 = new javax.swing.JTextField(); setBackground(new java.awt.Color(255, 255, 255)); org.openide.awt.Mnemonics.setLocalizedText(jLabel1, "PlayList Directory:"); playListDir.setText("jTextField1"); org.openide.awt.Mnemonics.setLocalizedText(playListDirChange, "Change..."); playListDirChange.setActionCommand("ChangePlayListDir"); playListDirChange.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { changeButtonAction(evt); } }); jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder("Display orientation")); jPanel1.setOpaque(false); orientationButtonGroup.add(jToggleButton1); jToggleButton1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/ebixio/virtmus/resources/Clef-000.png"))); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(jToggleButton1, "Normal"); jToggleButton1.setActionCommand(Options.Rotation.Clockwise_0.toString()); jToggleButton1.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); jToggleButton1.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); orientationButtonGroup.add(jToggleButton2); jToggleButton2.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/ebixio/virtmus/resources/Clef-090.png"))); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(jToggleButton2, "Clockwise 90"); jToggleButton2.setActionCommand(Options.Rotation.Clockwise_90.toString()); jToggleButton2.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); jToggleButton2.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); orientationButtonGroup.add(jToggleButton3); jToggleButton3.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/ebixio/virtmus/resources/Clef-180.png"))); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(jToggleButton3, "Upside Down"); jToggleButton3.setActionCommand(Options.Rotation.Clockwise_180.toString()); jToggleButton3.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); jToggleButton3.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); orientationButtonGroup.add(jToggleButton4); jToggleButton4.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/ebixio/virtmus/resources/Clef-270.png"))); // NOI18N jToggleButton4.setSelected(true); org.openide.awt.Mnemonics.setLocalizedText(jToggleButton4, "Clockwise 270"); jToggleButton4.setActionCommand(Options.Rotation.Clockwise_270.toString()); jToggleButton4.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); jToggleButton4.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); jPanel1.setLayout(jPanel1Layout); jPanel1Layout.setHorizontalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup() .addContainerGap() .addComponent(jToggleButton1, javax.swing.GroupLayout.DEFAULT_SIZE, 105, Short.MAX_VALUE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jToggleButton2, javax.swing.GroupLayout.PREFERRED_SIZE, 105, Short.MAX_VALUE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jToggleButton3, javax.swing.GroupLayout.PREFERRED_SIZE, 105, Short.MAX_VALUE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jToggleButton4, javax.swing.GroupLayout.PREFERRED_SIZE, 107, Short.MAX_VALUE) .addContainerGap()) ); jPanel1Layout.setVerticalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jToggleButton1) .addComponent(jToggleButton2) .addComponent(jToggleButton3) .addComponent(jToggleButton4)) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); org.openide.awt.Mnemonics.setLocalizedText(jLabel2, "Songs Directory:"); songDir.setText("jTextField1"); org.openide.awt.Mnemonics.setLocalizedText(songDirChange, "Change..."); songDirChange.setActionCommand("ChangeSongDir"); songDirChange.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { changeButtonAction(evt); } }); jPanel3.setBorder(javax.swing.BorderFactory.createTitledBorder("Page scroll")); jPanel3.setFocusable(false); jPanel3.setOpaque(false); jPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder("Direction")); jPanel2.setOpaque(false); scrollDirGroup.add(scrollVertical); scrollVertical.setSelected(true); org.openide.awt.Mnemonics.setLocalizedText(scrollVertical, "Vertical"); scrollVertical.setActionCommand(Options.ScrollDir.Vertical.toString()); scrollDirGroup.add(scrollHorizontal); org.openide.awt.Mnemonics.setLocalizedText(scrollHorizontal, "Horizontal"); scrollHorizontal.setActionCommand(Options.ScrollDir.Horizontal.toString()); javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2); jPanel2.setLayout(jPanel2Layout); jPanel2Layout.setHorizontalGroup( jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel2Layout.createSequentialGroup() .addContainerGap() .addComponent(scrollVertical) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 80, Short.MAX_VALUE) .addComponent(scrollHorizontal) .addContainerGap()) ); jPanel2Layout.setVerticalGroup( jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel2Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(scrollVertical) .addComponent(scrollHorizontal)) .addContainerGap(15, Short.MAX_VALUE)) ); jLabel3.setLabelFor(pageScrollPercentage); org.openide.awt.Mnemonics.setLocalizedText(jLabel3, "Scroll percentage:"); org.openide.awt.Mnemonics.setLocalizedText(jLabel4, "Use \"0\" to scroll one page at a time."); openGLOptions.setBorder(javax.swing.BorderFactory.createTitledBorder("OpenGL")); openGLOptions.setOpaque(false); org.openide.awt.Mnemonics.setLocalizedText(useOpenGL, "Use OpenGL"); useOpenGL.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0)); javax.swing.GroupLayout openGLOptionsLayout = new javax.swing.GroupLayout(openGLOptions); openGLOptions.setLayout(openGLOptionsLayout); openGLOptionsLayout.setHorizontalGroup( openGLOptionsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(openGLOptionsLayout.createSequentialGroup() .addContainerGap() .addComponent(useOpenGL) .addContainerGap(82, Short.MAX_VALUE)) ); openGLOptionsLayout.setVerticalGroup( openGLOptionsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(openGLOptionsLayout.createSequentialGroup() .addContainerGap() .addComponent(useOpenGL) .addContainerGap(23, Short.MAX_VALUE)) ); javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3); jPanel3.setLayout(jPanel3Layout); jPanel3Layout.setHorizontalGroup( jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel3Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel3Layout.createSequentialGroup() .addComponent(jLabel3) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(pageScrollPercentage, javax.swing.GroupLayout.PREFERRED_SIZE, 58, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jLabel4)) .addGroup(jPanel3Layout.createSequentialGroup() .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(openGLOptions, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))) .addContainerGap()) ); jPanel3Layout.setVerticalGroup( jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel3Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel3) .addComponent(pageScrollPercentage, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel4)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) .addComponent(openGLOptions, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); org.openide.awt.Mnemonics.setLocalizedText(jLabel5, "SVG Editor:"); svgEditor.setText("jTextField1"); org.openide.awt.Mnemonics.setLocalizedText(svgEditorChange, "Change..."); svgEditorChange.setActionCommand("ChangeSvgEditor"); svgEditorChange.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { changeSvgEditorAction(evt); } }); jTextField1.setEditable(false); jTextField1.setText("Download a free SVG editor from: http://www.inkscape.org/"); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jPanel3, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGroup(layout.createSequentialGroup() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jLabel1) .addComponent(jLabel2)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(playListDir, javax.swing.GroupLayout.DEFAULT_SIZE, 313, Short.MAX_VALUE) .addComponent(songDir, javax.swing.GroupLayout.DEFAULT_SIZE, 313, Short.MAX_VALUE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false) .addComponent(songDirChange, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(playListDirChange, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))) .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() .addComponent(jLabel5) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(jTextField1, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 340, Short.MAX_VALUE) .addComponent(svgEditor, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 340, Short.MAX_VALUE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(svgEditorChange))) .addContainerGap()) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel1) .addComponent(playListDirChange) .addComponent(playListDir, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel2) .addComponent(songDirChange) .addComponent(songDir, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel5) .addComponent(svgEditorChange) .addComponent(svgEditor, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); }// </editor-fold>//GEN-END:initComponents private void changeButtonAction(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_changeButtonAction final Frame mainWindow = WindowManager.getDefault().getMainWindow(); final JFileChooser fc = new JFileChooser(); fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); fc.setMultiSelectionEnabled(false); File currentDir; if (evt.getActionCommand().equals("ChangePlayListDir")) { currentDir = new File(playListDir.getText()); } else { currentDir = new File(songDir.getText()); } if (currentDir.exists() && currentDir.isDirectory()) { fc.setCurrentDirectory(currentDir); } int returnVal = fc.showOpenDialog(mainWindow); if (returnVal == JFileChooser.APPROVE_OPTION) { if (evt.getActionCommand().equals("ChangePlayListDir")) { playListDir.setText( fc.getSelectedFile().toString() ); } else { songDir.setText( fc.getSelectedFile().toString() ); } } }//GEN-LAST:event_changeButtonAction private void changeSvgEditorAction(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_changeSvgEditorAction final Frame mainWindow = WindowManager.getDefault().getMainWindow(); final JFileChooser fc = new JFileChooser(); fc.setFileSelectionMode(JFileChooser.FILES_ONLY); fc.setMultiSelectionEnabled(false); int returnVal = fc.showOpenDialog(mainWindow); if (returnVal == JFileChooser.APPROVE_OPTION) { if (evt.getActionCommand().equals("ChangeSvgEditor")) { svgEditor.setText( fc.getSelectedFile().toString() ); } } }//GEN-LAST:event_changeSvgEditorAction // See: http://blogs.sun.com/geertjan/entry/preferences_api_and_netbeans_ide1 // See: http://blogs.sun.com/geertjan/entry/preferences_api_and_netbeans_ide void load() { String inkscape = "C:\\Program Files\\Inkscape\\Inkscape.exe"; File f = new File(inkscape); if (!f.canExecute()) { inkscape = ""; } playListDir.setText(pref.get(Options.OptPlayListDir, "")); songDir.setText(pref.get(Options.OptSongDir, "")); svgEditor.setText(pref.get(Options.OptSvgEditor, inkscape)); pageScrollPercentage.setValue(Float.parseFloat(pref.get(Options.OptPageScrollAmount, "100.0"))); String orientation = pref.get(Options.OptScreenRot, Options.findInstance().screenRot.toString()); enableOptionButton(orientationButtonGroup.getElements(), orientation); String scrollDir = pref.get(Options.OptPageScrollDir, Options.findInstance().scrollDir.toString()); enableOptionButton(scrollDirGroup.getElements(), scrollDir); useOpenGL.setSelected(Boolean.parseBoolean(pref.get(Options.OptUseOpenGL, "false"))); } private void enableOptionButton(Enumeration<AbstractButton> buttonEnum, String option) { while (buttonEnum.hasMoreElements()) { AbstractButton b = buttonEnum.nextElement(); if (option.equals(b.getActionCommand())) { b.setSelected(true); break; } } } void store() { // Save changes only if it's different so that we only trigger listener // notification if a change was really made. if (! pref.get(Options.OptPlayListDir, "").equals(playListDir.getText()) ) { pref.put(Options.OptPlayListDir, playListDir.getText()); } if (! pref.get(Options.OptSongDir, "").equals(songDir.getText()) ) { pref.put(Options.OptSongDir, songDir.getText()); } if (! pref.get(Options.OptSvgEditor, "").equals(svgEditor.getText()) ) { pref.put(Options.OptSvgEditor, svgEditor.getText()); } float scrollPercentage = Float.parseFloat(pref.get(Options.OptPageScrollAmount, "0")); Number currentScroll = (Number) pageScrollPercentage.getValue(); if (scrollPercentage != currentScroll.floatValue()) { pref.put(Options.OptPageScrollAmount, Float.toString(currentScroll.floatValue()) ); } Options.findInstance().screenRot = Options.Rotation.valueOf( saveOption(Options.OptScreenRot, Options.findInstance().screenRot.toString(), orientationButtonGroup)); Options.findInstance().scrollDir = Options.ScrollDir.valueOf( saveOption(Options.OptPageScrollDir, Options.findInstance().scrollDir.toString(), scrollDirGroup)); Boolean oldUseOpenGL = Boolean.parseBoolean(pref.get(Options.OptUseOpenGL, "false")); if (oldUseOpenGL != useOpenGL.isSelected()) { pref.put(Options.OptUseOpenGL, Boolean.toString(useOpenGL.isSelected())); } } private String saveOption(String optionName, String defaultValue, ButtonGroup buttonGroup) { String newOption = buttonGroup.getSelection().getActionCommand(); String oldOption = pref.get(optionName, defaultValue); if (! oldOption.equals(newOption)) { pref.put(optionName, newOption); } return newOption; } boolean valid() { // TODO check whether form is consistent and complete return true; } // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel2; private javax.swing.JLabel jLabel3; private javax.swing.JLabel jLabel4; private javax.swing.JLabel jLabel5; private javax.swing.JPanel jPanel1; private javax.swing.JPanel jPanel2; private javax.swing.JPanel jPanel3; private javax.swing.JTextField jTextField1; private javax.swing.JToggleButton jToggleButton1; private javax.swing.JToggleButton jToggleButton2; private javax.swing.JToggleButton jToggleButton3; private javax.swing.JToggleButton jToggleButton4; private javax.swing.JPanel openGLOptions; private javax.swing.ButtonGroup orientationButtonGroup; private javax.swing.JSpinner pageScrollPercentage; private javax.swing.JTextField playListDir; private javax.swing.JButton playListDirChange; private javax.swing.ButtonGroup scrollDirGroup; private javax.swing.JToggleButton scrollHorizontal; private javax.swing.JToggleButton scrollVertical; private javax.swing.JTextField songDir; private javax.swing.JButton songDirChange; private javax.swing.JTextField svgEditor; private javax.swing.JButton svgEditorChange; private javax.swing.JCheckBox useOpenGL; // End of variables declaration//GEN-END:variables }