EMMA Coverage Report (generated Sat Apr 29 12:52:00 BST 2006)
[all classes][net.sourceforge.pseudoq.gui]

COVERAGE SUMMARY FOR SOURCE FILE [LauncherFrame.java]

nameclass, %method, %block, %line, %
LauncherFrame.java0%   (0/14)0%   (0/44)0%   (0/744)0%   (0/162)

COVERAGE BREAKDOWN BY CLASS AND METHOD

nameclass, %method, %block, %line, %
     
class LauncherFrame0%   (0/1)0%   (0/16)0%   (0/563)0%   (0/117)
<static initializer> 0%   (0/1)0%   (0/4)0%   (0/1)
LauncherFrame (): void 0%   (0/1)0%   (0/5)0%   (0/3)
aboutMenuItemActionPerformed (ActionEvent): void 0%   (0/1)0%   (0/6)0%   (0/2)
access$000 (LauncherFrame, ActionEvent): void 0%   (0/1)0%   (0/4)0%   (0/1)
access$100 (LauncherFrame, ActionEvent): void 0%   (0/1)0%   (0/4)0%   (0/1)
access$200 (LauncherFrame, ActionEvent): void 0%   (0/1)0%   (0/4)0%   (0/1)
access$300 (LauncherFrame, ActionEvent): void 0%   (0/1)0%   (0/4)0%   (0/1)
access$400 (LauncherFrame, ActionEvent): void 0%   (0/1)0%   (0/4)0%   (0/1)
access$500 (LauncherFrame, ActionEvent): void 0%   (0/1)0%   (0/4)0%   (0/1)
exitMenuItemActionPerformed (ActionEvent): void 0%   (0/1)0%   (0/3)0%   (0/2)
initComponents (): void 0%   (0/1)0%   (0/289)0%   (0/56)
jButton1ActionPerformed (ActionEvent): void 0%   (0/1)0%   (0/4)0%   (0/2)
jButton2ActionPerformed (ActionEvent): void 0%   (0/1)0%   (0/4)0%   (0/2)
main (String []): void 0%   (0/1)0%   (0/5)0%   (0/2)
newMenuItemActionPerformed (ActionEvent): void 0%   (0/1)0%   (0/113)0%   (0/27)
openMenuItemActionPerformed (ActionEvent): void 0%   (0/1)0%   (0/106)0%   (0/19)
     
class LauncherFrame$10%   (0/1)0%   (0/2)0%   (0/11)0%   (0/3)
LauncherFrame$1 (LauncherFrame): void 0%   (0/1)0%   (0/6)0%   (0/1)
actionPerformed (ActionEvent): void 0%   (0/1)0%   (0/5)0%   (0/2)
     
class LauncherFrame$100%   (0/1)0%   (0/3)0%   (0/20)0%   (0/6)
LauncherFrame$10 (LauncherFrame): void 0%   (0/1)0%   (0/6)0%   (0/1)
accept (File): boolean 0%   (0/1)0%   (0/12)0%   (0/4)
getDescription (): String 0%   (0/1)0%   (0/2)0%   (0/1)
     
class LauncherFrame$110%   (0/1)0%   (0/2)0%   (0/17)0%   (0/3)
LauncherFrame$11 (LauncherFrame, Puzzle): void 0%   (0/1)0%   (0/9)0%   (0/1)
run (): void 0%   (0/1)0%   (0/8)0%   (0/2)
     
class LauncherFrame$120%   (0/1)0%   (0/2)0%   (0/15)0%   (0/3)
LauncherFrame$12 (LauncherFrame): void 0%   (0/1)0%   (0/6)0%   (0/1)
run (): void 0%   (0/1)0%   (0/9)0%   (0/2)
     
class LauncherFrame$130%   (0/1)0%   (0/2)0%   (0/9)0%   (0/3)
LauncherFrame$13 (): void 0%   (0/1)0%   (0/3)0%   (0/1)
run (): void 0%   (0/1)0%   (0/6)0%   (0/2)
     
class LauncherFrame$20%   (0/1)0%   (0/2)0%   (0/11)0%   (0/3)
LauncherFrame$2 (LauncherFrame): void 0%   (0/1)0%   (0/6)0%   (0/1)
actionPerformed (ActionEvent): void 0%   (0/1)0%   (0/5)0%   (0/2)
     
class LauncherFrame$30%   (0/1)0%   (0/2)0%   (0/11)0%   (0/3)
LauncherFrame$3 (LauncherFrame): void 0%   (0/1)0%   (0/6)0%   (0/1)
actionPerformed (ActionEvent): void 0%   (0/1)0%   (0/5)0%   (0/2)
     
