Docjar: A Java Source and Docuemnt Enginecom.*    java.*    javax.*    org.*    all    new    plug-in

Quick Search    Search Deep

Source code: com/paradoxpoint/libitina/Libitina.java


1   /*
2    * Libitina - Funeral Monument Image Compositor
3    * Copyright (C) 2003,2004  Luke Imhoff
4    *
5    * Contact Info:
6    * luke@paradoxpoint.com
7    * Luke Imhoff
8    * 2514 Pied Piper Lane
9    * Wausau, WI 54403 
10   *
11   * This program is free software; you can redistribute it and/or
12   * modify it under the terms of the GNU General Public License
13   * as published by the Free Software Foundation; either version 2
14   * of the License, or (at your option) any later version.
15   * 
16   * This program is distributed in the hope that it will be useful,
17   * but WITHOUT ANY WARRANTY; without even the implied warranty of
18   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19   * GNU General Public License for more details.
20   *
21   * You should have received a copy of the GNU General Public License
22   * along with this program; if not, write to the Free Software
23   * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
24   *
25   * MachinaLibitina.java
26   *
27   * Created on February 24, 2003, 4:07 PM
28   */
29  
30  package com.paradoxpoint.libitina;
31  
32  import com.paradoxpoint.libitina.gui.*;
33  import com.paradoxpoint.libitina.gui.binding.*;
34  import com.paradoxpoint.libitina.gui.datatransfer.*;
35  import com.paradoxpoint.libitina.gui.text.*;
36  import com.paradoxpoint.libitina.monument.*;
37  import com.paradoxpoint.libitina.option.*;
38  import com.paradoxpoint.libitina.tool.*;
39  import com.paradoxpoint.libitina.util.*;
40  
41  import java.awt.*;
42  import java.awt.event.*;
43  import java.beans.*;
44  import java.io.*;
45  import java.net.*;
46  import java.text.*;
47  import java.util.*;
48  
49  import javax.swing.*;
50  import javax.swing.event.*;
51  import javax.swing.table.*;
52  import javax.swing.text.*;
53  import javax.swing.tree.*;
54  
55  /** An application designed for image compositing, specifically to make color
56   * previews of funeral monuments for funeral home customers prior to final sale of
57   * the monument.
58   * @author Luke Imhoff
59   */
60  public class Libitina extends javax.swing.JFrame implements ItemContainer {
61      
62      /** Creates new form Libitina */
63      public Libitina() {
64          System.out.println("Initializing GUI Components");
65          initComponents();
66          System.out.println("Initializing GUI State");
67          postInit();
68      }
69      
70      /** This method, is called from within the constructor to
71       * initialize the form.
72       * WARNING: Do NOT modify this code. The content of this method is
73       * always regenerated by the Form Editor.
74       */
75      private void initComponents() {//GEN-BEGIN:initComponents
76          javax.swing.JSeparator editMenu_Seperator1;
77          javax.swing.JSeparator fileMenu_Separator2;
78          javax.swing.JSeparator filemMenu_Separator1;
79          java.awt.GridBagConstraints gridBagConstraints;
80          javax.swing.JSeparator infoPanel_Separator;
81          javax.swing.JSeparator toolMenu_Separator1;
82  
83          toolsButtonGroup = new javax.swing.ButtonGroup();
84          toolsMenuButtonGroup = new javax.swing.ButtonGroup();
85          fontButtonGroup = new javax.swing.ButtonGroup();
86          sizeButtonGroup = new javax.swing.ButtonGroup();
87          alignButtonGroup = new javax.swing.ButtonGroup();
88          alignMenuButtonGroup = new javax.swing.ButtonGroup();
89          monumentFileChooser = new javax.swing.JFileChooser();
90          viewPanel = new javax.swing.JPanel();
91          toolsPanel = new javax.swing.JPanel();
92          editToolBar = new javax.swing.JToolBar();
93          arrowToggleButton = new javax.swing.JToggleButton();
94          addToolBar = new javax.swing.JToolBar();
95          itemsToggleButton = new javax.swing.JToggleButton();
96          textToggleButton = new javax.swing.JToggleButton();
97          backgroundToggleButton = new javax.swing.JToggleButton();
98          materialToggleButton = new javax.swing.JToggleButton();
99          designToggleButton = new javax.swing.JToggleButton();
100         workAreaSplitPane = new javax.swing.JSplitPane();
101         workAreaScrollPane = new javax.swing.JScrollPane();
102         workAreaPanel = new javax.swing.JPanel();
103         contentPanel = new javax.swing.JPanel();
104         contentLayeredPane = new javax.swing.JLayeredPane();
105         itemsPanel = new javax.swing.JPanel();
106         modesTabbedPane = new javax.swing.JTabbedPane();
107         textPanel = new javax.swing.JPanel();
108         textMenuPanel = new javax.swing.JPanel();
109         fontComboBox = new com.paradoxpoint.libitina.gui.text.FontComboBox();
110         sizeComboBox = new javax.swing.JComboBox();
111         alignToolBar = new javax.swing.JToolBar();
112         leftToggleButton = new javax.swing.JToggleButton();
113         centerToggleButton = new javax.swing.JToggleButton();
114         rightToggleButton = new javax.swing.JToggleButton();
115         textScrollPane = new javax.swing.JScrollPane();
116         textPane = new javax.swing.JTextPane();
117         addTextButton = new javax.swing.JButton();
118         explorerSplitPane = new javax.swing.JSplitPane();
119         previewPanel = new javax.swing.JPanel();
120         previewLabel = new javax.swing.JLabel();
121         itemsTabbedPane = new javax.swing.JTabbedPane();
122         layersPanel = new javax.swing.JPanel();
123         layersScrollPane = new javax.swing.JScrollPane();
124         layersTable = new javax.swing.JTable();
125         infoPanel = new javax.swing.JPanel();
126         mouseLabel = new javax.swing.JLabel();
127         mouseXTextField = new javax.swing.JTextField();
128         mouseYTextField = new javax.swing.JTextField();
129         infoPanel_Separator = new javax.swing.JSeparator();
130         menuBar = new javax.swing.JMenuBar();
131         fileMenu = new javax.swing.JMenu();
132         newMenuItem = new javax.swing.JMenuItem();
133         openMenuItem = new javax.swing.JMenuItem();
134         saveMenuItem = new javax.swing.JMenuItem();
135         saveAsMenuItem = new javax.swing.JMenuItem();
136         filemMenu_Separator1 = new javax.swing.JSeparator();
137         printMenuItem = new javax.swing.JMenuItem();
138         pageSetupMenuItem = new javax.swing.JMenuItem();
139         fileMenu_Separator2 = new javax.swing.JSeparator();
140         exitMenuItem = new javax.swing.JMenuItem();
141         editMenu = new javax.swing.JMenu();
142         undoMenuItem = new javax.swing.JMenuItem();
143         redoMenuItem = new javax.swing.JMenuItem();
144         editMenu_Seperator1 = new javax.swing.JSeparator();
145         cutMenuItem = new javax.swing.JMenuItem();
146         copyMenuItem = new javax.swing.JMenuItem();
147         pasteMenuItem = new javax.swing.JMenuItem();
148         deleteMenuItem = new javax.swing.JMenuItem();
149         modifyMenu = new javax.swing.JMenu();
150         transformMenu = new javax.swing.JMenu();
151         flipHorizontalMenuItem = new javax.swing.JMenuItem();
152         flipVerticalMenuItem = new javax.swing.JMenuItem();
153         layerMenu = new javax.swing.JMenu();
154         frontMenuItem = new javax.swing.JMenuItem();
155         forwardMenuItem = new javax.swing.JMenuItem();
156         backwardMenuItem = new javax.swing.JMenuItem();
157         backMenuItem = new javax.swing.JMenuItem();
158         textMenu = new javax.swing.JMenu();
159         fontMenu = new FontMenu();
160         sizeMenu = new javax.swing.JMenu();
161         alignMenu = new javax.swing.JMenu();
162         leftRadioButtonMenuItem = new javax.swing.JRadioButtonMenuItem();
163         centerRadioButtonMenuItem = new javax.swing.JRadioButtonMenuItem();
164         rightRadioButtonMenuItem = new javax.swing.JRadioButtonMenuItem();
165         toolMenu = new javax.swing.JMenu();
166         arrowRadioButtonMenuItem = new javax.swing.JRadioButtonMenuItem();
167         itemsRadioButtonMenuItem = new javax.swing.JRadioButtonMenuItem();
168         textRadioButtonMenuItem = new javax.swing.JRadioButtonMenuItem();
169         backgroundRadioButtonMenuItem = new javax.swing.JRadioButtonMenuItem();
170         materialRadioButtonMenuItem = new javax.swing.JRadioButtonMenuItem();
171         designRadioButtonMenuItem = new javax.swing.JRadioButtonMenuItem();
172         toolMenu_Separator1 = new javax.swing.JSeparator();
173         simpleDesignsCheckBoxMenuItem = new javax.swing.JCheckBoxMenuItem();
174         helpMenu = new javax.swing.JMenu();
175         contentsMenuItem = new javax.swing.JMenuItem();
176         aboutMenuItem = new javax.swing.JMenuItem();
177         preInit();
178 
179         monumentFileChooser.setFileFilter(new ExampleFileFilter("lmf","Libitina Monument File"));
180 
181         setTitle("Libitina");
182         setIconImage(new ImageIcon(getClass().getResource("/icons/libitina32.gif")).getImage());
183         addWindowListener(new java.awt.event.WindowAdapter() {
184             public void windowClosing(java.awt.event.WindowEvent evt) {
185                 exitForm(evt);
186             }
187         });
188 
189         viewPanel.setLayout(new javax.swing.BoxLayout(viewPanel, javax.swing.BoxLayout.X_AXIS));
190 
191         getContentPane().add(viewPanel, java.awt.BorderLayout.NORTH);
192 
193         toolsPanel.setLayout(new javax.swing.BoxLayout(toolsPanel, javax.swing.BoxLayout.Y_AXIS));
194 
195         toolsPanel.setPreferredSize(new java.awt.Dimension(30, 549));
196         editToolBar.setFloatable(false);
197         editToolBar.setOrientation(1);
198         editToolBar.setToolTipText("Edit");
199         editToolBar.setMinimumSize(new java.awt.Dimension(55, 50));
200         editToolBar.setPreferredSize(new java.awt.Dimension(55, 75));
201         arrowToggleButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/arrow.gif")));
202         arrowToggleButton.setSelected(true);
203         arrowToggleButton.setToolTipText("Arrow Tool");
204         toolsButtonGroup.add(arrowToggleButton);
205         arrowToggleButton.setActionCommand(Tool.ARROW.toString());
206         arrowToggleButton.setMaximumSize(new java.awt.Dimension(26, 26));
207         arrowToggleButton.setMinimumSize(new java.awt.Dimension(26, 26));
208         arrowToggleButton.setPreferredSize(new java.awt.Dimension(26, 26));
209         arrowToggleButton.addActionListener(defaultToolHelper);
210         editToolBar.add(arrowToggleButton);
211 
212         toolsPanel.add(editToolBar);
213 
214         addToolBar.setFloatable(false);
215         addToolBar.setOrientation(1);
216         addToolBar.setToolTipText("Add");
217         addToolBar.setPreferredSize(new java.awt.Dimension(55, 100));
218         itemsToggleButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/engravings.gif")));
219         itemsToggleButton.setToolTipText("Items Tool");
220         toolsButtonGroup.add(itemsToggleButton);
221         itemsToggleButton.setActionCommand(Tool.ITEMS.toString());
222         itemsToggleButton.setMaximumSize(new java.awt.Dimension(26, 26));
223         itemsToggleButton.setMinimumSize(new java.awt.Dimension(26, 26));
224         itemsToggleButton.setPreferredSize(new java.awt.Dimension(26, 26));
225         itemsToggleButton.addActionListener(defaultToolHelper);
226         addToolBar.add(itemsToggleButton);
227 
228         textToggleButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/text.gif")));
229         textToggleButton.setToolTipText("Text Tool");
230         toolsButtonGroup.add(textToggleButton);
231         textToggleButton.setActionCommand(Tool.TEXT.toString());
232         textToggleButton.setMaximumSize(new java.awt.Dimension(26, 26));
233         textToggleButton.setMinimumSize(new java.awt.Dimension(26, 26));
234         textToggleButton.addActionListener(defaultToolHelper);
235         addToolBar.add(textToggleButton);
236 
237         backgroundToggleButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/background.gif")));
238         backgroundToggleButton.setToolTipText("Background Tool");
239         toolsButtonGroup.add(backgroundToggleButton);
240         backgroundToggleButton.setActionCommand(Tool.BACKGROUND.toString());
241         backgroundToggleButton.setMaximumSize(new java.awt.Dimension(26, 26));
242         backgroundToggleButton.setMinimumSize(new java.awt.Dimension(26, 26));
243         backgroundToggleButton.setPreferredSize(new java.awt.Dimension(26, 26));
244         backgroundToggleButton.addActionListener(defaultToolHelper);
245         addToolBar.add(backgroundToggleButton);
246 
247         materialToggleButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/material.gif")));
248         materialToggleButton.setToolTipText("Material Tool");
249         toolsButtonGroup.add(materialToggleButton);
250         materialToggleButton.setActionCommand(Tool.MATERIAL.toString());
251         materialToggleButton.setMaximumSize(new java.awt.Dimension(26, 26));
252         materialToggleButton.setMinimumSize(new java.awt.Dimension(26, 26));
253         materialToggleButton.setPreferredSize(new java.awt.Dimension(26, 26));
254         materialToggleButton.addActionListener(defaultToolHelper);
255         addToolBar.add(materialToggleButton);
256 
257         designToggleButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/design.gif")));
258         designToggleButton.setToolTipText("Design Tool");
259         toolsButtonGroup.add(designToggleButton);
260         designToggleButton.setActionCommand(Tool.DESIGN.toString());
261         designToggleButton.setMaximumSize(new java.awt.Dimension(26, 26));
262         designToggleButton.setMinimumSize(new java.awt.Dimension(26, 26));
263         designToggleButton.setPreferredSize(new java.awt.Dimension(26, 26));
264         designToggleButton.addActionListener(defaultToolHelper);
265         addToolBar.add(designToggleButton);
266 
267         toolsPanel.add(addToolBar);
268 
269         getContentPane().add(toolsPanel, java.awt.BorderLayout.WEST);
270 
271         workAreaSplitPane.setDividerLocation(740);
272         workAreaSplitPane.setDividerSize(5);
273         workAreaSplitPane.setResizeWeight(1.0);
274         workAreaSplitPane.setPreferredSize(new java.awt.Dimension(990, 202));
275         workAreaScrollPane.setBackground(new java.awt.Color(255, 255, 255));
276         workAreaScrollPane.setPreferredSize(new java.awt.Dimension(735, 630));
277         workAreaScrollPane.addComponentListener(new java.awt.event.ComponentAdapter() {
278             public void componentResized(java.awt.event.ComponentEvent evt) {
279                 workAreaScrollPaneComponentResized(evt);
280             }
281         });
282 
283         workAreaPanel.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.CENTER, 0, 0));
284 
285         workAreaPanel.setBackground(new java.awt.Color(153, 153, 153));
286         workAreaPanel.addComponentListener(new java.awt.event.ComponentAdapter() {
287             public void componentResized(java.awt.event.ComponentEvent evt) {
288                 workAreaPanelComponentResized(evt);
289             }
290         });
291         workAreaPanel.addMouseListener(new java.awt.event.MouseAdapter() {
292             public void mousePressed(java.awt.event.MouseEvent evt) {
293                 workAreaPanelMousePressed(evt);
294             }
295         });
296 
297         contentPanel.setLayout(new java.awt.BorderLayout());
298 
299         contentPanel.setBackground(new java.awt.Color(255, 255, 255));
300         contentPanel.setBorder(new javax.swing.border.EtchedBorder());
301         contentPanel.setPreferredSize(new java.awt.Dimension(740, 630));
302         contentLayeredPane.setTransferHandler(itemTransferHandler);
303         contentLayeredPane.addComponentListener(new java.awt.event.ComponentAdapter() {
304             public void componentResized(java.awt.event.ComponentEvent evt) {
305                 contentLayeredPaneComponentResized(evt);
306             }
307         });
308 
309         contentPanel.add(contentLayeredPane, java.awt.BorderLayout.CENTER);
310 
311         workAreaPanel.add(contentPanel);
312 
313         workAreaScrollPane.setViewportView(workAreaPanel);
314 
315         workAreaSplitPane.setLeftComponent(workAreaScrollPane);
316 
317         itemsPanel.setLayout(new javax.swing.BoxLayout(itemsPanel, javax.swing.BoxLayout.Y_AXIS));
318 
319         itemsPanel.setMinimumSize(new java.awt.Dimension(290, 200));
320         itemsPanel.setPreferredSize(new java.awt.Dimension(290, 200));
321         modesTabbedPane.setTabPlacement(javax.swing.JTabbedPane.BOTTOM);
322         textPanel.setLayout(new java.awt.BorderLayout());
323 
324         textMenuPanel.setLayout(new java.awt.GridBagLayout());
325 
326         fontComboBox.setActionCommand("FONT");
327         gridBagConstraints = new java.awt.GridBagConstraints();
328         gridBagConstraints.gridwidth = 2;
329         textMenuPanel.add(fontComboBox, gridBagConstraints);
330 
331         sizeComboBox.setEditable(true);
332         sizeComboBox.setActionCommand("SIZE");
333         gridBagConstraints = new java.awt.GridBagConstraints();
334         gridBagConstraints.gridx = 0;
335         gridBagConstraints.gridy = 1;
336         textMenuPanel.add(sizeComboBox, gridBagConstraints);
337 
338         alignToolBar.setFloatable(false);
339         leftToggleButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/text/AlignLeft16.gif")));
340         alignButtonGroup.add(leftToggleButton);
341         leftToggleButton.setActionCommand("ALIGN");
342         leftToggleButton.setMaximumSize(new java.awt.Dimension(26, 26));
343         leftToggleButton.setName(String.valueOf(StyleConstants.ALIGN_LEFT));
344         leftToggleButton.setPreferredSize(new java.awt.Dimension(26, 26));
345         leftToggleButton.addActionListener(defaultTextHelper);
346         alignToolBar.add(leftToggleButton);
347 
348         centerToggleButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/text/AlignCenter16.gif")));
349         alignButtonGroup.add(centerToggleButton);
350         centerToggleButton.setActionCommand("ALIGN");
351         centerToggleButton.setMaximumSize(new java.awt.Dimension(26, 26));
352         centerToggleButton.setName(String.valueOf(StyleConstants.ALIGN_CENTER));
353         centerToggleButton.setPreferredSize(new java.awt.Dimension(26, 26));
354         centerToggleButton.addActionListener(defaultTextHelper);
355         alignToolBar.add(centerToggleButton);
356 
357         rightToggleButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/text/AlignRight16.gif")));
358         alignButtonGroup.add(rightToggleButton);
359         rightToggleButton.setActionCommand("ALIGN");
360         rightToggleButton.setMaximumSize(new java.awt.Dimension(26, 26));
361         rightToggleButton.setName(String.valueOf(StyleConstants.ALIGN_RIGHT));
362         rightToggleButton.setPreferredSize(new java.awt.Dimension(26, 26));
363         rightToggleButton.addActionListener(defaultTextHelper);
364         alignToolBar.add(rightToggleButton);
365 
366         gridBagConstraints = new java.awt.GridBagConstraints();
367         gridBagConstraints.gridx = 1;
368         gridBagConstraints.gridy = 1;
369         textMenuPanel.add(alignToolBar, gridBagConstraints);
370 
371         textPanel.add(textMenuPanel, java.awt.BorderLayout.NORTH);
372 
373         textPane.setDocument(new GlobalStyleDocument());
374         textPane.setCaret(new PersistentCaret());
375         textScrollPane.setViewportView(textPane);
376 
377         textPanel.add(textScrollPane, java.awt.BorderLayout.CENTER);
378 
379         addTextButton.setText("Add Text");
380         addTextButton.setToolTipText("Add Text as a New TextItem");
381         addTextButton.addActionListener(new java.awt.event.ActionListener() {
382             public void actionPerformed(java.awt.event.ActionEvent evt) {
383                 addTextButtonActionPerformed(evt);
384             }
385         });
386 
387         textPanel.add(addTextButton, java.awt.BorderLayout.SOUTH);
388 
389         modesTabbedPane.addTab("Text Editor", textPanel);
390 
391         explorerSplitPane.setDividerLocation(150);
392         explorerSplitPane.setDividerSize(5);
393         explorerSplitPane.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT);
394         previewPanel.setLayout(new javax.swing.BoxLayout(previewPanel, javax.swing.BoxLayout.X_AXIS));
395 
396         previewPanel.setBackground(new java.awt.Color(255, 255, 255));
397         previewPanel.setBorder(new javax.swing.border.TitledBorder("Preview"));
398         previewLabel.setTransferHandler(itemTransferHandler);
399         previewPanel.add(previewLabel);
400 
401         explorerSplitPane.setTopComponent(previewPanel);
402 
403         explorerSplitPane.setBottomComponent(itemsTabbedPane);
404 
405         modesTabbedPane.addTab("Explorer", explorerSplitPane);
406 
407         layersPanel.setLayout(new java.awt.BorderLayout());
408 
409         layersPanel.setBackground(new java.awt.Color(255, 255, 255));
410         layersScrollPane.setBackground(new java.awt.Color(255, 255, 255));
411         layersTable.setModel(new javax.swing.table.DefaultTableModel(
412             new Object [][] {
413 
414             },
415             new String [] {
416 
417             }
418         ));
419         layersTable.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_OFF);
420         layersScrollPane.setViewportView(layersTable);
421 
422         layersPanel.add(layersScrollPane, java.awt.BorderLayout.CENTER);
423 
424         modesTabbedPane.addTab("Layer Viewer", layersPanel);
425 
426         itemsPanel.add(modesTabbedPane);
427 
428         workAreaSplitPane.setRightComponent(itemsPanel);
429 
430         getContentPane().add(workAreaSplitPane, java.awt.BorderLayout.CENTER);
431 
432         infoPanel.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.LEFT));
433 
434         infoPanel.setBorder(new javax.swing.border.BevelBorder(javax.swing.border.BevelBorder.RAISED));
435         mouseLabel.setText("Mouse:");
436         infoPanel.add(mouseLabel);
437 
438         mouseXTextField.setColumns(4);
439         mouseXTextField.setEditable(false);
440         mouseXTextField.setHorizontalAlignment(javax.swing.JTextField.TRAILING);
441         infoPanel.add(mouseXTextField);
442 
443         mouseYTextField.setColumns(4);
444         mouseYTextField.setEditable(false);
445         mouseYTextField.setHorizontalAlignment(javax.swing.JTextField.TRAILING);
446         infoPanel.add(mouseYTextField);
447 
448         infoPanel_Separator.setOrientation(javax.swing.SwingConstants.VERTICAL);
449         infoPanel_Separator.setPreferredSize(new java.awt.Dimension(1, 15));
450         infoPanel.add(infoPanel_Separator);
451 
452         getContentPane().add(infoPanel, java.awt.BorderLayout.SOUTH);
453 
454         fileMenu.setMnemonic('F');
455         fileMenu.setText("File");
456         newMenuItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_N, java.awt.event.InputEvent.CTRL_MASK));
457         newMenuItem.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/general/New16.gif")));
458         newMenuItem.setMnemonic('N');
459         newMenuItem.setText("New");
460         newMenuItem.addActionListener(new java.awt.event.ActionListener() {
461             public void actionPerformed(java.awt.event.ActionEvent evt) {
462                 newMenuItemActionPerformed(evt);
463             }
464         });
465 
466         fileMenu.add(newMenuItem);
467 
468         openMenuItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_O, java.awt.event.InputEvent.CTRL_MASK));
469         openMenuItem.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/general/Open16.gif")));
470         openMenuItem.setMnemonic('O');
471         openMenuItem.setText("Open");
472         openMenuItem.addActionListener(new java.awt.event.ActionListener() {
473             public void actionPerformed(java.awt.event.ActionEvent evt) {
474                 openMenuItemActionPerformed(evt);
475             }
476         });
477 
478         fileMenu.add(openMenuItem);
479 
480         saveMenuItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_S, java.awt.event.InputEvent.CTRL_MASK));
481         saveMenuItem.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/general/Save16.gif")));
482         saveMenuItem.setMnemonic('S');
483         saveMenuItem.setText("Save");
484         saveMenuItem.addActionListener(new java.awt.event.ActionListener() {
485             public void actionPerformed(java.awt.event.ActionEvent evt) {
486                 saveMenuItemActionPerformed(evt);
487             }
488         });
489 
490         fileMenu.add(saveMenuItem);
491 
492         saveAsMenuItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_S, java.awt.event.InputEvent.SHIFT_MASK | java.awt.event.InputEvent.CTRL_MASK));
493         saveAsMenuItem.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/general/SaveAs16.gif")));
494         saveAsMenuItem.setMnemonic('a');
495         saveAsMenuItem.setText("Save As ...");
496         saveAsMenuItem.addActionListener(new java.awt.event.ActionListener() {
497             public void actionPerformed(java.awt.event.ActionEvent evt) {
498                 saveAsMenuItemActionPerformed(evt);
499             }
500         });
501 
502         fileMenu.add(saveAsMenuItem);
503 
504         fileMenu.add(filemMenu_Separator1);
505 
506         printMenuItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_P, java.awt.event.InputEvent.CTRL_MASK));
507         printMenuItem.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/general/Print16.gif")));
508         printMenuItem.setMnemonic('P');
509         printMenuItem.setText("Print");
510         printMenuItem.addActionListener(new java.awt.event.ActionListener() {
511             public void actionPerformed(java.awt.event.ActionEvent evt) {
512                 printMenuItemActionPerformed(evt);
513             }
514         });
515 
516         fileMenu.add(printMenuItem);
517 
518         pageSetupMenuItem.setText("Page Setup");
519         pageSetupMenuItem.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/general/PageSetup16.gif")));
520         pageSetupMenuItem.addActionListener(new java.awt.event.ActionListener() {
521             public void actionPerformed(java.awt.event.ActionEvent evt) {
522                 pageSetupMenuItemActionPerformed(evt);
523             }
524         });
525 
526         fileMenu.add(pageSetupMenuItem);
527 
528         fileMenu.add(fileMenu_Separator2);
529 
530         exitMenuItem.setMnemonic('x');
531         exitMenuItem.setText("Exit");
532         exitMenuItem.addActionListener(new java.awt.event.ActionListener() {
533             public void actionPerformed(java.awt.event.ActionEvent evt) {
534                 exitMenuItemActionPerformed(evt);
535             }
536         });
537 
538         fileMenu.add(exitMenuItem);
539 
540         menuBar.add(fileMenu);
541 
542         editMenu.setMnemonic('E');
543         editMenu.setText("Edit");
544         undoMenuItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_Z, java.awt.event.InputEvent.CTRL_MASK));
545         undoMenuItem.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/general/Undo16.gif")));
546         undoMenuItem.setMnemonic('U');
547         undoMenuItem.setText("Undo");
548         undoMenuItem.setEnabled(false);
549         editMenu.add(undoMenuItem);
550 
551         redoMenuItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_Y, java.awt.event.InputEvent.CTRL_MASK));
552         redoMenuItem.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/general/Redo16.gif")));
553         redoMenuItem.setMnemonic('R');
554         redoMenuItem.setText("Redo");
555         redoMenuItem.setEnabled(false);
556         editMenu.add(redoMenuItem);
557 
558         editMenu.add(editMenu_Seperator1);
559 
560         cutMenuItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_X, java.awt.event.InputEvent.CTRL_MASK));
561         cutMenuItem.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/general/Cut16.gif")));
562         cutMenuItem.setMnemonic('t');
563         cutMenuItem.setText("Cut");
564         cutMenuItem.setEnabled(false);
565         editMenu.add(cutMenuItem);
566 
567         copyMenuItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_C, java.awt.event.InputEvent.CTRL_MASK));
568         copyMenuItem.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/general/Copy16.gif")));
569         copyMenuItem.setMnemonic('C');
570         copyMenuItem.setText("Copy");
571         copyMenuItem.setEnabled(false);
572         editMenu.add(copyMenuItem);
573 
574         pasteMenuItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_V, java.awt.event.InputEvent.CTRL_MASK));
575         pasteMenuItem.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/general/Paste16.gif")));
576         pasteMenuItem.setMnemonic('P');
577         pasteMenuItem.setText("Paste");
578         pasteMenuItem.setEnabled(false);
579         editMenu.add(pasteMenuItem);
580 
581         deleteMenuItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_DELETE, 0));
582         deleteMenuItem.setMnemonic('D');
583         deleteMenuItem.setText("Delete");
584         deleteMenuItem.setActionCommand("DELETE");
585         deleteMenuItem.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/general/Delete16.gif")));
586         deleteMenuItem.addActionListener(defaultLayerViewerHelper);
587         editMenu.add(deleteMenuItem);
588 
589         menuBar.add(editMenu);
590 
591         modifyMenu.setMnemonic('M');
592         modifyMenu.setText("Modify");
593         transformMenu.setText("Transform");
594         flipHorizontalMenuItem.setText("Flip Horizontal");
595         transformMenu.add(flipHorizontalMenuItem);
596 
597         flipVerticalMenuItem.setText("Flip Vertical");
598         transformMenu.add(flipVerticalMenuItem);
599 
600         modifyMenu.add(transformMenu);
601 
602         layerMenu.setMnemonic('L');
603         layerMenu.setText("Layer");
604         frontMenuItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_UP, java.awt.event.InputEvent.SHIFT_MASK | java.awt.event.InputEvent.CTRL_MASK));
605         frontMenuItem.setText("Move to Front");
606         frontMenuItem.setActionCommand("FRONT");
607         frontMenuItem.addActionListener(defaultLayerViewerHelper);
608         layerMenu.add(frontMenuItem);
609 
610         forwardMenuItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_UP, java.awt.event.InputEvent.CTRL_MASK));
611         forwardMenuItem.setText("Move Forward");
612         forwardMenuItem.setActionCommand("FORWARD");
613         forwardMenuItem.addActionListener(defaultLayerViewerHelper);
614         layerMenu.add(forwardMenuItem);
615 
616         backwardMenuItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_DOWN, java.awt.event.InputEvent.CTRL_MASK));
617         backwardMenuItem.setMnemonic('M');
618         backwardMenuItem.setText("Move Backward");
619         backwardMenuItem.setActionCommand("BACKWARD");
620         backwardMenuItem.addActionListener(defaultLayerViewerHelper);
621         layerMenu.add(backwardMenuItem);
622 
623         backMenuItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_DOWN, java.awt.event.InputEvent.SHIFT_MASK | java.awt.event.InputEvent.CTRL_MASK));
624         backMenuItem.setText("Move to Back");
625         backMenuItem.setActionCommand("BACK");
626         backMenuItem.addActionListener(defaultLayerViewerHelper);
627         layerMenu.add(backMenuItem);
628 
629         modifyMenu.add(layerMenu);
630 
631         menuBar.add(modifyMenu);
632 
633         textMenu.setMnemonic('T');
634         textMenu.setText("Text");
635         fontMenu.setMnemonic('F');
636         fontMenu.setText("Font");
637         fontMenu.setActionCommand("FONT");
638         textMenu.add(fontMenu);
639 
640         sizeMenu.setMnemonic('S');
641         sizeMenu.setText("Size");
642         defaultTextHelper.initSizes();
643         textMenu.add(sizeMenu);
644 
645         alignMenu.setMnemonic('A');
646         alignMenu.setText("Align");
647         leftRadioButtonMenuItem.setMnemonic('L');
648         leftRadioButtonMenuItem.setText("Left");
649         alignMenuButtonGroup.add(leftRadioButtonMenuItem);
650         leftRadioButtonMenuItem.setActionCommand("ALIGN");
651         leftRadioButtonMenuItem.setName(String.valueOf(StyleConstants.ALIGN_LEFT));
652         leftRadioButtonMenuItem.addActionListener(defaultTextHelper);
653         alignMenu.add(leftRadioButtonMenuItem);
654 
655         centerRadioButtonMenuItem.setMnemonic('C');
656         centerRadioButtonMenuItem.setSelected(true);
657         centerRadioButtonMenuItem.setText("Center");
658         alignMenuButtonGroup.add(centerRadioButtonMenuItem);
659         centerRadioButtonMenuItem.setActionCommand("ALIGN");
660         centerRadioButtonMenuItem.setName(String.valueOf(StyleConstants.ALIGN_CENTER));
661         centerRadioButtonMenuItem.addActionListener(defaultTextHelper);
662         alignMenu.add(centerRadioButtonMenuItem);
663 
664         rightRadioButtonMenuItem.setMnemonic('R');
665         rightRadioButtonMenuItem.setText("Right");
666         alignMenuButtonGroup.add(rightRadioButtonMenuItem);
667         rightRadioButtonMenuItem.setActionCommand("ALIGN");
668         rightRadioButtonMenuItem.setName(String.valueOf(StyleConstants.ALIGN_RIGHT));
669         rightRadioButtonMenuItem.addActionListener(defaultTextHelper);
670         alignMenu.add(rightRadioButtonMenuItem);
671 
672         textMenu.add(alignMenu);
673 
674         menuBar.add(textMenu);
675 
676         toolMenu.setMnemonic('o');
677         toolMenu.setText("Tools");
678         arrowRadioButtonMenuItem.setMnemonic('A');
679         arrowRadioButtonMenuItem.setSelected(true);
680         arrowRadioButtonMenuItem.setText("Arrow");
681         toolsMenuButtonGroup.add(arrowRadioButtonMenuItem);
682         arrowRadioButtonMenuItem.setActionCommand(Tool.ARROW.toString());
683         arrowRadioButtonMenuItem.addActionListener(defaultToolHelper);
684         toolMenu.add(arrowRadioButtonMenuItem);
685 
686         itemsRadioButtonMenuItem.setMnemonic('I');
687         itemsRadioButtonMenuItem.setText("Items");
688         toolsMenuButtonGroup.add(itemsRadioButtonMenuItem);
689         itemsRadioButtonMenuItem.setActionCommand(Tool.ITEMS.toString());
690         itemsRadioButtonMenuItem.addActionListener(defaultToolHelper);
691         toolMenu.add(itemsRadioButtonMenuItem);
692 
693         textRadioButtonMenuItem.setMnemonic('T');
694         textRadioButtonMenuItem.setText("Text");
695         toolsMenuButtonGroup.add(textRadioButtonMenuItem);
696         textRadioButtonMenuItem.setActionCommand(Tool.TEXT.toString());
697         textRadioButtonMenuItem.addActionListener(defaultToolHelper);
698         toolMenu.add(textRadioButtonMenuItem);
699 
700         backgroundRadioButtonMenuItem.setMnemonic('B');
701         backgroundRadioButtonMenuItem.setText("Background");
702         toolsMenuButtonGroup.add(backgroundRadioButtonMenuItem);
703         backgroundRadioButtonMenuItem.setActionCommand(Tool.BACKGROUND.toString());
704         backgroundRadioButtonMenuItem.addActionListener(defaultToolHelper);
705         toolMenu.add(backgroundRadioButtonMenuItem);
706 
707         materialRadioButtonMenuItem.setMnemonic('M');
708         materialRadioButtonMenuItem.setText("Material");
709         toolsMenuButtonGroup.add(materialRadioButtonMenuItem);
710         materialRadioButtonMenuItem.setActionCommand(Tool.MATERIAL.toString());
711         materialRadioButtonMenuItem.addActionListener(defaultToolHelper);
712         toolMenu.add(materialRadioButtonMenuItem);
713 
714         designRadioButtonMenuItem.setMnemonic('D');
715         designRadioButtonMenuItem.setText("Design");
716         toolsMenuButtonGroup.add(designRadioButtonMenuItem);
717         designRadioButtonMenuItem.setActionCommand(Tool.DESIGN.toString());
718         designRadioButtonMenuItem.addActionListener(defaultToolHelper);
719         toolMenu.add(designRadioButtonMenuItem);
720 
721         toolMenu.add(toolMenu_Separator1);
722 
723         simpleDesignsCheckBoxMenuItem.setSelected(true);
724         simpleDesignsCheckBoxMenuItem.setText("Enable Simple Designs");
725         toolMenu.add(simpleDesignsCheckBoxMenuItem);
726 
727         menuBar.add(toolMenu);
728 
729         helpMenu.setMnemonic('H');
730         helpMenu.setText("Help");
731         contentsMenuItem.setMnemonic('C');
732         contentsMenuItem.setText("Contents");
733         helpMenu.add(contentsMenuItem);
734 
735         aboutMenuItem.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/general/About16.gif")));
736         aboutMenuItem.setMnemonic('A');
737         aboutMenuItem.setText("About");
738         aboutMenuItem.addActionListener(new java.awt.event.ActionListener() {
739             public void actionPerformed(java.awt.event.ActionEvent evt) {
740                 aboutMenuItemActionPerformed(evt);
741             }
742         });
743 
744         helpMenu.add(aboutMenuItem);
745 
746         menuBar.add(helpMenu);
747 
748         setJMenuBar(menuBar);
749 
750         pack();
751     }//GEN-END:initComponents
752 
753     private void saveAsMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_saveAsMenuItemActionPerformed
754         saveAs();
755     }//GEN-LAST:event_saveAsMenuItemActionPerformed
756 
757     private void newMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_newMenuItemActionPerformed
758         if (!((MonumentTableModel)layersTable.getModel()).getMonument().isEmpty()) {
759             int option = JOptionPane.showConfirmDialog(this, "Current Monument is not empty.  Do you wish to save before creating a new Monument?", "Save First?", JOptionPane.YES_NO_CANCEL_OPTION);
760             if (option == JOptionPane.CANCEL_OPTION || option == JOptionPane.CLOSED_OPTION)
761                 return;
762             else if (option == JOptionPane.YES_OPTION)
763                 if (!saveAs())
764                     return;
765         }
766         layersTable.setModel(new MonumentTableModel());
767         monumentFileChooser.setSelectedFile(null);
768     }//GEN-LAST:event_newMenuItemActionPerformed
769 
770     private void workAreaPanelMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_workAreaPanelMousePressed
771         // DEBUG TEST CODE
772     }//GEN-LAST:event_workAreaPanelMousePressed
773 
774     private void addTextButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_addTextButtonActionPerformed
775         GlobalStyleDocument doc = (GlobalStyleDocument) textPane.getDocument();
776         ((MonumentTableModel) layersTable.getModel()).getMonument().add(new TextItem("Text", doc));
777         textPane.setDocument(new GlobalStyleDocument(null, doc.getFont(), doc.getAlign()));
778         defaultTextHelper.setFont(doc.getFont().getFamily());
779         defaultTextHelper.setSize(doc.getFont().getSize());
780         defaultTextHelper.setAlign(doc.getAlign());
781     }//GEN-LAST:event_addTextButtonActionPerformed
782 
783     private void printMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_printMenuItemActionPerformed
784         PrintUtilities.printComponent(contentLayeredPane);
785     }//GEN-LAST:event_printMenuItemActionPerformed
786             
787     private void workAreaPanelComponentResized(java.awt.event.ComponentEvent evt) {//GEN-FIRST:event_workAreaPanelComponentResized
788         ((java.awt.FlowLayout) workAreaPanel.getLayout()).setVgap((workAreaPanel.getHeight() - contentPanel.getHeight())/2);
789     }//GEN-LAST:event_workAreaPanelComponentResized
790     
791     private void workAreaScrollPaneComponentResized(java.awt.event.ComponentEvent evt) {//GEN-FIRST:event_workAreaScrollPaneComponentResized
792         javax.swing.JComponent src = (javax.swing.JComponent) evt.getSource();
793         workAreaPanel.setSize(Math.max(src.getWidth(),contentPanel.getWidth()),Math.max(src.getHeight(),contentPanel.getHeight()));
794     }//GEN-LAST:event_workAreaScrollPaneComponentResized
795             
796     private void aboutMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_aboutMenuItemActionPerformed
797         javax.swing.JOptionPane.showMessageDialog(this,aboutMessage,"About",javax.swing.JOptionPane.INFORMATION_MESSAGE);
798     }//GEN-LAST:event_aboutMenuItemActionPerformed
799     
800     private void pageSetupMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_pageSetupMenuItemActionPerformed
801         /*
802         // Get a PrinterJob
803         java.awt.print.PrinterJob job = java.awt.print.PrinterJob.getPrinterJob();
804         // Ask user for page format (e.g., portrait/landscape)
805         java.awt.print.PageFormat pf = job.pageDialog(job.defaultPage());
806          */
807     }//GEN-LAST:event_pageSetupMenuItemActionPerformed
808         
809     private void saveMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_saveMenuItemActionPerformed
810         if (monumentFileChooser.getSelectedFile() == null)
811             saveAs();
812         else save(monumentFileChooser.getSelectedFile(), false);
813     }//GEN-LAST:event_saveMenuItemActionPerformed
814     
815     private void contentLayeredPaneComponentResized(java.awt.event.ComponentEvent evt) {//GEN-FIRST:event_contentLayeredPaneComponentResized
816         // tell all the children to resize
817     }//GEN-LAST:event_contentLayeredPaneComponentResized
818     
819     private void openMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_openMenuItemActionPerformed
820         /** if this throughs an exception it is recoverable since the currentDirectory will
821          * default to the user directory
822          */
823         try {
824             monumentFileChooser.setCurrentDirectory(new File(new URI(getClass().getResource("/Monuments").toString())));
825         } catch (URISyntaxException e) {}
826         int option = monumentFileChooser.showOpenDialog(this);
827         if (option == JFileChooser.APPROVE_OPTION) {
828             open(monumentFileChooser.getSelectedFile());
829         }
830     }//GEN-LAST:event_openMenuItemActionPerformed
831                                 
832     private void exitMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_exitMenuItemActionPerformed
833         System.exit(0);
834     }//GEN-LAST:event_exitMenuItemActionPerformed
835     
836     /** Exit the Application
837      * @param evt the event that triggered this invocation
838      */
839     private void exitForm(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_exitForm
840         System.exit(0);
841     }//GEN-LAST:event_exitForm
842     
843     /** Main method of Libitina; invoke to run Libitina
844      * @param args the command line arguments
845      */
846     public static void main(String args[]) {
847         if (args.length > 0 && !args[0].equalsIgnoreCase("-DEBUG")) {
848             try {
849                 File dir = new File(new URI(Libitina.class.getResource("/").toString()));
850                 File logFile = new File(dir.getPath()+"/ide.log");
851                 logFile.createNewFile();
852                 PrintStream logStream = new PrintStream(new FileOutputStream(logFile),true);
853                 System.setOut(logStream);
854                 System.setErr(logStream);
855             } catch (Exception e) {
856                 return;
857             }
858         }
859         try {
860             javax.swing.UIManager.setLookAndFeel(javax.swing.UIManager.getSystemLookAndFeelClassName());
861         } catch (Exception e) {
862             System.err.println("ERROR: Could not switch to System L&F");
863         }
864         Libitina app = new Libitina();
865         app.show();
866         if (args.length > 0)
867             app.open(new File(args[0]));
868     }
869     
870     private boolean saveAs() {
871         /** if this throughs an exception it is recoverable since the currentDirectory will
872          * default to the user directory
873          */
874         try {
875             monumentFileChooser.setCurrentDirectory(new File(new URI(getClass().getResource("/Monuments").toString())));
876         } catch (URISyntaxException e) {}
877         int option = monumentFileChooser.showSaveDialog(this);
878         if (option == JFileChooser.APPROVE_OPTION) {
879             return save(monumentFileChooser.getSelectedFile(), true);
880         }
881         return false;
882     }
883     
884     private boolean save(File saveFile, boolean confirmOverwrite) {
885         // popup warning if file exists 
886         ExampleFileFilter temp = new ExampleFileFilter();
887         String ext = temp.getExtension(saveFile);
888         if (ext == null || !ext.equals("lmf"))
889             saveFile = new File(saveFile.toString() + ".lmf");
890         if (confirmOverwrite && saveFile.exists()) {
891             int overwrite = JOptionPane.showConfirmDialog(this, "File exists.  Overwrite file and continue Save?", "Overwrite File", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE);
892             if (overwrite == JOptionPane.NO_OPTION || overwrite == JOptionPane.CLOSED_OPTION)
893                 return false;
894         }
895         MetaData.ensurePresistenceDelegates();
896         try {
897             XMLEncoder e = new XMLEncoder(new BufferedOutputStream(new FileOutputStream(saveFile)));
898             e.writeObject(((MonumentTableModel) layersTable.getModel()).getMonument());
899             e.close();
900         } catch (FileNotFoundException e) {
901             JOptionPane.showMessageDialog(this, "Unable to write to file " + saveFile, "Error", JOptionPane.ERROR_MESSAGE);
902             return false;
903         }
904         return true;
905     }
906     
907     private boolean open(File openFile) {
908         try {
909             XMLDecoder d = new XMLDecoder(new BufferedInputStream(new FileInputStream(openFile)));
910             Object result = d.readObject();
911             if (result instanceof Monument) {
912                 layersTable.setModel(new MonumentTableModel((Monument) result));
913             }
914             else {
915                 JOptionPane.showMessageDialog(this, "File " + openFile + " does not contain a valid Monument.", "Error", JOptionPane.ERROR_MESSAGE);
916                 return false;
917             }
918             d.close();
919         } catch (FileNotFoundException e) {
920             JOptionPane.showMessageDialog(this, "File " + openFile + " could not be opened", "Error", JOptionPane.ERROR_MESSAGE);
921             return false;
922         }
923         return true;
924     }
925     
926     /** Handles init that has to be done after initComponents() has created components, but
927      * before component init
928      */
929     private void preInit() {
930         defaultLayerViewerHelper = new LayerViewerHelper(layersTable);
931         defaultTextHelper = new TextHelper(textPane, sizeMenu, sizeComboBox);
932         defaultToolHelper = new ToolHelper(new ToolBox(), modesTabbedPane, itemsTabbedPane, modifyMenu, textMenu, previewLabel);
933         defaultExplorerHelper = new ExplorerHelper(this, previewLabel);
934         defaultToolOptionsHelper = new ToolOptionsHelper();
935         itemTransferHandler = new ItemTransferHandler(this, layersTable);
936         itemTransferHandler.addProxyTarget(contentLayeredPane);
937         layersTable.addPropertyChangeListener(new GUIResetHelper());
938         ToolBox tb = defaultToolHelper.getToolBox();
939         tb.addToolSelectionListener(defaultExplorerHelper);
940         tb.addToolSelectionListener(defaultLayerViewerHelper);
941         tb.addToolSelectionListener(defaultTextHelper);
942     }
943     
944     // Handles init that has to be done after initComponents()
945     private void postInit() {
946         System.out.println("Attempting to load filesystem tree");
947         try {
948             itemsTabbedPaneLoader = new com.paradoxpoint.libitina.gui.JTabbedPaneFileSystemLoader(new File(new java.net.URI(getClass().getResource("/Items").toString())), itemsTabbedPane);
949             itemsTabbedPaneLoader.setTreeSelectionListener(defaultExplorerHelper);
950             itemsTabbedPaneLoader.setTransferHandler(itemTransferHandler);
951             itemsTabbedPaneLoader.load();
952             System.out.println("Filesystem tree successfully loaded");
953         } catch (Exception e) {
954             System.err.println("ERROR: Filesystem could not be loaded");
955         }
956         System.out.println("Filling ToolBox & ButtonBindingMap");
957         fillButtonBindingMap(defaultButtonBindingMap);
958         System.out.println("Setting Initial Enable States of GUI");
959         // Initial Enable States of GUI
960         defaultToolHelper.setTool(Tool.ARROW, arrowToggleButton);
961         defaultToolOptionsHelper.setSimpleDesignsEnabled(true);
962         /** DISABLED UNTIL VERSION 2.0 
963          *  @todo MATERIAL MASK BY DESIGN IMAGE
964          */
965         simpleDesignsCheckBoxMenuItem.setEnabled(false);
966         /** DISABLED UNTIL VERSION 2.0 
967          *  @todo SCROLLABLE MENU
968          */
969         //fontMenu.setEnabled(false);
970         System.out.println("Setting Default Menu States");
971         defaultButtonBindingMap.setSelected(arrowToggleButton, true);
972         defaultButtonBindingMap.setSelected(centerToggleButton, true);
973         // Initial ButtonGroup Selections
974         System.out.println("Setting Initial State of Text Editor");
975         /** Setup text editor */
976         defaultTextHelper.setFont("BD Engraved Black");
977         defaultTextHelper.setSize(18);
978         defaultTextHelper.setAlign(StyleConstants.ALIGN_CENTER);
979         /** Initialize Default Monument and View*/
980         System.out.println("Initializing Layer Viewer");
981         new ContentPaneHelper(contentLayeredPane, layersTable);
982         layersTable.setModel(new MonumentTableModel(PositionBiasMode.BACK));
983         /** Wire infoPanel */
984         System.out.println("Connecting InfoPanel to GUI");
985         MouseTracker tracker = new MouseTracker();
986         contentLayeredPane.addMouseListener(tracker);
987         contentLayeredPane.addMouseMotionListener(tracker);
988         System.out.println("Initialization COMPLETE");
989         // make progress dialog disappear
990     }
991     
992     public Item getItem() {
993         return item;
994     }
995     
996     public void setItem(Item item) {
997         this.item = item;
998         if (item instanceof ImageItem) {
999             previewLabel.setIcon(new ImageIcon(((ImageItem) item).getSource(), ((ImageItem) item).getSource().toString()));
1000        } else if (item == null) {
1001            previewLabel.setIcon(null);
1002        }
1003    }
1004    
1005    private void fillButtonBindingMap(ButtonBindingMap bbm) {
1006        // add bindings
1007        // -- tool bindings --
1008        bbm.bind(arrowToggleButton, arrowRadioButtonMenuItem);
1009        bbm.bind(backgroundToggleButton, backgroundRadioButtonMenuItem);
1010        bbm.bind(materialToggleButton, materialRadioButtonMenuItem);
1011        bbm.bind(designToggleButton, designRadioButtonMenuItem);
1012        bbm.bind(textToggleButton, textRadioButtonMenuItem);
1013        bbm.bind(itemsToggleButton, itemsRadioButtonMenuItem);
1014        // -- align bindings --
1015        bbm.bind(leftToggleButton, leftRadioButtonMenuItem);
1016        bbm.bind(centerToggleButton, centerRadioButtonMenuItem);
1017        bbm.bind(rightToggleButton, rightRadioButtonMenuItem);
1018    }
1019    
1020    private final class GUIResetHelper implements PropertyChangeListener {
1021        
1022        public void propertyChange(PropertyChangeEvent evt) {
1023            if (evt.getPropertyName().equals("model")) {
1024                defaultToolHelper.setTool(Tool.ARROW, arrowToggleButton);
1025                GlobalStyleDocument doc = new GlobalStyleDocument();
1026                textPane.setDocument(new GlobalStyleDocument());
1027                defaultTextHelper.setFont(doc.getFont().getFamily());
1028                defaultTextHelper.setSize(doc.getFont().getSize());
1029                defaultTextHelper.setAlign(doc.getAlign());
1030            }
1031        }        
1032        
1033    }
1034    
1035    private final class ToolOptionsHelper {
1036        
1037        private OptionsContainer options = new OptionsContainer();
1038        
1039        public ToolOptionsHelper() {
1040            BasicOption simpleDesigns = new BasicOption("simpleDesigns");
1041            options.addOption(simpleDesigns);
1042            OptionEditorStateMap map = new OptionEditorStateMap();
1043            map.put(Boolean.TRUE, Boolean.TRUE);
1044            map.put(Boolean.FALSE, Boolean.FALSE);
1045            options.addOptionListener(new OptionButton(simpleDesignsCheckBoxMenuItem, simpleDesigns, map));
1046            map = new OptionEditorStateMap();
1047            map.put(Boolean.TRUE, Boolean.FALSE);
1048            map.put(Boolean.FALSE, Boolean.TRUE);
1049            options.addOptionListener(new OptionComponentEnabler(materialToggleButton, simpleDesigns, map));
1050            options.addOptionListener(new OptionComponentEnabler(materialRadioButtonMenuItem, simpleDesigns, map));
1051            options.addOptionListener(defaultExplorerHelper);
1052        }
1053        
1054        public void setSimpleDesignsEnabled(boolean mode) {
1055            options.setOptionState("simpleDesigns", Boolean.valueOf(mode));
1056        }
1057        
1058    }
1059    
1060    private final class ContentPaneHelper implements PropertyChangeListener, TableModelListener, ListSelectionListener {
1061        
1062        protected JLayeredPane contentPane = null;
1063        protected JTable layersTable = null;
1064        
1065        public ContentPaneHelper(JLayeredPane pane, JTable layersTable) {
1066            if (pane == null)
1067                throw new NullPointerException();
1068            this.contentPane = pane;
1069            this.layersTable = layersTable;
1070            layersTable.addPropertyChangeListener(this);
1071            layersTable.getSelectionModel().addListSelectionList