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