/* Jaxe - Editeur XML en Java Copyright (C) 2003 Observatoire de Paris Ce programme est un logiciel libre ; vous pouvez le redistribuer et/ou le modifier conformément aux dispositions de la Licence Publique Générale GNU, telle que publiée par la Free Software Foundation ; version 2 de la licence, ou encore (à votre choix) toute version ultérieure. Ce programme est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE ; sans même la garantie implicite de COMMERCIALISATION ou D'ADAPTATION A UN OBJET PARTICULIER. Pour plus de détail, voir la Licence Publique Générale GNU . Vous devez avoir reçu un exemplaire de la Licence Publique Générale GNU en même temps que ce programme ; si ce n'est pas le cas, écrivez à la Free Software Foundation Inc., 675 Mass Ave, Cambridge, MA 02139, Etats-Unis. */ package jaxe; import java.awt.FileDialog; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; import java.io.FilenameFilter; import java.util.ResourceBundle; import javax.swing.AbstractAction; import javax.swing.Action; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JOptionPane; import javax.swing.JRadioButtonMenuItem; import javax.swing.KeyStroke; import javax.swing.UIManager; import javax.swing.text.JTextComponent; import javax.swing.text.TextAction; import javax.swing.undo.CannotRedoException; import javax.swing.undo.UndoManager; import com.swabunga.spell.engine.SpellDictionary; import com.swabunga.spell.engine.SpellDictionaryDichoDisk; import com.swabunga.spell.engine.SpellDictionaryHashMap; import com.swabunga.spell.event.SpellChecker; import com.swabunga.spell.swing.JTextComponentSpellChecker; /** * Barre de menus de Jaxe et actions associées */ public class JaxeMenuBar extends JMenuBar implements ActionListener, EcouteurMAJ { private static ResourceBundle rb; private AboutBox aboutBox; private static JMenu fileMenu; private JMenuItem miNew; private JMenuItem miOpen; private JMenuItem miOpenConf; private JMenuItem miClose; private JMenuItem miSave; private JMenuItem miSaveAs; private JMenuItem miPref; private JMenuItem miQuitter; private static JMenu editMenu; private JMenuItem miUndo; private JMenuItem miRedo; private JMenuItem miCut; private JMenuItem miCopy; private JMenuItem miPaste; private JMenuItem miClear; private JMenuItem miSelectAll; private JMenuItem miFind; private JMenuItem miAgain; private JMenuItem miSpelling; private static JMenu windowMenu; private static JMenu helpMenu; //private JRadioButtonMenuItem sideMenu; private JRadioButtonMenuItem menuArbre; private JRadioButtonMenuItem menuAllowed; private JRadioButtonMenuItem menuAttributs; private static int cmdMenu; private TextAction aColler; private TextAction aCopier; private TextAction aCouper; private UndoAction undoAction; private RedoAction redoAction; private JaxeFrame jframe; public JaxeMenuBar(JaxeFrame jframe) { super(); this.jframe = jframe; rb = JaxeResourceBundle.getRB(); cmdMenu = Toolkit.getDefaultToolkit().getMenuShortcutKeyMask(); aboutBox = null; undoAction = new UndoAction(); redoAction = new RedoAction(); addMenus(); } public void addMenus() { addFileMenuItems(); addEditMenuItems(); addWindowMenuItems(); if(!System.getProperty("os.name").startsWith("Mac OS")) addHelpMenuItems(); } public void addFileMenuItems() { fileMenu = new JMenu(rb.getString("menus.Fichier")); miNew = new JMenuItem (rb.getString("menus.Nouveau")); miNew.setAccelerator(KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_N, cmdMenu)); fileMenu.add(miNew).setEnabled(true); miNew.addActionListener(this); miOpen = new JMenuItem (rb.getString("menus.Ouvrir")); miOpen.setAccelerator(KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_O, cmdMenu)); fileMenu.add(miOpen).setEnabled(true); miOpen.addActionListener(this); miOpenConf = new JMenuItem (rb.getString("menus.OuvrirConf")); fileMenu.add(miOpenConf).setEnabled(true); miOpenConf.addActionListener(this); miClose = new JMenuItem (rb.getString("menus.Fermer")); miClose.setAccelerator(KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_W, cmdMenu)); fileMenu.add(miClose).setEnabled(true); miClose.addActionListener(this); miSave = new JMenuItem (rb.getString("menus.Enregistrer")); miSave.setAccelerator(KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_S, cmdMenu)); fileMenu.add(miSave).setEnabled(true); miSave.addActionListener(this); miSaveAs = new JMenuItem (rb.getString("menus.EnregistrerSous")); fileMenu.add(miSaveAs).setEnabled(true); miSaveAs.addActionListener(this); if(!System.getProperty("os.name").startsWith("Mac OS")) { miPref = new JMenuItem (rb.getString("menus.Preferences")); fileMenu.add(miPref).setEnabled(true); miPref.addActionListener(this); miQuitter = new JMenuItem (rb.getString("menus.Quitter")); miQuitter.setAccelerator(KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_Q, cmdMenu)); fileMenu.add(miQuitter).setEnabled(true); miQuitter.addActionListener(this); } add(fileMenu); } public void addEditMenuItems() { editMenu = new JMenu(rb.getString("menus.Edition")); miUndo = editMenu.add(undoAction); miUndo.setAccelerator(KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_Z, cmdMenu)); miRedo = editMenu.add(redoAction); miRedo.setAccelerator(KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_R, cmdMenu)); editMenu.addSeparator(); aCouper = new ActionCouper(); miCut = editMenu.add(aCouper); miCut.setAccelerator(KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_X, cmdMenu)); aCopier = new ActionCopier(); miCopy = editMenu.add(aCopier); miCopy.setAccelerator(KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_C, cmdMenu)); aColler = new ActionColler(); miPaste = editMenu.add(aColler); miPaste.setAccelerator(KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_V, cmdMenu)); miSelectAll = editMenu.add(new ActionToutSelectionner()); miSelectAll.setAccelerator(KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_A, cmdMenu)); editMenu.addSeparator(); miFind = editMenu.add(new ActionRechercher()); miFind.setAccelerator(KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_F, cmdMenu)); miAgain = editMenu.add(new ActionSuivant()); miAgain.setAccelerator(KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_G, cmdMenu)); editMenu.addSeparator(); miSpelling = editMenu.add(new ActionOrthographe()); add(editMenu); } public void addWindowMenuItems() { windowMenu = new JMenu(rb.getString("menus.Fenetres")); windowMenu.add(new ShowWindowAction(rb.getString("menus.FenetreHTML"))); windowMenu.add(new ShowWindowAction(rb.getString("menus.FenetreXML"))) ; windowMenu.add(new ShowWindowAction(rb.getString("menus.Validation"))) ; windowMenu.add(new ShowWindowAction(rb.getString("menus.Source"))) ; // bidouille pour avoir un JCheckBoxMenuItem qui fonctionne : on le simule avec un JRadioButtonMenuItem // voir : http://developer.apple.com/qa/qa2001/qa1154.html UIManager.put("RadioButtonMenuItem.checkIcon", UIManager.get("CheckBoxMenuItem.checkIcon")) ; //menuSide = new JRadioButtonMenuItem(rb.getString("menus.FenetreSide"),true) ; //menuSide.addActionListener(this) ; //windowMenu.add(menuSide) ; menuArbre = new JRadioButtonMenuItem(rb.getString("menus.FenetreArbre"), jframe.getAffichageArbre()) ; menuArbre.addActionListener(this) ; windowMenu.add(menuArbre) ; menuAllowed = new JRadioButtonMenuItem(rb.getString("menus.FenetreAllowed"), jframe.getAffichageAllowed()) ; menuAllowed.addActionListener(this) ; windowMenu.add(menuAllowed) ; menuAttributs = new JRadioButtonMenuItem(rb.getString("menus.FenetreAttributs"), jframe.getAffichageAttributs()) ; menuAttributs.addActionListener(this) ; windowMenu.add(menuAttributs) ; add(windowMenu) ; } public void addHelpMenuItems() { helpMenu = new JMenu("?"); helpMenu.add(new AboutAction(rb.getString("menus.APropos"))); add(helpMenu); } public void actionPerformed(ActionEvent newEvent) { if (newEvent.getActionCommand().equals(miNew.getActionCommand())) doNew(); else if (newEvent.getActionCommand().equals(miOpen.getActionCommand())) doOpen(); else if (newEvent.getActionCommand().equals(miOpenConf.getActionCommand())) doOpenConf(); else if (newEvent.getActionCommand().equals(miClose.getActionCommand())) doClose(false); else if (newEvent.getActionCommand().equals(miSave.getActionCommand())) doSave(); else if (newEvent.getActionCommand().equals(miSaveAs.getActionCommand())) doSaveAs(); else if (miPref != null && newEvent.getActionCommand().equals(miPref.getActionCommand())) doPreferences(); else if (miQuitter != null && newEvent.getActionCommand().equals(miQuitter.getActionCommand())) doQuitter(); //else if (newEvent.getActionCommand().equals(menuSide.getActionCommand())) // jframe.setAffichageSide(!jframe.getAffichageSide()); else if (newEvent.getActionCommand().equals(menuArbre.getActionCommand())) jframe.setAffichageArbre(!jframe.getAffichageArbre()); else if (newEvent.getActionCommand().equals(menuAllowed.getActionCommand())) jframe.setAffichageAllowed(!jframe.getAffichageAllowed()); else if (newEvent.getActionCommand().equals(menuAttributs.getActionCommand())) jframe.setAffichageAttributs(!jframe.getAffichageAttributs()); } // menu Nouveau public void doNew() { Jaxe.dialogueNouveau(jframe); } class ExtFilter implements FilenameFilter { String[] exta; public ExtFilter(String ext) { exta = new String[1]; exta[0] = ext; } public ExtFilter(String[] exta) { this.exta = exta; } public boolean accept(File dir, String name) { for (int i=0; i