/******************************************************************************* * Copyright (c) MOBAC developers * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. ******************************************************************************/ package mobac.gui.panels; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.GridBagLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JOptionPane; import javax.swing.JPanel; import mobac.gui.atlastree.JAtlasTree; import mobac.gui.components.JCollapsiblePanel; import mobac.gui.components.JProfilesComboBox; import mobac.program.model.Profile; import mobac.utilities.GBC; import mobac.utilities.I18nUtils; import mobac.utilities.Utilities; public class JProfilesPanel extends JCollapsiblePanel { private static final long serialVersionUID = 1L; private JProfilesComboBox profilesCombo; private JButton reloadButton; private JButton deleteButton; private JButton loadButton; private JButton saveAsButton; public JProfilesPanel(JAtlasTree atlasTree) { super(I18nUtils.localizedStringForKey("lp_atlas_profile_title"), new GridBagLayout()); if (atlasTree == null) throw new NullPointerException(); // profiles combo box profilesCombo = new JProfilesComboBox(); profilesCombo.setToolTipText(I18nUtils.localizedStringForKey("lp_atlas_profile_combo_tips")); profilesCombo.addActionListener(new ProfileListListener()); // delete profile button deleteButton = new JButton(I18nUtils.localizedStringForKey("lp_atlas_profile_delete_btn_title")); deleteButton.addActionListener(new DeleteProfileListener()); deleteButton.setToolTipText(I18nUtils.localizedStringForKey("lp_atlas_profile_delete_btn_tips")); // save as profile button saveAsButton = new JButton(I18nUtils.localizedStringForKey("lp_atlas_profile_save_btn_title")); saveAsButton.setToolTipText(I18nUtils.localizedStringForKey("lp_atlas_profile_save_btn_tips")); saveAsButton.addActionListener(new SaveAsProfileListener(atlasTree)); loadButton = new JButton(I18nUtils.localizedStringForKey("lp_atlas_profile_load_btn_title")); loadButton.setToolTipText(I18nUtils.localizedStringForKey("lp_atlas_profile_load_btn_tips")); GBC gbc = GBC.eol().fill().insets(5, 5, 5, 5); reloadButton = new JButton(Utilities.loadResourceImageIcon("refresh.png")); reloadButton.setToolTipText(I18nUtils.localizedStringForKey("lp_atlas_profile_refresh_btn_tips")); reloadButton.addActionListener(new ReloadListener()); reloadButton.setPreferredSize(new Dimension(24, 0)); JPanel p = new JPanel(new BorderLayout()); p.add(profilesCombo, BorderLayout.CENTER); p.add(reloadButton, BorderLayout.EAST); contentContainer.add(p, gbc); contentContainer.add(deleteButton, gbc.toggleEol()); contentContainer.add(saveAsButton, gbc); contentContainer.add(loadButton, gbc.toggleEol()); saveAsButton.setEnabled(false); deleteButton.setEnabled(false); loadButton.setEnabled(false); } public void initialize() { // Load all profiles from the profiles file from disk profilesCombo.loadProfilesList(); deleteButton.setEnabled(false); loadButton.setEnabled(false); } public void reloadProfileList() { initialize(); } public JProfilesComboBox getProfilesCombo() { return profilesCombo; } public JButton getLoadButton() { return loadButton; } public JButton getDeleteButton() { return deleteButton; } public JButton getSaveAsButton() { return saveAsButton; } public Profile getSelectedProfile() { return profilesCombo.getSelectedProfile(); } private class SaveAsProfileListener implements ActionListener { JAtlasTree jAtlasTree; public SaveAsProfileListener(JAtlasTree atlasTree) { super(); jAtlasTree = atlasTree; } public void actionPerformed(ActionEvent e) { if (!jAtlasTree.testAtlasContentValid()) return; Object selObject = profilesCombo.getEditor().getItem(); String profileName = null; Profile profile = null; if (selObject instanceof Profile) { profile = (Profile) selObject; profileName = profile.getName(); } else profileName = (String) selObject; if (profileName.length() == 0) { JOptionPane.showMessageDialog(null, I18nUtils.localizedStringForKey("lp_atlas_profile_msg_ask_name"), I18nUtils.localizedStringForKey("Error"), JOptionPane.ERROR_MESSAGE); return; } profile = new Profile(profileName); if (profile.exists()) { int response = JOptionPane.showConfirmDialog(null, String.format(I18nUtils.localizedStringForKey("lp_atlas_profile_msg_overwrite_confirm"), profileName), I18nUtils.localizedStringForKey("lp_atlas_profile_msg_overwrite_confirm_title"), JOptionPane.YES_NO_OPTION); if (response != JOptionPane.YES_OPTION) return; } if (jAtlasTree.save(profile)) { reloadProfileList(); profilesCombo.setSelectedItem(profile); } } } private class DeleteProfileListener implements ActionListener { public void actionPerformed(ActionEvent e) { profilesCombo.deleteSelectedProfile(); } } private class ReloadListener implements ActionListener { public void actionPerformed(ActionEvent e) { reloadProfileList(); } } private class ProfileListListener implements ActionListener { public void actionPerformed(ActionEvent e) { boolean existingProfileSelected = profilesCombo.getSelectedProfile() != null; loadButton.setEnabled(existingProfileSelected); deleteButton.setEnabled(existingProfileSelected); } } }