/jEdit/tags/jedit-4-1-pre4/org/gjt/sp/jedit/options/ContextOptionPane.java
# · Java · 380 lines · 306 code · 48 blank · 26 comment · 49 complexity · 5a5266571f7471f549a5ac9579ba32ac MD5 · raw file
- /*
- * ContextOptionPane.java - Context menu options panel
- * Copyright (C) 2000, 2001 Slava Pestov
- *
- * 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.gjt.sp.jedit.options;
- import javax.swing.border.*;
- import javax.swing.event.*;
- import javax.swing.*;
- import java.awt.event.*;
- import java.awt.*;
- import java.util.*;
- import org.gjt.sp.jedit.gui.*;
- import org.gjt.sp.jedit.*;
- /**
- * Right-click context menu editor.
- * @author Slava Pestov
- * @version $Id: ContextOptionPane.java 3840 2001-10-18 07:41:23Z spestov $
- */
- public class ContextOptionPane extends AbstractOptionPane
- {
- public ContextOptionPane()
- {
- super("context");
- }
- // protected members
- protected void _init()
- {
- setLayout(new BorderLayout());
- JLabel caption = new JLabel(jEdit.getProperty(
- "options.context.caption"));
- add(BorderLayout.NORTH,caption);
- String contextMenu = jEdit.getProperty("view.context");
- StringTokenizer st = new StringTokenizer(contextMenu);
- listModel = new DefaultListModel();
- while(st.hasMoreTokens())
- {
- String actionName = (String)st.nextToken();
- if(actionName.equals("-"))
- listModel.addElement(new ContextOptionPane.MenuItem("-","-"));
- else
- {
- EditAction action = jEdit.getAction(actionName);
- if(action == null)
- continue;
- String label = action.getLabel();
- if(label == null)
- continue;
- listModel.addElement(new ContextOptionPane.MenuItem(actionName,label));
- }
- }
- list = new JList(listModel);
- list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
- list.addListSelectionListener(new ListHandler());
- add(BorderLayout.CENTER,new JScrollPane(list));
- JPanel buttons = new JPanel();
- buttons.setBorder(new EmptyBorder(3,0,0,0));
- buttons.setLayout(new BoxLayout(buttons,BoxLayout.X_AXIS));
- buttons.add(Box.createGlue());
- ActionHandler actionHandler = new ActionHandler();
- add = new JButton(jEdit.getProperty("options.context.add"));
- add.addActionListener(actionHandler);
- buttons.add(add);
- buttons.add(Box.createHorizontalStrut(6));
- remove = new JButton(jEdit.getProperty("options.context.remove"));
- remove.addActionListener(actionHandler);
- buttons.add(remove);
- buttons.add(Box.createHorizontalStrut(6));
- moveUp = new JButton(jEdit.getProperty("options.context.moveUp"));
- moveUp.addActionListener(actionHandler);
- buttons.add(moveUp);
- buttons.add(Box.createHorizontalStrut(6));
- moveDown = new JButton(jEdit.getProperty("options.context.moveDown"));
- moveDown.addActionListener(actionHandler);
- buttons.add(moveDown);
- buttons.add(Box.createGlue());
- updateButtons();
- add(BorderLayout.SOUTH,buttons);
- }
- static class MenuItemCompare implements MiscUtilities.Compare
- {
- public int compare(Object obj1, Object obj2)
- {
- return MiscUtilities.compareStrings(
- ((MenuItem)obj1).label,
- ((MenuItem)obj2).label,
- true);
- }
- }
- protected void _save()
- {
- StringBuffer buf = new StringBuffer();
- for(int i = 0; i < listModel.getSize(); i++)
- {
- if(i != 0)
- buf.append(' ');
- buf.append(((MenuItem)listModel.elementAt(i)).actionName);
- }
- jEdit.setProperty("view.context",buf.toString());
- }
- // private members
- private DefaultListModel listModel;
- private JList list;
- private JButton add;
- private JButton remove;
- private JButton moveUp, moveDown;
- private void updateButtons()
- {
- int index = list.getSelectedIndex();
- remove.setEnabled(index != -1 && listModel.getSize() != 0);
- moveUp.setEnabled(index > 0);
- moveDown.setEnabled(index != -1 && index != listModel.getSize() - 1);
- }
- static class MenuItem
- {
- String actionName;
- String label;
- MenuItem(String actionName, String label)
- {
- this.actionName = actionName;
- this.label = GUIUtilities.prettifyMenuLabel(label);
- }
- public String toString()
- {
- return label;
- }
- }
- class ActionHandler implements ActionListener
- {
- public void actionPerformed(ActionEvent evt)
- {
- Object source = evt.getSource();
- if(source == add)
- {
- ContextAddDialog dialog = new ContextAddDialog(
- ContextOptionPane.this);
- String selection = dialog.getSelection();
- if(selection == null)
- return;
- int index = list.getSelectedIndex();
- if(index == -1)
- index = listModel.getSize();
- else
- index++;
- MenuItem menuItem;
- if(selection.equals("-"))
- menuItem = new ContextOptionPane.MenuItem("-","-");
- else
- {
- menuItem = new ContextOptionPane.MenuItem(selection,
- jEdit.getAction(selection)
- .getLabel());
- }
- listModel.insertElementAt(menuItem,index);
- list.setSelectedIndex(index);
- list.ensureIndexIsVisible(index);
- }
- else if(source == remove)
- {
- int index = list.getSelectedIndex();
- listModel.removeElementAt(index);
- updateButtons();
- }
- else if(source == moveUp)
- {
- int index = list.getSelectedIndex();
- Object selected = list.getSelectedValue();
- listModel.removeElementAt(index);
- listModel.insertElementAt(selected,index-1);
- list.setSelectedIndex(index-1);
- list.ensureIndexIsVisible(index - 1);
- }
- else if(source == moveDown)
- {
- int index = list.getSelectedIndex();
- Object selected = list.getSelectedValue();
- listModel.removeElementAt(index);
- listModel.insertElementAt(selected,index+1);
- list.setSelectedIndex(index+1);
- list.ensureIndexIsVisible(index+1);
- }
- }
- }
- class ListHandler implements ListSelectionListener
- {
- public void valueChanged(ListSelectionEvent evt)
- {
- updateButtons();
- }
- }
- }
- class ContextAddDialog extends EnhancedDialog
- {
- public ContextAddDialog(Component comp)
- {
- super(JOptionPane.getFrameForComponent(comp),
- jEdit.getProperty("options.context.add.title"),
- true);
- JPanel content = new JPanel(new BorderLayout());
- content.setBorder(new EmptyBorder(12,12,12,12));
- setContentPane(content);
- ActionHandler actionHandler = new ActionHandler();
- ButtonGroup grp = new ButtonGroup();
- JPanel typePanel = new JPanel(new GridLayout(3,1,6,6));
- typePanel.setBorder(new EmptyBorder(0,0,6,0));
- typePanel.add(new JLabel(
- jEdit.getProperty("options.context.add.caption")));
- separator = new JRadioButton(jEdit.getProperty("options.context"
- + ".add.separator"));
- separator.addActionListener(actionHandler);
- grp.add(separator);
- typePanel.add(separator);
- action = new JRadioButton(jEdit.getProperty("options.context"
- + ".add.action"));
- action.addActionListener(actionHandler);
- grp.add(action);
- action.setSelected(true);
- typePanel.add(action);
- content.add(BorderLayout.NORTH,typePanel);
- JPanel actionPanel = new JPanel(new BorderLayout(6,6));
- ActionSet[] actionsList = jEdit.getActionSets();
- Vector vec = new Vector(actionsList.length);
- for(int i = 0; i < actionsList.length; i++)
- {
- ActionSet actionSet = actionsList[i];
- if(actionSet.getActionCount() != 0)
- vec.addElement(actionSet);
- }
- combo = new JComboBox(vec);
- combo.addActionListener(actionHandler);
- actionPanel.add(BorderLayout.NORTH,combo);
- list = new JList();
- list.setVisibleRowCount(8);
- actionPanel.add(BorderLayout.CENTER,new JScrollPane(list));
- content.add(BorderLayout.CENTER,actionPanel);
- JPanel southPanel = new JPanel();
- southPanel.setLayout(new BoxLayout(southPanel,BoxLayout.X_AXIS));
- southPanel.setBorder(new EmptyBorder(12,0,0,0));
- southPanel.add(Box.createGlue());
- ok = new JButton(jEdit.getProperty("common.ok"));
- ok.addActionListener(actionHandler);
- getRootPane().setDefaultButton(ok);
- southPanel.add(ok);
- southPanel.add(Box.createHorizontalStrut(6));
- cancel = new JButton(jEdit.getProperty("common.cancel"));
- cancel.addActionListener(actionHandler);
- southPanel.add(cancel);
- southPanel.add(Box.createGlue());
- content.add(BorderLayout.SOUTH,southPanel);
- updateList();
- pack();
- setLocationRelativeTo(JOptionPane.getFrameForComponent(comp));
- show();
- }
- public void ok()
- {
- isOK = true;
- dispose();
- }
- public void cancel()
- {
- dispose();
- }
- public String getSelection()
- {
- if(!isOK)
- return null;
- if(separator.isSelected())
- return "-";
- else if(action.isSelected())
- {
- return ((ContextOptionPane.MenuItem)list.getSelectedValue())
- .actionName;
- }
- else
- throw new InternalError();
- }
- // private members
- private boolean isOK;
- private JRadioButton separator, action;
- private JComboBox combo;
- private JList list;
- private JButton ok, cancel;
- private void updateList()
- {
- ActionSet actionSet = (ActionSet)combo.getSelectedItem();
- EditAction[] actions = actionSet.getActions();
- Vector listModel = new Vector(actions.length);
- for(int i = 0; i < actions.length; i++)
- {
- EditAction action = actions[i];
- String label = action.getLabel();
- if(label == null)
- continue;
- listModel.addElement(new ContextOptionPane.MenuItem(
- action.getName(),label));
- }
- MiscUtilities.quicksort(listModel,new ContextOptionPane.MenuItemCompare());
- list.setListData(listModel);
- }
- class ActionHandler implements ActionListener
- {
- public void actionPerformed(ActionEvent evt)
- {
- Object source = evt.getSource();
- if(source instanceof JRadioButton)
- {
- combo.setEnabled(action.isSelected());
- list.setEnabled(action.isSelected());
- }
- if(source == ok)
- ok();
- else if(source == cancel)
- cancel();
- else if(source == combo)
- updateList();
- }
- }
- }