Source Code Cross Referenced for SpinnerModelEditor.java in  » IDE-Netbeans » form » org » netbeans » modules » form » editors2 » Java Source Code / Java DocumentationJava Source Code and Java Documentation

Java Source Code / Java Documentation
1. 6.0 JDK Core
2. 6.0 JDK Modules
3. 6.0 JDK Modules com.sun
4. 6.0 JDK Modules com.sun.java
5. 6.0 JDK Modules sun
6. 6.0 JDK Platform
7. Ajax
8. Apache Harmony Java SE
9. Aspect oriented
10. Authentication Authorization
11. Blogger System
12. Build
13. Byte Code
14. Cache
15. Chart
16. Chat
17. Code Analyzer
18. Collaboration
19. Content Management System
20. Database Client
21. Database DBMS
22. Database JDBC Connection Pool
23. Database ORM
24. Development
25. EJB Server geronimo
26. EJB Server GlassFish
27. EJB Server JBoss 4.2.1
28. EJB Server resin 3.1.5
29. ERP CRM Financial
30. ESB
31. Forum
32. GIS
33. Graphic Library
34. Groupware
35. HTML Parser
36. IDE
37. IDE Eclipse
38. IDE Netbeans
39. Installer
40. Internationalization Localization
41. Inversion of Control
42. Issue Tracking
43. J2EE
44. JBoss
45. JMS
46. JMX
47. Library
48. Mail Clients
49. Net
50. Parser
51. PDF
52. Portal
53. Profiler
54. Project Management
55. Report
56. RSS RDF
57. Rule Engine
58. Science
59. Scripting
60. Search Engine
61. Security
62. Sevlet Container
63. Source Control
64. Swing Library
65. Template Engine
66. Test Coverage
67. Testing
68. UML
69. Web Crawler
70. Web Framework
71. Web Mail
72. Web Server
73. Web Services
74. Web Services apache cxf 2.0.1
75. Web Services AXIS2
76. Wiki Engine
77. Workflow Engines
78. XML
79. XML UI
Java
Java Tutorial
Java Open Source
Jar File Download
Java Articles
Java Products
Java by API
Photoshop Tutorials
Maya Tutorials
Flash Tutorials
3ds-Max Tutorials
Illustrator Tutorials
GIMP Tutorials
C# / C Sharp
C# / CSharp Tutorial
C# / CSharp Open Source
ASP.Net
ASP.NET Tutorial
JavaScript DHTML
JavaScript Tutorial
JavaScript Reference
HTML / CSS
HTML CSS Reference
C / ANSI-C
C Tutorial
C++
C++ Tutorial
Ruby
PHP
Python
Python Tutorial
Python Open Source
SQL Server / T-SQL
SQL Server / T-SQL Tutorial
Oracle PL / SQL
Oracle PL/SQL Tutorial
PostgreSQL
SQL / MySQL
MySQL Tutorial
VB.Net
VB.Net Tutorial
Flash / Flex / ActionScript
VBA / Excel / Access / Word
XML
XML Tutorial
Microsoft Office PowerPoint 2007 Tutorial
Microsoft Office Excel 2007 Tutorial
Microsoft Office Word 2007 Tutorial
Java Source Code / Java Documentation » IDE Netbeans » form » org.netbeans.modules.form.editors2 
Source Cross Referenced  Class Diagram Java Document (Java Doc) 


