/* * TabbedOptionDialog.java - Options Dialog with tabs. * :tabSize=4:indentSize=4:noTabs=false: * :folding=explicit:collapseFolds=1: * * Copyright (C) 2005 Slava Pestov * Copyright (C) 2011 Alan Ezust * * 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 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ package org.jedit.options; import java.awt.BorderLayout; import java.awt.Dialog; import java.awt.Frame; import java.awt.Point; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.TextEvent; import java.awt.event.TextListener; import java.util.HashSet; import java.util.Iterator; import java.util.LinkedList; import java.util.Set; import javax.swing.Box; import javax.swing.BoxLayout; import javax.swing.JButton; import javax.swing.JPanel; import javax.swing.JTabbedPane; import javax.swing.border.EmptyBorder; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import org.gjt.sp.jedit.GUIUtilities; import org.gjt.sp.jedit.OptionGroup; import org.gjt.sp.jedit.OptionPane; import org.gjt.sp.jedit.jEdit; import org.gjt.sp.jedit.gui.EnhancedDialog; // {{{ TabbedOptionDialog class /** * Replacement for OptionsDialog. It uses OptionGroupPane instead of * managing its own options. * * @author ezust * */ public class TabbedOptionDialog extends EnhancedDialog implements ActionListener, ChangeListener { // {{{ Members JTabbedPane tabs; LinkedList<OptionPane> panes; Set<OptionPane> shownPanes; private JButton ok; private JButton cancel; private JButton apply; // }}} // {{{ TabbedOptionDialog constructor public TabbedOptionDialog(Frame frame, String name) { super(frame, jEdit.getProperty(name + ".title"), true); setName(name); setupTabs(); } // }}} // {{{ OptionsDialog constructor public TabbedOptionDialog(Dialog dialog, String name) { super(dialog, jEdit.getProperty(name + ".title"), true); setName(name); setupTabs(); } // }}} // {{{ setSelectedIndex() public void setSelectedIndex(int index) { tabs.setSelectedIndex(index); } // }}} // {{{ setupTabs() void setupTabs() { panes = new LinkedList<OptionPane>(); shownPanes = new HashSet<OptionPane>(); tabs = new JTabbedPane(); JPanel content = new JPanel(new BorderLayout()); content.setBorder(new EmptyBorder(12, 12, 12, 12)); content.add(tabs, BorderLayout.CENTER); Box buttons = new Box(BoxLayout.X_AXIS); buttons.add(Box.createGlue()); ok = new JButton(jEdit.getProperty("common.ok")); ok.addActionListener(this); buttons.add(ok); buttons.add(Box.createHorizontalStrut(6)); getRootPane().setDefaultButton(ok); cancel = new JButton(jEdit.getProperty("common.cancel")); cancel.addActionListener(this); buttons.add(cancel); buttons.add(Box.createHorizontalStrut(6)); apply = new JButton(jEdit.getProperty("common.apply")); apply.addActionListener(this); buttons.add(apply); buttons.add(Box.createGlue()); content.add(buttons, BorderLayout.SOUTH); setContentPane(content); GUIUtilities.loadGeometry(this, getName()); tabs.addChangeListener(this); } // }}} // {{{ actionPerformed() public void actionPerformed(ActionEvent evt) { Object source = evt.getSource(); if (source == ok) { ok(); } else if (source == cancel) { cancel(); } else if (source == apply) { ok(false); } } // }}} // {{{ addOptionPane() public void addOptionPane(OptionPane pane) { panes.add(pane); JPanel panel = (JPanel) pane; tabs.addTab(pane.getName(), panel); } // }}} // {{{ addOptionGroup() public void addOptionGroup(OptionGroup group) { OptionGroupPane pane = new OptionGroupPane(group); pane.addTextListener(new TitleChanger()); addOptionPane(pane); } // }}} // {{{ ok() public void ok() { ok(true); } public void ok(boolean dispose) { GUIUtilities.saveGeometry(this, getName()); for (OptionPane op : panes) { if (shownPanes.contains(op)) op.save(); } Point p = getLocation(); /* This will fire the PROPERTIES_CHANGED event */ jEdit.propertiesChanged(); // Save settings to disk jEdit.saveSettings(); // get rid of this dialog if necessary if (dispose) dispose(); } // }}} // {{{ cancel() public void cancel() { GUIUtilities.saveGeometry(this, getName()); dispose(); } // }}} // {{{ TitleChanger class class TitleChanger implements TextListener { public void textValueChanged(TextEvent e) { setTitle(e.getSource().toString()); } } // {{{ stateChanged() public void stateChanged(ChangeEvent e) { OptionPane op = (OptionPane) tabs.getSelectedComponent(); shownPanes.add(op); jEdit.setIntegerProperty("optional.last.tab", tabs.getSelectedIndex()); setTitle(op.getName()); } // }}} } // }}}