EMMA Coverage Report (generated Sat Oct 08 11:41:37 CEST 2011)
[all classes][net.sf.jomic.ui]

COVERAGE SUMMARY FOR SOURCE FILE [GoToPageDialog.java]

nameclass, %method, %block, %line, %
GoToPageDialog.java86%  (6/7)67%  (10/15)61%  (246/406)62%  (52.3/85)

COVERAGE BREAKDOWN BY CLASS AND METHOD

nameclass, %method, %block, %line, %
     
class GoToPageDialog$OkAction100% (1/1)50%  (1/2)17%  (6/35)27%  (3/11)
actionPerformed (ActionEvent): void 0%   (0/1)0%   (0/29)0%   (0/8)
GoToPageDialog$OkAction (GoToPageDialog): void 100% (1/1)100% (6/6)100% (3/3)
     
class GoToPageDialog$CancelAction100% (1/1)50%  (1/2)26%  (6/23)38%  (3/8)
actionPerformed (ActionEvent): void 0%   (0/1)0%   (0/17)0%   (0/5)
GoToPageDialog$CancelAction (GoToPageDialog): void 100% (1/1)100% (6/6)100% (3/3)
     
class GoToPageDialog100% (1/1)50%  (2/4)80%  (181/227)80%  (32.1/40)
getPage (): int 0%   (0/1)0%   (0/14)0%   (0/2)
pageSelected (): boolean 0%   (0/1)0%   (0/21)0%   (0/5)
<static initializer> 100% (1/1)80%  (12/15)80%  (0.8/1)
GoToPageDialog (JomicFrame): void 100% (1/1)95%  (169/177)98%  (31.3/32)
     
class GoToPageDialog$10%   (0/1)100% (0/0)100% (0/0)100% (0/0)
     
class GoToPageDialog$OptionValueChangedListener100% (1/1)67%  (2/3)24%  (21/89)26%  (4.2/16)
propertyChange (PropertyChangeEvent): void 0%   (0/1)0%   (0/57)0%   (0/11)
<static initializer> 100% (1/1)53%  (8/15)53%  (0.5/1)
GoToPageDialog$OptionValueChangedListener (GoToPageDialog, JDialog): void 100% (1/1)76%  (13/17)92%  (3.7/4)
     
class GoToPageDialog$PageFieldSetUp100% (1/1)100% (2/2)100% (14/14)100% (6/6)
GoToPageDialog$PageFieldSetUp (GoToPageDialog): void 100% (1/1)100% (6/6)100% (3/3)
componentShown (ComponentEvent): void 100% (1/1)100% (8/8)100% (3/3)
     
class GoToPageDialog$PageFieldSetUp$1100% (1/1)100% (2/2)100% (18/18)100% (4/4)
GoToPageDialog$PageFieldSetUp$1 (GoToPageDialog$PageFieldSetUp): void 100% (1/1)100% (6/6)100% (1/1)
run (): void 100% (1/1)100% (12/12)100% (3/3)