0001:        /*
0002:         * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
0003:         *
0004:         * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
0005:         *
0006:         * The contents of this file are subject to the terms of either the GNU
0007:         * General Public License Version 2 only ("GPL") or the Common
0008:         * Development and Distribution License("CDDL") (collectively, the
0009:         * "License"). You may not use this file except in compliance with the
0010:         * License. You can obtain a copy of the License at
0011:         * http://www.netbeans.org/cddl-gplv2.html
0012:         * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
0013:         * specific language governing permissions and limitations under the
0014:         * License.  When distributing the software, include this License Header
0015:         * Notice in each file and include the License file at
0016:         * nbbuild/licenses/CDDL-GPL-2-CP.  Sun designates this
0017:         * particular file as subject to the "Classpath" exception as provided
0018:         * by Sun in the GPL Version 2 section of the License file that
0019:         * accompanied this code. If applicable, add the following below the
0020:         * License Header, with the fields enclosed by brackets [] replaced by
0021:         * your own identifying information:
0022:         * "Portions Copyrighted [year] [name of copyright owner]"
0023:         *
0024:         * Contributor(s):
0025:         *
0026:         * The Original Software is NetBeans. The Initial Developer of the Original
0027:         * Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun
0028:         * Microsystems, Inc. All Rights Reserved.
0029:         *
0030:         * If you wish your version of this file to be governed by only the CDDL
0031:         * or only the GPL Version 2, indicate your decision by adding
0032:         * "[Contributor] elects to include this software in this distribution
0033:         * under the [CDDL or GPL Version 2] license." If you do not indicate a
0034:         * single choice of license, a recipient has the option to distribute
0035:         * your version of this file under either the CDDL, the GPL Version 2 or
0036:         * to extend the choice of license to its licensees as provided above.
0037:         * However, if you add GPL Version 2 code and therefore, elected the GPL
0038:         * Version 2 license, then the option applies only if the new code is
0039:         * made subject to such option by the copyright holder.
0040:         */
0041:
0042:        package org.netbeans.modules.form.editors2;
0043:
0044:        import java.awt.CardLayout;
0045:        import java.awt.Component;
0046:        import java.beans.PropertyEditorSupport;
0047:        import java.io.IOException;
0048:        import java.text.MessageFormat;
0049:        import java.util.*;
0050:        import javax.swing.*;
0051:        import org.netbeans.modules.form.*;
0052:        import org.openide.explorer.propertysheet.editors.XMLPropertyEditor;
0053:        import org.openide.util.NbBundle;
0054:        import org.w3c.dom.Document;
0055:        import org.w3c.dom.Node;
0056:
0057:        /**
0058:         * Property editor for <code>SpinnerModel</code>.
0059:         *
0060:         * @author Jan Stola
0061:         */
0062:        public class SpinnerModelEditor extends PropertyEditorSupport implements 
0063:                XMLPropertyEditor, NamedPropertyEditor, FormAwareEditor {
0064:
0065:            /** Determines whether the components of custom editor have been created. */
0066:            private boolean initialized;
0067:            /** Determines whether custom property editor should fire value changes. */
0068:            private boolean fireChanges;
0069:            /** Property being edited. */
0070:            private FormProperty property;
0071:
0072:            /**
0073:             * Determines whether this property editor supports custom editing. 
0074:             * 
0075:             * @return <code>true</code>.
0076:             */
0077:            @Override
0078:            public boolean supportsCustomEditor() {
0079:                return true;
0080:            }
0081:
0082:            /**
0083:             * Returns custom editor.
0084:             * 
0085:             * @return custom editor.
0086:             */
0087:            @Override
0088:            public Component getCustomEditor() {
0089:                fireChanges = false;
0090:                if (!initialized) {
0091:                    initGUI();
0092:                }
0093:                Object value = getValue();
0094:                if (value instanceof  FormSpinnerModel) {
0095:                    updateUI((FormSpinnerModel) value);
0096:                } else {
0097:                    // default
0098:                    modelTypeCombo.setSelectedIndex(0);
0099:                }
0100:                fireChanges = true;
0101:                return customizerPanel;
0102:            }
0103:
0104:            /**
0105:             * Initializes components of custom editor. 
0106:             */
0107:            private void initGUI() {
0108:                fireChanges = false;
0109:                initComponents();
0110:                initModelTypeCombo();
0111:                initCalendarFieldCombo();
0112:                initNumberTypeCombo();
0113:                initListItems();
0114:                initialDateSpinner.setModel(new SpinnerDateModel());
0115:                initialDateSpinner.setValue(new Date());
0116:                minimumDateSpinner.setModel(new SpinnerDateModel());
0117:                maximumDateSpinner.setModel(new SpinnerDateModel());
0118:                stepSizeSpinner.setValue(Integer.valueOf(1));
0119:                initialListLabel.setVisible(false);
0120:                initialListCombo.setVisible(false);
0121:                fireChanges = true;
0122:                initialized = true;
0123:            }
0124:
0125:            /**
0126:             * Initializes list items text area. 
0127:             */
0128:            private void initListItems() {
0129:                String format = NbBundle.getMessage(getClass(),
0130:                        "SpinnerModelEditor_Item"); // NOI18N
0131:                String[] items = new String[4];
0132:                for (int i = 0; i < items.length; i++) {
0133:                    items[i] = MessageFormat.format(format, i);
0134:                }
0135:                StringBuilder sb = new StringBuilder();
0136:                DefaultComboBoxModel comboModel = new DefaultComboBoxModel();
0137:                for (Object item : items) {
0138:                    sb.append(item).append('\n');
0139:                    comboModel.addElement(item);
0140:                }
0141:                listItemsArea.setText(sb.toString());
0142:                initialListCombo.setModel(comboModel);
0143:                initialListCombo.setSelectedIndex(0);
0144:            }
0145:
0146:            /**
0147:             * Initializes model type combo box. 
0148:             */
0149:            private void initModelTypeCombo() {
0150:                DefaultComboBoxModel model = new DefaultComboBoxModel();
0151:                ResourceBundle bundle = NbBundle.getBundle(getClass());
0152:                model
0153:                        .addElement(bundle
0154:                                .getString("SpinnerModelEditor_Default")); // NOI18N
0155:                model.addElement(bundle.getString("SpinnerModelEditor_Date")); // NOI18N
0156:                model.addElement(bundle.getString("SpinnerModelEditor_List")); // NOI18N
0157:                model.addElement(bundle.getString("SpinnerModelEditor_Number")); // NOI18N
0158:                modelTypeCombo.setModel(model);
0159:            }
0160:
0161:            /**
0162:             * Initializes calendar field combo box. 
0163:             */
0164:            private void initCalendarFieldCombo() {
0165:                DefaultComboBoxModel model = new DefaultComboBoxModel();
0166:                ResourceBundle bundle = NbBundle.getBundle(getClass());
0167:                model.addElement(bundle.getString("SpinnerModelEditor_Era")); // NOI18N
0168:                model.addElement(bundle.getString("SpinnerModelEditor_Year")); // NOI18N
0169:                model.addElement(bundle.getString("SpinnerModelEditor_Month")); // NOI18N
0170:                model.addElement(bundle
0171:                        .getString("SpinnerModelEditor_WeekOfYear")); // NOI18N
0172:                model.addElement(bundle
0173:                        .getString("SpinnerModelEditor_WeekOfMonth")); // NOI18N
0174:                model.addElement(bundle
0175:                        .getString("SpinnerModelEditor_DayOfMonth")); // NOI18N
0176:                model.addElement(bundle
0177:                        .getString("SpinnerModelEditor_DayOfYear")); // NOI18N
0178:                model.addElement(bundle
0179:                        .getString("SpinnerModelEditor_DayOfWeek")); // NOI18N
0180:                model.addElement(bundle
0181:                        .getString("SpinnerModelEditor_DayOfWeekInMonth")); // NOI18N
0182:                model.addElement(bundle.getString("SpinnerModelEditor_AMPM")); // NOI18N
0183:                model.addElement(bundle.getString("SpinnerModelEditor_Hour")); // NOI18N
0184:                model.addElement(bundle
0185:                        .getString("SpinnerModelEditor_HourOfDay")); // NOI18N
0186:                model.addElement(bundle.getString("SpinnerModelEditor_Minute")); // NOI18N
0187:                model.addElement(bundle.getString("SpinnerModelEditor_Second")); // NOI18N
0188:                model.addElement(bundle
0189:                        .getString("SpinnerModelEditor_Millisecond")); // NOI18N
0190:                calendarFieldCombo.setModel(model);
0191:                calendarFieldCombo.setSelectedIndex(5); // DAY_OF_MONTH
0192:            }
0193:
0194:            /**
0195:             * Initializes number type combo box. 
0196:             */
0197:            private void initNumberTypeCombo() {
0198:                DefaultComboBoxModel model = new DefaultComboBoxModel();
0199:                ResourceBundle bundle = NbBundle.getBundle(getClass());
0200:                model.addElement(bundle.getString("SpinnerModelEditor_Byte")); // NOI18N
0201:                model.addElement(bundle.getString("SpinnerModelEditor_Double")); // NOI18N
0202:                model.addElement(bundle.getString("SpinnerModelEditor_Float")); // NOI18N
0203:                model
0204:                        .addElement(bundle
0205:                                .getString("SpinnerModelEditor_Integer")); // NOI18N
0206:                model.addElement(bundle.getString("SpinnerModelEditor_Long")); // NOI18N
0207:                model.addElement(bundle.getString("SpinnerModelEditor_Short")); // NOI18N
0208:                numberTypeCombo.setModel(model);
0209:                numberTypeCombo.setSelectedIndex(3); // Integer
0210:            }
0211:
0212:            /**
0213:             * Updates UI of custom editor according to given <code>model</code>.
0214:             * 
0215:             * @param model form wrapper of spinner model.
0216:             */
0217:            private void updateUI(FormSpinnerModel model) {
0218:                SpinnerModel spinnerModel = model.getModel();
0219:                if (spinnerModel instanceof  SpinnerDateModel) {
0220:                    modelTypeCombo.setSelectedIndex(1);
0221:                    updateDateUI(model);
0222:                } else if (spinnerModel instanceof  SpinnerListModel) {
0223:                    modelTypeCombo.setSelectedIndex(2);
0224:                    updateListUI(model);
0225:                } else if (spinnerModel instanceof  SpinnerNumberModel) {
0226:                    modelTypeCombo.setSelectedIndex(3);
0227:                    updateNumberUI(model);
0228:                } else {
0229:                    assert false;
0230:                }
0231:                updateVisibilityOfModelProperties();
0232:            }
0233:
0234:            /**
0235:             * Updates date section of UI of custom editor according to given <code>model</code>.
0236:             * 
0237:             * @param model form wrapper of spinner model.
0238:             */
0239:            private void updateDateUI(FormSpinnerModel model) {
0240:                Date now = new Date();
0241:                SpinnerDateModel dateModel = (SpinnerDateModel) model
0242:                        .getModel();
0243:                initialNowCheckBox.setSelected(model.isInitialNow());
0244:                initialDateSpinner.setValue(model.isInitialNow() ? now : model
0245:                        .getInitialValue());
0246:                initialDateSpinner.setEnabled(!model.isInitialNow());
0247:                // minimum
0248:                Comparable minimum = dateModel.getStart();
0249:                minimumDateCheckBox.setSelected(minimum != null);
0250:                minimumNowCheckBox.setEnabled(minimum != null);
0251:                minimumNowCheckBox.setSelected(model.isMinimumNow());
0252:                minimumDateSpinner.setEnabled(minimum != null
0253:                        && !model.isMinimumNow());
0254:                minimum = model.isMinimumNow() ? now : minimum;
0255:                minimumDateSpinner.setValue(minimum == null ? now : minimum);
0256:                // maximum
0257:                Comparable maximum = dateModel.getEnd();
0258:                maximumDateCheckBox.setSelected(maximum != null);
0259:                maximumNowCheckBox.setEnabled(maximum != null);
0260:                maximumNowCheckBox.setSelected(model.isMaximumNow());
0261:                maximumDateSpinner.setEnabled(maximum != null
0262:                        && !model.isMaximumNow());
0263:                maximum = model.isMaximumNow() ? now : maximum;
0264:                maximumDateSpinner.setValue(maximum == null ? now : maximum);
0265:                // calendar field
0266:                int index = 0;
0267:                switch (dateModel.getCalendarField()) {
0268:                case Calendar.ERA:
0269:                    index = 0;
0270:                    break;
0271:                case Calendar.YEAR:
0272:                    index = 1;
0273:                    break;
0274:                case Calendar.MONTH:
0275:                    index = 2;
0276:                    break;
0277:                case Calendar.WEEK_OF_YEAR:
0278:                    index = 3;
0279:                    break;
0280:                case Calendar.WEEK_OF_MONTH:
0281:                    index = 4;
0282:                    break;
0283:                case Calendar.DAY_OF_MONTH:
0284:                    index = 5;
0285:                    break;
0286:                case Calendar.DAY_OF_YEAR:
0287:                    index = 6;
0288:                    break;
0289:                case Calendar.DAY_OF_WEEK:
0290:                    index = 7;
0291:                    break;
0292:                case Calendar.DAY_OF_WEEK_IN_MONTH:
0293:                    index = 8;
0294:                    break;
0295:                case Calendar.AM_PM:
0296:                    index = 9;
0297:                    break;
0298:                case Calendar.HOUR:
0299:                    index = 10;
0300:                    break;
0301:                case Calendar.HOUR_OF_DAY:
0302:                    index = 11;
0303:                    break;
0304:                case Calendar.MINUTE:
0305:                    index = 12;
0306:                    break;
0307:                case Calendar.SECOND:
0308:                    index = 13;
0309:                    break;
0310:                case Calendar.MILLISECOND:
0311:                    index = 14;
0312:                    break;
0313:                }
0314:                calendarFieldCombo.setSelectedIndex(index);
0315:            }
0316:
0317:            /**
0318:             * Updates list section of UI of custom editor according to given <code>model</code>.
0319:             * 
0320:             * @param model form wrapper of spinner model.
0321:             */
0322:            private void updateListUI(FormSpinnerModel model) {
0323:                SpinnerListModel listModel = (SpinnerListModel) model
0324:                        .getModel();
0325:                List items = listModel.getList();
0326:                StringBuilder sb = new StringBuilder();
0327:                DefaultComboBoxModel comboModel = new DefaultComboBoxModel();
0328:                for (Object item : items) {
0329:                    sb.append(item).append('\n');
0330:                    comboModel.addElement(item);
0331:                }
0332:                listItemsArea.setText(sb.toString());
0333:                initialListCombo.setModel(comboModel);
0334:                initialListCombo.setSelectedItem(model.getInitialValue());
0335:            }
0336:
0337:            /**
0338:             * Updates number section of UI of custom editor according to given <code>model</code>.
0339:             * 
0340:             * @param model form wrapper of spinner model.
0341:             */
0342:            private void updateNumberUI(FormSpinnerModel model) {
0343:                SpinnerNumberModel numberModel = (SpinnerNumberModel) model
0344:                        .getModel();
0345:                Class clazz = model.getInitialValue().getClass();
0346:                int typeIndex = 0;
0347:                if (clazz == Byte.class) {
0348:                    typeIndex = 0;
0349:                } else if (clazz == Double.class) {
0350:                    typeIndex = 1;
0351:                } else if (clazz == Float.class) {
0352:                    typeIndex = 2;
0353:                } else if (clazz == Integer.class) {
0354:                    typeIndex = 3;
0355:                } else if (clazz == Long.class) {
0356:                    typeIndex = 4;
0357:                } else if (clazz == Short.class) {
0358:                    typeIndex = 5;
0359:                } else {
0360:                    assert false;
0361:                }
0362:                numberTypeCombo.setSelectedIndex(typeIndex);
0363:                minimumNumberSpinner.setValue(Integer.valueOf(0));
0364:                maximumNumberSpinner.setValue(Integer.valueOf(0));
0365:                updateNumberEditors();
0366:                initialNumberSpinner.setValue(model.getInitialValue());
0367:                Comparable minimum = numberModel.getMinimum();
0368:                minimumNumberCheckBox.setSelected(minimum != null);
0369:                minimumNumberSpinner.setEnabled(minimum != null);
0370:                if (minimum != null) {
0371:                    minimumNumberSpinner.setValue(minimum);
0372:                }
0373:                Comparable maximum = numberModel.getMaximum();
0374:                maximumNumberCheckBox.setSelected(maximum != null);
0375:                maximumNumberSpinner.setEnabled(maximum != null);
0376:                if (maximum != null) {
0377:                    maximumNumberSpinner.setValue(maximum);
0378:                }
0379:                stepSizeSpinner.setValue(numberModel.getStepSize());
0380:            }
0381:
0382:            /**
0383:             * Updates value of the property editor according to UI.
0384:             */
0385:            private void updateFromUI() {
0386:                if (!fireChanges)
0387:                    return;
0388:                Object value = valueFromUI();
0389:                if (value == null) {
0390:                    value = property.getDefaultValue();
0391:                }
0392:                setValue(value);
0393:            }
0394:
0395:            /**
0396:             * Returns spinner model represented by custom editor. 
0397:             * 
0398:             * @return spinner model represented by custom editor.
0399:             */
0400:            private FormSpinnerModel valueFromUI() {
0401:                FormSpinnerModel value = null;
0402:                int modelType = modelTypeCombo.getSelectedIndex();
0403:                if (modelType == 0) {
0404:                    // default
0405:                    value = null;
0406:                } else if (modelType == 1) {
0407:                    // date
0408:                    value = dateFromUI();
0409:                } else if (modelType == 2) {
0410:                    // list
0411:                    value = listFromUI();
0412:                } else if (modelType == 3) {
0413:                    // number
0414:                    value = numberFromUI();
0415:                } else {
0416:                    assert false;
0417:                }
0418:                return value;
0419:            }
0420:
0421:            /**
0422:             * Returns date spinner model represented by custom editor.
0423:             * 
0424:             * @return date spinner model represented by custom editor.
0425:             */
0426:            private FormSpinnerModel dateFromUI() {
0427:                Date now = new Date();
0428:                boolean minimumNow = false;
0429:                Date minimum = null;
0430:                if (minimumDateCheckBox.isSelected()) {
0431:                    if (minimumNowCheckBox.isSelected()) {
0432:                        minimumNow = true;
0433:                        minimum = now;
0434:                    } else {
0435:                        minimum = (Date) minimumDateSpinner.getValue();
0436:                    }
0437:                }
0438:                boolean initialNow = false;
0439:                Date initial;
0440:                if (initialNowCheckBox.isSelected()) {
0441:                    initialNow = true;
0442:                    initial = now;
0443:                } else {
0444:                    initial = (Date) initialDateSpinner.getValue();
0445:                    if (minimumNow
0446:                            && (initial.getTime() - minimum.getTime() < 0)) {
0447:                        initial = minimum;
0448:                    }
0449:                }
0450:                boolean maximumNow = false;
0451:                Date maximum = null;
0452:                if (maximumDateCheckBox.isSelected()) {
0453:                    if (maximumNowCheckBox.isSelected()) {
0454:                        maximumNow = true;
0455:                        maximum = now;
0456:                    } else {
0457:                        maximum = (Date) maximumDateSpinner.getValue();
0458:                        if (initialNow
0459:                                && (maximum.getTime() - initial.getTime() < 0)) {
0460:                            maximum = initial;
0461:                        }
0462:                        if (minimumNow
0463:                                && (maximum.getTime() - minimum.getTime() < 0)) {
0464:                            maximum = minimum;
0465:                        }
0466:                    }
0467:                }
0468:                int field = 0;
0469:                switch (calendarFieldCombo.getSelectedIndex()) {
0470:                case 0:
0471:                    field = Calendar.ERA;
0472:                    break;
0473:                case 1:
0474:                    field = Calendar.YEAR;
0475:                    break;
0476:                case 2:
0477:                    field = Calendar.MONTH;
0478:                    break;
0479:                case 3:
0480:                    field = Calendar.WEEK_OF_YEAR;
0481:                    break;
0482:                case 4:
0483:                    field = Calendar.WEEK_OF_MONTH;
0484:                    break;
0485:                case 5:
0486:                    field = Calendar.DAY_OF_MONTH;
0487:                    break;
0488:                case 6:
0489:                    field = Calendar.DAY_OF_YEAR;
0490:                    break;
0491:                case 7:
0492:                    field = Calendar.DAY_OF_WEEK;
0493:                    break;
0494:                case 8:
0495:                    field = Calendar.DAY_OF_WEEK_IN_MONTH;
0496:                    break;
0497:                case 9:
0498:                    field = Calendar.AM_PM;
0499:                    break;
0500:                case 10:
0501:                    field = Calendar.HOUR;
0502:                    break;
0503:                case 11:
0504:                    field = Calendar.HOUR_OF_DAY;
0505:                    break;
0506:                case 12:
0507:                    field = Calendar.MINUTE;
0508:                    break;
0509:                case 13:
0510:                    field = Calendar.SECOND;
0511:                    break;
0512:                case 14:
0513:                    field = Calendar.MILLISECOND;
0514:                    break;
0515:                default:
0516:                    assert false;
0517:                }
0518:                SpinnerDateModel model = new SpinnerDateModel(initial, minimum,
0519:                        maximum, field);
0520:                return new FormSpinnerModel(model, initial, initialNow,
0521:                        minimumNow, maximumNow);
0522:            }
0523:
0524:            /**
0525:             * Returns list spinner model represented by custom editor.
0526:             * 
0527:             * @return list spinner model represented by custom editor.
0528:             */
0529:            private FormSpinnerModel listFromUI() {
0530:                String initial = (String) initialListCombo.getSelectedItem();
0531:                List<String> listItems = listItemsFromUI();
0532:                SpinnerListModel model = new SpinnerListModel(listItems);
0533:                return new FormSpinnerModel(model, initial);
0534:            }
0535:
0536:            /**
0537:             * Returns spinner list model items represented by custom editor.
0538:             * 
0539:             * @return spinner list model items represented by custom editor.
0540:             */
0541:            private List<String> listItemsFromUI() {
0542:                String itemsText = listItemsArea.getText();
0543:                StringTokenizer st = new StringTokenizer(itemsText, "\n"); // NOI18N
0544:                List<String> items = new LinkedList<String>();
0545:                while (st.hasMoreTokens()) {
0546:                    items.add(st.nextToken());
0547:                }
0548:                if (items.size() == 0) {
0549:                    items.add(""); // NOI18N
0550:                }
0551:                return items;
0552:            }
0553:
0554:            /**
0555:             * Returns selected number type. 
0556:             * 
0557:             * @return selected number type.
0558:             */
0559:            private Class selectedNumberType() {
0560:                Class clazz = null;
0561:                switch (numberTypeCombo.getSelectedIndex()) {
0562:                case 0:
0563:                    clazz = Byte.class;
0564:                    break;
0565:                case 1:
0566:                    clazz = Double.class;
0567:                    break;
0568:                case 2:
0569:                    clazz = Float.class;
0570:                    break;
0571:                case 3:
0572:                    clazz = Integer.class;
0573:                    break;
0574:                case 4:
0575:                    clazz = Long.class;
0576:                    break;
0577:                case 5:
0578:                    clazz = Short.class;
0579:                    break;
0580:                default:
0581:                    assert false;
0582:                }
0583:                return clazz;
0584:            }
0585:
0586:            /**
0587:             * Returns number spinner model represented by custom editor.
0588:             * 
0589:             * @return number spinner model represented by custom editor.
0590:             */
0591:            private FormSpinnerModel numberFromUI() {
0592:                Number initial = (Number) initialNumberSpinner.getValue();
0593:                Number minimum = null;
0594:                if (minimumNumberCheckBox.isSelected()) {
0595:                    minimum = (Number) minimumNumberSpinner.getValue();
0596:                }
0597:                Number maximum = null;
0598:                if (maximumNumberCheckBox.isSelected()) {
0599:                    maximum = (Number) maximumNumberSpinner.getValue();
0600:                }
0601:                Number stepSize = (Number) stepSizeSpinner.getValue();
0602:                Number[] n = cast(selectedNumberType(), initial, minimum,
0603:                        maximum, stepSize);
0604:                SpinnerNumberModel model = new SpinnerNumberModel(n[0],
0605:                        (Comparable) n[1], (Comparable) n[2], n[3]);
0606:                return new FormSpinnerModel(model, n[0]);
0607:            }
0608:
0609:            /**
0610:             * Casts given numbers to the specified type.
0611:             * 
0612:             * @param clazz class to cast to.
0613:             * @param number numbers to cast.
0614:             * @return numbers casted to the specified type.
0615:             */
0616:            private static Number[] cast(Class clazz, Number... number) {
0617:                Number[] result = new Number[number.length];
0618:                for (int i = 0; i < number.length; i++) {
0619:                    Number n = number[i];
0620:                    if (n == null) {
0621:                        result[i] = null;
0622:                    } else {
0623:                        if (Integer.class == clazz) {
0624:                            result[i] = Integer.valueOf(n.intValue());
0625:                        } else if (Long.class == clazz) {
0626:                            result[i] = Long.valueOf(n.longValue());
0627:                        } else if (Float.class == clazz) {
0628:                            result[i] = Float.valueOf(n.floatValue());
0629:                        } else if (Double.class == clazz) {
0630:                            result[i] = Double.valueOf(n.doubleValue());
0631:                        } else if (Byte.class == clazz) {
0632:                            result[i] = Byte.valueOf(n.byteValue());
0633:                        } else if (Short.class == clazz) {
0634:                            result[i] = Short.valueOf(n.shortValue());
0635:                        } else {
0636:                            assert false;
0637:                        }
0638:                    }
0639:                }
0640:                return result;
0641:            }
0642:
0643:            /** This method is called from within the constructor to
0644:             * initialize the form.
0645:             * WARNING: Do NOT modify this code. The content of this method is
0646:             * always regenerated by the Form Editor.
0647:             */
0648:            // <editor-fold defaultstate="collapsed" desc=" Generated Code ">//GEN-BEGIN:initComponents
0649:            private void initComponents() {
0650:
0651:                customizerPanel = new javax.swing.JPanel();
0652:                modelTypeLabel = new javax.swing.JLabel();
0653:                modelTypeCombo = new javax.swing.JComboBox();
0654:                modelPropertiesLabel = new javax.swing.JLabel();
0655:                separator = new javax.swing.JSeparator();
0656:                modelTypePanel = new javax.swing.JPanel();
0657:                datePanel = new javax.swing.JPanel();
0658:                initialDateLabel = new javax.swing.JLabel();
0659:                initialDateSpinner = new javax.swing.JSpinner();
0660:                initialNowCheckBox = new javax.swing.JCheckBox();
0661:                minimumDateCheckBox = new javax.swing.JCheckBox();
0662:                minimumDateSpinner = new javax.swing.JSpinner();
0663:                minimumNowCheckBox = new javax.swing.JCheckBox();
0664:                maximumDateCheckBox = new javax.swing.JCheckBox();
0665:                maximumDateSpinner = new javax.swing.JSpinner();
0666:                maximumNowCheckBox = new javax.swing.JCheckBox();
0667:                calendarFieldLabel = new javax.swing.JLabel();
0668:                calendarFieldCombo = new javax.swing.JComboBox();
0669:                listPanel = new javax.swing.JPanel();
0670:                listItemsLabel = new javax.swing.JLabel();
0671:                scrollPane = new javax.swing.JScrollPane();
0672:                listItemsArea = new javax.swing.JTextArea();
0673:                initialListLabel = new javax.swing.JLabel();
0674:                initialListCombo = new javax.swing.JComboBox();
0675:                numberPanel = new javax.swing.JPanel();
0676:                numberTypeLabel = new javax.swing.JLabel();
0677:                numberTypeCombo = new javax.swing.JComboBox();
0678:                initialNumberLabel = new javax.swing.JLabel();
0679:                initialNumberSpinner = new javax.swing.JSpinner();
0680:                minimumNumberCheckBox = new javax.swing.JCheckBox();
0681:                minimumNumberSpinner = new javax.swing.JSpinner();
0682:                maximumNumberCheckBox = new javax.swing.JCheckBox();
0683:                maximumNumberSpinner = new javax.swing.JSpinner();
0684:                stepSizeLabel = new javax.swing.JLabel();
0685:                stepSizeSpinner = new javax.swing.JSpinner();
0686:                defaultPanel = new javax.swing.JPanel();
0687:
0688:                FormListener formListener = new FormListener();
0689:
0690:                modelTypeLabel.setLabelFor(modelTypeCombo);
0691:                org.openide.awt.Mnemonics.setLocalizedText(modelTypeLabel,
0692:                        org.openide.util.NbBundle.getMessage(
0693:                                SpinnerModelEditor.class,
0694:                                "SpinnerModelEditor_ModelType")); // NOI18N
0695:
0696:                modelTypeCombo.addActionListener(formListener);
0697:
0698:                modelPropertiesLabel.setText(org.openide.util.NbBundle
0699:                        .getMessage(SpinnerModelEditor.class,
0700:                                "SpinnerModelEditor_ModelProperties")); // NOI18N
0701:
0702:                modelTypePanel.setLayout(new java.awt.CardLayout());
0703:
0704:                initialDateLabel.setLabelFor(initialDateSpinner);
0705:                org.openide.awt.Mnemonics.setLocalizedText(initialDateLabel,
0706:                        org.openide.util.NbBundle.getMessage(
0707:                                SpinnerModelEditor.class,
0708:                                "SpinnerModelEditor_InitialDate")); // NOI18N
0709:
0710:                initialDateSpinner.setEnabled(false);
0711:                initialDateSpinner.addChangeListener(formListener);
0712:
0713:                initialNowCheckBox.setSelected(true);
0714:                initialNowCheckBox.setText(org.openide.util.NbBundle
0715:                        .getMessage(SpinnerModelEditor.class,
0716:                                "SpinnerModelEditor_InitialNow")); // NOI18N
0717:                initialNowCheckBox.setBorder(javax.swing.BorderFactory
0718:                        .createEmptyBorder(0, 0, 0, 0));
0719:                initialNowCheckBox.setMargin(new java.awt.Insets(0, 0, 0, 0));
0720:                initialNowCheckBox.addActionListener(formListener);
0721:
0722:                org.openide.awt.Mnemonics.setLocalizedText(minimumDateCheckBox,
0723:                        org.openide.util.NbBundle.getMessage(
0724:                                SpinnerModelEditor.class,
0725:                                "SpinnerModelEditor_MinimumDate")); // NOI18N
0726:                minimumDateCheckBox.setBorder(javax.swing.BorderFactory
0727:                        .createEmptyBorder(0, 0, 0, 0));
0728:                minimumDateCheckBox.setMargin(new java.awt.Insets(0, 0, 0, 0));
0729:                minimumDateCheckBox.addActionListener(formListener);
0730:
0731:                minimumDateSpinner.setEnabled(false);
0732:                minimumDateSpinner.addChangeListener(formListener);
0733:
0734:                minimumNowCheckBox.setText(org.openide.util.NbBundle
0735:                        .getMessage(SpinnerModelEditor.class,
0736:                                "SpinnerModelEditor_MinimumNow")); // NOI18N
0737:                minimumNowCheckBox.setBorder(javax.swing.BorderFactory
0738:                        .createEmptyBorder(0, 0, 0, 0));
0739:                minimumNowCheckBox.setEnabled(false);
0740:                minimumNowCheckBox.setMargin(new java.awt.Insets(0, 0, 0, 0));
0741:                minimumNowCheckBox.addActionListener(formListener);
0742:
0743:                org.openide.awt.Mnemonics.setLocalizedText(maximumDateCheckBox,
0744:                        org.openide.util.NbBundle.getMessage(
0745:                                SpinnerModelEditor.class,
0746:                                "SpinnerModelEditor_MaximumDate")); // NOI18N
0747:                maximumDateCheckBox.setBorder(javax.swing.BorderFactory
0748:                        .createEmptyBorder(0, 0, 0, 0));
0749:                maximumDateCheckBox.setMargin(new java.awt.Insets(0, 0, 0, 0));
0750:                maximumDateCheckBox.addActionListener(formListener);
0751:
0752:                maximumDateSpinner.setEnabled(false);
0753:                maximumDateSpinner.addChangeListener(formListener);
0754:
0755:                maximumNowCheckBox.setText(org.openide.util.NbBundle
0756:                        .getMessage(SpinnerModelEditor.class,
0757:                                "SpinnerModelEditor_MaximumNow")); // NOI18N
0758:                maximumNowCheckBox.setBorder(javax.swing.BorderFactory
0759:                        .createEmptyBorder(0, 0, 0, 0));
0760:                maximumNowCheckBox.setEnabled(false);
0761:                maximumNowCheckBox.setMargin(new java.awt.Insets(0, 0, 0, 0));
0762:                maximumNowCheckBox.addActionListener(formListener);
0763:
0764:                calendarFieldLabel.setLabelFor(calendarFieldCombo);
0765:                org.openide.awt.Mnemonics.setLocalizedText(calendarFieldLabel,
0766:                        org.openide.util.NbBundle.getMessage(
0767:                                SpinnerModelEditor.class,
0768:                                "SpinnerModelEditor_CalendarField")); // NOI18N
0769:
0770:                calendarFieldCombo.addActionListener(formListener);
0771:
0772:                org.jdesktop.layout.GroupLayout datePanelLayout = new org.jdesktop.layout.GroupLayout(
0773:                        datePanel);
0774:                datePanel.setLayout(datePanelLayout);
0775:                datePanelLayout
0776:                        .setHorizontalGroup(datePanelLayout
0777:                                .createParallelGroup(
0778:                                        org.jdesktop.layout.GroupLayout.LEADING)
0779:                                .add(
0780:                                        datePanelLayout
0781:                                                .createSequentialGroup()
0782:                                                .addContainerGap()
0783:                                                .add(
0784:                                                        datePanelLayout
0785:                                                                .createParallelGroup(
0786:                                                                        org.jdesktop.layout.GroupLayout.LEADING)
0787:                                                                .add(
0788:                                                                        initialDateLabel)
0789:                                                                .add(
0790:                                                                        minimumDateCheckBox)
0791:                                                                .add(
0792:                                                                        maximumDateCheckBox)
0793:                                                                .add(
0794:                                                                        calendarFieldLabel))
0795:                                                .addPreferredGap(
0796:                                                        org.jdesktop.layout.LayoutStyle.RELATED)
0797:                                                .add(
0798:                                                        datePanelLayout
0799:                                                                .createParallelGroup(
0800:                                                                        org.jdesktop.layout.GroupLayout.LEADING,
0801:                                                                        false)
0802:                                                                .add(
0803:                                                                        org.jdesktop.layout.GroupLayout.TRAILING,
0804:                                                                        initialDateSpinner)
0805:                                                                .add(
0806:                                                                        org.jdesktop.layout.GroupLayout.TRAILING,
0807:                                                                        minimumDateSpinner)
0808:                                                                .add(
0809:                                                                        org.jdesktop.layout.GroupLayout.TRAILING,
0810:                                                                        maximumDateSpinner)
0811:                                                                .add(
0812:                                                                        org.jdesktop.layout.GroupLayout.TRAILING,
0813:                                                                        calendarFieldCombo,
0814:                                                                        0,
0815:                                                                        org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,
0816:                                                                        Short.MAX_VALUE))
0817:                                                .add(
0818:                                                        datePanelLayout
0819:                                                                .createParallelGroup(
0820:                                                                        org.jdesktop.layout.GroupLayout.LEADING)
0821:                                                                .add(
0822:                                                                        datePanelLayout
0823:                                                                                .createParallelGroup(
0824:                                                                                        org.jdesktop.layout.GroupLayout.LEADING)
0825:                                                                                .add(
0826:                                                                                        datePanelLayout
0827:                                                                                                .createSequentialGroup()
0828:                                                                                                .addPreferredGap(
0829:                                                                                                        org.jdesktop.layout.LayoutStyle.RELATED)
0830:                                                                                                .add(
0831:                                                                                                        maximumNowCheckBox))
0832:                                                                                .add(
0833:                                                                                        org.jdesktop.layout.GroupLayout.TRAILING,
0834:                                                                                        datePanelLayout
0835:                                                                                                .createSequentialGroup()
0836:                                                                                                .addPreferredGap(
0837:                                                                                                        org.jdesktop.layout.LayoutStyle.RELATED)
0838:                                                                                                .add(
0839:                                                                                                        minimumNowCheckBox)))
0840:                                                                .add(
0841:                                                                        org.jdesktop.layout.GroupLayout.TRAILING,
0842:                                                                        datePanelLayout
0843:                                                                                .createSequentialGroup()
0844:                                                                                .addPreferredGap(
0845:                                                                                        org.jdesktop.layout.LayoutStyle.RELATED)
0846:                                                                                .add(
0847:                                                                                        initialNowCheckBox)))
0848:                                                .addContainerGap(14,
0849:                                                        Short.MAX_VALUE)));
0850:                datePanelLayout
0851:                        .setVerticalGroup(datePanelLayout
0852:                                .createParallelGroup(
0853:                                        org.jdesktop.layout.GroupLayout.LEADING)
0854:                                .add(
0855:                                        datePanelLayout
0856:                                                .createSequentialGroup()
0857:                                                .addContainerGap()
0858:                                                .add(
0859:                                                        datePanelLayout
0860:                                                                .createParallelGroup(
0861:                                                                        org.jdesktop.layout.GroupLayout.BASELINE)
0862:                                                                .add(
0863:                                                                        initialDateLabel)
0864:                                                                .add(
0865:                                                                        initialNowCheckBox)
0866:                                                                .add(
0867:                                                                        initialDateSpinner,
0868:                                                                        org.jdesktop.layout.GroupLayout.PREFERRED_SIZE,
0869:                                                                        org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,
0870:                                                                        org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
0871:                                                .addPreferredGap(
0872:                                                        org.jdesktop.layout.LayoutStyle.RELATED)
0873:                                                .add(
0874:                                                        datePanelLayout
0875:                                                                .createParallelGroup(
0876:                                                                        org.jdesktop.layout.GroupLayout.BASELINE)
0877:                                                                .add(
0878:                                                                        minimumDateCheckBox)
0879:                                                                .add(
0880:                                                                        minimumNowCheckBox)
0881:                                                                .add(
0882:                                                                        minimumDateSpinner,
0883:                                                                        org.jdesktop.layout.GroupLayout.PREFERRED_SIZE,
0884:                                                                        org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,
0885:                                                                        org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
0886:                                                .addPreferredGap(
0887:                                                        org.jdesktop.layout.LayoutStyle.RELATED)
0888:                                                .add(
0889:                                                        datePanelLayout
0890:                                                                .createParallelGroup(
0891:                                                                        org.jdesktop.layout.GroupLayout.BASELINE)
0892:                                                                .add(
0893:                                                                        maximumDateCheckBox)
0894:                                                                .add(
0895:                                                                        maximumNowCheckBox)
0896:                                                                .add(
0897:                                                                        maximumDateSpinner,
0898:                                                                        org.jdesktop.layout.GroupLayout.PREFERRED_SIZE,
0899:                                                                        org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,
0900:                                                                        org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
0901:                                                .addPreferredGap(
0902:                                                        org.jdesktop.layout.LayoutStyle.RELATED)
0903:                                                .add(
0904:                                                        datePanelLayout
0905:                                                                .createParallelGroup(
0906:                                                                        org.jdesktop.layout.GroupLayout.BASELINE)
0907:                                                                .add(
0908:                                                                        calendarFieldLabel)
0909:                                                                .add(
0910:                                                                        calendarFieldCombo,
0911:                                                                        org.jdesktop.layout.GroupLayout.PREFERRED_SIZE,
0912:                                                                        org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,
0913:                                                                        org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
0914:                                                .addContainerGap(45,
0915:                                                        Short.MAX_VALUE)));
0916:
0917:                initialDateSpinner.getAccessibleContext()
0918:                        .setAccessibleDescription(
0919:                                org.openide.util.NbBundle.getMessage(
0920:                                        SpinnerModelEditor.class,
0921:                                        "SpinnerModelEditor_InitialDate_ACSD")); // NOI18N
0922:                initialNowCheckBox.getAccessibleContext()
0923:                        .setAccessibleDescription(
0924:                                org.openide.util.NbBundle.getMessage(
0925:                                        SpinnerModelEditor.class,
0926:                                        "SpinnerModelEditor_InitialNow_ACSD")); // NOI18N
0927:                minimumDateCheckBox.getAccessibleContext()
0928:                        .setAccessibleDescription(
0929:                                org.openide.util.NbBundle.getMessage(
0930:                                        SpinnerModelEditor.class,
0931:                                        "SpinnerModelEditor_MinimumDate_ACSD")); // NOI18N
0932:                minimumDateSpinner.getAccessibleContext().setAccessibleName(
0933:                        org.openide.util.NbBundle.getMessage(
0934:                                SpinnerModelEditor.class,
0935:                                "SpinnerModelEditor_MinimumDate_ACSN")); // NOI18N
0936:                minimumDateSpinner.getAccessibleContext()
0937:                        .setAccessibleDescription(
0938:                                org.openide.util.NbBundle.getMessage(
0939:                                        SpinnerModelEditor.class,
0940:                                        "SpinnerModelEditor_MinimumDate_ACSD")); // NOI18N
0941:                minimumNowCheckBox.getAccessibleContext()
0942:                        .setAccessibleDescription(
0943:                                org.openide.util.NbBundle.getMessage(
0944:                                        SpinnerModelEditor.class,
0945:                                        "SpinnerModelEditor_MinimumNow_ACSD")); // NOI18N
0946:                maximumDateCheckBox.getAccessibleContext()
0947:                        .setAccessibleDescription(
0948:                                org.openide.util.NbBundle.getMessage(
0949:                                        SpinnerModelEditor.class,
0950:                                        "SpinnerModelEditor_MaximumDate_ACSD")); // NOI18N
0951:                maximumDateSpinner.getAccessibleContext().setAccessibleName(
0952:                        org.openide.util.NbBundle.getMessage(
0953:                                SpinnerModelEditor.class,
0954:                                "SpinnerModelEditor_MaximumDate_ACSN")); // NOI18N
0955:                maximumDateSpinner.getAccessibleContext()
0956:                        .setAccessibleDescription(
0957:                                org.openide.util.NbBundle.getMessage(
0958:                                        SpinnerModelEditor.class,
0959:                                        "SpinnerModelEditor_MaximumDate_ACSD")); // NOI18N
0960:                maximumNowCheckBox.getAccessibleContext()
0961:                        .setAccessibleDescription(
0962:                                org.openide.util.NbBundle.getMessage(
0963:                                        SpinnerModelEditor.class,
0964:                                        "SpinnerModelEditor_MaximumNow_ACSD")); // NOI18N
0965:                calendarFieldCombo.getAccessibleContext()
0966:                        .setAccessibleDescription(
0967:                                org.openide.util.NbBundle.getMessage(
0968:                                        SpinnerModelEditor.class,
0969:                                        "SpinnerModelEditor_StepSize_ACSD")); // NOI18N
0970:
0971:                modelTypePanel.add(datePanel, "date");
0972:
0973:                listItemsLabel.setLabelFor(listItemsArea);
0974:                org.openide.awt.Mnemonics.setLocalizedText(listItemsLabel,
0975:                        org.openide.util.NbBundle.getMessage(
0976:                                SpinnerModelEditor.class,
0977:                                "SpinnerModelEditor_ListItems")); // NOI18N
0978:
0979:                listItemsArea.setRows(4);
0980:                listItemsArea.addFocusListener(formListener);
0981:                scrollPane.setViewportView(listItemsArea);
0982:                listItemsArea.getAccessibleContext().setAccessibleDescription(
0983:                        org.openide.util.NbBundle.getMessage(
0984:                                SpinnerModelEditor.class,
0985:                                "SpinnerModelEditor_ListItems")); // NOI18N
0986:
0987:                initialListLabel.setLabelFor(initialListCombo);
0988:                org.openide.awt.Mnemonics.setLocalizedText(initialListLabel,
0989:                        org.openide.util.NbBundle.getMessage(
0990:                                SpinnerModelEditor.class,
0991:                                "SpinnerModelEditor_InitialList")); // NOI18N
0992:
0993:                initialListCombo.addActionListener(formListener);
0994:
0995:                org.jdesktop.layout.GroupLayout listPanelLayout = new org.jdesktop.layout.GroupLayout(
0996:                        listPanel);
0997:                listPanel.setLayout(listPanelLayout);
0998:                listPanelLayout
0999:                        .setHorizontalGroup(listPanelLayout
1000:                                .createParallelGroup(
1001:                                        org.jdesktop.layout.GroupLayout.LEADING)
1002:                                .add(
1003:                                        listPanelLayout
1004:                                                .createSequentialGroup()
1005:                                                .addContainerGap()
1006:                                                .add(
1007:                                                        listPanelLayout
1008:                                                                .createParallelGroup(
1009:                                                                        org.jdesktop.layout.GroupLayout.LEADING)
1010:                                                                .add(
1011:                                                                        scrollPane,
1012:                                                                        org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,
1013:                                                                        147,
1014:                                                                        Short.MAX_VALUE)
1015:                                                                .add(
1016:                                                                        listItemsLabel)
1017:                                                                .add(
1018:                                                                        listPanelLayout
1019:                                                                                .createSequentialGroup()
1020:                                                                                .add(
1021:                                                                                        initialListLabel)
1022:                                                                                .addPreferredGap(
1023:                                                                                        org.jdesktop.layout.LayoutStyle.RELATED)
1024:                                                                                .add(
1025:                                                                                        initialListCombo,
1026:                                                                                        0,
1027:                                                                                        84,
1028:                                                                                        Short.MAX_VALUE)))
1029:                                                .addContainerGap()));
1030:                listPanelLayout
1031:                        .setVerticalGroup(listPanelLayout
1032:                                .createParallelGroup(
1033:                                        org.jdesktop.layout.GroupLayout.LEADING)
1034:                                .add(
1035:                                        listPanelLayout
1036:                                                .createSequentialGroup()
1037:                                                .addContainerGap()
1038:                                                .add(listItemsLabel)
1039:                                                .addPreferredGap(
1040:                                                        org.jdesktop.layout.LayoutStyle.RELATED)
1041:                                                .add(
1042:                                                        scrollPane,
1043:                                                        org.jdesktop.layout.GroupLayout.PREFERRED_SIZE,
1044:                                                        org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,
1045:                                                        org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
1046:                                                .addPreferredGap(
1047:                                                        org.jdesktop.layout.LayoutStyle.RELATED)
1048:                                                .add(
1049:                                                        listPanelLayout
1050:                                                                .createParallelGroup(
1051:                                                                        org.jdesktop.layout.GroupLayout.BASELINE)
1052:                                                                .add(
1053:                                                                        initialListLabel)
1054:                                                                .add(
1055:                                                                        initialListCombo,
1056:                                                                        org.jdesktop.layout.GroupLayout.PREFERRED_SIZE,
1057:                                                                        org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,
1058:                                                                        org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
1059:                                                .addContainerGap(13,
1060:                                                        Short.MAX_VALUE)));
1061:
1062:                initialListCombo.getAccessibleContext()
1063:                        .setAccessibleDescription(
1064:                                org.openide.util.NbBundle.getMessage(
1065:                                        SpinnerModelEditor.class,
1066:                                        "SpinnerModelEditor_InitialList_ACSD")); // NOI18N
1067:
1068:                modelTypePanel.add(listPanel, "list");
1069:
1070:                numberTypeLabel.setLabelFor(numberTypeCombo);
1071:                org.openide.awt.Mnemonics.setLocalizedText(numberTypeLabel,
1072:                        org.openide.util.NbBundle.getMessage(
1073:                                SpinnerModelEditor.class,
1074:                                "SpinnerModelEditor_NumberType")); // NOI18N
1075:
1076:                numberTypeCombo.addActionListener(formListener);
1077:
1078:                initialNumberLabel.setLabelFor(initialNumberSpinner);
1079:                org.openide.awt.Mnemonics.setLocalizedText(initialNumberLabel,
1080:                        org.openide.util.NbBundle.getMessage(
1081:                                SpinnerModelEditor.class,
1082:                                "SpinnerModelEditor_InitialNumber")); // NOI18N
1083:
1084:                initialNumberSpinner.addChangeListener(formListener);
1085:
1086:                org.openide.awt.Mnemonics.setLocalizedText(
1087:                        minimumNumberCheckBox, org.openide.util.NbBundle
1088:                                .getMessage(SpinnerModelEditor.class,
1089:                                        "SpinnerModelEditor_MinimumNumber")); // NOI18N
1090:                minimumNumberCheckBox.setBorder(javax.swing.BorderFactory
1091:                        .createEmptyBorder(0, 0, 0, 0));
1092:                minimumNumberCheckBox
1093:                        .setMargin(new java.awt.Insets(0, 0, 0, 0));
1094:                minimumNumberCheckBox.addActionListener(formListener);
1095:
1096:                minimumNumberSpinner.setEnabled(false);
1097:                minimumNumberSpinner.addChangeListener(formListener);
1098:
1099:                org.openide.awt.Mnemonics.setLocalizedText(
1100:                        maximumNumberCheckBox, org.openide.util.NbBundle
1101:                                .getMessage(SpinnerModelEditor.class,
1102:                                        "SpinnerModelEditor_MaximumNumber")); // NOI18N
1103:                maximumNumberCheckBox.setBorder(javax.swing.BorderFactory
1104:                        .createEmptyBorder(0, 0, 0, 0));
1105:                maximumNumberCheckBox
1106:                        .setMargin(new java.awt.Insets(0, 0, 0, 0));
1107:                maximumNumberCheckBox.addActionListener(formListener);
1108:
1109:                maximumNumberSpinner.setEnabled(false);
1110:                maximumNumberSpinner.addChangeListener(formListener);
1111:
1112:                stepSizeLabel.setLabelFor(stepSizeSpinner);
1113:                org.openide.awt.Mnemonics.setLocalizedText(stepSizeLabel,
1114:                        org.openide.util.NbBundle.getMessage(
1115:                                SpinnerModelEditor.class,
1116:                                "SpinnerModelEditor_StepSize")); // NOI18N
1117:
1118:                stepSizeSpinner.addChangeListener(formListener);
1119:
1120:                org.jdesktop.layout.GroupLayout numberPanelLayout = new org.jdesktop.layout.GroupLayout(
1121:                        numberPanel);
1122:                numberPanel.setLayout(numberPanelLayout);
1123:                numberPanelLayout
1124:                        .setHorizontalGroup(numberPanelLayout
1125:                                .createParallelGroup(
1126:                                        org.jdesktop.layout.GroupLayout.LEADING)
1127:                                .add(
1128:                                        numberPanelLayout
1129:                                                .createSequentialGroup()
1130:                                                .addContainerGap()
1131:                                                .add(
1132:                                                        numberPanelLayout
1133:                                                                .createParallelGroup(
1134:                                                                        org.jdesktop.layout.GroupLayout.LEADING)
1135:                                                                .add(
1136:                                                                        numberTypeLabel)
1137:                                                                .add(
1138:                                                                        initialNumberLabel)
1139:                                                                .add(
1140:                                                                        minimumNumberCheckBox)
1141:                                                                .add(
1142:                                                                        maximumNumberCheckBox)
1143:                                                                .add(
1144:                                                                        stepSizeLabel))
1145:                                                .addPreferredGap(
1146:                                                        org.jdesktop.layout.LayoutStyle.RELATED)
1147:                                                .add(
1148:                                                        numberPanelLayout
1149:                                                                .createParallelGroup(
1150:                                                                        org.jdesktop.layout.GroupLayout.LEADING,
1151:                                                                        false)
1152:                                                                .add(
1153:                                                                        numberTypeCombo,
1154:                                                                        0,
1155:                                                                        org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,
1156:                                                                        Short.MAX_VALUE)
1157:                                                                .add(
1158:                                                                        initialNumberSpinner)
1159:                                                                .add(
1160:                                                                        minimumNumberSpinner)
1161:                                                                .add(
1162:                                                                        maximumNumberSpinner)
1163:                                                                .add(
1164:                                                                        stepSizeSpinner))
1165:                                                .addContainerGap(56,
1166:                                                        Short.MAX_VALUE)));
1167:                numberPanelLayout
1168:                        .setVerticalGroup(numberPanelLayout
1169:                                .createParallelGroup(
1170:                                        org.jdesktop.layout.GroupLayout.LEADING)
1171:                                .add(
1172:                                        numberPanelLayout
1173:                                                .createSequentialGroup()
1174:                                                .addContainerGap()
1175:                                                .add(
1176:                                                        numberPanelLayout
1177:                                                                .createParallelGroup(
1178:                                                                        org.jdesktop.layout.GroupLayout.BASELINE)
1179:                                                                .add(
1180:                                                                        numberTypeLabel)
1181:                                                                .add(
1182:                                                                        numberTypeCombo,
1183:                                                                        org.jdesktop.layout.GroupLayout.PREFERRED_SIZE,
1184:                                                                        org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,
1185:                                                                        org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
1186:                                                .addPreferredGap(
1187:                                                        org.jdesktop.layout.LayoutStyle.RELATED)
1188:                                                .add(
1189:                                                        numberPanelLayout
1190:                                                                .createParallelGroup(
1191:                                                                        org.jdesktop.layout.GroupLayout.BASELINE)
1192:                                                                .add(
1193:                                                                        initialNumberLabel)
1194:                                                                .add(
1195:                                                                        initialNumberSpinner,
1196:                                                                        org.jdesktop.layout.GroupLayout.PREFERRED_SIZE,
1197:                                                                        org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,
1198:                                                                        org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
1199:                                                .addPreferredGap(
1200:                                                        org.jdesktop.layout.LayoutStyle.RELATED)
1201:                                                .add(
1202:                                                        numberPanelLayout
1203:                                                                .createParallelGroup(
1204:                                                                        org.jdesktop.layout.GroupLayout.BASELINE)
1205:                                                                .add(
1206:                                                                        minimumNumberCheckBox)
1207:                                                                .add(
1208:                                                                        minimumNumberSpinner,
1209:                                                                        org.jdesktop.layout.GroupLayout.PREFERRED_SIZE,
1210:                                                                        org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,
1211:                                                                        org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
1212:                                                .addPreferredGap(
1213:                                                        org.jdesktop.layout.LayoutStyle.RELATED)
1214:                                                .add(
1215:                                                        numberPanelLayout
1216:                                                                .createParallelGroup(
1217:                                                                        org.jdesktop.layout.GroupLayout.BASELINE)
1218:                                                                .add(
1219:                                                                        maximumNumberCheckBox)
1220:                                                                .add(
1221:                                                                        maximumNumberSpinner,
1222:                                                                        org.jdesktop.layout.GroupLayout.PREFERRED_SIZE,
1223:                                                                        org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,
1224:                                                                        org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
1225:                                                .addPreferredGap(
1226:                                                        org.jdesktop.layout.LayoutStyle.RELATED)
1227:                                                .add(
1228:                                                        numberPanelLayout
1229:                                                                .createParallelGroup(
1230:                                                                        org.jdesktop.layout.GroupLayout.BASELINE)
1231:                                                                .add(
1232:                                                                        stepSizeLabel)
1233:                                                                .add(
1234:                                                                        stepSizeSpinner,
1235:                                                                        org.jdesktop.layout.GroupLayout.PREFERRED_SIZE,
1236:                                                                        org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,
1237:                                                                        org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
1238:                                                .addContainerGap(21,
1239:                                                        Short.MAX_VALUE)));
1240:
1241:                numberTypeCombo.getAccessibleContext()
1242:                        .setAccessibleDescription(
1243:                                org.openide.util.NbBundle.getMessage(
1244:                                        SpinnerModelEditor.class,
1245:                                        "SpinnerModelEditor_NumberType_ACSD")); // NOI18N
1246:                initialNumberSpinner
1247:                        .getAccessibleContext()
1248:                        .setAccessibleDescription(
1249:                                org.openide.util.NbBundle
1250:                                        .getMessage(SpinnerModelEditor.class,
1251:                                                "SpinnerModelEditor_InitialNumber_ACSD")); // NOI18N
1252:                minimumNumberCheckBox
1253:                        .getAccessibleContext()
1254:                        .setAccessibleDescription(
1255:                                org.openide.util.NbBundle
1256:                                        .getMessage(SpinnerModelEditor.class,
1257:                                                "SpinnerModelEditor_MinimumNumber_ACSD")); // NOI18N
1258:                minimumNumberSpinner.getAccessibleContext().setAccessibleName(
1259:                        org.openide.util.NbBundle.getMessage(
1260:                                SpinnerModelEditor.class,
1261:                                "SpinnerModelEditor_MinimumNumber_ACSN")); // NOI18N
1262:                minimumNumberSpinner
1263:                        .getAccessibleContext()
1264:                        .setAccessibleDescription(
1265:                                org.openide.util.NbBundle
1266:                                        .getMessage(SpinnerModelEditor.class,
1267:                                                "SpinnerModelEditor_MinimumNumber_ACSD")); // NOI18N
1268:                maximumNumberCheckBox
1269:                        .getAccessibleContext()
1270:                        .setAccessibleDescription(
1271:                                org.openide.util.NbBundle
1272:                                        .getMessage(SpinnerModelEditor.class,
1273:                                                "SpinnerModelEditor_MaximumNumber_ACSD")); // NOI18N
1274:                maximumNumberSpinner.getAccessibleContext().setAccessibleName(
1275:                        org.openide.util.NbBundle.getMessage(
1276:                                SpinnerModelEditor.class,
1277:                                "SpinnerModelEditor_MaximumNumber_ACSN")); // NOI18N
1278:                maximumNumberSpinner
1279:                        .getAccessibleContext()
1280:                        .setAccessibleDescription(
1281:                                org.openide.util.NbBundle
1282:                                        .getMessage(SpinnerModelEditor.class,
1283:                                                "SpinnerModelEditor_MaximumNumber_ACSD")); // NOI18N
1284:                stepSizeSpinner.getAccessibleContext()
1285:                        .setAccessibleDescription(
1286:                                org.openide.util.NbBundle.getMessage(
1287:                                        SpinnerModelEditor.class,
1288:                                        "SpinnerModelEditor_StepSize_ACSD")); // NOI18N
1289:
1290:                modelTypePanel.add(numberPanel, "number");
1291:
1292:                org.jdesktop.layout.GroupLayout defaultPanelLayout = new org.jdesktop.layout.GroupLayout(
1293:                        defaultPanel);
1294:                defaultPanel.setLayout(defaultPanelLayout);
1295:                defaultPanelLayout.setHorizontalGroup(defaultPanelLayout
1296:                        .createParallelGroup(
1297:                                org.jdesktop.layout.GroupLayout.LEADING).add(0,
1298:                                167, Short.MAX_VALUE));
1299:                defaultPanelLayout.setVerticalGroup(defaultPanelLayout
1300:                        .createParallelGroup(
1301:                                org.jdesktop.layout.GroupLayout.LEADING).add(0,
1302:                                150, Short.MAX_VALUE));
1303:
1304:                modelTypePanel.add(defaultPanel, "default");
1305:
1306:                org.jdesktop.layout.GroupLayout customizerPanelLayout = new org.jdesktop.layout.GroupLayout(
1307:                        customizerPanel);
1308:                customizerPanel.setLayout(customizerPanelLayout);
1309:                customizerPanelLayout
1310:                        .setHorizontalGroup(customizerPanelLayout
1311:                                .createParallelGroup(
1312:                                        org.jdesktop.layout.GroupLayout.LEADING)
1313:                                .add(
1314:                                        org.jdesktop.layout.GroupLayout.TRAILING,
1315:                                        customizerPanelLayout
1316:                                                .createSequentialGroup()
1317:                                                .addContainerGap()
1318:                                                .add(
1319:                                                        customizerPanelLayout
1320:                                                                .createParallelGroup(
1321:                                                                        org.jdesktop.layout.GroupLayout.TRAILING)
1322:                                                                .add(
1323:                                                                        org.jdesktop.layout.GroupLayout.LEADING,
1324:                                                                        modelTypePanel,
1325:                                                                        org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,
1326:                                                                        org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,
1327:                                                                        Short.MAX_VALUE)
1328:                                                                .add(
1329:                                                                        org.jdesktop.layout.GroupLayout.LEADING,
1330:                                                                        customizerPanelLayout
1331:                                                                                .createSequentialGroup()
1332:                                                                                .add(
1333:                                                                                        modelTypeLabel)
1334:                                                                                .addPreferredGap(
1335:                                                                                        org.jdesktop.layout.LayoutStyle.RELATED)
1336:                                                                                .add(
1337:                                                                                        modelTypeCombo,
1338:                                                                                        org.jdesktop.layout.GroupLayout.PREFERRED_SIZE,
1339:                                                                                        org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,
1340:                                                                                        org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
1341:                                                                .add(
1342:                                                                        org.jdesktop.layout.GroupLayout.LEADING,
1343:                                                                        customizerPanelLayout
1344:                                                                                .createSequentialGroup()
1345:                                                                                .add(
1346:                                                                                        modelPropertiesLabel)
1347:                                                                                .addPreferredGap(
1348:                                                                                        org.jdesktop.layout.LayoutStyle.RELATED)
1349:                                                                                .add(
1350:                                                                                        separator,
1351:                                                                                        org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,
1352:                                                                                        83,
1353:                                                                                        Short.MAX_VALUE)))
1354:                                                .addContainerGap()));
1355:                customizerPanelLayout
1356:                        .setVerticalGroup(customizerPanelLayout
1357:                                .createParallelGroup(
1358:                                        org.jdesktop.layout.GroupLayout.LEADING)
1359:                                .add(
1360:                                        customizerPanelLayout
1361:                                                .createSequentialGroup()
1362:                                                .addContainerGap()
1363:                                                .add(
1364:                                                        customizerPanelLayout
1365:                                                                .createParallelGroup(
1366:                                                                        org.jdesktop.layout.GroupLayout.BASELINE)
1367:                                                                .add(
1368:                                                                        modelTypeLabel)
1369:                                                                .add(
1370:                                                                        modelTypeCombo,
1371:                                                                        org.jdesktop.layout.GroupLayout.PREFERRED_SIZE,
1372:                                                                        org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,
1373:                                                                        org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
1374:                                                .add(11, 11, 11)
1375:                                                .add(
1376:                                                        customizerPanelLayout
1377:                                                                .createParallelGroup(
1378:                                                                        org.jdesktop.layout.GroupLayout.TRAILING)
1379:                                                                .add(
1380:                                                                        modelPropertiesLabel)
1381:                                                                .add(
1382:                                                                        separator,
1383:                                                                        org.jdesktop.layout.GroupLayout.PREFERRED_SIZE,
1384:                                                                        10,
1385:                                                                        org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
1386:                                                .addPreferredGap(
1387:                                                        org.jdesktop.layout.LayoutStyle.RELATED)
1388:                                                .add(
1389:                                                        modelTypePanel,
1390:                                                        org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,
1391:                                                        org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,
1392:                                                        Short.MAX_VALUE)
1393:                                                .addContainerGap()));
1394:
1395:                modelTypeCombo.getAccessibleContext().setAccessibleDescription(
1396:                        org.openide.util.NbBundle.getMessage(
1397:                                SpinnerModelEditor.class,
1398:                                "SpinnerModelEditor_ModelType_ACSD")); // NOI18N
1399:            }
1400:
1401:            // Code for dispatching events from components to event handlers.
1402:
1403:            private class FormListener implements 
1404:                    java.awt.event.ActionListener,
1405:                    java.awt.event.FocusListener,
1406:                    javax.swing.event.ChangeListener {
1407:                FormListener() {
1408:                }
1409:
1410:                public void actionPerformed(java.awt.event.ActionEvent evt) {
1411:                    if (evt.getSource() == modelTypeCombo) {
1412:                        SpinnerModelEditor.this 
1413:                                .modelTypeComboActionPerformed(evt);
1414:                    } else if (evt.getSource() == initialNowCheckBox) {
1415:                        SpinnerModelEditor.this 
1416:                                .initialNowCheckBoxActionPerformed(evt);
1417:                    } else if (evt.getSource() == minimumDateCheckBox) {
1418:                        SpinnerModelEditor.this 
1419:                                .minimumDateCheckBoxActionPerformed(evt);
1420:                    } else if (evt.getSource() == minimumNowCheckBox) {
1421:                        SpinnerModelEditor.this 
1422:                                .minimumNowCheckBoxActionPerformed(evt);
1423:                    } else if (evt.getSource() == maximumDateCheckBox) {
1424:                        SpinnerModelEditor.this 
1425:                                .maximumDateCheckBoxActionPerformed(evt);
1426:                    } else if (evt.getSource() == maximumNowCheckBox) {
1427:                        SpinnerModelEditor.this 
1428:                                .maximumNowCheckBoxActionPerformed(evt);
1429:                    } else if (evt.getSource() == calendarFieldCombo) {
1430:                        SpinnerModelEditor.this 
1431:                                .calendarFieldComboActionPerformed(evt);
1432:                    } else if (evt.getSource() == initialListCombo) {
1433:                        SpinnerModelEditor.this 
1434:                                .initialListComboActionPerformed(evt);
1435:                    } else if (evt.getSource() == numberTypeCombo) {
1436:                        SpinnerModelEditor.this 
1437:                                .numberTypeComboActionPerformed(evt);
1438:                    } else if (evt.getSource() == minimumNumberCheckBox) {
1439:                        SpinnerModelEditor.this 
1440:                                .minimumNumberCheckBoxActionPerformed(evt);
1441:                    } else if (evt.getSource() == maximumNumberCheckBox) {
1442:                        SpinnerModelEditor.this 
1443:                                .maximumNumberCheckBoxActionPerformed(evt);
1444:                    }
1445:                }
1446:
1447:                public void focusGained(java.awt.event.FocusEvent evt) {
1448:                }
1449:
1450:                public void focusLost(java.awt.event.FocusEvent evt) {
1451:                    if (evt.getSource() == listItemsArea) {
1452:                        SpinnerModelEditor.this .listItemsAreaFocusLost(evt);
1453:                    }
1454:                }
1455:
1456:                public void stateChanged(javax.swing.event.ChangeEvent evt) {
1457:                    if (evt.getSource() == initialDateSpinner) {
1458:                        SpinnerModelEditor.this 
1459:                                .initialDateSpinnerStateChanged(evt);
1460:                    } else if (evt.getSource() == minimumDateSpinner) {
1461:                        SpinnerModelEditor.this 
1462:                                .minimumDateSpinnerStateChanged(evt);
1463:                    } else if (evt.getSource() == maximumDateSpinner) {
1464:                        SpinnerModelEditor.this 
1465:                                .maximumDateSpinnerStateChanged(evt);
1466:                    } else if (evt.getSource() == initialNumberSpinner) {
1467:                        SpinnerModelEditor.this 
1468:                                .initialNumberSpinnerStateChanged(evt);
1469:                    } else if (evt.getSource() == minimumNumberSpinner) {
1470:                        SpinnerModelEditor.this 
1471:                                .minimumNumberSpinnerStateChanged(evt);
1472:                    } else if (evt.getSource() == maximumNumberSpinner) {
1473:                        SpinnerModelEditor.this 
1474:                                .maximumNumberSpinnerStateChanged(evt);
1475:                    } else if (evt.getSource() == stepSizeSpinner) {
1476:                        SpinnerModelEditor.this 
1477:                                .stepSizeSpinnerStateChanged(evt);
1478:                    }
1479:                }
1480:            }// </editor-fold>//GEN-END:initComponents
1481:
1482:            private void listItemsAreaFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_listItemsAreaFocusLost
1483:                if (!fireChanges)
1484:                    return;
1485:                fireChanges = false;
1486:                int selectedIndex = initialListCombo.getSelectedIndex();
1487:                Object selected = initialListCombo.getSelectedItem();
1488:                DefaultComboBoxModel comboModel = new DefaultComboBoxModel();
1489:                for (String item : listItemsFromUI()) {
1490:                    comboModel.addElement(item);
1491:                }
1492:                initialListCombo.setModel(comboModel);
1493:                // Try to keep the selection
1494:                if (selected != null) {
1495:                    initialListCombo.setSelectedItem(selected);
1496:                    if (!selected.equals(initialListCombo.getSelectedItem())) {
1497:                        if (initialListCombo.getModel().getSize() > selectedIndex) {
1498:                            initialListCombo.setSelectedIndex(selectedIndex);
1499:                        }
1500:                    }
1501:                }
1502:                fireChanges = true;
1503:                updateFromUI();
1504:            }//GEN-LAST:event_listItemsAreaFocusLost
1505:
1506:            private void initialListComboActionPerformed(
1507:                    java.awt.event.ActionEvent evt) {//GEN-FIRST:event_initialListComboActionPerformed
1508:                updateFromUI();
1509:            }//GEN-LAST:event_initialListComboActionPerformed
1510:
1511:            private void maximumNumberCheckBoxActionPerformed(
1512:                    java.awt.event.ActionEvent evt) {//GEN-FIRST:event_maximumNumberCheckBoxActionPerformed
1513:                if (!fireChanges)
1514:                    return;
1515:                maximumNumberSpinner.setEnabled(maximumNumberCheckBox
1516:                        .isSelected());
1517:                if (maximumNumberCheckBox.isSelected()) {
1518:                    Comparable maximum = (Comparable) maximumNumberSpinner
1519:                            .getValue();
1520:                    Comparable initial = (Comparable) initialNumberSpinner
1521:                            .getValue();
1522:                    if (maximum.compareTo(initial) < 0) {
1523:                        fireChanges = false;
1524:                        maximumNumberSpinner.setValue(initial);
1525:                        fireChanges = true;
1526:                    }
1527:                }
1528:                updateFromUI();
1529:            }//GEN-LAST:event_maximumNumberCheckBoxActionPerformed
1530:
1531:            private void minimumNumberCheckBoxActionPerformed(
1532:                    java.awt.event.ActionEvent evt) {//GEN-FIRST:event_minimumNumberCheckBoxActionPerformed
1533:                if (!fireChanges)
1534:                    return;
1535:                minimumNumberSpinner.setEnabled(minimumNumberCheckBox
1536:                        .isSelected());
1537:                if (minimumNumberCheckBox.isSelected()) {
1538:                    Comparable minimum = (Comparable) minimumNumberSpinner
1539:                            .getValue();
1540:                    Comparable initial = (Comparable) initialNumberSpinner
1541:                            .getValue();
1542:                    if (minimum.compareTo(initial) > 0) {
1543:                        fireChanges = false;
1544:                        minimumNumberSpinner.setValue(initial);
1545:                        fireChanges = true;
1546:                    }
1547:                }
1548:                updateFromUI();
1549:            }//GEN-LAST:event_minimumNumberCheckBoxActionPerformed
1550:
1551:            private void maximumNumberSpinnerStateChanged(
1552:                    javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_maximumNumberSpinnerStateChanged
1553:                maximumNumberUpdated();
1554:                updateFromUI();
1555:            }//GEN-LAST:event_maximumNumberSpinnerStateChanged
1556:
1557:            private void minimumNumberSpinnerStateChanged(
1558:                    javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_minimumNumberSpinnerStateChanged
1559:                minimumNumberUpdated();
1560:                updateFromUI();
1561:            }//GEN-LAST:event_minimumNumberSpinnerStateChanged
1562:
1563:            private void initialNumberSpinnerStateChanged(
1564:                    javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_initialNumberSpinnerStateChanged
1565:                if (!fireChanges)
1566:                    return;
1567:                fireChanges = false;
1568:                Comparable initial = (Comparable) initialNumberSpinner
1569:                        .getValue();
1570:                if (minimumNumberCheckBox.isSelected()) {
1571:                    Comparable minimum = (Comparable) minimumNumberSpinner
1572:                            .getValue();
1573:                    if (initial.compareTo(minimum) < 0) {
1574:                        minimumNumberSpinner.setValue(initial);
1575:                    }
1576:                }
1577:                if (maximumNumberCheckBox.isSelected()) {
1578:                    Comparable maximum = (Comparable) maximumNumberSpinner
1579:                            .getValue();
1580:                    if (initial.compareTo(maximum) > 0) {
1581:                        maximumNumberSpinner.setValue(initial);
1582:                    }
1583:                }
1584:                fireChanges = true;
1585:                updateFromUI();
1586:            }//GEN-LAST:event_initialNumberSpinnerStateChanged
1587:
1588:            private void stepSizeSpinnerStateChanged(
1589:                    javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_stepSizeSpinnerStateChanged
1590:                updateFromUI();
1591:            }//GEN-LAST:event_stepSizeSpinnerStateChanged
1592:
1593:            private void numberTypeComboActionPerformed(
1594:                    java.awt.event.ActionEvent evt) {//GEN-FIRST:event_numberTypeComboActionPerformed
1595:                if (!fireChanges)
1596:                    return;
1597:                fireChanges = false;
1598:                updateNumberEditors();
1599:                fireChanges = true;
1600:                updateFromUI();
1601:            }//GEN-LAST:event_numberTypeComboActionPerformed
1602:
1603:            /**
1604:             * Updates spinners in the number section of the custom editor to reflect
1605:             * selected number type. 
1606:             */
1607:            private void updateNumberEditors() {
1608:                Number[] n = cast(selectedNumberType(),
1609:                        (Number) initialNumberSpinner.getValue(),
1610:                        (Number) minimumNumberSpinner.getValue(),
1611:                        (Number) maximumNumberSpinner.getValue(),
1612:                        (Number) stepSizeSpinner.getValue());
1613:                initialNumberSpinner.setValue(n[0]);
1614:                initialNumberSpinner.setEditor(new JSpinner.NumberEditor(
1615:                        initialNumberSpinner));
1616:                minimumNumberSpinner.setValue(n[1]);
1617:                minimumNumberSpinner.setEditor(new JSpinner.NumberEditor(
1618:                        minimumNumberSpinner));
1619:                maximumNumberSpinner.setValue(n[2]);
1620:                maximumNumberSpinner.setEditor(new JSpinner.NumberEditor(
1621:                        maximumNumberSpinner));
1622:                stepSizeSpinner.setValue(n[3]);
1623:                stepSizeSpinner.setEditor(new JSpinner.NumberEditor(
1624:                        stepSizeSpinner));
1625:            }
1626:
1627:            private void calendarFieldComboActionPerformed(
1628:                    java.awt.event.ActionEvent evt) {//GEN-FIRST:event_calendarFieldComboActionPerformed
1629:                updateFromUI();
1630:            }//GEN-LAST:event_calendarFieldComboActionPerformed
1631:
1632:            private void maximumDateSpinnerStateChanged(
1633:                    javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_maximumDateSpinnerStateChanged
1634:                if (!fireChanges)
1635:                    return;
1636:                maximumDateUpdated();
1637:                updateFromUI();
1638:            }//GEN-LAST:event_maximumDateSpinnerStateChanged
1639:
1640:            private void minimumDateSpinnerStateChanged(
1641:                    javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_minimumDateSpinnerStateChanged
1642:                if (!fireChanges)
1643:                    return;
1644:                minimumDateUpdated();
1645:                updateFromUI();
1646:            }//GEN-LAST:event_minimumDateSpinnerStateChanged
1647:
1648:            private void initialDateSpinnerStateChanged(
1649:                    javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_initialDateSpinnerStateChanged
1650:                if (!fireChanges)
1651:                    return;
1652:                initialDateUpdated();
1653:                updateFromUI();
1654:            }//GEN-LAST:event_initialDateSpinnerStateChanged
1655:
1656:            private void maximumDateCheckBoxActionPerformed(
1657:                    java.awt.event.ActionEvent evt) {//GEN-FIRST:event_maximumDateCheckBoxActionPerformed
1658:                if (!fireChanges)
1659:                    return;
1660:                fireChanges = false;
1661:                boolean enabled = maximumDateCheckBox.isSelected();
1662:                maximumNowCheckBox.setEnabled(enabled);
1663:                if (enabled) {
1664:                    Date maximum = (Date) maximumDateSpinner.getValue();
1665:                    Date initial = (Date) initialDateSpinner.getValue();
1666:                    if (maximum.getTime() - initial.getTime() < 0) {
1667:                        if (maximumNowCheckBox.isSelected()) {
1668:                            if (!initialNowCheckBox.isSelected()) {
1669:                                maximumNowCheckBox.setSelected(false);
1670:                                maximumDateSpinner.setValue(initial);
1671:                            }
1672:                        } else {
1673:                            maximumDateSpinner.setValue(initial);
1674:                        }
1675:                    }
1676:                }
1677:                maximumDateSpinner.setEnabled(enabled
1678:                        && !maximumNowCheckBox.isSelected());
1679:                fireChanges = true;
1680:                updateFromUI();
1681:            }//GEN-LAST:event_maximumDateCheckBoxActionPerformed
1682:
1683:            private void minimumDateCheckBoxActionPerformed(
1684:                    java.awt.event.ActionEvent evt) {//GEN-FIRST:event_minimumDateCheckBoxActionPerformed
1685:                if (!fireChanges)
1686:                    return;
1687:                fireChanges = false;
1688:                boolean enabled = minimumDateCheckBox.isSelected();
1689:                minimumNowCheckBox.setEnabled(enabled);
1690:                if (enabled) {
1691:                    Date minimum = (Date) minimumDateSpinner.getValue();
1692:                    Date initial = (Date) initialDateSpinner.getValue();
1693:                    if (initial.getTime() - minimum.getTime() < 0) {
1694:                        if (minimumNowCheckBox.isSelected()) {
1695:                            if (!initialNowCheckBox.isSelected()) {
1696:                                minimumNowCheckBox.setSelected(false);
1697:                                minimumDateSpinner.setValue(initial);
1698:                            }
1699:                        } else {
1700:                            minimumDateSpinner.setValue(initial);
1701:                        }
1702:                    }
1703:                }
1704:                minimumDateSpinner.setEnabled(enabled
1705:                        && !minimumNowCheckBox.isSelected());
1706:                fireChanges = true;
1707:                updateFromUI();
1708:            }//GEN-LAST:event_minimumDateCheckBoxActionPerformed
1709:
1710:            private void maximumNowCheckBoxActionPerformed(
1711:                    java.awt.event.ActionEvent evt) {//GEN-FIRST:event_maximumNowCheckBoxActionPerformed
1712:                if (!fireChanges)
1713:                    return;
1714:                fireChanges = false;
1715:                boolean enabled = !maximumNowCheckBox.isSelected();
1716:                maximumDateSpinner.setEnabled(enabled);
1717:                if (!enabled) {
1718:                    maximumDateSpinner.setValue(new Date());
1719:                }
1720:                maximumDateUpdated();
1721:                fireChanges = true;
1722:                updateFromUI();
1723:            }//GEN-LAST:event_maximumNowCheckBoxActionPerformed
1724:
1725:            private void minimumNowCheckBoxActionPerformed(
1726:                    java.awt.event.ActionEvent evt) {//GEN-FIRST:event_minimumNowCheckBoxActionPerformed
1727:                if (!fireChanges)
1728:                    return;
1729:                fireChanges = false;
1730:                boolean enabled = !minimumNowCheckBox.isSelected();
1731:                minimumDateSpinner.setEnabled(enabled);
1732:                if (!enabled) {
1733:                    minimumDateSpinner.setValue(new Date());
1734:                }
1735:                minimumDateUpdated();
1736:                fireChanges = true;
1737:                updateFromUI();
1738:            }//GEN-LAST:event_minimumNowCheckBoxActionPerformed
1739:
1740:            private void initialNowCheckBoxActionPerformed(
1741:                    java.awt.event.ActionEvent evt) {//GEN-FIRST:event_initialNowCheckBoxActionPerformed
1742:                if (!fireChanges)
1743:                    return;
1744:                fireChanges = false;
1745:                boolean enabled = !initialNowCheckBox.isSelected();
1746:                initialDateSpinner.setEnabled(enabled);
1747:                if (!enabled) {
1748:                    initialDateSpinner.setValue(new Date());
1749:                }
1750:                initialDateUpdated();
1751:                fireChanges = true;
1752:                updateFromUI();
1753:            }//GEN-LAST:event_initialNowCheckBoxActionPerformed
1754:
1755:            private void modelTypeComboActionPerformed(
1756:                    java.awt.event.ActionEvent evt) {//GEN-FIRST:event_modelTypeComboActionPerformed
1757:                CardLayout layout = (CardLayout) modelTypePanel.getLayout();
1758:                String name = null;
1759:                switch (modelTypeCombo.getSelectedIndex()) {
1760:                case 0:
1761:                    name = "default";
1762:                    break; // NOI18N
1763:                case 1:
1764:                    name = "date";
1765:                    break; // NOI18N
1766:                case 2:
1767:                    name = "list";
1768:                    break; // NOI18N
1769:                case 3:
1770:                    name = "number";
1771:                    break; // NOI18N
1772:                default:
1773:                    assert false;
1774:                }
1775:                updateVisibilityOfModelProperties();
1776:                layout.show(modelTypePanel, name);
1777:                updateFromUI();
1778:            }//GEN-LAST:event_modelTypeComboActionPerformed
1779:
1780:            /**
1781:             * Hides or shows "Model Properties" label and separator.
1782:             */
1783:            private void updateVisibilityOfModelProperties() {
1784:                boolean visible = (modelTypeCombo.getSelectedIndex() != 0);
1785:                modelPropertiesLabel.setVisible(visible);
1786:                separator.setVisible(visible);
1787:            }
1788:
1789:            /**
1790:             * Makes the model consistent after change of the minimum number.
1791:             */
1792:            private void minimumNumberUpdated() {
1793:                if (!fireChanges)
1794:                    return;
1795:                fireChanges = false;
1796:                if (minimumNumberCheckBox.isSelected()) {
1797:                    Comparable minimum = (Comparable) minimumNumberSpinner
1798:                            .getValue();
1799:                    Comparable initial = (Comparable) initialNumberSpinner
1800:                            .getValue();
1801:                    if (initial.compareTo(minimum) < 0) {
1802:                        initialNumberSpinner.setValue(minimum);
1803:                    }
1804:                    if (maximumNumberCheckBox.isSelected()) {
1805:                        Comparable maximum = (Comparable) maximumNumberSpinner
1806:                                .getValue();
1807:                        if (maximum.compareTo(minimum) < 0) {
1808:                            maximumNumberSpinner.setValue(minimum);
1809:                        }
1810:                    }
1811:                }
1812:                fireChanges = true;
1813:            }
1814:
1815:            /**
1816:             * Makes the model consistent after change of the maximum number.
1817:             */
1818:            private void maximumNumberUpdated() {
1819:                if (!fireChanges)
1820:                    return;
1821:                fireChanges = false;
1822:                if (maximumNumberCheckBox.isSelected()) {
1823:                    Comparable maximum = (Comparable) maximumNumberSpinner
1824:                            .getValue();
1825:                    Comparable initial = (Comparable) initialNumberSpinner
1826:                            .getValue();
1827:                    if (initial.compareTo(maximum) > 0) {
1828:                        initialNumberSpinner.setValue(maximum);
1829:                    }
1830:                    if (minimumNumberCheckBox.isSelected()) {
1831:                        Comparable minimum = (Comparable) minimumNumberSpinner
1832:                                .getValue();
1833:                        if (maximum.compareTo(minimum) < 0) {
1834:                            minimumNumberSpinner.setValue(maximum);
1835:                        }
1836:                    }
1837:                }
1838:                fireChanges = true;
1839:            }
1840:
1841:            /**
1842:             * Makes the model consistent after change of the initial date.
1843:             */
1844:            private void initialDateUpdated() {
1845:                fireChanges = false;
1846:                Date initial = (Date) initialDateSpinner.getValue();
1847:                if (minimumDateCheckBox.isSelected()) {
1848:                    // make sure minimum <= initial
1849:                    Date minimum = (Date) minimumDateSpinner.getValue();
1850:                    if (initial.getTime() - minimum.getTime() < 0) {
1851:                        if (minimumNowCheckBox.isSelected()) {
1852:                            if (!initialNowCheckBox.isSelected()) {
1853:                                minimumNowCheckBox.setSelected(false);
1854:                                minimumDateSpinner.setEnabled(true);
1855:                                minimumDateSpinner.setValue(initial);
1856:                            }
1857:                        } else {
1858:                            minimumDateSpinner.setValue(initial);
1859:                        }
1860:                    }
1861:                }
1862:                if (maximumDateCheckBox.isSelected()) {
1863:                    // make sure initial <= maximum
1864:                    Date maximum = (Date) maximumDateSpinner.getValue();
1865:                    if (maximum.getTime() - initial.getTime() < 0) {
1866:                        if (maximumNowCheckBox.isSelected()) {
1867:                            if (!initialNowCheckBox.isSelected()) {
1868:                                maximumNowCheckBox.setSelected(false);
1869:                                maximumDateSpinner.setEnabled(true);
1870:                                maximumDateSpinner.setValue(initial);
1871:                            }
1872:                        } else {
1873:                            maximumDateSpinner.setValue(initial);
1874:                        }
1875:                    }
1876:                }
1877:                fireChanges = true;
1878:            }
1879:
1880:            /**
1881:             * Makes the model consistent after change of the minimum date.
1882:             */
1883:            private void minimumDateUpdated() {
1884:                fireChanges = false;
1885:                if (!minimumDateCheckBox.isSelected())
1886:                    return;
1887:                Date minimum = (Date) minimumDateSpinner.getValue();
1888:                // make sure minimum <= initial
1889:                Date initial = (Date) initialDateSpinner.getValue();
1890:                if (initial.getTime() - minimum.getTime() < 0) {
1891:                    if (initialNowCheckBox.isSelected()) {
1892:                        if (!minimumNowCheckBox.isSelected()) {
1893:                            initialNowCheckBox.setSelected(false);
1894:                            initialDateSpinner.setEnabled(true);
1895:                            initialDateSpinner.setValue(minimum);
1896:                        }
1897:                    } else {
1898:                        initialDateSpinner.setValue(minimum);
1899:                    }
1900:                }
1901:                if (maximumDateCheckBox.isSelected()) {
1902:                    // make sure minimum <= maximum
1903:                    Date maximum = (Date) maximumDateSpinner.getValue();
1904:                    if (maximum.getTime() - minimum.getTime() < 0) {
1905:                        if (maximumNowCheckBox.isSelected()) {
1906:                            if (!minimumNowCheckBox.isSelected()) {
1907:                                maximumNowCheckBox.setSelected(false);
1908:                                maximumDateSpinner.setEnabled(true);
1909:                                maximumDateSpinner.setValue(minimum);
1910:                            }
1911:                        } else {
1912:                            maximumDateSpinner.setValue(minimum);
1913:                        }
1914:                    }
1915:                }
1916:                fireChanges = true;
1917:            }
1918:
1919:            /**
1920:             * Makes the model consistent after change of the maximum date.
1921:             */
1922:            private void maximumDateUpdated() {
1923:                if (!maximumDateCheckBox.isSelected())
1924:                    return;
1925:                fireChanges = false;
1926:                Date maximum = (Date) maximumDateSpinner.getValue();
1927:                // make sure initial <= maximum
1928:                Date initial = (Date) initialDateSpinner.getValue();
1929:                if (maximum.getTime() - initial.getTime() < 0) {
1930:                    if (initialNowCheckBox.isSelected()) {
1931:                        if (!maximumNowCheckBox.isSelected()) {
1932:                            initialNowCheckBox.setSelected(false);
1933:                            initialDateSpinner.setEnabled(true);
1934:                            initialDateSpinner.setValue(maximum);
1935:                        }
1936:                    } else {
1937:                        initialDateSpinner.setValue(maximum);
1938:                    }
1939:                }
1940:                if (minimumDateCheckBox.isSelected()) {
1941:                    // make sure minimum <= maximum
1942:                    Date minimum = (Date) minimumDateSpinner.getValue();
1943:                    if (maximum.getTime() - minimum.getTime() < 0) {
1944:                        if (minimumNowCheckBox.isSelected()) {
1945:                            if (!maximumNowCheckBox.isSelected()) {
1946:                                minimumNowCheckBox.setSelected(false);
1947:                                minimumDateSpinner.setEnabled(true);
1948:                                minimumDateSpinner.setValue(maximum);
1949:                            }
1950:                        } else {
1951:                            minimumDateSpinner.setValue(maximum);
1952:                        }
1953:                    }
1954:                }
1955:                fireChanges = true;
1956:            }
1957:
1958:            // Variables declaration - do not modify//GEN-BEGIN:variables
1959:            private javax.swing.JComboBox calendarFieldCombo;
1960:            private javax.swing.JLabel calendarFieldLabel;
1961:            private javax.swing.JPanel customizerPanel;
1962:            private javax.swing.JPanel datePanel;
1963:            private javax.swing.JPanel defaultPanel;
1964:            private javax.swing.JLabel initialDateLabel;
1965:            private javax.swing.JSpinner initialDateSpinner;
1966:            private javax.swing.JComboBox initialListCombo;
1967:            private javax.swing.JLabel initialListLabel;
1968:            private javax.swing.JCheckBox initialNowCheckBox;
1969:            private javax.swing.JLabel initialNumberLabel;
1970:            private javax.swing.JSpinner initialNumberSpinner;
1971:            private javax.swing.JTextArea listItemsArea;
1972:            private javax.swing.JLabel listItemsLabel;
1973:            private javax.swing.JPanel listPanel;
1974:            private javax.swing.JCheckBox maximumDateCheckBox;
1975:            private javax.swing.JSpinner maximumDateSpinner;
1976:            private javax.swing.JCheckBox maximumNowCheckBox;
1977:            private javax.swing.JCheckBox maximumNumberCheckBox;
1978:            private javax.swing.JSpinner maximumNumberSpinner;
1979:            private javax.swing.JCheckBox minimumDateCheckBox;
1980:            private javax.swing.JSpinner minimumDateSpinner;
1981:            private javax.swing.JCheckBox minimumNowCheckBox;
1982:            private javax.swing.JCheckBox minimumNumberCheckBox;
1983:            private javax.swing.JSpinner minimumNumberSpinner;
1984:            private javax.swing.JLabel modelPropertiesLabel;
1985:            private javax.swing.JComboBox modelTypeCombo;
1986:            private javax.swing.JLabel modelTypeLabel;
1987:            private javax.swing.JPanel modelTypePanel;
1988:            private javax.swing.JPanel numberPanel;
1989:            private javax.swing.JComboBox numberTypeCombo;
1990:            private javax.swing.JLabel numberTypeLabel;
1991:            private javax.swing.JScrollPane scrollPane;
1992:            private javax.swing.JSeparator separator;
1993:            private javax.swing.JLabel stepSizeLabel;
1994:            private javax.swing.JSpinner stepSizeSpinner;
1995:
1996:            // End of variables declaration//GEN-END:variables
1997:
1998:            /**
1999:             * Returns initialization string for the value represented by this property editor.
2000:             * 
2001:             * @return initialization string. 
2002:             */
2003:            @Override
2004:            public String getJavaInitializationString() {
2005:                Object value = getValue();
2006:                if (!(value instanceof  FormSpinnerModel)) {
2007:                    // should not happen
2008:                    return super .getJavaInitializationString();
2009:                }
2010:                FormSpinnerModel model = (FormSpinnerModel) value;
2011:                SpinnerModel spinnerModel = model.getModel();
2012:                String code = null;
2013:                if (spinnerModel instanceof  SpinnerDateModel) {
2014:                    code = dateInitializationString(model);
2015:                } else if (spinnerModel instanceof  SpinnerNumberModel) {
2016:                    code = numberInitializationString(model);
2017:                } else if (spinnerModel instanceof  SpinnerListModel) {
2018:                    code = listInitializationString(model);
2019:                } else {
2020:                    assert false;
2021:                }
2022:                return code;
2023:            }
2024:
2025:            /**
2026:             * Returns initialization string for list spinner model.
2027:             * 
2028:             * @return initializtaion string for list spinner model.
2029:             */
2030:            private static String listInitializationString(
2031:                    FormSpinnerModel model) {
2032:                StringBuilder code = new StringBuilder(
2033:                        "new javax.swing.SpinnerListModel(new String[] {"); // NOI18N
2034:                SpinnerListModel listModel = (SpinnerListModel) model
2035:                        .getModel();
2036:                List items = listModel.getList();
2037:                for (Object item : items) {
2038:                    String text = item.toString();
2039:                    text = text.replace("\"", "\\\""); // NOI18N
2040:                    code.append('"').append(text).append("\", "); // NOI18N
2041:                }
2042:                code.delete(code.length() - 2, code.length());
2043:                code.append("})"); // NOI18N
2044:                return code.toString();
2045:            }
2046:
2047:            /**
2048:             * Returns initialization string for number spinner model.
2049:             * 
2050:             * @return initializtaion string for number spinner model.
2051:             */
2052:            private String numberInitializationString(FormSpinnerModel model) {
2053:                StringBuilder code = new StringBuilder();
2054:                SpinnerNumberModel numberModel = (SpinnerNumberModel) model
2055:                        .getModel();
2056:                code.append("new javax.swing.SpinnerNumberModel("); // NOI18N
2057:                Object initial = model.getInitialValue();
2058:                Object minimum = numberModel.getMinimum();
2059:                Object maximum = numberModel.getMaximum();
2060:                Object stepSize = numberModel.getStepSize();
2061:                Class clazz = initial.getClass();
2062:                boolean generated = false;
2063:                if (clazz == Integer.class) {
2064:                    if (Integer.valueOf(0).equals(initial) && (minimum == null)
2065:                            && (maximum == null)
2066:                            && (Integer.valueOf(1).equals(stepSize))) {
2067:                        // default constructor
2068:                        code.append(')');
2069:                        generated = true;
2070:                    } else if ((minimum != null) && (maximum != null)) {
2071:                        // int constructor
2072:                        code.append(initial).append(", "); // NOI18N
2073:                        code.append(minimum).append(", "); // NOI18N
2074:                        code.append(maximum).append(", "); // NOI18N
2075:                        code.append(stepSize).append(')');
2076:                        generated = true;
2077:                    }
2078:                } else if ((clazz == Double.class) && (minimum != null)
2079:                        && (maximum != null)) {
2080:                    // double constructor
2081:                    code.append(initial).append("d, "); // NOI18N
2082:                    code.append(minimum).append("d, "); // NOI18N
2083:                    code.append(maximum).append("d, "); // NOI18N
2084:                    code.append(stepSize).append("d)"); // NOI18N
2085:                    generated = true;
2086:                }
2087:                if (!generated) {
2088:                    // general constructor
2089:                    String prefix = clazz.getName();
2090:                    prefix = prefix.substring(prefix.lastIndexOf('.') + 1);
2091:                    prefix = prefix + ".valueOf("; // NOI18N
2092:                    String suffix = ""; // NOI18N
2093:                    if (clazz == Long.class) {
2094:                        suffix = "L"; // NOI18N
2095:                    } else if (clazz == Float.class) {
2096:                        suffix = "f"; // NOI18N
2097:                    } else if (clazz == Double.class) {
2098:                        suffix = "d"; // NOI18N
2099:                    } else if (clazz == Byte.class) {
2100:                        prefix += "(byte)"; // NOI18N
2101:                    } else if (clazz == Short.class) {
2102:                        prefix += "(short)"; // NOI18N
2103:                    }
2104:                    code.append(prefix).append(initial).append(suffix).append(
2105:                            "), "); // NOI18N
2106:                    if (minimum == null) {
2107:                        code.append("null, "); // NOI18N
2108:                    } else {
2109:                        code.append(prefix).append(minimum).append(suffix)
2110:                                .append("), "); // NOI18N
2111:                    }
2112:                    if (maximum == null) {
2113:                        code.append("null, "); // NOI18N
2114:                    } else {
2115:                        code.append(prefix).append(maximum).append(suffix)
2116:                                .append("), "); // NOI18N
2117:                    }
2118:                    code.append(prefix).append(stepSize).append(suffix).append(
2119:                            "))"); // NOI18N
2120:                }
2121:                return code.toString();
2122:            }
2123:
2124:            /**
2125:             * Returns initialization string for date spinner model.
2126:             * 
2127:             * @return initializtaion string for date spinner model.
2128:             */
2129:            private String dateInitializationString(FormSpinnerModel model) {
2130:                StringBuilder code = new StringBuilder();
2131:                SpinnerDateModel dateModel = (SpinnerDateModel) model
2132:                        .getModel();
2133:                code.append("new javax.swing.SpinnerDateModel("); // NOI18N
2134:                if (model.isInitialNow()
2135:                        && (dateModel.getCalendarField() == Calendar.DAY_OF_MONTH)
2136:                        && (dateModel.getStart() == null)
2137:                        && (dateModel.getEnd() == null)) {
2138:                    // default constructor
2139:                    code.append(')');
2140:                } else {
2141:                    // initial
2142:                    code.append("new java.util.Date("); // NOI18N
2143:                    if (!model.isInitialNow()) {
2144:                        code.append(((Date) model.getInitialValue()).getTime());
2145:                        code.append('L');
2146:                    }
2147:                    code.append("), "); // NOI18N
2148:                    // minimum
2149:                    Date minimum = (Date) dateModel.getStart();
2150:                    if (minimum == null) {
2151:                        code.append("null"); // NOI18N
2152:                    } else {
2153:                        code.append("new java.util.Date("); // NOI18N
2154:                        if (!model.isMinimumNow()) {
2155:                            code.append(minimum.getTime());
2156:                            code.append('L');
2157:                        }
2158:                        code.append(')');
2159:                    }
2160:                    code.append(", "); // NOI18N
2161:                    // maximum
2162:                    Date maximum = (Date) dateModel.getEnd();
2163:                    if (maximum == null) {
2164:                        code.append("null"); // NOI18N
2165:                    } else {
2166:                        code.append("new java.util.Date("); // NOI18N
2167:                        if (!model.isMaximumNow()) {
2168:                            code.append(maximum.getTime());
2169:                            code.append('L');
2170:                        }
2171:                        code.append(')');
2172:                    }
2173:                    code.append(", "); // NOI18N
2174:                    // calendar field
2175:                    int field = dateModel.getCalendarField();
2176:                    String fieldText = null;
2177:                    switch (field) {
2178:                    case Calendar.ERA:
2179:                        fieldText = "ERA";
2180:                        break; // NOI18N
2181:                    case Calendar.YEAR:
2182:                        fieldText = "YEAR";
2183:                        break; // NOI18N
2184:                    case Calendar.MONTH:
2185:                        fieldText = "MONTH";
2186:                        break; // NOI18N
2187:                    case Calendar.WEEK_OF_YEAR:
2188:                        fieldText = "WEEK_OF_YEAR";
2189:                        break; // NOI18N
2190:                    case Calendar.WEEK_OF_MONTH:
2191:                        fieldText = "WEEK_OF_MONTH";
2192:                        break; // NOI18N
2193:                    case Calendar.DAY_OF_MONTH:
2194:                        fieldText = "DAY_OF_MONTH";
2195:                        break; // NOI18N
2196:                    case Calendar.DAY_OF_YEAR:
2197:                        fieldText = "DAY_OF_YEAR";
2198:                        break; // NOI18N
2199:                    case Calendar.DAY_OF_WEEK:
2200:                        fieldText = "DAY_OF_WEEK";
2201:                        break; // NOI18N
2202:                    case Calendar.DAY_OF_WEEK_IN_MONTH:
2203:                        fieldText = "DAY_OF_WEEK_IN_MONTH";
2204:                        break; // NOI18N
2205:                    case Calendar.AM_PM:
2206:                        fieldText = "AM_PM";
2207:                        break; // NOI18N
2208:                    case Calendar.HOUR:
2209:                        fieldText = "HOUR";
2210:                        break; // NOI18N
2211:                    case Calendar.HOUR_OF_DAY:
2212:                        fieldText = "HOUR_OF_DAY";
2213:                        break; // NOI18N
2214:                    case Calendar.MINUTE:
2215:                        fieldText = "MINUTE";
2216:                        break; // NOI18N
2217:                    case Calendar.SECOND:
2218:                        fieldText = "SECOND";
2219:                        break; // NOI18N
2220:                    case Calendar.MILLISECOND:
2221:                        fieldText = "MILLISECOND";
2222:                        break; // NOI18N
2223:                    default:
2224:                        assert false;
2225:                    }
2226:                    code.append("java.util.Calendar.").append(fieldText)
2227:                            .append(')'); // NOI18N
2228:                }
2229:                return code.toString();
2230:            }
2231:
2232:            /** Name of the root tag of the spinner model XML property editor. */
2233:            private static final String XML_SPINNER_MODEL = "SpinnerModel"; // NOI18N
2234:            /** Name of the tag where items of spinner list model are stored. */
2235:            private static final String XML_LIST_ITEM = "ListItem"; // NOI18N
2236:            /** Name of the initial attribute. */
2237:            private static final String ATTR_INITIAL = "initial"; // NOI18N
2238:            /** Name of the minimum attribute. */
2239:            private static final String ATTR_MINIMUM = "minimum"; // NOI18N
2240:            /** Name of the maximum attribute. */
2241:            private static final String ATTR_MAXIMUM = "maximum"; // NOI18N
2242:            /** Name of the step size attribute. */
2243:            private static final String ATTR_STEP_SIZE = "stepSize"; // NOI18N
2244:            /** Name of the type attribute. */
2245:            private static final String ATTR_TYPE = "type"; // NOI18N
2246:            /** Name of the number type attribute. */
2247:            private static final String ATTR_NUMBER_TYPE = "numberType"; // NOI18N
2248:            /** Name of the value attribute (on list item tag). */
2249:            private static final String ATTR_VALUE = "value"; // NOI18N
2250:            /** Value denoting default type. */
2251:            private static final String VALUE_TYPE_DEFAULT = "default"; // NOI18N
2252:            /** Value denoting number type. */
2253:            private static final String VALUE_TYPE_NUMBER = "number"; // NOI18N
2254:            /** Value denoting date type. */
2255:            private static final String VALUE_TYPE_DATE = "date"; // NOI18N
2256:            /** Value denoting list type. */
2257:            private static final String VALUE_TYPE_LIST = "list"; // NOI18N
2258:            /** Value denoting now (date value). */
2259:            private static final String VALUE_NOW = "now"; // NOI18N
2260:
2261:            public void readFromXML(Node element) throws IOException {
2262:                org.w3c.dom.NamedNodeMap attributes = element.getAttributes();
2263:                String type = attributes.getNamedItem(ATTR_TYPE).getNodeValue();
2264:                Object value = null;
2265:                if (VALUE_TYPE_DEFAULT.equals(type)) {
2266:                    value = property.getDefaultValue();
2267:                } else if (VALUE_TYPE_DATE.equals(type)) {
2268:                    value = readDateFromXML(element);
2269:                } else if (VALUE_TYPE_NUMBER.equals(type)) {
2270:                    value = readNumberFromXML(element);
2271:                } else if (VALUE_TYPE_LIST.equals(type)) {
2272:                    value = readListFromXML(element);
2273:                }
2274:                setValue(value);
2275:            }
2276:
2277:            public Node storeToXML(Document doc) {
2278:                org.w3c.dom.Element el = doc.createElement(XML_SPINNER_MODEL);
2279:                Object value = getValue();
2280:                if (!(value instanceof  FormSpinnerModel)) {
2281:                    el.setAttribute(ATTR_TYPE, VALUE_TYPE_DEFAULT);
2282:                } else {
2283:                    FormSpinnerModel model = (FormSpinnerModel) value;
2284:                    SpinnerModel spinnerModel = model.getModel();
2285:                    if (spinnerModel instanceof  SpinnerNumberModel) {
2286:                        storeNumberToXML(el, model);
2287:                    } else if (spinnerModel instanceof  SpinnerDateModel) {
2288:                        storeDateToXML(el, model);
2289:                    } else if (spinnerModel instanceof  SpinnerListModel) {
2290:                        storeListToXML(doc, el, model);
2291:                    }
2292:                }
2293:                return el;
2294:            }
2295:
2296:            private static void storeNumberToXML(org.w3c.dom.Element el,
2297:                    FormSpinnerModel model) {
2298:                el.setAttribute(ATTR_TYPE, VALUE_TYPE_NUMBER);
2299:                SpinnerNumberModel numberModel = (SpinnerNumberModel) model
2300:                        .getModel();
2301:                el.setAttribute(ATTR_NUMBER_TYPE, model.getInitialValue()
2302:                        .getClass().getName());
2303:                el.setAttribute(ATTR_INITIAL, model.getInitialValue()
2304:                        .toString());
2305:                Object minimum = numberModel.getMinimum();
2306:                if (minimum != null) {
2307:                    el.setAttribute(ATTR_MINIMUM, minimum.toString());
2308:                }
2309:                Object maximum = numberModel.getMaximum();
2310:                if (maximum != null) {
2311:                    el.setAttribute(ATTR_MAXIMUM, maximum.toString());
2312:                }
2313:                el.setAttribute(ATTR_STEP_SIZE, numberModel.getStepSize()
2314:                        .toString());
2315:            }
2316:
2317:            private static Object readNumberFromXML(org.w3c.dom.Node el) {
2318:                org.w3c.dom.NamedNodeMap attributes = el.getAttributes();
2319:                String numberType = attributes.getNamedItem(ATTR_NUMBER_TYPE)
2320:                        .getNodeValue();
2321:                String initialTxt = attributes.getNamedItem(ATTR_INITIAL)
2322:                        .getNodeValue();
2323:                org.w3c.dom.Node node = attributes.getNamedItem(ATTR_MINIMUM);
2324:                String minimumTxt = null;
2325:                if (node != null) {
2326:                    minimumTxt = node.getNodeValue();
2327:                }
2328:                node = attributes.getNamedItem(ATTR_MAXIMUM);
2329:                String maximumTxt = null;
2330:                if (node != null) {
2331:                    maximumTxt = node.getNodeValue();
2332:                }
2333:                String stepSizeTxt = attributes.getNamedItem(ATTR_STEP_SIZE)
2334:                        .getNodeValue();
2335:                Number stepSize = null;
2336:                Comparable minimum = null;
2337:                Comparable maximum = null;
2338:                Number initial = null;
2339:                if (numberType.equals("java.lang.Integer")) { // NOI18N
2340:                    initial = Integer.parseInt(initialTxt);
2341:                    minimum = (minimumTxt == null) ? null : Integer
2342:                            .parseInt(minimumTxt);
2343:                    maximum = (maximumTxt == null) ? null : Integer
2344:                            .parseInt(maximumTxt);
2345:                    stepSize = Integer.parseInt(stepSizeTxt);
2346:                } else if (numberType.equals("java.lang.Long")) { // NOI18N
2347:                    initial = Long.parseLong(initialTxt);
2348:                    minimum = (minimumTxt == null) ? null : Long
2349:                            .parseLong(minimumTxt);
2350:                    maximum = (maximumTxt == null) ? null : Long
2351:                            .parseLong(maximumTxt);
2352:                    stepSize = Long.parseLong(stepSizeTxt);
2353:                } else if (numberType.equals("java.lang.Float")) { // NOI18N
2354:                    initial = Float.parseFloat(initialTxt);
2355:                    minimum = (minimumTxt == null) ? null : Float
2356:                            .parseFloat(minimumTxt);
2357:                    maximum = (maximumTxt == null) ? null : Float
2358:                            .parseFloat(maximumTxt);
2359:                    stepSize = Float.parseFloat(stepSizeTxt);
2360:                } else if (numberType.equals("java.lang.Double")) { // NOI18N
2361:                    initial = Double.parseDouble(initialTxt);
2362:                    minimum = (minimumTxt == null) ? null : Double
2363:                            .parseDouble(minimumTxt);
2364:                    maximum = (maximumTxt == null) ? null : Double
2365:                            .parseDouble(maximumTxt);
2366:                    stepSize = Double.parseDouble(stepSizeTxt);
2367:                } else if (numberType.equals("java.lang.Short")) { // NOI18N
2368:                    initial = Short.parseShort(initialTxt);
2369:                    minimum = (minimumTxt == null) ? null : Short
2370:                            .parseShort(minimumTxt);
2371:                    maximum = (maximumTxt == null) ? null : Short
2372:                            .parseShort(maximumTxt);
2373:                    stepSize = Short.parseShort(stepSizeTxt);
2374:                } else if (numberType.equals("java.lang.Byte")) { // NOI18N
2375:                    initial = Byte.parseByte(initialTxt);
2376:                    minimum = (minimumTxt == null) ? null : Byte
2377:                            .parseByte(minimumTxt);
2378:                    maximum = (maximumTxt == null) ? null : Byte
2379:                            .parseByte(maximumTxt);
2380:                    stepSize = Byte.parseByte(stepSizeTxt);
2381:                }
2382:                SpinnerNumberModel spinnerModel = new SpinnerNumberModel(
2383:                        initial, minimum, maximum, stepSize);
2384:                return new FormSpinnerModel(spinnerModel, initial);
2385:            }
2386:
2387:            private static void storeDateToXML(org.w3c.dom.Element el,
2388:                    FormSpinnerModel model) {
2389:                el.setAttribute(ATTR_TYPE, VALUE_TYPE_DATE);
2390:                SpinnerDateModel dateModel = (SpinnerDateModel) model
2391:                        .getModel();
2392:                String initialText;
2393:                if (model.isInitialNow()) {
2394:                    initialText = VALUE_NOW;
2395:                } else {
2396:                    Date initial = (Date) model.getInitialValue();
2397:                    initialText = "" + initial.getTime(); // NOI18N
2398:                }
2399:                el.setAttribute(ATTR_INITIAL, initialText);
2400:                Date minimum = (Date) dateModel.getStart();
2401:                if (minimum != null) {
2402:                    String minimumText;
2403:                    if (model.isMinimumNow()) {
2404:                        minimumText = VALUE_NOW;
2405:                    } else {
2406:                        minimumText = "" + minimum.getTime(); // NOI18N
2407:                    }
2408:                    el.setAttribute(ATTR_MINIMUM, minimumText);
2409:                }
2410:                Date maximum = (Date) dateModel.getEnd();
2411:                if (maximum != null) {
2412:                    String maximumText;
2413:                    if (model.isMaximumNow()) {
2414:                        maximumText = VALUE_NOW;
2415:                    } else {
2416:                        maximumText = "" + maximum.getTime(); // NOI18N
2417:                    }
2418:                    el.setAttribute(ATTR_MAXIMUM, maximumText);
2419:                }
2420:                el.setAttribute(ATTR_STEP_SIZE, ""
2421:                        + dateModel.getCalendarField()); // NOI18N
2422:            }
2423:
2424:            private static Object readDateFromXML(org.w3c.dom.Node el) {
2425:                org.w3c.dom.NamedNodeMap attributes = el.getAttributes();
2426:                String initialTxt = attributes.getNamedItem(ATTR_INITIAL)
2427:                        .getNodeValue();
2428:                Date now = new Date();
2429:                boolean initialNow = false;
2430:                Date initial;
2431:                if (VALUE_NOW.equals(initialTxt)) {
2432:                    initialNow = true;
2433:                    initial = now;
2434:                } else {
2435:                    initial = new Date(Long.parseLong(initialTxt));
2436:                }
2437:                Node node = attributes.getNamedItem(ATTR_MINIMUM);
2438:                String minimumTxt = (node == null) ? null : node.getNodeValue();
2439:                boolean minimumNow = false;
2440:                Date minimum = null;
2441:                if (minimumTxt != null) {
2442:                    if (VALUE_NOW.equals(minimumTxt)) {
2443:                        minimumNow = true;
2444:                        minimum = now;
2445:                    } else {
2446:                        minimum = new Date(Long.parseLong(minimumTxt));
2447:                    }
2448:                }
2449:                node = attributes.getNamedItem(ATTR_MAXIMUM);
2450:                String maximumTxt = (node == null) ? null : node.getNodeValue();
2451:                boolean maximumNow = false;
2452:                Date maximum = null;
2453:                if (maximumTxt != null) {
2454:                    if (VALUE_NOW.equals(maximumTxt)) {
2455:                        maximumNow = true;
2456:                        maximum = now;
2457:                    } else {
2458:                        maximum = new Date(Long.parseLong(maximumTxt));
2459:                    }
2460:                }
2461:                String stepSizeTxt = attributes.getNamedItem(ATTR_STEP_SIZE)
2462:                        .getNodeValue();
2463:                int calendarField = Integer.parseInt(stepSizeTxt);
2464:                SpinnerDateModel spinnerModel = new SpinnerDateModel(initial,
2465:                        minimum, maximum, calendarField);
2466:                return new FormSpinnerModel(spinnerModel, initial, initialNow,
2467:                        minimumNow, maximumNow);
2468:            }
2469:
2470:            private static void storeListToXML(Document doc,
2471:                    org.w3c.dom.Element el, FormSpinnerModel model) {
2472:                el.setAttribute(ATTR_TYPE, VALUE_TYPE_LIST);
2473:                SpinnerListModel listModel = (SpinnerListModel) model
2474:                        .getModel();
2475:                List items = listModel.getList();
2476:                for (Object item : items) {
2477:                    org.w3c.dom.Element elItem = doc
2478:                            .createElement(XML_LIST_ITEM);
2479:                    elItem.setAttribute(ATTR_VALUE, item.toString());
2480:                    el.appendChild(elItem);
2481:                }
2482:            }
2483:
2484:            private static Object readListFromXML(org.w3c.dom.Node el) {
2485:                org.w3c.dom.NodeList nodes = el.getChildNodes();
2486:                List<String> list = new LinkedList<String>();
2487:                for (int i = 0; i < nodes.getLength(); i++) {
2488:                    org.w3c.dom.Node node = nodes.item(i);
2489:                    if (XML_LIST_ITEM.equals(node.getNodeName())) {
2490:                        list.add(node.getAttributes().getNamedItem(ATTR_VALUE)
2491:                                .getNodeValue());
2492:                    }
2493:                }
2494:                SpinnerListModel spinnerModel = new SpinnerListModel(list);
2495:                return new FormSpinnerModel(spinnerModel, list.get(0));
2496:            }
2497:
2498:            /**
2499:             * Retruns display name of this property editor. 
2500:             * 
2501:             * @return diaplay name of this property editor.
2502:             */
2503:            public String getDisplayName() {
2504:                return NbBundle.getMessage(getClass(), "SpinnerModelEditor"); // NOI18N
2505:            }
2506:
2507:            /**
2508:             * Sets context of the property editor. 
2509:             * 
2510:             * @param formModel form model.
2511:             * @param property property being edited.
2512:             */
2513:            public void setContext(FormModel formModel, FormProperty property) {
2514:                this .property = property;
2515:            }
2516:
2517:            /**
2518:             * Raise form version to 6.0 - this editor is available since NB 6.0.
2519:             */
2520:            public void updateFormVersionLevel() {
2521:                property.getPropertyContext().getFormModel().raiseVersionLevel(
2522:                        FormModel.FormVersion.NB60, FormModel.FormVersion.NB60);
2523:            }
2524:
2525:            /**
2526:             * Form wrapper for <code>SpinnerModel</code>. It allows us to keep
2527:             * some meta-information about the <code>SpinnerModel</code>.
2528:             */
2529:            public static class FormSpinnerModel extends FormDesignValueAdapter {
2530:                /** Spinner model. */
2531:                private SpinnerModel model;
2532:                /** Initial value of the spinner model. */
2533:                private Object initialValue;
2534:                /** Determines whether the initial value represents "now". */
2535:                private boolean initialNow;
2536:                /** Determines whether the minimum value represents "now". */
2537:                private boolean minimumNow;
2538:                /** Determines whether the maximum value represents "now". */
2539:                private boolean maximumNow;
2540:
2541:                /**
2542:                 * Creates new <code>FormSpinnerModel</code>.
2543:                 * 
2544:                 * @param model spinner list model.
2545:                 * @param initialValue initial value of the model.
2546:                 */
2547:                public FormSpinnerModel(SpinnerListModel model,
2548:                        Object initialValue) {
2549:                    this .model = model;
2550:                    this .initialValue = initialValue;
2551:                }
2552:
2553:                /**
2554:                 * Creates new <code>FormSpinnerModel</code>.
2555:                 * 
2556:                 * @param model spinner number model.
2557:                 * @param initialValue initial value of the model.
2558:                 */
2559:                public FormSpinnerModel(SpinnerNumberModel model,
2560:                        Object initialValue) {
2561:                    this .model = model;
2562:                    this .initialValue = initialValue;
2563:                }
2564:
2565:                /**
2566:                 * Creates new <code>FormSpinnerModel</code>.
2567:                 * 
2568:                 * @param model spinner date model.
2569:                 * @param initialValue initial value of the model.
2570:                 * @param initialNow determines whether the initial value represents "now". 
2571:                 * @param minimumNow determines whether the minimum value represents "now". 
2572:                 * @param maximumNow determines whether the maximum value represents "now". 
2573:                 */
2574:                public FormSpinnerModel(SpinnerDateModel model,
2575:                        Object initialValue, boolean initialNow,
2576:                        boolean minimumNow, boolean maximumNow) {
2577:                    this .model = model;
2578:                    this .initialValue = initialValue;
2579:                    this .initialNow = initialNow;
2580:                    this .minimumNow = minimumNow;
2581:                    this .maximumNow = maximumNow;
2582:                }
2583:
2584:                /**
2585:                 * Returns the wrapped spinner model.
2586:                 * 
2587:                 * @return the wrapped spinner model.
2588:                 */
2589:                public SpinnerModel getModel() {
2590:                    return model;
2591:                }
2592:
2593:                /**
2594:                 * Returns initial value of the model. 
2595:                 * 
2596:                 * @return initial value of the model.
2597:                 */
2598:                public Object getInitialValue() {
2599:                    return initialValue;
2600:                }
2601:
2602:                /**
2603:                 * Determines whether the initial value represents "now".
2604:                 * 
2605:                 * @return <code>true</code> if the initial value represents "now",
2606:                 * returns <code>false</code> otherwise.
2607:                 */
2608:                public boolean isInitialNow() {
2609:                    return initialNow;
2610:                }
2611:
2612:                /**
2613:                 * Determines whether the minimum value represents "now".
2614:                 * 
2615:                 * @return <code>true</code> if the minimum value represents "now",
2616:                 * returns <code>false</code> otherwise.
2617:                 */
2618:                public boolean isMinimumNow() {
2619:                    return minimumNow;
2620:                }
2621:
2622:                /**
2623:                 * Determines whether the maximum value represents "now".
2624:                 * 
2625:                 * @return <code>true</code> if the maximum value represents "now",
2626:                 * returns <code>false</code> otherwise.
2627:                 */
2628:                public boolean isMaximumNow() {
2629:                    return maximumNow;
2630:                }
2631:
2632:                /**
2633:                 * Returns design value.
2634:                 * 
2635:                 * @return design value.
2636:                 */
2637:                public SpinnerModel getDesignValue() {
2638:                    return model;
2639:                }
2640:
2641:            }
2642:
2643:        }
www.java2java.com | Contact Us
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.