|
What this is
Other links
The source code/* * ShortcutsOptionPane.java - Shortcuts options panel * Copyright (C) 1999, 2000, 2001 Slava Pestov * Copyright (C) 2001 Dirk Moebius * * 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.table.*; import javax.swing.*; import java.awt.event.*; import java.awt.*; import java.util.*; import org.gjt.sp.jedit.gui.GrabKeyDialog; import org.gjt.sp.jedit.*; /** * Key binding editor. * @author Slava Pestov * @version $Id: ShortcutsOptionPane.java,v 1.10 2004/05/12 20:44:17 spestov Exp $ */ public class ShortcutsOptionPane extends AbstractOptionPane { public ShortcutsOptionPane() { super("shortcuts"); } // protected members protected void _init() { allBindings = new Vector(); setLayout(new BorderLayout(12,12)); initModels(); selectModel = new JComboBox(models); selectModel.addActionListener(new ActionHandler()); Box north = Box.createHorizontalBox(); north.add(new JLabel(jEdit.getProperty( "options.shortcuts.select.label"))); north.add(Box.createHorizontalStrut(6)); north.add(selectModel); keyTable = new JTable(currentModel); keyTable.getTableHeader().setReorderingAllowed(false); keyTable.getTableHeader().addMouseListener(new HeaderMouseHandler()); keyTable.addMouseListener(new TableMouseHandler()); Dimension d = keyTable.getPreferredSize(); d.height = Math.min(d.height,200); JScrollPane scroller = new JScrollPane(keyTable); scroller.setPreferredSize(d); add(BorderLayout.NORTH,north); add(BorderLayout.CENTER,scroller); } protected void _save() { if(keyTable.getCellEditor() != null) keyTable.getCellEditor().stopCellEditing(); Enumeration e = models.elements(); while(e.hasMoreElements()) ((ShortcutsModel)e.nextElement()).save(); Macros.loadMacros(); } private void initModels() { models = new Vector(); ActionSet[] actionSets = jEdit.getActionSets(); for(int i = 0; i < actionSets.length; i++) { ActionSet actionSet = actionSets[i]; if(actionSet.getActionCount() != 0) { String modelLabel = actionSet.getLabel(); if(modelLabel == null) { System.err.println("Empty action set: " + actionSet.getPluginJAR()); } models.addElement(createModel(modelLabel, actionSet.getActionNames())); } } Collections.sort(models,new MiscUtilities.StringICaseCompare()); currentModel = (ShortcutsModel)models.elementAt(0); } private ShortcutsModel createModel(String modelLabel, String[] actions) { Vector bindings = new Vector(actions.length); for(int i = 0; i < actions.length; i++) { String name = actions[i]; String label = jEdit.getProperty(actions[i] + ".label"); // Skip certain actions this way if(label == null) continue; label = GUIUtilities.prettifyMenuLabel(label); addBindings(name,label,bindings); } return new ShortcutsModel(modelLabel,bindings); } private void addBindings(String name, String label, Vector bindings) { GrabKeyDialog.KeyBinding b[] = new GrabKeyDialog.KeyBinding[2]; b[0] = createBinding(name,label, jEdit.getProperty(name + ".shortcut")); b[1] = createBinding(name,label, jEdit.getProperty(name + ".shortcut2")); bindings.addElement(b); } private GrabKeyDialog.KeyBinding createBinding(String name, String label, String shortcut) { if(shortcut != null && shortcut.length() == 0) shortcut = null; GrabKeyDialog.KeyBinding binding = new GrabKeyDialog.KeyBinding(name,label,shortcut,false); allBindings.addElement(binding); return binding; } // private members private JTable keyTable; private Vector models; private ShortcutsModel currentModel; private JComboBox selectModel; private Vector allBindings; class HeaderMouseHandler extends MouseAdapter { public void mouseClicked(MouseEvent evt) { switch(keyTable.getTableHeader().columnAtPoint(evt.getPoint())) { case 0: currentModel.sort(0); break; case 1: currentModel.sort(1); break; case 2: currentModel.sort(2); break; } } } class TableMouseHandler extends MouseAdapter { public void mouseClicked(MouseEvent evt) { int row = keyTable.getSelectedRow(); int col = keyTable.getSelectedColumn(); if(col != 0 && row != -1) { GrabKeyDialog gkd = new GrabKeyDialog( GUIUtilities.getParentDialog( ShortcutsOptionPane.this), currentModel.getBindingAt(row,col-1), allBindings,null); if(gkd.isOK()) currentModel.setValueAt( gkd.getShortcut(),row,col); } } } class ActionHandler implements ActionListener { public void actionPerformed(ActionEvent evt) { ShortcutsModel newModel = (ShortcutsModel)selectModel.getSelectedItem(); if(currentModel != newModel) { currentModel = newModel; keyTable.setModel(currentModel); } } } class ShortcutsModel extends AbstractTableModel { private Vector bindings; private String name; ShortcutsModel(String name, Vector bindings) { this.name = name; this.bindings = bindings; sort(0); } public void sort(int col) { MiscUtilities.quicksort(bindings,new KeyCompare(col)); fireTableDataChanged(); } public int getColumnCount() { return 3; } public int getRowCount() { return bindings.size(); } public Object getValueAt(int row, int col) { switch(col) { case 0: return getBindingAt(row,0).label; case 1: return getBindingAt(row,0).shortcut; case 2: return getBindingAt(row,1).shortcut; default: return null; } } public void setValueAt(Object value, int row, int col) { if(col == 0) return; getBindingAt(row,col-1).shortcut = (String)value; // redraw the whole table because a second shortcut // might have changed, too fireTableDataChanged(); } public String getColumnName(int index) { switch(index) { case 0: return jEdit.getProperty("options.shortcuts.name"); case 1: return jEdit.getProperty("options.shortcuts.shortcut1"); case 2: return jEdit.getProperty("options.shortcuts.shortcut2"); default: return null; } } public void save() { Enumeration e = bindings.elements(); while(e.hasMoreElements()) { GrabKeyDialog.KeyBinding binding[] = (GrabKeyDialog.KeyBinding[]) e.nextElement(); jEdit.setProperty( binding[0].name + ".shortcut", binding[0].shortcut); jEdit.setProperty( binding[1].name + ".shortcut2", binding[1].shortcut); } } public GrabKeyDialog.KeyBinding getBindingAt(int row, int nr) { GrabKeyDialog.KeyBinding binding[] = (GrabKeyDialog.KeyBinding[]) bindings.elementAt(row); return binding[nr]; } public String toString() { return name; } class KeyCompare implements MiscUtilities.Compare { int col; KeyCompare(int col) { this.col = col; } public int compare(Object obj1, Object obj2) { GrabKeyDialog.KeyBinding[] k1 = (GrabKeyDialog.KeyBinding[])obj1; GrabKeyDialog.KeyBinding[] k2 = (GrabKeyDialog.KeyBinding[])obj2; String label1 = k1[0].label.toLowerCase(); String label2 = k2[0].label.toLowerCase(); if(col == 0) return MiscUtilities.compareStrings( label1,label2,true); else { String shortcut1, shortcut2; if(col == 1) { shortcut1 = k1[0].shortcut; shortcut2 = k2[0].shortcut; } else { shortcut1 = k1[1].shortcut; shortcut2 = k2[1].shortcut; } if(shortcut1 == null && shortcut2 != null) return 1; else if(shortcut2 == null && shortcut1 != null) return -1; else if(shortcut1 == null && shortcut2 == null) return MiscUtilities.compareStrings(label1,label2,true); else return MiscUtilities.compareStrings(shortcut1,shortcut2,true); } } } } } |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.