1// Jomic - a viewer for comic book archives.
2// Copyright (C) 2004-2011 Thomas Aglassinger
3//
4// This program is free software: you can redistribute it and/or modify
5// it under the terms of the GNU General Public License as published by
6// the Free Software Foundation, either version 3 of the License, or
7// (at your option) any later version.
8//
9// This program is distributed in the hope that it will be useful,
10// but WITHOUT ANY WARRANTY; without even the implied warranty of
11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12// GNU General Public License for more details.
13//
14// You should have received a copy of the GNU General Public License
15// along with this program.  If not, see <http://www.gnu.org/licenses/>.
16package net.sf.jomic.ui;
17 
18import java.awt.Toolkit;
19import java.awt.event.ActionEvent;
20import java.awt.event.ComponentAdapter;
21import java.awt.event.ComponentEvent;
22import java.awt.event.KeyEvent;
23import java.beans.PropertyChangeEvent;
24import java.beans.PropertyChangeListener;
25 
26import javax.swing.AbstractAction;
27import javax.swing.JDialog;
28import javax.swing.JFormattedTextField;
29import javax.swing.JOptionPane;
30import javax.swing.JSpinner;
31import javax.swing.KeyStroke;
32import javax.swing.SpinnerNumberModel;
33import javax.swing.SwingUtilities;
34 
35import net.sf.jomic.comic.ComicView;
36import net.sf.jomic.common.JomicTools;
37import net.sf.jomic.common.PropertyConstants;
38import net.sf.jomic.common.Settings;
39import net.sf.jomic.tools.LocaleTools;
40 
41/**
42 *  Dialog to ask for a page to go.
43 *
44 * @author    Thomas Aglassinger
45 */
46class GoToPageDialog extends JDialog
47{
48    private static final String COMMAND_CANCEL = "cancel";
49    private static final String COMMAND_OK = "ok";
50 
51    private JomicTools jomicTools;
52    private LocaleTools localeTools;
53    private JOptionPane optionPane;
54    private JFormattedTextField pageField;
55    private JSpinner pageSpinner;
56    private SpinnerNumberModel pageSpinnerModel;
57    private Settings settings;
58 
59    public GoToPageDialog(JomicFrame frame) {
60        super(frame);
61        assert frame != null;
62 
63        ComicView comicView = frame.getComicView();
64 
65        assert comicView != null;
66 
67        jomicTools = JomicTools.instance();
68        localeTools = LocaleTools.instance();
69        settings = Settings.instance();
70 
71        int currentPage = comicView.getPage() + 1;
72        int maximumPage = comicView.getPageCount();
73        Integer maximumPageAsInteger = new Integer(maximumPage);
74        String title = localeTools.getMessage("dialogs.goToPage.title");
75        String pageLabel = localeTools.getMessage("dialogs.goToPage.pageLabel", maximumPageAsInteger);
76 
77        pageSpinnerModel = new SpinnerNumberModel(currentPage, 1, maximumPage, 1);
78        pageSpinner = new JSpinner(pageSpinnerModel);
79 
80        // Add keyboard support.
81        KeyStroke enterKeyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0);
82        KeyStroke escapeKeyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0);
83        JSpinner.DefaultEditor spinnerEditor = (JSpinner.DefaultEditor) pageSpinner.getEditor();
84 
85        pageField = spinnerEditor.getTextField();
86        pageField.getInputMap().put(escapeKeyStroke, COMMAND_CANCEL);
87        pageField.getActionMap().put(COMMAND_CANCEL, new CancelAction());
88        pageField.getInputMap().put(enterKeyStroke, COMMAND_OK);
89        pageField.getActionMap().put(COMMAND_OK, new OkAction());
90 
91        setTitle(title);
92        optionPane = new JOptionPane(new Object[]{pageLabel, pageSpinner},
93                JOptionPane.QUESTION_MESSAGE,
94                JOptionPane.OK_CANCEL_OPTION,
95                null);
96        optionPane.addPropertyChangeListener(JOptionPane.VALUE_PROPERTY, new OptionValueChangedListener(this));
97        setContentPane(optionPane);
98        setModal(true);
99        setResizable(false);
100        pack();
101        settings.applyComponentAreaProperty(PropertyConstants.GO_TO_PAGE_DIALOG_WINDOW, this);
102        addComponentListener(new PageFieldSetUp());
103    }
104 
105    /**
106     *  Get the number of the page to go.
107     */
108    public int getPage() {
109        assert pageSelected();
110 
111        return pageSpinnerModel.getNumber().intValue();
112    }
113 
114    /**
115     *  <code>True</code> if the user entered a page number and clicked "Ok".
116     */
117    public boolean pageSelected() {
118        boolean result = false;
119        Object value = optionPane.getValue();
120 
121        if ((value != null) && (value != JOptionPane.UNINITIALIZED_VALUE)) {
122            result = ((Integer) value).intValue() == JOptionPane.OK_OPTION;
123        }
124        return result;
125    }
126 
127    /**
128     *  Action to click "Cancel".
129     */
130    private final class CancelAction extends AbstractAction
131    {
132        private CancelAction() {
133            super();
134        }
135 
136        public void actionPerformed(ActionEvent event) {
137            try {
138                optionPane.setValue(new Integer(JOptionPane.CANCEL_OPTION));
139            } catch (Throwable error) {
140                jomicTools.showError(event, error);
141            }
142        }
143    }
144 
145    /**
146     *  Action to validate page number and click "Ok" or beep.
147     */
148    private final class OkAction extends AbstractAction
149    {
150        private OkAction() {
151            super();
152        }
153 
154        public void actionPerformed(ActionEvent event) {
155            try {
156                if (pageField.isEditValid()) {
157                    pageField.commitEdit();
158                    optionPane.setValue(new Integer(JOptionPane.OK_OPTION));
159                } else {
160                    Toolkit.getDefaultToolkit().beep();
161                }
162            } catch (Throwable error) {
163                jomicTools.showError(event, error);
164            }
165        }
166    }
167 
168    /**
169     *  PropertyChangeListener to close a GoToPageDialog when "Ok" or "Cancel" is clicked.
170     *
171     * @author    Thomas Aglassinger
172     */
173    private final class OptionValueChangedListener implements PropertyChangeListener
174    {
175        private JDialog dialog;
176 
177        private OptionValueChangedListener(JDialog newDialog) {
178            assert newDialog != null;
179            dialog = newDialog;
180        }
181 
182        public void propertyChange(PropertyChangeEvent event) {
183            try {
184                assert event != null;
185                assert event.getSource() == optionPane;
186                String propertyValue = event.getPropertyName();
187 
188                assert propertyValue.equals(JOptionPane.VALUE_PROPERTY);
189 
190                if (dialog.isVisible()) {
191                    settings.setComponentAreaProperty(PropertyConstants.GO_TO_PAGE_DIALOG_WINDOW, dialog);
192                    dialog.setVisible(false);
193                }
194            } catch (Throwable error) {
195                jomicTools.showError(event, error);
196            }
197        }
198    }
199 
200    /**
201     *  ComponentListerner to focus in <code>pageField</code> and select whole text in it so the
202     *  user can simply start typing to enter a new page number.
203     *
204     * @author    Thomas Aglassinger
205     */
206    private final class PageFieldSetUp extends ComponentAdapter
207    {
208        private PageFieldSetUp() {
209            super();
210        }
211 
212        public void componentShown(ComponentEvent componentEvent) {
213            Runnable setUpRunner =
214                new Runnable()
215                {
216                    public void run() {
217                        pageField.requestFocusInWindow();
218                        pageField.selectAll();
219                    }
220                };
221 
222            SwingUtilities.invokeLater(setUpRunner);
223        }
224    }
225}

[all classes][net.sf.jomic.ui]
EMMA 2.0.4217 (C) Vladimir Roubtsov