|
What this is
Other links
The source code
/*
* 04/24/2002 - 20:05:42
*
* KeyShortcutsOptions.java - The keys options pane
* Copyright (C) 2001 Romain Guy
* romain.guy@jext.org
* www.jext.org
*
* 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.jext.options;
import java.awt.*;
import java.util.*;
import javax.swing.*;
import javax.swing.table.*;
import org.jext.*;
import org.jext.gui.*;
import org.gjt.sp.jedit.textarea.DefaultInputHandler;
public class KeyShortcutsOptions extends AbstractOptionPane
{
private JTable table;
private String[] actions, labels, _keys;
private KeysTableModel theTableModel;
public KeyShortcutsOptions()
{
super("keyShortcuts");
actions = new String[GUIUtilities.menuItemsActions.size()];
labels = new String[actions.length];
_keys = new String[actions.length];
Enumeration e = GUIUtilities.menuItemsActions.keys();
for (int i = 0; e.hasMoreElements(); i++)
actions[i] = e.nextElement().toString();
e = null;
Hashtable h = GUIUtilities.menuItemsActions;
for (int i = 0; i < actions.length; i++)
labels[i] = h.get(actions[i]).toString();
h = null;
sortStrings(labels, actions);
setLayout(new GridLayout(1, 1));
JPanel pane = new JPanel(new BorderLayout());
pane.add(BorderLayout.NORTH, new JLabel(Jext.getProperty("options.keyShortcuts.title")));
pane.add(BorderLayout.CENTER, createTableScroller());
add(pane);
}
public void load()
{
theTableModel.load();
}
public void save()
{
String key;
for (int i = 0; i < actions.length; i++)
{
key = _keys[i];
if (key != null && key.length() != 0)
Jext.setProperty(actions[i].toString().concat(".shortcut"), key);
}
}
private JScrollPane createTableScroller()
{
table = new JTable(theTableModel = new KeysTableModel());
table.getTableHeader().setReorderingAllowed(false);
table.setCellSelectionEnabled(false);
table.getColumnModel().getColumn(0).setCellRenderer(new DisabledCellRenderer());
Dimension _dim = table.getPreferredSize();
JScrollPane scroller = new JScrollPane(table);
scroller.setPreferredSize(new Dimension((int) _dim.width, 250));
return scroller;
}
/**
* Quick sort an array of Strings.
* @param string Strings to be sorted
*/
public static void sortStrings(String[] strings, String[] aStrings)
{
sortStrings(strings, aStrings, 0, strings.length - 1);
}
/**
* Quick sort an array of Strings.
* @param a Strings to be sorted
* @param lo0 Lower bound
* @param hi0 Higher bound
*/
public static void sortStrings(String a[], String b[], int lo0, int hi0)
{
int lo = lo0;
int hi = hi0;
String mid;
if (hi0 > lo0)
{
mid = a[(lo0 + hi0) / 2];
while (lo <= hi)
{
while (lo < hi0 && a[lo].compareTo(mid) < 0)
++lo;
while (hi > lo0 && a[hi].compareTo(mid) > 0)
--hi;
if (lo <= hi)
{
swap(a, lo, hi);
swap(b, lo, hi);
++lo;
--hi;
}
}
if (lo0 < hi)
sortStrings(a, b, lo0, hi);
if (lo < hi0)
sortStrings(a, b, lo, hi0);
}
}
/**
* Swaps two Strings.
* @param a The array to be swapped
* @param i First String index
* @param j Second String index
*/
public static void swap(String a[], int i, int j)
{
String T;
T = a[i];
a[i] = a[j];
a[j] = T;
}
class KeysTableModel extends AbstractTableModel
{
KeysTableModel()
{
load();
}
void load()
{
String key;
for (int i = 0 ; i < actions.length; i++)
{
key = actions[i].toString();
if (key != null)
_keys[i] = Jext.getProperty(key.concat(".shortcut"));
}
}
public int getColumnCount()
{
return 2;
}
public int getRowCount()
{
return _keys.length;
}
public Object getValueAt(int row, int col)
{
Object[] _v = null;
if (col == 0)
_v = labels;
else if (col == 1)
_v = _keys;
if (_v == null)
return null;
return _v[row];
}
public boolean isCellEditable(int row, int col)
{
return (col == 1);
}
public String getColumnName(int index)
{
switch(index)
{
case 0:
return Jext.getProperty("options.keyShortcuts.menu");
case 1:
return Jext.getProperty("options.keyShortcuts.keys");
default:
return null;
}
}
public void setValueAt(Object value, int row, int col)
{
String val = value.toString();
if (val.trim().length() == 0)
{
Jext.unsetProperty(actions[row].toString().concat(".shortcut"));
_keys[row] = "";
return;
}
boolean isValid = false;
StringTokenizer st = new StringTokenizer(val);
while (st.hasMoreTokens())
{
isValid = (DefaultInputHandler.parseKeyStroke(st.nextToken()) != null);
}
if (value == null || val.length() == 0 || isValid)
{
boolean found = false;
int i = 0;
if (val.length() != 0)
{
for ( ; i < _keys.length; i++)
{
if (val.equals(_keys[i]))
{
found = true;
break;
}
}
}
if (!found || (found && row == i))
{
_keys[row] = val;
} else {
Utilities.showError(Jext.getProperty("options.keyShortcuts.errorMessage2"));
}
} else {
Utilities.showError(Jext.getProperty("options.keyShortcuts.errorMessage"));
}
}
}
}
// End of KeyShortcutsOptions.java
|
| ... 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.