class LauncherFrame$40%   (0/1)0%   (0/2)0%   (0/11)0%   (0/3)
LauncherFrame$4 (LauncherFrame): void 0%   (0/1)0%   (0/6)0%   (0/1)
actionPerformed (ActionEvent): void 0%   (0/1)0%   (0/5)0%   (0/2)
     
class LauncherFrame$50%   (0/1)0%   (0/2)0%   (0/11)0%   (0/3)
LauncherFrame$5 (LauncherFrame): void 0%   (0/1)0%   (0/6)0%   (0/1)
actionPerformed (ActionEvent): void 0%   (0/1)0%   (0/5)0%   (0/2)
     
class LauncherFrame$60%   (0/1)0%   (0/2)0%   (0/11)0%   (0/3)
LauncherFrame$6 (LauncherFrame): void 0%   (0/1)0%   (0/6)0%   (0/1)
actionPerformed (ActionEvent): void 0%   (0/1)0%   (0/5)0%   (0/2)
     
class LauncherFrame$70%   (0/1)0%   (0/2)0%   (0/17)0%   (0/3)
LauncherFrame$7 (LauncherFrame, Puzzle): void 0%   (0/1)0%   (0/9)0%   (0/1)
run (): void 0%   (0/1)0%   (0/8)0%   (0/2)
     
class LauncherFrame$80%   (0/1)0%   (0/2)0%   (0/17)0%   (0/3)
LauncherFrame$8 (LauncherFrame, Puzzle): void 0%   (0/1)0%   (0/9)0%   (0/1)
run (): void 0%   (0/1)0%   (0/8)0%   (0/2)
     
class LauncherFrame$90%   (0/1)0%   (0/3)0%   (0/20)0%   (0/6)
LauncherFrame$9 (LauncherFrame): void 0%   (0/1)0%   (0/6)0%   (0/1)
accept (File): boolean 0%   (0/1)0%   (0/12)0%   (0/4)
getDescription (): String 0%   (0/1)0%   (0/2)0%   (0/1)

