[Jreepad-CVS] jreepad/src/jreepad JreepadViewer.java,1.52,1.53
Brought to you by:
danstowell
From: PeWu <pe...@us...> - 2007-03-20 10:18:22
|
Update of /cvsroot/jreepad/jreepad/src/jreepad In directory sc8-pr-cvs6.sourceforge.net:/tmp/cvs-serv2400/src/jreepad Modified Files: JreepadViewer.java Log Message: Use Action interface for saveAction. Added possibility to choose file format in the save dialog. Index: JreepadViewer.java =================================================================== RCS file: /cvsroot/jreepad/jreepad/src/jreepad/JreepadViewer.java,v retrieving revision 1.52 retrieving revision 1.53 diff -C2 -d -r1.52 -r1.53 *** JreepadViewer.java 15 Mar 2007 12:46:19 -0000 1.52 --- JreepadViewer.java 20 Mar 2007 10:18:17 -0000 1.53 *************** *** 21,41 **** package jreepad; ! import javax.swing.*; ! import javax.swing.undo.*; ! import java.awt.*; ! import java.awt.event.*; ! import java.io.*; ! import java.util.*; import java.net.URL; ! import java.awt.datatransfer.*; ! ! //import javax.swing.plaf.metal.MetalIconFactory; // For icons ! ! import edu.stanford.ejalbert.BrowserLauncher; ! import edu.stanford.ejalbert.exception.BrowserLaunchingExecutionException; ! import edu.stanford.ejalbert.exception.BrowserLaunchingInitializingException; ! import edu.stanford.ejalbert.exception.UnsupportedOperatingSystemException; ! import java.lang.reflect.*; import jreepad.io.AutoDetectReader; --- 21,82 ---- package jreepad; ! import java.awt.Color; ! import java.awt.Container; ! import java.awt.Cursor; ! import java.awt.Dimension; ! import java.awt.Event; ! import java.awt.Toolkit; ! import java.awt.datatransfer.Clipboard; ! import java.awt.datatransfer.DataFlavor; ! import java.awt.datatransfer.Transferable; ! import java.awt.event.ActionEvent; ! import java.awt.event.ActionListener; ! import java.awt.event.KeyEvent; ! import java.awt.event.WindowAdapter; ! import java.awt.event.WindowEvent; ! import java.io.DataOutputStream; ! import java.io.File; ! import java.io.FileInputStream; ! import java.io.FileOutputStream; ! import java.io.IOException; ! import java.io.InputStream; ! import java.io.InputStreamReader; ! import java.io.OutputStream; ! import java.io.OutputStreamWriter; ! import java.io.Reader; ! import java.lang.reflect.Method; import java.net.URL; ! import java.util.ListIterator; ! import java.util.ResourceBundle; ! import java.util.Vector; ! import javax.swing.AbstractAction; ! import javax.swing.Box; ! import javax.swing.BoxLayout; ! import javax.swing.Icon; ! import javax.swing.ImageIcon; ! import javax.swing.JButton; ! import javax.swing.JCheckBox; ! import javax.swing.JCheckBoxMenuItem; ! import javax.swing.JComboBox; ! import javax.swing.JDialog; ! import javax.swing.JFileChooser; ! import javax.swing.JFrame; ! import javax.swing.JLabel; ! import javax.swing.JMenu; ! import javax.swing.JMenuBar; ! import javax.swing.JMenuItem; ! import javax.swing.JOptionPane; ! import javax.swing.JPanel; ! import javax.swing.JSeparator; ! import javax.swing.JSpinner; ! import javax.swing.JTextField; ! import javax.swing.KeyStroke; ! import javax.swing.SpinnerNumberModel; ! import javax.swing.UIManager; ! import javax.swing.filechooser.FileFilter; ! import javax.swing.undo.CannotRedoException; ! import javax.swing.undo.CannotUndoException; ! import javax.swing.undo.UndoManager; import jreepad.io.AutoDetectReader; *************** *** 45,48 **** --- 86,95 ---- import jreepad.io.TreepadWriter; import jreepad.io.XmlWriter; + import jreepad.ui.ExtensionFileFilter; + import jreepad.ui.SaveFileChooser; + import edu.stanford.ejalbert.BrowserLauncher; + import edu.stanford.ejalbert.exception.BrowserLaunchingExecutionException; + import edu.stanford.ejalbert.exception.BrowserLaunchingInitializingException; + import edu.stanford.ejalbert.exception.UnsupportedOperatingSystemException; public class JreepadViewer extends JFrame // implements ApplicationListener *************** *** 76,80 **** private JButton newIconButton; private JButton openIconButton; - private JButton saveIconButton; private JButton addAboveIconButton; private JButton addBelowIconButton; --- 123,126 ---- *************** *** 131,134 **** --- 177,190 ---- public static final int appleAppCode = 0x4A524545; + /** + * File filter for Jreepad XML .jree files. + */ + private static final FileFilter JREEPAD_FILE_FILTER = new ExtensionFileFilter("Jreepad XML file (*.jree)", "jree"); + + /** + * File filter for Treepad .hjt files. + */ + private static final FileFilter TREEPAD_FILE_FILTER = new ExtensionFileFilter("Treepad file (*.hjt)", "hjt"); + public JreepadViewer() { *************** *** 211,216 **** // ...then if the saveLocation != null, trigger saveAction() if(getPrefs().autoSave && getPrefs().saveLocation != null) ! saveAction(); ! else updateWindowTitle(); } --- 267,272 ---- // ...then if the saveLocation != null, trigger saveAction() if(getPrefs().autoSave && getPrefs().saveLocation != null) ! new SaveAction().actionPerformed(null); ! else updateWindowTitle(); } *************** *** 348,358 **** fileMenu.add(openRecentMenu); ! JMenuItem saveMenuItem = new JMenuItem(lang.getString("MENUITEM_SAVE")); //"Save"); ! saveMenuItem.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e) {saveAction();}}); ! fileMenu.add(saveMenuItem); ! ! JMenuItem saveAsMenuItem = new JMenuItem(lang.getString("MENUITEM_SAVEAS")); //"Save as..."); ! saveAsMenuItem.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e) {saveAsAction();}}); ! fileMenu.add(saveAsMenuItem); JMenuItem backupToMenuItem = new JMenuItem(lang.getString("MENUITEM_BACKUPTO")); //"Backup to..."); --- 404,409 ---- fileMenu.add(openRecentMenu); ! fileMenu.add(new SaveAction()); // Save ! fileMenu.add(new SaveAction(true)); // Save As JMenuItem backupToMenuItem = new JMenuItem(lang.getString("MENUITEM_BACKUPTO")); //"Backup to..."); *************** *** 403,409 **** openMenuItem.setAccelerator(KeyStroke.getKeyStroke('O', MENU_MASK)); openRecentMenu.setMnemonic('R'); - saveMenuItem.setMnemonic('S'); - saveMenuItem.setAccelerator(KeyStroke.getKeyStroke('S', MENU_MASK)); - saveAsMenuItem.setMnemonic('A'); printSubtreeMenuItem.setMnemonic('P'); printSubtreeMenuItem.setAccelerator(KeyStroke.getKeyStroke('P', MENU_MASK)); --- 454,457 ---- *************** *** 916,923 **** // Save current ! saveIconButton = new JButton(); ! saveIconButton.setToolTipText(lang.getString("TOOLBAR_SAVE")); saveIconButton.setBorderPainted(false); ! saveIconButton.setIcon(this.getIcon("Save16.gif")); // Insert node before --- 964,970 ---- // Save current ! JButton saveIconButton = new JButton(new SaveAction()); saveIconButton.setBorderPainted(false); ! saveIconButton.setText(null); // Ignore action text // Insert node before *************** *** 984,989 **** openIconButton.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ openAction(); } }); - saveIconButton.addActionListener(new ActionListener(){ - public void actionPerformed(ActionEvent e){ saveAction(); } }); upIconButton.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ theJreepad.moveCurrentNodeUp(); repaint(); --- 1031,1034 ---- *************** *** 1224,1239 **** } ! private void newAction() { ! if(warnAboutUnsaved()) { ! int answer = JOptionPane.showConfirmDialog(this, lang.getString("PROMPT_SAVE_BEFORE_NEW"), ! "Save?" , JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.WARNING_MESSAGE); ! if(answer == JOptionPane.CANCEL_OPTION) ! return; ! else if(answer == JOptionPane.YES_OPTION) ! if(!saveAction()) ! return; // This cancels "New" if the save action failed or was cancelled } content.remove(theJreepad); theJreepad = new JreepadView(new JreepadNode("<Untitled node>",theJreepad.getContentForNewNode())); --- 1269,1301 ---- } ! /** ! * Ask the user whether to save the current file. ! * @param prompt message to display ! * @return true if the user clicked "Yes" and the save was successful or the user clicked "No" or the file didn't need to be saved; ! * false if the user clicked "Cancel" or the save failed ! */ ! private boolean askAndSave(String prompt) { ! if (!warnAboutUnsaved()) ! return true; ! int answer = JOptionPane.showConfirmDialog(this, prompt, ! "Save?" , JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.WARNING_MESSAGE); ! if(answer == JOptionPane.CANCEL_OPTION) ! return false; ! if(answer == JOptionPane.YES_OPTION) { ! SaveAction saveAction = new SaveAction(); ! saveAction.actionPerformed(null); ! if (!saveAction.isSuccessful()) ! return false; } + return true; + } + + private void newAction() + { + if (!askAndSave(lang.getString("PROMPT_SAVE_BEFORE_NEW"))) + return; + content.remove(theJreepad); theJreepad = new JreepadView(new JreepadNode("<Untitled node>",theJreepad.getContentForNewNode())); *************** *** 1252,1265 **** private void openAction() { ! if(warnAboutUnsaved()) ! { ! int answer = JOptionPane.showConfirmDialog(this, lang.getString("PROMPT_SAVE_BEFORE_OPEN"), ! "Save?" , JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.WARNING_MESSAGE); ! if(answer == JOptionPane.CANCEL_OPTION) ! return; ! else if(answer == JOptionPane.YES_OPTION) ! if(!saveAction()) ! return; // This cancels quit if the save action failed or was cancelled ! } fileChooser.setCurrentDirectory(getPrefs().openLocation); --- 1314,1319 ---- private void openAction() { ! if (!askAndSave(lang.getString("PROMPT_SAVE_BEFORE_OPEN"))) ! return; fileChooser.setCurrentDirectory(getPrefs().openLocation); *************** *** 1302,1390 **** ! private boolean saveAction() { ! if(getPrefs().saveLocation==null || (getPrefs().saveLocation.isFile() && !getPrefs().saveLocation.canWrite())) ! { ! return saveAsAction(); ! } ! try ! { ! setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); ! // Write to either HJT or XML ! JreepadWriter writer; ! if(getPrefs().mainFileType==JreepadPrefs.FILETYPE_XML) ! writer = new XmlWriter(getPrefs().getEncoding()); ! else ! writer = new TreepadWriter(getPrefs().getEncoding()); ! OutputStream fos = new FileOutputStream(getPrefs().saveLocation); ! writer.write(fos, theJreepad.getRootJreepadNode()); ! fos.close(); ! if(MAC_OS_X){ ! com.apple.eio.FileManager.setFileTypeAndCreator(getPrefs().saveLocation.toString(), ! appleAppCode, appleAppCode); ! } ! setWarnAboutUnsaved(false); ! updateWindowTitle(); ! savePreferencesFile(); ! setCursor(Cursor.getDefaultCursor()); ! return true; } ! catch(IOException err) { ! setCursor(Cursor.getDefaultCursor()); ! JOptionPane.showMessageDialog(this, err, lang.getString("TITLE_FILE_ERROR") , JOptionPane.ERROR_MESSAGE); } ! return false; ! } ! private boolean saveAsAction() ! { ! try { ! fileChooser.setCurrentDirectory(getPrefs().saveLocation); ! fileChooser.setSelectedFile(new File(theJreepad.getRootJreepadNode().getTitle() + ! (getPrefs().mainFileType==JreepadPrefs.FILETYPE_XML?".jree":".hjt") )); ! if(fileChooser.showSaveDialog(this) == JFileChooser.APPROVE_OPTION && checkOverwrite(fileChooser.getSelectedFile())) ! { ! if(fileChooser.getSelectedFile().isFile() && !fileChooser.getSelectedFile().canWrite()) { ! JOptionPane.showMessageDialog(this, lang.getString("MSG_FILE_NOT_WRITEABLE"), lang.getString("TITLE_FILE_ERROR") , JOptionPane.ERROR_MESSAGE); ! return saveAsAction(); } ! setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); ! getPrefs().saveLocation = fileChooser.getSelectedFile(); ! // Write to either HJT or XML ! JreepadWriter writer; ! if(getPrefs().mainFileType == JreepadPrefs.FILETYPE_XML) ! writer = new XmlWriter(getPrefs().getEncoding()); ! else ! writer = new TreepadWriter(getPrefs().getEncoding()); ! OutputStream fos = new FileOutputStream(getPrefs().saveLocation); ! writer.write(fos, theJreepad.getRootJreepadNode()); ! fos.close(); ! if(MAC_OS_X){ ! com.apple.eio.FileManager.setFileTypeAndCreator(getPrefs().saveLocation.toString(), ! appleAppCode, appleAppCode); } - setWarnAboutUnsaved(false); - setTitleBasedOnFilename(getPrefs().saveLocation.getName()); - savePreferencesFile(); - setCursor(Cursor.getDefaultCursor()); - return true; - } - else - return false; } ! catch(IOException err) { ! setCursor(Cursor.getDefaultCursor()); ! JOptionPane.showMessageDialog(this, err, lang.getString("TITLE_FILE_ERROR") , JOptionPane.ERROR_MESSAGE); } ! return false; ! } // End of: saveAsAction() private boolean backupToAction() --- 1356,1456 ---- ! private class SaveAction extends AbstractAction { ! private boolean askForFilename; ! private boolean successful = false; ! public SaveAction() ! { ! this(false); } ! ! public SaveAction(boolean askForFilename) { ! super(askForFilename ? lang.getString("MENUITEM_SAVEAS") : lang.getString("MENUITEM_SAVE"), ! getIcon("Save16.gif")); ! this.askForFilename = askForFilename; ! ! if (askForFilename) ! { ! putValue(MNEMONIC_KEY, new Integer(KeyEvent.VK_A)); ! putValue(ACCELERATOR_KEY, KeyStroke.getKeyStroke('A', MENU_MASK)); ! } ! else ! { ! putValue(MNEMONIC_KEY, new Integer(KeyEvent.VK_S)); ! putValue(ACCELERATOR_KEY, KeyStroke.getKeyStroke('S', MENU_MASK)); ! putValue(SHORT_DESCRIPTION, lang.getString("TOOLBAR_SAVE")); ! } } ! ! public void actionPerformed(ActionEvent e) { ! int fileType = getPrefs().mainFileType; ! if(askForFilename || getPrefs().saveLocation==null || (getPrefs().saveLocation.isFile() && !getPrefs().saveLocation.canWrite())) { ! // Ask for filename ! JFileChooser fileChooser = new SaveFileChooser(); ! fileChooser.setCurrentDirectory(getPrefs().saveLocation); ! fileChooser.addChoosableFileFilter(JREEPAD_FILE_FILTER); ! fileChooser.addChoosableFileFilter(TREEPAD_FILE_FILTER); ! if (getPrefs().mainFileType == JreepadPrefs.FILETYPE_XML) ! fileChooser.setFileFilter(JREEPAD_FILE_FILTER); ! else ! fileChooser.setFileFilter(TREEPAD_FILE_FILTER); ! ! fileChooser.setSelectedFile(new File(theJreepad.getRootJreepadNode().getTitle() + ! (fileType==JreepadPrefs.FILETYPE_XML?".jree":".hjt"))); ! if(fileChooser.showSaveDialog(JreepadViewer.this) != JFileChooser.APPROVE_OPTION) ! { ! successful = false; ! return; // No file chosen ! } ! getPrefs().saveLocation = fileChooser.getSelectedFile(); ! if (fileChooser.getFileFilter() == JREEPAD_FILE_FILTER) ! fileType = JreepadPrefs.FILETYPE_XML; ! else if (fileChooser.getFileFilter() == TREEPAD_FILE_FILTER) ! fileType = JreepadPrefs.FILETYPE_HJT; } ! // Save the file ! try ! { ! setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); ! // Write to either HJT or XML ! JreepadWriter writer; ! if(fileType == JreepadPrefs.FILETYPE_XML) ! writer = new XmlWriter(getPrefs().getEncoding()); ! else ! writer = new TreepadWriter(getPrefs().getEncoding()); ! OutputStream fos = new FileOutputStream(getPrefs().saveLocation); ! writer.write(fos, theJreepad.getRootJreepadNode()); ! fos.close(); ! if(MAC_OS_X){ ! com.apple.eio.FileManager.setFileTypeAndCreator(getPrefs().saveLocation.toString(), ! appleAppCode, appleAppCode); ! } ! setWarnAboutUnsaved(false); ! updateWindowTitle(); ! savePreferencesFile(); ! setCursor(Cursor.getDefaultCursor()); ! successful = true; ! } ! catch(IOException err) ! { ! setCursor(Cursor.getDefaultCursor()); ! JOptionPane.showMessageDialog(JreepadViewer.this, err, lang.getString("TITLE_FILE_ERROR") , JOptionPane.ERROR_MESSAGE); ! successful = false; } } ! ! public boolean isSuccessful() { ! return successful; } ! } private boolean backupToAction() *************** *** 1665,1678 **** // ! if(warnAboutUnsaved()) ! { ! int answer = JOptionPane.showConfirmDialog(this, lang.getString("PROMPT_SAVE_BEFORE_QUIT"), ! lang.getString("TITLE_SAVEPROMPT") , JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.WARNING_MESSAGE); ! if(answer == JOptionPane.CANCEL_OPTION) ! return; ! else if(answer == JOptionPane.YES_OPTION) ! if(!saveAction()) ! return; // This cancels quit if the save action failed or was cancelled ! } // Save preferences - including window position and size, and open/closed state of the current tree's nodes --- 1731,1736 ---- // ! if (!askAndSave(lang.getString("PROMPT_SAVE_BEFORE_QUIT"))) ! return; // Save preferences - including window position and size, and open/closed state of the current tree's nodes *************** *** 1855,1861 **** { // If file doesn't already exist then fine ! if(!theFile.isFile()) return true; // Else we need to confirm ! return (JOptionPane.showConfirmDialog(this, lang.getString("PROMPT_CONFIRM_OVERWRITE1")+theFile.getName()+lang.getString("PROMPT_CONFIRM_OVERWRITE2"), lang.getString("TITLE_CONFIRM_OVERWRITE"), JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION); --- 1913,1921 ---- { // If file doesn't already exist then fine ! if(theFile == null || !theFile.exists()) ! return true; ! // Else we need to confirm ! return (JOptionPane.showConfirmDialog(this, lang.getString("PROMPT_CONFIRM_OVERWRITE1")+" "+theFile.getName()+" "+lang.getString("PROMPT_CONFIRM_OVERWRITE2"), lang.getString("TITLE_CONFIRM_OVERWRITE"), JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION); *************** *** 2350,2354 **** - /* // Methods required by Apple's "ApplicationListener" interface --- 2410,2413 ---- |