/* ***************************************************************************** * Copyright (C) 2000-2004, International Business Machines Corporation and * * others. All Rights Reserved. * ***************************************************************************** */ package com.ibm.rbm.gui; import java.awt.*; import java.awt.event.*; import java.io.*; import java.util.*; import javax.swing.*; import javax.swing.event.*; import javax.swing.tree.*; import com.ibm.rbm.*; /** * The Graphical User Interface for working with and through a Resource Bundle Manager. The GUI has no public main * method. It is instead instantiated from running the main method in RBManager. For help with using this interface, * consult the documentation included in the project. * * @author Jared Jackson * @see com.ibm.rbm.RBManager */ public class RBManagerGUI extends JFrame implements ActionListener, MouseListener, ChangeListener, TreeSelectionListener { // CONSTANTS private static final int buffer = 20; private static final Dimension dimMain = new Dimension(750,550); private static final Dimension dimMainMax = new Dimension(2000,1500); private static final Dimension dimMainMin = new Dimension(550,350); private static final Dimension dimTop = new Dimension(dimMain.width - buffer,50); private static final Dimension dimTopMax = new Dimension(dimMainMax.width - buffer,50); private static final Dimension dimTopMin = new Dimension(dimMainMin.width - buffer,50); private static final Dimension dimBottom = new Dimension(dimMain.width - buffer,dimMain.height-dimTop.height - buffer); private static final Dimension dimBottomMax = new Dimension(dimMainMax.width - buffer,dimMainMax.height-dimTopMin.height - buffer); private static final Dimension dimBottomMin = new Dimension(dimMainMin.width - buffer,dimMainMin.height-dimTopMax.height - buffer); private static final Dimension dimLeft = new Dimension(175,dimBottom.height - buffer); private static final Dimension dimRight = new Dimension(dimMain.width-dimLeft.width - buffer,dimBottom.height - buffer); /** * Used for toggling the debug mode */ public static final boolean debug = true; /** * Used to count debug messages */ public static int debugcount = 0; // member declarations // ** DATA ** RBManager rbm = null; String userName = Resources.getTranslation("unknown_user"); DefaultMutableTreeNode activeNode = null; // ** MAIN MENU ** RBManagerMenuBar jMenuBarMain = null; // ** CONTENT PANES ** Box boxMain = new Box(BoxLayout.Y_AXIS); //JPanel jPanelTop = new JPanel(); JPanel jPanelBottom = new JPanel(); JSplitPane jSplitPaneMain = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT); // ** SPLIT PANE COMPONENTS ** JTree jTreeDisplay = new JTree(); JTabbedPane jTabbedPaneMain = new JTabbedPane(); RBStatisticsPanel jPanelStats = new RBStatisticsPanel(); RBUntranslatedPanel jPanelUntrans = new RBUntranslatedPanel(this); RBGroupPanel jPanelGroups = new RBGroupPanel(this); RBSearchPanel jPanelSearch = new RBSearchPanel(this); JScrollPane jScrollPaneTree = new JScrollPane(jTreeDisplay, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED); // ** PROJECT VIEW SPLIT PANE COMPONENTS JTabbedPane treeTabbedPane = new JTabbedPane(); JTree projectTree = new JTree(); JScrollPane projectScrollPane = new JScrollPane(projectTree, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED); RBProjectItemPanel projectPanel = new RBProjectItemPanel(this); RBProject project = null; // ** File Chooser ** JFileChooser openFileChooser = new JFileChooser(); JFileChooser saveFileChooser = new JFileChooser(); JFileChooser projectFileChooser = new JFileChooser(); /** * Creation of the GUI should be immediately followed by the method calls to initComponents() and setVisible(true). * These methods were not called by default for programming discretion */ public RBManagerGUI() { } /** * Inherits from JFrame.validate(), with some component updates */ public void validate() { super.validate(); updateDisplayPanels(); } /** * Initial construction of all of the GUI components. This method should be called immediately following the * construction of the GUI object. */ public void initComponents() throws Exception { this.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE); // the following code sets the frame's initial state openFileChooser.setFileFilter(new javax.swing.filechooser.FileFilter() { public boolean accept(File f) { if (f.isDirectory()) return true; String name = f.getName(); if (!(name.toLowerCase().endsWith(".properties"))) return false; if (name.indexOf("_") > 0) return false; return true; } public String getDescription() { return Resources.getTranslation("dialog_file_filter_description"); } }); saveFileChooser.setFileFilter(new javax.swing.filechooser.FileFilter() { public boolean accept(File f) { if (f.isDirectory()) return true; String name = f.getName(); if (!(name.toLowerCase().endsWith(".properties"))) return false; if (name.indexOf("_") > 0) return false; return true; } public String getDescription() { return Resources.getTranslation("dialog_file_filter_description"); } }); projectFileChooser.setFileFilter(new javax.swing.filechooser.FileFilter() { public boolean accept(File f) { if (f.isDirectory()) return true; String name = f.getName(); if (!(name.toLowerCase().endsWith(".rbproject"))) return false; return true; } public String getDescription() { return Resources.getTranslation("dialog_project_filter_description"); } }); // ** The Main program icon ** setIconImage((new ImageIcon(getClass().getResource("images/tree_icon_bundle.gif"))).getImage()); // ** MAIN MENU BAR ITEMS ** jMenuBarMain = new RBManagerMenuBar(this); // ** DISPLAY TREE ** //jScrollPaneTree.setSize(dimLeft); updateDisplayTree(); updateProjectTree(); updateProjectPanels(); jPanelStats.setSize(dimRight); jPanelUntrans.setSize(dimRight); jPanelGroups.setSize(dimRight); jPanelSearch.setSize(dimRight); // ** MAIN TABBED PANE ** jTabbedPaneMain.setSize(dimRight); jTabbedPaneMain.addTab(Resources.getTranslation("tab_statistics"), jPanelStats); jTabbedPaneMain.addTab(Resources.getTranslation("tab_untranslated"), jPanelUntrans); jTabbedPaneMain.addTab(Resources.getTranslation("tab_groups"), jPanelGroups); jTabbedPaneMain.addTab(Resources.getTranslation("tab_search"), jPanelSearch); // ** LEFT TABBED PANE ** treeTabbedPane.setSize(dimLeft); treeTabbedPane.setPreferredSize(dimLeft); treeTabbedPane.addTab(Resources.getTranslation("tab_bundle"), jScrollPaneTree); treeTabbedPane.addTab(Resources.getTranslation("tab_project"), projectScrollPane); treeTabbedPane.addChangeListener(this); // ** MAIN SPLIT PANE ** //jSplitPaneMain.setSize(dimBottom); //jSplitPaneMain.setLeftComponent(jScrollPaneTree); jSplitPaneMain.setLeftComponent(treeTabbedPane); jSplitPaneMain.setRightComponent(jTabbedPaneMain); jSplitPaneMain.setContinuousLayout(true); // ** BOTTOM PANEL ** //jPanelBottom.setPreferredSize(dimBottom); jPanelBottom.setMaximumSize(dimBottomMax); jPanelBottom.setMinimumSize(dimBottomMin); jPanelBottom.setBorder(BorderFactory.createLineBorder(Color.black)); jPanelBottom.setLayout(new BorderLayout(1,1)); jPanelBottom.removeAll(); jPanelBottom.add(jSplitPaneMain, BorderLayout.CENTER); // ** MAIN FRAME SETUP ** dimMain.height += jMenuBarMain.getPreferredSize().height; setSize(dimMain); ((JComponent)getContentPane()).setMaximumSize(dimMainMax); ((JComponent)getContentPane()).setMinimumSize(dimMainMin); setJMenuBar(jMenuBarMain); getContentPane().removeAll(); getContentPane().add(jPanelBottom, BorderLayout.CENTER); setTitle(Resources.getTranslation("resource_bundle_manager")); validateTree(); addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosing(java.awt.event.WindowEvent e) { thisWindowClosing(e); } }); } private boolean mShown = false; /** * Reveals the private method of JFrame.validateTree() */ public void validateMyTree() { validateTree(); } /** * Creates a new Resource File (i.e. English, English Canada, Finnish, etc.) */ public void createResourceFile() { new ResourceCreationDialog(rbm, this, Resources.getTranslation("dialog_title_new_file"), true); } /** * Creates a new group for grouping BundleItems */ public void createBundleGroup() { new BundleGroupCreationDialog(rbm, this, Resources.getTranslation("dialog_title_new_group"), true); updateDisplayPanels(); } /** * Creates a new BundleItem */ public void createBundleItem() { new BundleItemCreationDialog(rbm, this, Resources.getTranslation("dialog_title_new_item"), true); updateDisplayPanels(); updateProjectTree(); } /** * Handles events generated */ public void valueChanged(TreeSelectionEvent ev) { if (ev.getSource() == projectTree) updateProjectPanels(); else if (ev.getSource() == jTreeDisplay) { TreePath selPath = jTreeDisplay.getSelectionPath(); activeNode = (DefaultMutableTreeNode)selPath.getLastPathComponent(); updateDisplayPanels(); /* int selRow = jTreeDisplay.getRowForLocation(ev.getX(), ev.getY()); TreePath selPath = jTreeDisplay.getPathForLocation(ev.getX(), ev.getY()); if (selRow != -1) { if (ev.getClickCount() == 1 && ev.getSource() == jTreeDisplay) { System.out.println("Other tree"); } else if (ev.getClickCount() == 1 && ev.getSource() == projectTree) { System.out.println("Mouse pressed"); updateProjectPanels(); } else System.out.println(String.valueOf(ev.getClickCount()) + " " + ev.getSource().toString()); */ } } public void stateChanged(ChangeEvent ev) { if (ev.getSource() == treeTabbedPane) { int index = treeTabbedPane.getSelectedIndex(); String title = treeTabbedPane.getTitleAt(index); if (title.equals(Resources.getTranslation("tab_bundle"))) { jSplitPaneMain.setRightComponent(jTabbedPaneMain); updateDisplayPanels(); } else if (title.equals(Resources.getTranslation("tab_project"))) { jSplitPaneMain.setRightComponent(projectPanel); updateProjectPanels(); } } } public void actionPerformed(ActionEvent ev) { if (ev.getID() == ActionEvent.ACTION_PERFORMED) { if (ev.getSource() instanceof JMenuItem && ((JMenuItem)ev.getSource()).getName() != null && ((JMenuItem)ev.getSource()).getName().startsWith("__")) { // Menu -> File -> __Recent File // This item is a recent file selection. We need to open that file String fileLocation = ((JMenuItem)ev.getSource()).getName(); fileLocation = fileLocation.substring(2,fileLocation.length()); try { rbm = new RBManager(new File(fileLocation)); updateDisplayTree(); updateProjectTree(); updateProjectPanels(); } catch (IOException ioe) { JOptionPane.showMessageDialog(this,Resources.getTranslation("error_opening_file", ev.getActionCommand()), Resources.getTranslation("dialog_title_error_opening_file"), JOptionPane.ERROR_MESSAGE); rbm = null; } } else if (ev.getActionCommand().equals(Resources.getTranslation("menu_tree_save")) && ((JMenuItem)ev.getSource()).getName() != null) { // Popup Tree Menu -> Save String selectedEncoding = ((JMenuItem)ev.getSource()).getName(); saveResources(selectedEncoding); } else if (ev.getActionCommand().equals(Resources.getTranslation("menu_tree_hide")) && ((JMenuItem)ev.getSource()).getName() != null) { // Popup Tree Menu -> Hide String selectedEncoding = ((JMenuItem)ev.getSource()).getName(); // Should I prompt for this? hideResources(selectedEncoding); } else if (ev.getActionCommand().equals(Resources.getTranslation("menu_tree_delete")) && ((JMenuItem)ev.getSource()).getName() != null) { // Popup Tree Menu -> Delete String selectedEncoding = ((JMenuItem)ev.getSource()).getName(); int response = JOptionPane.showConfirmDialog(this, Resources.getTranslation("dialog_delete_warning"), Resources.getTranslation("dialog_title_quit"), JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.WARNING_MESSAGE); if (response == JOptionPane.YES_OPTION) { deleteResources(selectedEncoding); } } else if (ev.getActionCommand().equals(Resources.getTranslation("menu_tree_new_project"))) { String response = JOptionPane.showInputDialog(this, // Popup Project Menu -> New Project Resources.getTranslation("dialog_new_project"), Resources.getTranslation("dialog_title_new_project"), JOptionPane.QUESTION_MESSAGE); if (response == null || response.trim().equals("")) return; project = new RBProject(response); updateProjectTree(); updateProjectPanels(); } else if (ev.getActionCommand().equals(Resources.getTranslation("menu_tree_open_project"))) { int result = projectFileChooser.showOpenDialog(this); // Popup Project Menu -> Open Project if (result == JFileChooser.APPROVE_OPTION) { File f = projectFileChooser.getSelectedFile(); try { project = new RBProject(f); updateProjectTree(); updateProjectPanels(); } catch (Exception ex) { JOptionPane.showMessageDialog(this, Resources.getTranslation("error_creating_project"), Resources.getTranslation("dialog_title_error"), JOptionPane.ERROR_MESSAGE); } } } else if (ev.getActionCommand().equals(Resources.getTranslation("menu_tree_save_project"))) { int result = projectFileChooser.showSaveDialog(this); // Popup Project Menu -> Save Project if (result == JFileChooser.APPROVE_OPTION) { File f = projectFileChooser.getSelectedFile(); try { project.write(f); } catch (Exception ex) { JOptionPane.showMessageDialog(this, Resources.getTranslation("error_saving_project"), Resources.getTranslation("dialog_title_error"), JOptionPane.ERROR_MESSAGE); } } } else if (ev.getActionCommand().equals(Resources.getTranslation("menu_tree_add_project_bundle"))) { int result = openFileChooser.showOpenDialog(this); // Popup Project Menu -> Add Bundle if (result == JFileChooser.APPROVE_OPTION) { File f = openFileChooser.getSelectedFile(); try { project.addBundle(f.getAbsolutePath()); updateProjectTree(); updateProjectPanels(); } catch (Exception ex) { JOptionPane.showMessageDialog(this, Resources.getTranslation("error_adding_project_bundle"), Resources.getTranslation("dialog_title_error"), JOptionPane.ERROR_MESSAGE); } } } else if (ev.getActionCommand().equals(Resources.getTranslation("menu_tree_remove_project_bundle"))) { String bundleName = ((JMenuItem)ev.getSource()).getName(); // Popup Project Menu -> Remove Bundle project.removeBundle(bundleName); updateProjectTree(); updateProjectPanels(); } else if (ev.getActionCommand().equals(Resources.getTranslation("menu_tree_select_project_bundle"))) { String bundleName = ((JMenuItem)ev.getSource()).getName(); // Popup Project Menu -> Select Bundle RBManager bundle = project.getBundle(bundleName); rbm = bundle; updateDisplayTree(); updateDisplayPanels(); } else if (ev.getActionCommand().equals(Resources.getTranslation("menu_file_quit"))) { // Menu -> File -> Quit thisWindowClosing(null); return; } else if (ev.getActionCommand().equals(Resources.getTranslation("menu_file_new"))) { // Menu -> File -> New Resource Bundle promptForSave(null); String oldUser = getUser(); if (rbm != null && rbm.getUser() != null && !(rbm.getUser().equals(Resources.getTranslation("unknown_user")))) oldUser = rbm.getUser(); String response = JOptionPane.showInputDialog(this, Resources.getTranslation("dialog_new_baseclass"), Resources.getTranslation("dialog_title_new_bundle"), JOptionPane.QUESTION_MESSAGE); if (response != null) { // Test the response for white space if (response.indexOf(" ") > 0 || response.indexOf("\t") > 0 || response.indexOf("\n") > 0) { JOptionPane.showMessageDialog(this, Resources.getTranslation("error_baseclass_whitespace") + "\n" + Resources.getTranslation("error_bundle_not_created"), Resources.getTranslation("dialog_title_error_creating_bundle"), JOptionPane.ERROR_MESSAGE); } else { rbm = new RBManager(response); updateDisplayTree(); updateProjectTree(); updateProjectPanels(); updateDisplayPanels(); } } // Update the user information if (oldUser.equals(Resources.getTranslation("unknown_user"))) { String user = JOptionPane.showInputDialog(this, Resources.getTranslation("dialog_user_name"), Resources.getTranslation("dialog_title_user_name"), JOptionPane.QUESTION_MESSAGE); if (user != null && !(user.equals(""))) setUser(user); } else rbm.setUser(oldUser); } else if (ev.getActionCommand().equals(Resources.getTranslation("menu_file_open"))) { // Menu -> File -> Open Resource Bundle promptForSave(null); String oldUser = getUser(); if (rbm != null && rbm.getUser() != null && !(rbm.getUser().equals(Resources.getTranslation("unknown_user")))) oldUser = rbm.getUser(); openFileChooser.setSelectedFile(new File("Resources" + File.separator + "RBManager.properties")); int status = openFileChooser.showOpenDialog(this); if (status == JFileChooser.CANCEL_OPTION) { // File opening canceled } else if (status == JFileChooser.ERROR_OPTION) { // Error in file open } else { // A file has been selected try { rbm = new RBManager(openFileChooser.getSelectedFile()); updateDisplayTree(); updateProjectTree(); updateProjectPanels(); } catch (IOException ioe) { // Should provide some alert here System.err.println("Could not open the file " + openFileChooser.getSelectedFile().getAbsolutePath() + ": " + ioe.getMessage()); rbm = null; } } if (rbm == null) return; // Update the user information if (oldUser.equals(Resources.getTranslation("unknown_user"))) { String user = JOptionPane.showInputDialog(this, Resources.getTranslation("dialog_user_name"), Resources.getTranslation("dialog_title_user_name"), JOptionPane.QUESTION_MESSAGE); if (user != null && !(user.equals(""))) setUser(user); } else rbm.setUser(oldUser); } else if (ev.getActionCommand().equals(Resources.getTranslation("menu_file_save"))) { // Menu -> File -> Save Resource Bundle saveResources(); } else if (ev.getActionCommand().equals(Resources.getTranslation("menu_file_saveas"))) { // Menu -> File -> Save Resource Bundle As saveResourcesAs(); } else if (ev.getActionCommand().equals(Resources.getTranslation("menu_file_import_properties"))) { // Menu -> File -> Import -> Properties if (rbm == null || rbm.getBundles() == null) return; RBPropertiesImporter importer = new RBPropertiesImporter(Resources.getTranslation("import_properties_title"), rbm, this); } else if (ev.getActionCommand().equals(Resources.getTranslation("menu_file_import_java"))) { // Menu -> File -> Import -> Java if (rbm == null || rbm.getBundles() == null) return; RBJavaImporter importer = new RBJavaImporter(Resources.getTranslation("import_java_title"), rbm, this); } else if (ev.getActionCommand().equals(Resources.getTranslation("menu_file_import_TMX"))) { // Menu -> File -> Import -> TMX if (rbm == null || rbm.getBundles() == null) return; RBTMXImporter importer = new RBTMXImporter(Resources.getTranslation("import_TMX_title"), rbm, this); } else if (ev.getActionCommand().equals(Resources.getTranslation("menu_file_import_XLF"))) { // Menu -> File -> Import -> XLIFF if (rbm == null || rbm.getBundles() == null) return; RBxliffImporter importer = new RBxliffImporter(Resources.getTranslation("import_XLF_title"), rbm, this); } else if (ev.getActionCommand().equals(Resources.getTranslation("menu_file_export_properties"))) { // Menu -> File -> Export -> Properties RBPropertiesExporter exp = new RBPropertiesExporter(); try { if (rbm != null && rbm.getBundles() != null) exp.export(rbm); } catch (IOException ioe) { JOptionPane.showMessageDialog(this, Resources.getTranslation("error_export"), Resources.getTranslation("error"), JOptionPane.ERROR_MESSAGE); } } else if (ev.getActionCommand().equals(Resources.getTranslation("menu_file_export_java"))) { // Menu -> File -> Export -> Java RBJavaExporter exp = new RBJavaExporter(); try { if (rbm != null && rbm.getBundles() != null) exp.export(rbm); } catch (IOException ioe) { JOptionPane.showMessageDialog(this, Resources.getTranslation("error_export"), Resources.getTranslation("error"), JOptionPane.ERROR_MESSAGE); } } else if (ev.getActionCommand().equals(Resources.getTranslation("menu_file_export_ICU"))) { // Menu -> File -> Export -> Java RBICUExporter exp = new RBICUExporter(); try { if (rbm != null && rbm.getBundles() != null) exp.export(rbm); } catch (IOException ioe) { JOptionPane.showMessageDialog(this, Resources.getTranslation("error_export"), Resources.getTranslation("error"), JOptionPane.ERROR_MESSAGE); } } else if (ev.getActionCommand().equals(Resources.getTranslation("menu_file_export_TMX"))) { // Menu -> File -> Export -> TMX RBTMXExporter exp = new RBTMXExporter(); try { if (rbm != null && rbm.getBundles() != null) exp.export(rbm); } catch (IOException ioe) { JOptionPane.showMessageDialog(this, Resources.getTranslation("error_export"), Resources.getTranslation("error"), JOptionPane.ERROR_MESSAGE); } } else if (ev.getActionCommand().equals(Resources.getTranslation("menu_file_export_XLF"))) { // Menu -> File -> Export -> XLIFF RBxliffExporter exp = new RBxliffExporter(); try { if (rbm != null && rbm.getBundles() != null) exp.export(rbm); } catch (IOException ioe) { JOptionPane.showMessageDialog(this, Resources.getTranslation("error_export"), Resources.getTranslation("error"), JOptionPane.ERROR_MESSAGE); } } else if (ev.getActionCommand().equals(Resources.getTranslation("menu_options_addfile"))) { // Menu -> Options -> Add New Resource createResourceFile(); } else if (ev.getActionCommand().equals(Resources.getTranslation("menu_options_addgroup")) || ev.getActionCommand().equals(Resources.getTranslation("button_create_group"))) { // Menu -> Options -> Add New Group createBundleGroup(); } else if (ev.getActionCommand().equals(Resources.getTranslation("menu_options_addentry"))) { // Menu -> Options -> Add New Entry createBundleItem(); } else if (ev.getActionCommand().equals(Resources.getTranslation("menu_options_preferences"))) { // Menu -> Options -> Preferences PreferencesDialog pd = new PreferencesDialog(this); } else if (ev.getActionCommand().equals(Resources.getTranslation("menu_help_about"))) { // Menu -> Help -> About RBManager AboutDialog.showDialog(this); } else RBManagerGUI.debugMsg("Missed Action Command: " + ev.getActionCommand()); } } /** * Handles events generated */ public void mousePopup(MouseEvent ev) { if (ev.getSource() == jTreeDisplay) { int selRow = jTreeDisplay.getRowForLocation(ev.getX(), ev.getY()); TreePath selPath = jTreeDisplay.getPathForLocation(ev.getX(), ev.getY()); if (selRow != -1) { if (ev.getClickCount() == 1) { DefaultMutableTreeNode node = (DefaultMutableTreeNode)selPath.getLastPathComponent(); Object obj = node.getUserObject(); if (obj == null || !(obj instanceof Bundle)) return; Bundle bundle = (Bundle)obj; String encoding = bundle.encoding; if (encoding == null) encoding = new String(); // Create the menu to display JPopupMenu popupMenu = new JPopupMenu(); JMenuItem saveItem = new JMenuItem(Resources.getTranslation("menu_tree_save")); JMenuItem hideItem = new JMenuItem(Resources.getTranslation("menu_tree_hide")); JMenuItem deleteItem = new JMenuItem(Resources.getTranslation("menu_tree_delete")); saveItem.setName(encoding); saveItem.addActionListener(this); hideItem.setName(encoding); hideItem.addActionListener(this); deleteItem.setName(encoding); deleteItem.addActionListener(this); popupMenu.add(saveItem); if (node.getLevel() != 1) { popupMenu.add(hideItem); popupMenu.add(deleteItem); } popupMenu.show(ev.getComponent(), ev.getX(), ev.getY()); } } } else if (ev.getSource() == projectTree) { int selRow = projectTree.getRowForLocation(ev.getX(), ev.getY()); TreePath selPath = projectTree.getPathForLocation(ev.getX(), ev.getY()); if (selRow != -1 && ev.getClickCount() == 1) { DefaultMutableTreeNode node = (DefaultMutableTreeNode)selPath.getLastPathComponent(); Object obj = node.getUserObject(); if (obj == null) return; else if (obj instanceof String) { JPopupMenu popupMenu = new JPopupMenu(); JMenuItem newItem = new JMenuItem(Resources.getTranslation("menu_tree_new_project")); JMenuItem openItem = new JMenuItem(Resources.getTranslation("menu_tree_open_project")); JMenuItem saveItem = new JMenuItem(Resources.getTranslation("menu_tree_save_project")); newItem.addActionListener(this); openItem.addActionListener(this); saveItem.addActionListener(this); popupMenu.add(newItem); popupMenu.add(openItem); popupMenu.add(saveItem); popupMenu.show(ev.getComponent(), ev.getX(), ev.getY()); } else if (obj instanceof RBProject) { JPopupMenu popupMenu = new JPopupMenu(); JMenuItem newItem = new JMenuItem(Resources.getTranslation("menu_tree_new_project")); JMenuItem openItem = new JMenuItem(Resources.getTranslation("menu_tree_open_project")); JMenuItem saveItem = new JMenuItem(Resources.getTranslation("menu_tree_save_project")); JMenuItem addItem = new JMenuItem(Resources.getTranslation("menu_tree_add_project_bundle")); newItem.addActionListener(this); openItem.addActionListener(this); saveItem.addActionListener(this); addItem.addActionListener(this); popupMenu.add(newItem); popupMenu.add(openItem); popupMenu.add(saveItem); popupMenu.add(addItem); popupMenu.show(ev.getComponent(), ev.getX(), ev.getY()); } else if (obj instanceof RBManager) { RBManager rbm = (RBManager)obj; JPopupMenu popupMenu = new JPopupMenu(); JMenuItem selectItem = new JMenuItem(Resources.getTranslation("menu_tree_select_project_bundle")); JMenuItem removeItem = new JMenuItem(Resources.getTranslation("menu_tree_remove_project_bundle")); selectItem.setName(rbm.getBaseClass()); removeItem.setName(rbm.getBaseClass()); selectItem.addActionListener(this); removeItem.addActionListener(this); popupMenu.add(selectItem); popupMenu.add(removeItem); popupMenu.show(ev.getComponent(), ev.getX(), ev.getY()); } } } } public void mousePressed(MouseEvent ev) { if (ev.isPopupTrigger()) { mousePopup(ev); } } public void mouseReleased(MouseEvent ev) { if (ev.isPopupTrigger()) { mousePopup(ev); return; } // Not the popup trigger } public void mouseEntered(MouseEvent ev) { } public void mouseExited(MouseEvent ev) { } public void mouseClicked(MouseEvent ev) { if (ev.getClickCount() == 2 && ev.getSource() instanceof JTable) { // We are going to display the edit frame for the item selected BundleItem item = null; JTable table = (JTable) ev.getSource(); if (table.getModel() instanceof UntranslatedItemsTableModel) { int row = table.getSelectedRow(); UntranslatedItemsTableModel model = (UntranslatedItemsTableModel)table.getModel(); item = model.getBundleItem(row); BundleItemDialog biDialog = new BundleItemDialog(rbm, item, (rbm == null ? "" : rbm.getUser()), this, Resources.getTranslation("dialog_title_edit_item"), true); model.update(); } else if (table.getModel() instanceof SearchItemsTableModel) { int row = table.getSelectedRow(); SearchItemsTableModel model = (SearchItemsTableModel)table.getModel(); item = model.getBundleItem(row); BundleItemDialog biDialog = new BundleItemDialog(rbm, item, (rbm == null ? "" : rbm.getUser()), this, Resources.getTranslation("dialog_title_edit_item"), true); model.update(); } else if (table.getModel() instanceof GroupItemsTableModel) { int row = table.getSelectedRow(); GroupItemsTableModel model = (GroupItemsTableModel)table.getModel(); item = model.getBundleItem(row); BundleItemDialog biDialog = new BundleItemDialog(rbm, item, (rbm == null ? "" : rbm.getUser()), this, Resources.getTranslation("dialog_title_edit_item"), true); model.update(); } updateDisplayPanels(); } } protected void updateProjectPanels() { projectPanel.updateComponents(); } // Update the display of the main panels (stats, untrans, groups). Should be called after a new tree selection protected void updateDisplayPanels() { debugMsg("Updating Display Panels"); Bundle bundle = null; if (activeNode == null) return; Object o = activeNode.getUserObject(); if (o == null) return; if (o instanceof String) { // A node that is not a root was selected.... I need to do something here String str = (String)o; if (rbm == null) return; if (str.equals(rbm.getBaseClass())) { // The base class node was selected jPanelStats.setManager(rbm); jPanelUntrans.setManager(rbm); jPanelGroups.setManager(rbm); jPanelSearch.setManager(rbm); } else { jPanelStats.removeElements(); jPanelUntrans.removeElements(); jPanelGroups.removeElements(); jPanelSearch.removeElements(); } //return; } else if (o instanceof Bundle) { bundle = (Bundle) activeNode.getUserObject(); jPanelStats.setBundle(bundle); jPanelUntrans.setBundle(bundle); jPanelGroups.setBundle(bundle); jPanelSearch.setBundle(bundle); } else RBManagerGUI.debugMsg(o.toString()); jPanelStats.updateComponents(); jPanelUntrans.updateComponents(); jPanelGroups.updateComponents(); jPanelSearch.updateComponents(); validateTree(); } public void updateProjectTree() { debugMsg("Updating Project Trees"); DefaultMutableTreeNode root = null; if (project != null) { root = new DefaultMutableTreeNode(project); for (int i=0; i < project.getSize(); i++) { RBManager rbm = project.getBundle(i); DefaultMutableTreeNode bundleNode = new DefaultMutableTreeNode(rbm); root.add(bundleNode); Bundle mainBundle = (Bundle)rbm.getBundles().firstElement(); Vector groups = mainBundle.getGroupsAsVector(); for (int j=0; j < groups.size(); j++) { BundleGroup group = (BundleGroup)groups.elementAt(j); DefaultMutableTreeNode groupNode = new DefaultMutableTreeNode(group); bundleNode.add(groupNode); Vector items = group.getItemsAsVector(); for (int k=0; k < items.size(); k++) { BundleItem item = (BundleItem)items.elementAt(k); DefaultMutableTreeNode itemNode = new DefaultMutableTreeNode(item); groupNode.add(itemNode); } } } } else if (rbm != null) { // There is a resource bundle open, but no project root = new DefaultMutableTreeNode(Resources.getTranslation("no_project")); Bundle mainBundle = (Bundle)rbm.getBundles().firstElement(); DefaultMutableTreeNode bundleNode = new DefaultMutableTreeNode(rbm);//(rbm.getBaseClass()); root.add(bundleNode); Vector groups = mainBundle.getGroupsAsVector(); for (int i=0; i < groups.size(); i++) { BundleGroup group = (BundleGroup)groups.elementAt(i); DefaultMutableTreeNode groupNode = new DefaultMutableTreeNode(group); bundleNode.add(groupNode); Vector items = group.getItemsAsVector(); for (int j=0; j < items.size(); j++) { BundleItem item = (BundleItem)items.elementAt(j); DefaultMutableTreeNode itemNode = new DefaultMutableTreeNode(item); groupNode.add(itemNode); } } } else { root = new DefaultMutableTreeNode(Resources.getTranslation("no_project_bundle")); } // Create the tree from the roots projectTree = new JTree(root); projectTree.addMouseListener(this); projectTree.addTreeSelectionListener(this); projectTree.setCellRenderer(RBTreeCellRenderer.getInstance()); projectScrollPane.getViewport().removeAll(); projectScrollPane.getViewport().add(projectTree); repaint(); validateTree(); return; } // Update the display of the tree file map. Should be called when the tree is changed/updated public void updateDisplayTree() { debugMsg("Updating Display Trees"); DefaultMutableTreeNode root = null; if (rbm == null || rbm.getBundles() == null) { root = new DefaultMutableTreeNode(Resources.getTranslation("no_resource_bundle")); } else { // From here on out, there is a defined resource bundle manager Bundle mainBundle = (Bundle)rbm.getBundles().firstElement(); root = new DefaultMutableTreeNode(rbm.getBaseClass()); // Add the base class root.add(new DefaultMutableTreeNode(mainBundle)); //DefaultMutableTreeNode currNode = root; for (int i = 1; i < rbm.getBundles().size(); i++) { Bundle currBundle = (Bundle)rbm.getBundles().elementAt(i); String variant = currBundle.getVariantEncoding(); String country = currBundle.getCountryEncoding(); String language = currBundle.getLanguageEncoding(); //DefaultMutableTreeNode languageNode = null; // Look for a node representing this language if (language == null || language.equals("")) continue; boolean languageNodeFound = false; for (int j=0; j < root.getChildCount(); j++) { DefaultMutableTreeNode langNode = (DefaultMutableTreeNode)root.getChildAt(j); Object o = langNode.getUserObject(); if (o == null || !(o instanceof String)) continue; String str = (String)o; if (str.equals(Resources.getTranslation("tree_language_node", language))) { // There is a non-leaf node with this language languageNodeFound = true; if (country == null || country.equals("")) langNode.add(new DefaultMutableTreeNode(currBundle)); else { // We need to look at country, variant boolean countryNodeFound = false; for (int k=0; k < langNode.getChildCount(); k++) { DefaultMutableTreeNode countryNode = (DefaultMutableTreeNode)langNode.getChildAt(k); Object o2 = countryNode.getUserObject(); if (o2 == null || !(o2 instanceof String)) continue; String str2 = (String)o2; if (str2.equals(Resources.getTranslation("tree_country_node", country))) { // There is a non-leaf node for this country countryNodeFound = true; if (variant == null || variant.equals("")) { countryNode.add(new DefaultMutableTreeNode(currBundle)); } else { // We need to look at variant boolean variantNodeFound = false; for (int l=0; l < countryNode.getChildCount(); l++) { DefaultMutableTreeNode variantNode = (DefaultMutableTreeNode)countryNode.getChildAt(l); Object o3 = variantNode.getUserObject(); if (o3 == null || !(o3 instanceof String)) continue; String str3 = (String)o3; if (str3.equals(Resources.getTranslation("tree_variant_node"))) { variantNodeFound = true; variantNode.add(new DefaultMutableTreeNode(currBundle)); } } // end for - country node loop if (!variantNodeFound) { DefaultMutableTreeNode variantNode = new DefaultMutableTreeNode(Resources.getTranslation("tree_variant_node")); countryNode.add(variantNode); variantNode.add(new DefaultMutableTreeNode(currBundle)); } } } } // end for - language node loop if (!countryNodeFound) { DefaultMutableTreeNode countryNode = new DefaultMutableTreeNode(Resources.getTranslation("tree_country_node", country)); langNode.add(countryNode); if (variant == null || variant.equals("")) { countryNode.add(new DefaultMutableTreeNode(currBundle)); } else { // We need to look at the variant boolean variantNodeFound = false; for (int l=0; l < countryNode.getChildCount(); l++) { DefaultMutableTreeNode variantNode = (DefaultMutableTreeNode)countryNode.getChildAt(l); Object o3 = variantNode.getUserObject(); if (o3 == null || !(o3 instanceof String)) continue; String str3 = (String)o3; if (str3.equals(Resources.getTranslation("tree_variant_node"))) { variantNodeFound = true; variantNode.add(new DefaultMutableTreeNode(currBundle)); } } // end for - country node loop if (!variantNodeFound) { DefaultMutableTreeNode variantNode = new DefaultMutableTreeNode(Resources.getTranslation("tree_variant_node")); countryNode.add(variantNode); variantNode.add(new DefaultMutableTreeNode(currBundle)); } } } } } } if (!languageNodeFound) { // We need to create a node for this country DefaultMutableTreeNode langNode = new DefaultMutableTreeNode(Resources.getTranslation("tree_language_node", language)); root.add(langNode); if (country == null || country.equals("")) { langNode.add(new DefaultMutableTreeNode(currBundle)); } else { // We need to look at the country, variant boolean countryNodeFound = false; for (int k=0; k < langNode.getChildCount(); k++) { DefaultMutableTreeNode countryNode = (DefaultMutableTreeNode)langNode.getChildAt(k); Object o2 = countryNode.getUserObject(); if (o2 == null || !(o2 instanceof String)) continue; String str2 = (String)o2; if (str2.equals(Resources.getTranslation("tree_country_node", country))) { // There is a non-leaf node for this country countryNodeFound = true; if (variant == null || variant.equals("")) { countryNode.add(new DefaultMutableTreeNode(currBundle)); } else { // We need to look at variant boolean variantNodeFound = false; for (int l=0; l < countryNode.getChildCount(); l++) { DefaultMutableTreeNode variantNode = (DefaultMutableTreeNode)countryNode.getChildAt(l); Object o3 = variantNode.getUserObject(); if (o3 == null || !(o3 instanceof String)) continue; String str3 = (String)o3; if (str3.equals(Resources.getTranslation("tree_variant_node"))) { variantNodeFound = true; variantNode.add(new DefaultMutableTreeNode(currBundle)); } } // end for - country node loop if (!variantNodeFound) { DefaultMutableTreeNode variantNode = new DefaultMutableTreeNode(Resources.getTranslation("tree_variant_node")); countryNode.add(variantNode); variantNode.add(new DefaultMutableTreeNode(currBundle)); } } } } // end for - language node loop if (!countryNodeFound) { DefaultMutableTreeNode countryNode = new DefaultMutableTreeNode(Resources.getTranslation("tree_country_node", country)); langNode.add(countryNode); if (variant == null || variant.equals("")) { countryNode.add(new DefaultMutableTreeNode(currBundle)); } else { // We need to look at the variant boolean variantNodeFound = false; for (int l=0; l < countryNode.getChildCount(); l++) { DefaultMutableTreeNode variantNode = (DefaultMutableTreeNode)countryNode.getChildAt(l); Object o3 = variantNode.getUserObject(); if (o3 == null || !(o3 instanceof String)) continue; String str3 = (String)o3; if (str3.equals(Resources.getTranslation("tree_variant_node"))) { variantNodeFound = true; variantNode.add(new DefaultMutableTreeNode(currBundle)); } } // end for - country node loop if (!variantNodeFound) { DefaultMutableTreeNode variantNode = new DefaultMutableTreeNode(Resources.getTranslation("tree_variant_node", variant)); countryNode.add(variantNode); variantNode.add(new DefaultMutableTreeNode(currBundle)); } } } } } } } // Create the tree from the roots jTreeDisplay = new JTree(root); jTreeDisplay.addMouseListener(this); jTreeDisplay.addTreeSelectionListener(this); jTreeDisplay.setCellRenderer(RBTreeCellRenderer.getInstance()); jScrollPaneTree.getViewport().removeAll(); jScrollPaneTree.getViewport().add(jTreeDisplay); repaint(); validateTree(); return; } /** * Inherits from JFrame.addNotify(), but also inserts the menu bar */ public void addNotify() { super.addNotify(); if (mShown) return; // resize frame to account for menubar JMenuBar jMenuBar = getJMenuBar(); if (jMenuBar != null) { int jMenuBarHeight = jMenuBar.getPreferredSize().height; Dimension dimension = getSize(); dimension.height += jMenuBarHeight; setSize(dimension); } mShown = true; } /** * Called when it may be appropriate to check with the user if they want to save the file */ boolean promptForSave(String message) { if (rbm != null) { int response = JOptionPane.showConfirmDialog(this, (message == null ? Resources.getTranslation("dialog_save") : message), Resources.getTranslation("dialog_title_quit"), JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE); if (response == JOptionPane.CANCEL_OPTION) return false; if (response == JOptionPane.YES_OPTION) { return saveResources(); } } return true; } public boolean deleteResources(String encoding) { if (rbm == null) return false; // This should never happen try { rbm.eraseFile(encoding); } catch (IOException ioe) { JOptionPane.showMessageDialog(this, Resources.getTranslation("error_deleting", ioe.getMessage()), Resources.getTranslation("error"), JOptionPane.ERROR_MESSAGE); if (RBManagerGUI.debug) System.err.println(ioe); return false; } updateDisplayTree(); updateProjectTree(); updateProjectPanels(); updateDisplayPanels(); return true; } public void hideResources(String encoding) { rbm.hideResource(encoding); updateDisplayTree(); updateProjectTree(); updateProjectPanels(); updateDisplayPanels(); } /** * Save a particular resources file within the bundle. */ public boolean saveResources(String encoding) { if (rbm == null) return false; // This should never happen return saveResources(rbm, encoding); } public boolean saveResources(RBManager bundle, String encoding) { try { bundle.writeToFile(encoding); } catch (IOException ioe) { JOptionPane.showMessageDialog(this, Resources.getTranslation("error_saving", ioe.getMessage()), Resources.getTranslation("error"), JOptionPane.ERROR_MESSAGE); if (RBManagerGUI.debug) System.err.println(ioe); return false; } return true; } /** * Called when the resources are to be saved */ public boolean saveResources() { if (rbm == null) return true; return saveResources(rbm); } public boolean saveResources(RBManager bundle) { try { bundle.writeToFile(); } catch (IOException ioe) { JOptionPane.showMessageDialog(this, Resources.getTranslation("error_saving", ioe.getMessage()), Resources.getTranslation("error"), JOptionPane.ERROR_MESSAGE); if (RBManagerGUI.debug) System.err.println(ioe); return false; } return true; } /** * Called when the resource bundle is to be saved, but displays a window to the user allowing them * to selecte the file destination of the folder in which to save the bundle as well as the base * class name for the bundle. */ public boolean saveResourcesAs() { if (rbm == null) return true; int result = saveFileChooser.showSaveDialog(this); if (result == JFileChooser.APPROVE_OPTION) { try { File newFile = saveFileChooser.getSelectedFile(); String fileName = newFile.getName(); String baseName = fileName; if (fileName.toLowerCase().endsWith(".properties")) baseName = baseName.substring(0,baseName.length()-11); rbm.setBaseClass(baseName); rbm.setFileDirectory(newFile.getParentFile()); rbm.writeToFile(); } catch (IOException ioe) { JOptionPane.showMessageDialog(this, Resources.getTranslation("error_saving", ioe.getMessage()), Resources.getTranslation("error"), JOptionPane.ERROR_MESSAGE); if (RBManagerGUI.debug) System.err.println(ioe); return false; } } return true; } void updateLocale(Locale l) { // Update the menubars jMenuBarMain.updateLocale(); updateLocale(getContentPane(), l); updateLocale(openFileChooser, l); updateLocale(saveFileChooser, l); // Redraw the panes updateDisplayTree(); updateProjectTree(); updateProjectPanels(); updateDisplayPanels(); // update the tab titles jTabbedPaneMain.setTitleAt(0,Resources.getTranslation("tab_statistics")); jTabbedPaneMain.setTitleAt(1,Resources.getTranslation("tab_untranslated")); jTabbedPaneMain.setTitleAt(2,Resources.getTranslation("tab_groups")); setTitle(Resources.getTranslation("resource_bundle_manager")); } static void updateLocale(Container c, Locale l) { Component comp[] = c.getComponents(); for (int i=0; i < comp.length; i++) { if (comp[i] instanceof JComponent) { ((JComponent)comp[i]).setLocale(l); } if (comp[i] instanceof Container) { updateLocale((Container)comp[i],l); } } if (c instanceof JMenu) { comp = ((JMenu)c).getMenuComponents(); for (int i=0; i < comp.length; i++) { if (comp[i] instanceof JComponent) { ((JComponent)comp[i]).setLocale(l); } if (comp[i] instanceof Container) { updateLocale((Container)comp[i],l); } } } } void updateUI() { updateUI(getContentPane()); jMenuBarMain.updateUI(); updateUI(jMenuBarMain); updateUI(openFileChooser); updateUI(saveFileChooser); } static void updateUI(Container c) { Component comp[] = c.getComponents(); for (int i=0; i < comp.length; i++) { if (comp[i] instanceof JComponent) { ((JComponent)comp[i]).updateUI(); } if (comp[i] instanceof Container) { updateUI((Container)comp[i]); } } if (c instanceof JMenu) { comp = ((JMenu)c).getMenuComponents(); for (int i=0; i < comp.length; i++) { if (comp[i] instanceof JComponent) { ((JComponent)comp[i]).updateUI(); } if (comp[i] instanceof Container) { updateUI((Container)comp[i]); } } } } // Close the window when the close box is clicked void thisWindowClosing(java.awt.event.WindowEvent e) { if (promptForSave(Resources.getTranslation("dialog_quit_save"))) { setVisible(false); dispose(); System.exit(0); } } public void setUser(String userName) { this.userName = userName; if (rbm != null) rbm.setUser(userName); } public String getUser() { return userName; } public BundleItem getSelectedProjectBundleItem() { TreePath path = projectTree.getSelectionPath(); if (path == null) return null; DefaultMutableTreeNode node = (DefaultMutableTreeNode)path.getLastPathComponent(); Object obj = node.getUserObject(); if (obj == null || !(obj instanceof BundleItem)) return null; return (BundleItem)obj; } public RBManager getSelectedProjectBundle() { TreePath path = projectTree.getSelectionPath(); if (path == null) return null; for (int i=0; i < path.getPathCount(); i++) { DefaultMutableTreeNode node = (DefaultMutableTreeNode)path.getPathComponent(i); Object obj = node.getUserObject(); if (obj != null && obj instanceof RBManager) return (RBManager)obj; } return null; } public static void debugMsg(String msg) { if (debug) System.out.println("Debug Message [" + debugcount++ + "]: " + msg); } } class RBTreeCellRenderer extends DefaultTreeCellRenderer { private static RBTreeCellRenderer cellRend = null; private static ImageIcon bundleIcon = null; private static ImageIcon languageIcon = null; private static ImageIcon countryIcon = null; private static ImageIcon variantIcon = null; private static ImageIcon fileIcon = null; private static ImageIcon groupIcon = null; private static ImageIcon itemIcon = null; private static ImageIcon projectIcon = null; private RBTreeCellRenderer() { } public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) { super.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus); DefaultMutableTreeNode node = (DefaultMutableTreeNode)value; int level = node.getLevel(); Object obj = node.getUserObject(); if (obj instanceof BundleGroup) { setIcon(groupIcon); } else if (obj instanceof BundleItem) { setIcon(itemIcon); } else if (obj instanceof RBManager) { setIcon(bundleIcon); } else if (obj instanceof RBProject) { setIcon(projectIcon); } else if (leaf) { if (level != 0) setIcon(fileIcon); } else { if (level == 0) { if (obj instanceof String && ((String)obj).equals(Resources.getTranslation("no_project"))) setIcon(projectIcon); else setIcon(bundleIcon); } else if (level == 1) setIcon(languageIcon); else if (level == 2) setIcon(countryIcon); else if (level == 3) setIcon(variantIcon); } return this; } public static RBTreeCellRenderer getInstance() { if (cellRend == null) { try { Class thisClass = Class.forName("com.ibm.rbm.gui.RBManagerGUI"); // Create instances of the icons Image scaledImage = (new ImageIcon(thisClass.getResource("images/tree_icon_bundle.gif"))).getImage().getScaledInstance(16, 16, Image.SCALE_DEFAULT); bundleIcon = new ImageIcon(scaledImage); languageIcon = new ImageIcon(thisClass.getResource("images/tree_icon_language.gif")); countryIcon = new ImageIcon(thisClass.getResource("images/tree_icon_country.gif")); variantIcon = new ImageIcon(thisClass.getResource("images/tree_icon_variant.gif")); fileIcon = new ImageIcon(thisClass.getResource("images/tree_icon_file.gif")); groupIcon = new ImageIcon(thisClass.getResource("images/tree_icon_group.gif")); itemIcon = new ImageIcon(thisClass.getResource("images/tree_icon_item.gif")); projectIcon = new ImageIcon(thisClass.getResource("images/tree_icon_project.gif")); } catch (ClassNotFoundException e) { RBManagerGUI.debugMsg(e.toString()); } // Create the instance of the renderer cellRend = new RBTreeCellRenderer(); } return cellRend; } } /** * Table model for resource bundle projects */ class RBProject { java.util.List bundleNames; java.util.List bundleFileNames; java.util.List bundles; String projectName; public RBProject(String projectName) { this.projectName = projectName; bundleNames = new java.util.LinkedList(); bundleFileNames = new java.util.LinkedList(); bundles = new java.util.LinkedList(); } public RBProject(File inputFile) throws IOException { this(inputFile.getName()); if (projectName.indexOf(".") > 0) { projectName = projectName.substring(0,projectName.lastIndexOf(".")); } FileReader fr = new FileReader(inputFile); BufferedReader br = new BufferedReader(fr); String line = null; int linecount = 0; while ((line = br.readLine()) != null) { if (linecount % 2 == 0) { bundleNames.add(line.trim()); } else { bundleFileNames.add(line.trim()); } linecount++; } fr.close(); try { for (int i=0; i < bundleFileNames.size(); i++) { RBManager rbm = new RBManager(new File((String)bundleFileNames.get(i))); bundles.add(rbm); } } catch (Exception ex) { JOptionPane.showMessageDialog(new JFrame(), Resources.getTranslation("error_load_project"), Resources.getTranslation("error"), JOptionPane.ERROR_MESSAGE); ex.printStackTrace(); bundleNames.clear(); bundleFileNames.clear(); } } public String toString() { return projectName; } public int getSize() { return bundleNames.size(); } public String getBundleName(int index) { return (String)bundleNames.get(index); } public String getFileName(int index) { return (String)bundleFileNames.get(index); } public RBManager getBundle(int index) { return (RBManager)bundles.get(index); } public RBManager getBundle(String bundleName) { int index = bundleNames.indexOf(bundleName); if (index >= 0) return getBundle(index); return null; } public void write(File outputFile) throws IOException { FileWriter fw = new FileWriter(outputFile); for (int i=0; i < bundleNames.size(); i++) { fw.write((String)bundleNames.get(i)); fw.write("\n"); fw.write((String)bundleFileNames.get(i)); if (i != bundleNames.size()-1) fw.write("\n"); } fw.flush(); fw.close(); } public void addBundle(String bundleFileName) throws IOException { RBManager bundle = new RBManager(new File(bundleFileName)); bundles.add(bundle); bundleNames.add(bundle.getBaseClass()); bundleFileNames.add(bundleFileName); } public void removeBundle(String bundleName) { int index = bundleNames.indexOf(bundleName); if (index >= 0) { bundleNames.remove(index); bundleFileNames.remove(index); bundles.remove(index); } } } class RBManagerMenuBar extends JMenuBar { RBManagerGUI listener; JMenu jMenuFile = new JMenu(); // Menu -> File JMenuItem jMenuFileNewResourceBundle = new JMenuItem(); JMenuItem jMenuFileOpenResourceBundle = new JMenuItem(); JMenuItem jMenuFileSaveResourceBundle = new JMenuItem(); JMenuItem jMenuFileSaveResourceBundleAs = new JMenuItem(); JMenu jMenuFileImportResourceBundle = new JMenu(); // Menu -> File -> Import JMenuItem jMenuFileImportJava = new JMenuItem(); JMenuItem jMenuFileImportProperties = new JMenuItem(); JMenuItem jMenuFileImportTMX = new JMenuItem(); JMenuItem jMenuFileImportXLF = new JMenuItem(); JMenu jMenuFileExportResourceBundle = new JMenu(); // Menu -> File -> Export JMenuItem jMenuFileExportJava = new JMenuItem(); JMenuItem jMenuFileExportICU = new JMenuItem(); JMenuItem jMenuFileExportProperties = new JMenuItem(); JMenuItem jMenuFileExportTMX = new JMenuItem(); JMenuItem jMenuFileExportXLF = new JMenuItem(); JMenuItem jMenuFileExit = new JMenuItem(); JMenu jMenuEdit = new JMenu(); // Menu -> Edit JMenuItem jMenuEditCut = new JMenuItem(); JMenuItem jMenuEditCopy = new JMenuItem(); JMenuItem jMenuEditPaste = new JMenuItem(); JMenuItem jMenuEditDelete = new JMenuItem(); JMenu jMenuOptions = new JMenu(); // Menu -> Options JMenuItem jMenuOptionsAddNewEntry = new JMenuItem(); JMenuItem jMenuOptionsAddNewGroup = new JMenuItem(); JMenuItem jMenuOptionsAddNewResourceFile = new JMenuItem(); //JMenuItem jMenuOptionsProjectViewer = new JMenuItem(); JMenuItem jMenuOptionsPreferences = new JMenuItem(); JMenu jMenuView = new JMenu(); // Menu -> View JMenuItem jMenuViewViewStatistics = new JMenuItem(); JMenu jMenuHelp = new JMenu(); // Menu -> Help JMenuItem jMenuHelpAboutResourceBundleManager = new JMenuItem(); void updateLocale() { //FILE jMenuFile.setText(Resources.getTranslation("menu_file")); jMenuFile.setMnemonic(getKeyEventKey(Resources.getTranslation("menu_file_trigger"))); jMenuFileNewResourceBundle.setText(Resources.getTranslation("menu_file_new")); jMenuFileNewResourceBundle.setMnemonic(getKeyEventKey(Resources.getTranslation("menu_file_new_trigger"))); jMenuFileOpenResourceBundle.setText(Resources.getTranslation("menu_file_open")); jMenuFileOpenResourceBundle.setMnemonic(getKeyEventKey(Resources.getTranslation("menu_file_open_trigger"))); jMenuFileSaveResourceBundle.setText(Resources.getTranslation("menu_file_save")); jMenuFileSaveResourceBundle.setMnemonic(getKeyEventKey(Resources.getTranslation("menu_file_save_trigger"))); jMenuFileSaveResourceBundleAs.setText(Resources.getTranslation("menu_file_saveas")); jMenuFileSaveResourceBundleAs.setMnemonic(getKeyEventKey(Resources.getTranslation("menu_file_saveas_trigger"))); jMenuFileImportResourceBundle.setText(Resources.getTranslation("menu_file_import")); jMenuFileImportResourceBundle.setMnemonic(getKeyEventKey(Resources.getTranslation("menu_file_import_trigger"))); jMenuFileImportJava.setText(Resources.getTranslation("menu_file_import_java")); jMenuFileImportJava.setMnemonic(getKeyEventKey(Resources.getTranslation("menu_file_import_java_trigger"))); jMenuFileImportProperties.setText(Resources.getTranslation("menu_file_import_properties")); jMenuFileImportProperties.setMnemonic(getKeyEventKey(Resources.getTranslation("menu_file_import_properties_trigger"))); jMenuFileImportTMX.setText(Resources.getTranslation("menu_file_import_TMX")); jMenuFileImportTMX.setMnemonic(getKeyEventKey(Resources.getTranslation("menu_file_import_TMX_trigger"))); jMenuFileImportXLF.setText(Resources.getTranslation("menu_file_import_XLF")); jMenuFileImportXLF.setMnemonic(getKeyEventKey(Resources.getTranslation("menu_file_import_XLF_trigger"))); jMenuFileExportResourceBundle.setText(Resources.getTranslation("menu_file_export")); jMenuFileExportResourceBundle.setMnemonic(getKeyEventKey(Resources.getTranslation("menu_file_export_trigger"))); jMenuFileExportJava.setText(Resources.getTranslation("menu_file_export_java")); jMenuFileExportJava.setMnemonic(getKeyEventKey(Resources.getTranslation("menu_file_export_java_trigger"))); jMenuFileExportICU.setText(Resources.getTranslation("menu_file_export_ICU")); jMenuFileExportICU.setMnemonic(getKeyEventKey(Resources.getTranslation("menu_file_export_ICU_trigger"))); jMenuFileExportProperties.setText(Resources.getTranslation("menu_file_export_properties")); jMenuFileExportProperties.setMnemonic(getKeyEventKey(Resources.getTranslation("menu_file_export_properties_trigger"))); jMenuFileExportTMX.setText(Resources.getTranslation("menu_file_export_TMX")); jMenuFileExportTMX.setMnemonic(getKeyEventKey(Resources.getTranslation("menu_file_export_TMX_trigger"))); jMenuFileExportXLF.setText(Resources.getTranslation("menu_file_export_XLF")); jMenuFileExportXLF.setMnemonic(getKeyEventKey(Resources.getTranslation("menu_file_export_XLF_trigger"))); jMenuFileExit.setText(Resources.getTranslation("menu_file_quit")); jMenuFileExit.setMnemonic(getKeyEventKey(Resources.getTranslation("menu_file_quit_trigger"))); //EDIT jMenuEdit.setText(Resources.getTranslation("menu_edit")); jMenuEdit.setMnemonic(getKeyEventKey(Resources.getTranslation("menu_edit_trigger"))); jMenuEditCut.setText(Resources.getTranslation("menu_edit_cut")); jMenuEditCut.setMnemonic(getKeyEventKey(Resources.getTranslation("menu_edit_cut_trigger"))); jMenuEditCopy.setText(Resources.getTranslation("menu_edit_copy")); jMenuEditCopy.setMnemonic(getKeyEventKey(Resources.getTranslation("menu_edit_copy_trigger"))); jMenuEditPaste.setText(Resources.getTranslation("menu_edit_paste")); jMenuEditPaste.setMnemonic(getKeyEventKey(Resources.getTranslation("menu_edit_paste_trigger"))); jMenuEditDelete.setText(Resources.getTranslation("menu_edit_delete")); jMenuEditDelete.setMnemonic(getKeyEventKey(Resources.getTranslation("menu_edit_delete_trigger"))); //OPTIONS jMenuOptions.setText(Resources.getTranslation("menu_options")); jMenuOptions.setMnemonic(getKeyEventKey(Resources.getTranslation("menu_options_trigger"))); jMenuOptionsAddNewEntry.setText(Resources.getTranslation("menu_options_addentry")); jMenuOptionsAddNewEntry.setMnemonic(getKeyEventKey(Resources.getTranslation("menu_options_addentry_trigger"))); jMenuOptionsAddNewGroup.setText(Resources.getTranslation("menu_options_addgroup")); jMenuOptionsAddNewGroup.setMnemonic(getKeyEventKey(Resources.getTranslation("menu_options_addgroup_trigger"))); jMenuOptionsAddNewResourceFile.setText(Resources.getTranslation("menu_options_addfile")); jMenuOptionsAddNewResourceFile.setMnemonic(getKeyEventKey(Resources.getTranslation("menu_options_addfile_trigger"))); //jMenuOptionsProjectViewer.setText(Resources.getTranslation("menu_options_project_viewer")); //jMenuOptionsProjectViewer.setMnemonic(getKeyEventKey(Resources.getTranslation("menu_options_project_viewer_trigger"))); jMenuOptionsPreferences.setText(Resources.getTranslation("menu_options_preferences")); jMenuOptionsPreferences.setMnemonic(getKeyEventKey(Resources.getTranslation("menu_options_preferences_trigger"))); //VIEW jMenuView.setText(Resources.getTranslation("menu_view")); jMenuView.setMnemonic(getKeyEventKey(Resources.getTranslation("menu_view_trigger"))); jMenuViewViewStatistics.setText(Resources.getTranslation("menu_view_statistics")); jMenuViewViewStatistics.setMnemonic(getKeyEventKey(Resources.getTranslation("menu_view_statistics_trigger"))); //HELP jMenuHelp.setText(Resources.getTranslation("menu_help")); jMenuHelp.setMnemonic(getKeyEventKey(Resources.getTranslation("menu_options_trigger"))); jMenuHelpAboutResourceBundleManager.setText(Resources.getTranslation("menu_help_about")); jMenuHelpAboutResourceBundleManager.setMnemonic(getKeyEventKey(Resources.getTranslation("menu_help_about_trigger"))); } public RBManagerMenuBar(RBManagerGUI gui) { super(); boolean xmlAvailable; try { Class.forName("org.apache.xerces.parsers.DOMParser"); xmlAvailable = true; } catch (ClassNotFoundException e) { xmlAvailable = false; } listener = gui; // Add the menus to the menu bar setVisible(true); add(jMenuFile); //add(jMenuEdit); add(jMenuOptions); //add(jMenuView); add(jMenuHelp); // Add File Menu Items to the File Menu jMenuFile.setVisible(true); jMenuFile.setText(Resources.getTranslation("menu_file")); jMenuFile.setMnemonic(getKeyEventKey(Resources.getTranslation("menu_file_trigger"))); jMenuFile.add(jMenuFileNewResourceBundle); jMenuFile.add(jMenuFileOpenResourceBundle); jMenuFile.add(jMenuFileSaveResourceBundle); jMenuFile.add(jMenuFileSaveResourceBundleAs); jMenuFile.addSeparator(); jMenuFile.add(jMenuFileImportResourceBundle); jMenuFile.add(jMenuFileExportResourceBundle); jMenuFile.addSeparator(); // Add the recent files to the file menu Vector recentFiles = Preferences.getRecentFilesPreferences(); if (recentFiles.size() > 0) { for (int i=0; i < recentFiles.size(); i+=2) { String name = (String)recentFiles.elementAt(i); String location = (String)recentFiles.elementAt(i+1); JMenuItem recentMenuItem = new JMenuItem(); recentMenuItem.setVisible(true); recentMenuItem.setText(name); recentMenuItem.setName("__" + location.trim()); recentMenuItem.addActionListener(listener); jMenuFile.add(recentMenuItem); } jMenuFile.addSeparator(); } jMenuFile.add(jMenuFileExit); //jMenuFileImportResourceBundle.add(jMenuFileImportJava); jMenuFileImportResourceBundle.add(jMenuFileImportProperties); jMenuFileImportTMX.setEnabled(xmlAvailable); jMenuFileImportResourceBundle.add(jMenuFileImportTMX); jMenuFileImportXLF.setEnabled(xmlAvailable); jMenuFileImportResourceBundle.add(jMenuFileImportXLF); jMenuFileExportResourceBundle.add(jMenuFileExportJava); jMenuFileExportResourceBundle.add(jMenuFileExportICU); jMenuFileExportResourceBundle.add(jMenuFileExportProperties); jMenuFileExportTMX.setEnabled(xmlAvailable); jMenuFileExportResourceBundle.add(jMenuFileExportTMX); jMenuFileExportXLF.setEnabled(xmlAvailable); jMenuFileExportResourceBundle.add(jMenuFileExportXLF); jMenuFileNewResourceBundle.setVisible(true); jMenuFileNewResourceBundle.setText(Resources.getTranslation("menu_file_new")); jMenuFileNewResourceBundle.setMnemonic(getKeyEventKey(Resources.getTranslation("menu_file_new_trigger"))); jMenuFileNewResourceBundle.setAccelerator(KeyStroke.getKeyStroke( KeyEvent.VK_N, ActionEvent.CTRL_MASK)); jMenuFileNewResourceBundle.addActionListener(listener); jMenuFileOpenResourceBundle.setVisible(true); jMenuFileOpenResourceBundle.setText(Resources.getTranslation("menu_file_open")); jMenuFileOpenResourceBundle.setMnemonic(getKeyEventKey(Resources.getTranslation("menu_file_open_trigger"))); jMenuFileOpenResourceBundle.setAccelerator(KeyStroke.getKeyStroke( KeyEvent.VK_O, ActionEvent.CTRL_MASK)); jMenuFileOpenResourceBundle.addActionListener(listener); jMenuFileSaveResourceBundle.setVisible(true); jMenuFileSaveResourceBundle.setText(Resources.getTranslation("menu_file_save")); jMenuFileSaveResourceBundle.setMnemonic(getKeyEventKey(Resources.getTranslation("menu_file_save_trigger"))); jMenuFileSaveResourceBundle.setAccelerator(KeyStroke.getKeyStroke( KeyEvent.VK_S, ActionEvent.CTRL_MASK)); jMenuFileSaveResourceBundle.addActionListener(listener); jMenuFileSaveResourceBundleAs.setVisible(true); jMenuFileSaveResourceBundleAs.setText(Resources.getTranslation("menu_file_saveas")); jMenuFileSaveResourceBundleAs.setMnemonic(getKeyEventKey(Resources.getTranslation("menu_file_saveas_trigger"))); jMenuFileSaveResourceBundleAs.setAccelerator(KeyStroke.getKeyStroke( KeyEvent.VK_S, ActionEvent.CTRL_MASK | ActionEvent.SHIFT_MASK)); jMenuFileSaveResourceBundleAs.addActionListener(listener); jMenuFileImportResourceBundle.setVisible(true); jMenuFileImportResourceBundle.setText(Resources.getTranslation("menu_file_import")); jMenuFileImportResourceBundle.setMnemonic(getKeyEventKey(Resources.getTranslation("menu_file_import_trigger"))); jMenuFileImportResourceBundle.addActionListener(listener); jMenuFileImportJava.setVisible(true); jMenuFileImportJava.setText(Resources.getTranslation("menu_file_import_java")); jMenuFileImportJava.setMnemonic(getKeyEventKey(Resources.getTranslation("menu_file_import_java_trigger"))); jMenuFileImportJava.addActionListener(listener); jMenuFileImportProperties.setVisible(true); jMenuFileImportProperties.setText(Resources.getTranslation("menu_file_import_properties")); jMenuFileImportProperties.setMnemonic(getKeyEventKey(Resources.getTranslation("menu_file_import_properties_trigger"))); jMenuFileImportProperties.addActionListener(listener); jMenuFileImportTMX.setVisible(true); jMenuFileImportTMX.setText(Resources.getTranslation("menu_file_import_TMX")); jMenuFileImportTMX.setMnemonic(getKeyEventKey(Resources.getTranslation("menu_file_import_TMX_trigger"))); jMenuFileImportTMX.addActionListener(listener); jMenuFileImportXLF.setVisible(true); jMenuFileImportXLF.setText(Resources.getTranslation("menu_file_import_XLF")); jMenuFileImportXLF.setMnemonic(getKeyEventKey(Resources.getTranslation("menu_file_import_XLF_trigger"))); jMenuFileImportXLF.addActionListener(listener); jMenuFileExportResourceBundle.setVisible(true); jMenuFileExportResourceBundle.setText(Resources.getTranslation("menu_file_export")); jMenuFileExportResourceBundle.setMnemonic(getKeyEventKey(Resources.getTranslation("menu_file_export_trigger"))); jMenuFileExportResourceBundle.addActionListener(listener); jMenuFileExportJava.setVisible(true); jMenuFileExportJava.setText(Resources.getTranslation("menu_file_export_java")); jMenuFileExportJava.setMnemonic(getKeyEventKey(Resources.getTranslation("menu_file_export_java_trigger"))); jMenuFileExportJava.addActionListener(listener); jMenuFileExportICU.setVisible(true); jMenuFileExportICU.setText(Resources.getTranslation("menu_file_export_ICU")); jMenuFileExportICU.setMnemonic(getKeyEventKey(Resources.getTranslation("menu_file_export_ICU_trigger"))); jMenuFileExportICU.addActionListener(listener); jMenuFileExportProperties.setVisible(true); jMenuFileExportProperties.setText(Resources.getTranslation("menu_file_export_properties")); jMenuFileExportProperties.setMnemonic(getKeyEventKey(Resources.getTranslation("menu_file_export_properties_trigger"))); jMenuFileExportProperties.addActionListener(listener); jMenuFileExportTMX.setVisible(true); jMenuFileExportTMX.setText(Resources.getTranslation("menu_file_export_TMX")); jMenuFileExportTMX.setMnemonic(getKeyEventKey(Resources.getTranslation("menu_file_export_TMX_trigger"))); jMenuFileExportTMX.addActionListener(listener); jMenuFileExportXLF.setVisible(true); jMenuFileExportXLF.setText(Resources.getTranslation("menu_file_export_XLF")); jMenuFileExportXLF.setMnemonic(getKeyEventKey(Resources.getTranslation("menu_file_export_XLF_trigger"))); jMenuFileExportXLF.addActionListener(listener); jMenuFileExit.setVisible(true); jMenuFileExit.setText(Resources.getTranslation("menu_file_quit")); jMenuFileExit.setMnemonic(getKeyEventKey(Resources.getTranslation("menu_file_quit_trigger"))); jMenuFileExit.setAccelerator(KeyStroke.getKeyStroke( KeyEvent.VK_Q, ActionEvent.CTRL_MASK)); jMenuFileExit.addActionListener(listener); // Add Edit Menu Items to the Edit Menu jMenuEdit.setVisible(true); jMenuEdit.setText(Resources.getTranslation("menu_edit")); jMenuEdit.setMnemonic(getKeyEventKey(Resources.getTranslation("menu_edit_trigger"))); jMenuEdit.add(jMenuEditCut); jMenuEdit.add(jMenuEditCopy); jMenuEdit.add(jMenuEditPaste); jMenuEdit.add(jMenuEditDelete); jMenuEditCut.setVisible(true); jMenuEditCut.setText(Resources.getTranslation("menu_edit_cut")); jMenuEditCut.setMnemonic(getKeyEventKey(Resources.getTranslation("menu_edit_cut_trigger"))); jMenuEditCut.setAccelerator(KeyStroke.getKeyStroke( KeyEvent.VK_X, ActionEvent.CTRL_MASK)); jMenuEditCopy.setVisible(true); jMenuEditCopy.setText(Resources.getTranslation("menu_edit_copy")); jMenuEditCopy.setMnemonic(getKeyEventKey(Resources.getTranslation("menu_edit_copy_trigger"))); jMenuEditCopy.setAccelerator(KeyStroke.getKeyStroke( KeyEvent.VK_C, ActionEvent.CTRL_MASK)); jMenuEditPaste.setVisible(true); jMenuEditPaste.setText(Resources.getTranslation("menu_edit_paste")); jMenuEditPaste.setMnemonic(getKeyEventKey(Resources.getTranslation("menu_edit_paste_trigger"))); jMenuEditPaste.setAccelerator(KeyStroke.getKeyStroke( KeyEvent.VK_V, ActionEvent.CTRL_MASK)); jMenuEditDelete.setVisible(true); jMenuEditDelete.setText(Resources.getTranslation("menu_edit_delete")); jMenuEditDelete.setMnemonic(getKeyEventKey(Resources.getTranslation("menu_edit_delete_trigger"))); // Add Options Menu Items to the Options Menu jMenuOptions.setVisible(true); jMenuOptions.setText(Resources.getTranslation("menu_options")); jMenuOptions.setMnemonic(getKeyEventKey(Resources.getTranslation("menu_options_trigger"))); jMenuOptions.add(jMenuOptionsAddNewEntry); jMenuOptions.add(jMenuOptionsAddNewGroup); jMenuOptions.add(jMenuOptionsAddNewResourceFile); //jMenuOptions.addSeparator(); //jMenuOptions.add(jMenuOptionsProjectViewer); jMenuOptions.addSeparator(); jMenuOptions.add(jMenuOptionsPreferences); jMenuOptionsAddNewEntry.setVisible(true); jMenuOptionsAddNewEntry.setText(Resources.getTranslation("menu_options_addentry")); jMenuOptionsAddNewEntry.setMnemonic(getKeyEventKey(Resources.getTranslation("menu_options_addentry_trigger"))); jMenuOptionsAddNewEntry.addActionListener(listener); jMenuOptionsAddNewGroup.setVisible(true); jMenuOptionsAddNewGroup.setText(Resources.getTranslation("menu_options_addgroup")); jMenuOptionsAddNewGroup.setMnemonic(getKeyEventKey(Resources.getTranslation("menu_options_addgroup_trigger"))); jMenuOptionsAddNewGroup.addActionListener(listener); jMenuOptionsAddNewResourceFile.setVisible(true); jMenuOptionsAddNewResourceFile.setText(Resources.getTranslation("menu_options_addfile")); jMenuOptionsAddNewResourceFile.setMnemonic(getKeyEventKey(Resources.getTranslation("menu_options_addfile_trigger"))); jMenuOptionsAddNewResourceFile.addActionListener(listener); /* jMenuOptionsProjectViewer.setVisible(true); jMenuOptionsProjectViewer.setText(Resources.getTranslation("menu_options_project_viewer")); jMenuOptionsProjectViewer.setMnemonic(getKeyEventKey(Resources.getTranslation("menu_options_project_viewer_trigger"))); jMenuOptionsProjectViewer.addActionListener(listener); */ jMenuOptionsPreferences.setVisible(true); jMenuOptionsPreferences.setText(Resources.getTranslation("menu_options_preferences")); jMenuOptionsPreferences.setMnemonic(getKeyEventKey(Resources.getTranslation("menu_options_preferences_trigger"))); jMenuOptionsPreferences.addActionListener(listener); // Add View Menu Items to the View Menu jMenuView.setVisible(true); jMenuView.setText(Resources.getTranslation("menu_view")); jMenuView.setMnemonic(getKeyEventKey(Resources.getTranslation("menu_view_trigger"))); jMenuView.add(jMenuViewViewStatistics); jMenuViewViewStatistics.setVisible(true); jMenuViewViewStatistics.setText(Resources.getTranslation("menu_view_statistics")); jMenuViewViewStatistics.setMnemonic(getKeyEventKey(Resources.getTranslation("menu_view_statistics_trigger"))); // Add Help Menu Items to the Help Menu jMenuHelp.setVisible(true); jMenuHelp.setText(Resources.getTranslation("menu_help")); jMenuHelp.setMnemonic(getKeyEventKey(Resources.getTranslation("menu_help_trigger"))); jMenuHelp.add(jMenuHelpAboutResourceBundleManager); jMenuHelpAboutResourceBundleManager.setVisible(true); jMenuHelpAboutResourceBundleManager.setText(Resources.getTranslation("menu_help_about")); jMenuHelpAboutResourceBundleManager.setMnemonic(getKeyEventKey(Resources.getTranslation("menu_help_about_trigger"))); jMenuHelpAboutResourceBundleManager.setAccelerator(KeyStroke.getKeyStroke( KeyEvent.VK_H, ActionEvent.CTRL_MASK)); jMenuHelpAboutResourceBundleManager.addActionListener(listener); } public static int getKeyEventKey(String character) { if (character == null) return KeyEvent.VK_A; character = character.toUpperCase(); if (character.startsWith("A")) return KeyEvent.VK_A; else if (character.startsWith("B")) return KeyEvent.VK_B; else if (character.startsWith("C")) return KeyEvent.VK_C; else if (character.startsWith("D")) return KeyEvent.VK_D; else if (character.startsWith("E")) return KeyEvent.VK_E; else if (character.startsWith("F")) return KeyEvent.VK_F; else if (character.startsWith("G")) return KeyEvent.VK_G; else if (character.startsWith("H")) return KeyEvent.VK_H; else if (character.startsWith("I")) return KeyEvent.VK_I; else if (character.startsWith("J")) return KeyEvent.VK_J; else if (character.startsWith("K")) return KeyEvent.VK_K; else if (character.startsWith("L")) return KeyEvent.VK_L; else if (character.startsWith("M")) return KeyEvent.VK_M; else if (character.startsWith("N")) return KeyEvent.VK_N; else if (character.startsWith("O")) return KeyEvent.VK_O; else if (character.startsWith("P")) return KeyEvent.VK_P; else if (character.startsWith("Q")) return KeyEvent.VK_Q; else if (character.startsWith("R")) return KeyEvent.VK_R; else if (character.startsWith("S")) return KeyEvent.VK_S; else if (character.startsWith("T")) return KeyEvent.VK_T; else if (character.startsWith("U")) return KeyEvent.VK_U; else if (character.startsWith("V")) return KeyEvent.VK_V; else if (character.startsWith("W")) return KeyEvent.VK_W; else if (character.startsWith("X")) return KeyEvent.VK_X; else if (character.startsWith("Y")) return KeyEvent.VK_Y; else if (character.startsWith("Z")) return KeyEvent.VK_Z; else if (character.startsWith("0")) return KeyEvent.VK_0; else if (character.startsWith("1")) return KeyEvent.VK_1; else if (character.startsWith("2")) return KeyEvent.VK_2; else if (character.startsWith("3")) return KeyEvent.VK_3; else if (character.startsWith("4")) return KeyEvent.VK_4; else if (character.startsWith("5")) return KeyEvent.VK_5; else if (character.startsWith("6")) return KeyEvent.VK_6; else if (character.startsWith("7")) return KeyEvent.VK_7; else if (character.startsWith("8")) return KeyEvent.VK_8; else if (character.startsWith("9")) return KeyEvent.VK_9; return KeyEvent.VK_A; } }