1/*
2 * Copyright (c) 2005 The PseudoQ Project.
3 *
4 * This file is part of PseudoQ.
5 *
6 * PseudoQ is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU Lesser General Public License as published by
8 * the Free Software Foundation; either version 2.1 of the License, or
9 * (at your option) any later version.
10 *
11 * PseudoQ is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 * GNU Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General Public License
17 * along with PseudoQ; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
19 */
20 
21package net.sourceforge.pseudoq.gui;
22 
23import javax.swing.JFileChooser;
24import javax.swing.JOptionPane;
25import net.sourceforge.pseudoq.generation.GenerationException;
26import net.sourceforge.pseudoq.generation.GenerationStyleEnum;
27 
28import net.sourceforge.pseudoq.generation.Generator;
29import net.sourceforge.pseudoq.generation.GeneratorFactory;
30import net.sourceforge.pseudoq.model.Puzzle;
31import net.sourceforge.pseudoq.model.PuzzleFactory;
32import net.sourceforge.pseudoq.model.io.PuzzleFileReader;
33 
34/**
35 * Main GUI frame.  Contains options to open existing puzzles or create new
36 * ones.
37 * @author <a href="http://sourceforge.net/users/stevensa">Andrew Stevens</a>
38 */
39public class LauncherFrame extends javax.swing.JFrame {
40    /** Log4J logger */
41    private static final org.apache.log4j.Logger log =
42            org.apache.log4j.LogManager.getLogger(LauncherFrame.class);
43 
44    /**
45     * Creates new form LauncherFrame
46     */
47    public LauncherFrame() {
48        initComponents();
49    }
50 
51    /** This method is called from within the constructor to
52     * initialize the form.
53     * WARNING: Do NOT modify this code. The content of this method is
54     * always regenerated by the Form Editor.
55     */
56    // <editor-fold defaultstate="collapsed" desc=" Generated Code ">//GEN-BEGIN:initComponents
57    private void initComponents() {
58        jPanel1 = new javax.swing.JPanel();
59        jButton1 = new javax.swing.JButton();
60        jButton2 = new javax.swing.JButton();
61        menuBar = new javax.swing.JMenuBar();
62        fileMenu = new javax.swing.JMenu();
63        newMenuItem = new javax.swing.JMenuItem();
64        openMenuItem = new javax.swing.JMenuItem();
65        exitMenuItem = new javax.swing.JMenuItem();
66        helpMenu = new javax.swing.JMenu();
67        contentsMenuItem = new javax.swing.JMenuItem();
68        aboutMenuItem = new javax.swing.JMenuItem();
69 
70        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
71        setTitle("PseudoQ");
72        jPanel1.setLayout(new java.awt.GridLayout(3, 0, 0, 10));
73 
74        jPanel1.setBorder(new javax.swing.border.EmptyBorder(new java.awt.Insets(30, 30, 30, 30)));
75        jButton1.setMnemonic('g');
76        jButton1.setText("Generate/Design");
77        jButton1.addActionListener(new java.awt.event.ActionListener() {
78            public void actionPerformed(java.awt.event.ActionEvent evt) {
79                jButton1ActionPerformed(evt);
80            }
81        });
82 
83        jPanel1.add(jButton1);
84 
85        jButton2.setMnemonic('L');
86        jButton2.setText("Load");
87        jButton2.addActionListener(new java.awt.event.ActionListener() {
88            public void actionPerformed(java.awt.event.ActionEvent evt) {
89                jButton2ActionPerformed(evt);
90            }
91        });
92 
93        jPanel1.add(jButton2);
94 
95        getContentPane().add(jPanel1, java.awt.BorderLayout.CENTER);
96 
97        fileMenu.setMnemonic('f');
98        fileMenu.setText("File");
99        newMenuItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_N, java.awt.event.InputEvent.CTRL_MASK));
100        newMenuItem.setMnemonic('n');
101        newMenuItem.setText("New");
102        newMenuItem.addActionListener(new java.awt.event.ActionListener() {
103            public void actionPerformed(java.awt.event.ActionEvent evt) {
104                newMenuItemActionPerformed(evt);
105            }
106        });
107 
108        fileMenu.add(newMenuItem);
109 
110        openMenuItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_O, java.awt.event.InputEvent.CTRL_MASK));
111        openMenuItem.setMnemonic('o');
112        openMenuItem.setText("Open");
113        openMenuItem.addActionListener(new java.awt.event.ActionListener() {
114            public void actionPerformed(java.awt.event.ActionEvent evt) {
115                openMenuItemActionPerformed(evt);
116            }
117        });
118 
119        fileMenu.add(openMenuItem);
120 
121        exitMenuItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_F4, java.awt.event.InputEvent.ALT_MASK));
122        exitMenuItem.setMnemonic('x');
123        exitMenuItem.setText("Exit");
124        exitMenuItem.addActionListener(new java.awt.event.ActionListener() {
125            public void actionPerformed(java.awt.event.ActionEvent evt) {
126                exitMenuItemActionPerformed(evt);
127            }
128        });
129 
130        fileMenu.add(exitMenuItem);
131 
132        menuBar.add(fileMenu);
133 
134        helpMenu.setMnemonic('h');
135        helpMenu.setText("Help");
136        contentsMenuItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_F1, 0));
137        contentsMenuItem.setText("Contents");
138        contentsMenuItem.setEnabled(false);
139        helpMenu.add(contentsMenuItem);
140 
141        aboutMenuItem.setMnemonic('a');
142        aboutMenuItem.setText("About");
143        aboutMenuItem.addActionListener(new java.awt.event.ActionListener() {
144            public void actionPerformed(java.awt.event.ActionEvent evt) {
145                aboutMenuItemActionPerformed(evt);
146            }
147        });
148 
149        helpMenu.add(aboutMenuItem);
150 
151        menuBar.add(helpMenu);
152 
153        setJMenuBar(menuBar);
154 
155        pack();
156    }
157    // </editor-fold>//GEN-END:initComponents
158 
159    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton2ActionPerformed
160        openMenuItemActionPerformed(evt);
161    }//GEN-LAST:event_jButton2ActionPerformed
162 
163    private void newMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_newMenuItemActionPerformed
164        NewPuzzleWizard wizard = new NewPuzzleWizard();
165 
166        wizard.showInDialog("Create new puzzle", this, true);
167        if (!wizard.wasCanceled()) {
168            if (wizard.isGenerate()) {
169                log.debug("Generate new " + wizard.getPuzzleType() + " puzzle.");
170                // TODO: get style and difficulty params from model
171                Generator generator = GeneratorFactory.newInstance(
172                        wizard.getPuzzleType(), GenerationStyleEnum.RANDOM, 1);
173                if (generator != null) {
174                    try {
175                        final Puzzle puzzle = generator.generate();
176                        javax.swing.SwingUtilities.invokeLater(new Runnable() {
177                            public void run() {
178                                new PuzzleFrame(puzzle).setVisible(true);
179                            }
180                        });
181                    } catch (GenerationException e) {
182                        log.error("No puzzle returned by generator", e);
183                        JOptionPane.showMessageDialog(this,
184                                "Error creating puzzle.",
185                                "Error", JOptionPane.ERROR_MESSAGE);
186                    }
187                } else {
188                    log.error("No generator for type " + wizard.getPuzzleType());
189                    JOptionPane.showMessageDialog(this,
190                            "Error creating puzzle.",
191                            "Error", JOptionPane.ERROR_MESSAGE);
192                }
193            } else {
194                log.debug("Design new " + wizard.getPuzzleType() + " puzzle.");
195                final Puzzle puzzle = PuzzleFactory.newInstance(
196                        wizard.getPuzzleType());
197                if (puzzle != null) {
198                    javax.swing.SwingUtilities.invokeLater(new Runnable() {
199                        public void run() {
200                            new PuzzleFrame(puzzle).setVisible(true);
201                        }
202                    });
203                } else {
204                    log.error("No puzzle returned by factory");
205                    JOptionPane.showMessageDialog(this,
206                            "Unknown error creating puzzle.",
207                            "Error", JOptionPane.ERROR_MESSAGE);
208                }
209            }
210        } else {
211            log.debug("No puzzle right now.");
212        }
213    }//GEN-LAST:event_newMenuItemActionPerformed
214 
215    private void openMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_openMenuItemActionPerformed
216        JFileChooser fileChooser = new JFileChooser(System.getProperty("user.dir"));
217        fileChooser.addChoosableFileFilter(
218                new javax.swing.filechooser.FileFilter() {
219                    public boolean accept(java.io.File file) {
220                        if (file.isDirectory()) {
221                            return true;
222                        }
223                        String filename = file.getName();
224                        return filename.endsWith(".xml");
225                    }
226                    public String getDescription() {
227                        return "XML files (*.xml)";
228                    }
229                });
230        fileChooser.setFileFilter(
231                new javax.swing.filechooser.FileFilter() {
232                    public boolean accept(java.io.File file) {
233                        if (file.isDirectory()) {
234                            return true;
235                        }
236                        String filename = file.getName();
237                        return filename.endsWith(".pdq");
238                    }
239                    public String getDescription() {
240                        return "PseudoQ puzzles (*.pdq)";
241                    }
242                });
243 
244        // Open file dialog.
245        int result = fileChooser.showOpenDialog(this);
246        if (result == JFileChooser.APPROVE_OPTION) {
247            String selectedFile = fileChooser.getSelectedFile().getPath();
248            log.debug("Open " + selectedFile);
249            try {
250                final Puzzle puzzle = PuzzleFileReader.read(selectedFile);
251                javax.swing.SwingUtilities.invokeLater(new Runnable() {
252                    public void run() {
253                        new PuzzleFrame(puzzle).setVisible(true);
254                    }
255                });
256            } catch (java.io.IOException e) {
257                log.error("IO Problem: " + e.getLocalizedMessage(), e);
258                JOptionPane.showMessageDialog(this,
259                        "I/O error reading file:\n" + e.getLocalizedMessage(),
260                        "File Read Error", JOptionPane.ERROR_MESSAGE);
261            } catch (javax.xml.parsers.ParserConfigurationException e) {
262                log.error("XML parser problem: " + e.getLocalizedMessage(), e);
263                JOptionPane.showMessageDialog(this,
264                        "Invalid file.\nCouldn't parse file contents:\n" + e.getLocalizedMessage(),
265                        "File Read Error", JOptionPane.ERROR_MESSAGE);
266            }
267        } else {
268            log.debug("Forget it");
269        }
270    }//GEN-LAST:event_openMenuItemActionPerformed
271 
272    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
273        newMenuItemActionPerformed(evt);
274    }//GEN-LAST:event_jButton1ActionPerformed
275 
276    private void aboutMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_aboutMenuItemActionPerformed
277        javax.swing.SwingUtilities.invokeLater(new Runnable() {
278            public void run() {
279                new AboutDialog(LauncherFrame.this, true).setVisible(true);
280            }
281        });
282    }//GEN-LAST:event_aboutMenuItemActionPerformed
283 
284    private void exitMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_exitMenuItemActionPerformed
285        System.exit(0);
286    }//GEN-LAST:event_exitMenuItemActionPerformed
287 
288    /**
289     * @param args the command line arguments
290     */
291    public static void main(String args[]) {
292        java.awt.EventQueue.invokeLater(new Runnable() {
293            public void run() {
294                new LauncherFrame().setVisible(true);
295            }
296        });
297    }
298 
299    // Variables declaration - do not modify//GEN-BEGIN:variables
300    private javax.swing.JMenuItem aboutMenuItem;
301    private javax.swing.JMenuItem contentsMenuItem;
302    private javax.swing.JMenuItem exitMenuItem;
303    private javax.swing.JMenu fileMenu;
304    private javax.swing.JMenu helpMenu;
305    private javax.swing.JButton jButton1;
306    private javax.swing.JButton jButton2;
307    private javax.swing.JPanel jPanel1;
308    private javax.swing.JMenuBar menuBar;
309    private javax.swing.JMenuItem newMenuItem;
310    private javax.swing.JMenuItem openMenuItem;
311    // End of variables declaration//GEN-END:variables
312 
313}

[all classes][net.sourceforge.pseudoq.gui]
EMMA 2.0.5312 (C) Vladimir Roubtsov