|
What this is
Other links
The source code
/*
* AbbrevsOptionPane.java - Abbrevs options panel
* :tabSize=8:indentSize=8:noTabs=false:
* :folding=explicit:collapseFolds=1:
*
* Copyright (C) 1999, 2000, 2001, 2002 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;
//{{{ Imports
import javax.swing.border.EmptyBorder;
import javax.swing.event.*;
import javax.swing.table.*;
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.util.*;
import org.gjt.sp.jedit.gui.*;
import org.gjt.sp.jedit.*;
//}}}
//{{{ AbbrevsOptionPane class
/**
* Abbrev editor.
* @author Slava Pestov
* @version $Id: AbbrevsOptionPane.java,v 1.12 2003/11/02 21:16:38 spestov Exp $
*/
public class AbbrevsOptionPane extends AbstractOptionPane
{
//{{{ AbbrevsOptionPane constructor
public AbbrevsOptionPane()
{
super("abbrevs");
} //}}}
//{{{ _init() method
protected void _init()
{
setLayout(new BorderLayout());
JPanel panel = new JPanel(new BorderLayout(6,6));
expandOnInput = new JCheckBox(jEdit.getProperty("options.abbrevs"
+ ".expandOnInput"),Abbrevs.getExpandOnInput());
panel.add(expandOnInput,BorderLayout.NORTH);
JPanel panel2 = new JPanel();
panel2.setLayout(new BoxLayout(panel2,BoxLayout.X_AXIS));
panel2.setBorder(new EmptyBorder(0,0,6,0));
panel2.add(Box.createGlue());
JLabel label = new JLabel(jEdit.getProperty("options.abbrevs.set"));
label.setBorder(new EmptyBorder(0,0,0,12));
panel2.add(label);
Hashtable _modeAbbrevs = Abbrevs.getModeAbbrevs();
modeAbbrevs = new Hashtable();
Mode[] modes = jEdit.getModes();
Arrays.sort(modes,new MiscUtilities.StringICaseCompare());
String[] sets = new String[modes.length + 1];
sets[0] = "global";
for(int i = 0; i < modes.length; i++)
{
String name = modes[i].getName();
sets[i+1] = name;
modeAbbrevs.put(name,new AbbrevsModel((Hashtable)_modeAbbrevs.get(name)));
}
setsComboBox = new JComboBox(sets);
ActionHandler actionHandler = new ActionHandler();
setsComboBox.addActionListener(actionHandler);
panel2.add(setsComboBox);
panel2.add(Box.createGlue());
panel.add(panel2,BorderLayout.SOUTH);
add(BorderLayout.NORTH,panel);
globalAbbrevs = new AbbrevsModel(Abbrevs.getGlobalAbbrevs());
abbrevsTable = new JTable(globalAbbrevs);
abbrevsTable.getColumnModel().getColumn(1).setCellRenderer(
new Renderer());
abbrevsTable.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
abbrevsTable.getTableHeader().setReorderingAllowed(false);
abbrevsTable.getTableHeader().addMouseListener(new HeaderMouseHandler());
abbrevsTable.getSelectionModel().addListSelectionListener(
new SelectionHandler());
abbrevsTable.getSelectionModel().setSelectionMode(
ListSelectionModel.SINGLE_SELECTION);
abbrevsTable.addMouseListener(new TableMouseHandler());
Dimension d = abbrevsTable.getPreferredSize();
d.height = Math.min(d.height,200);
JScrollPane scroller = new JScrollPane(abbrevsTable);
scroller.setPreferredSize(d);
add(BorderLayout.CENTER,scroller);
JPanel buttons = new JPanel();
buttons.setLayout(new BoxLayout(buttons,BoxLayout.X_AXIS));
buttons.setBorder(new EmptyBorder(6,0,0,0));
add = new RolloverButton(GUIUtilities.loadIcon("Plus.png"));
add.setToolTipText(jEdit.getProperty("options.abbrevs.add"));
add.addActionListener(actionHandler);
buttons.add(add);
remove = new RolloverButton(GUIUtilities.loadIcon("Minus.png"));
remove.setToolTipText(jEdit.getProperty("options.abbrevs.remove"));
remove.addActionListener(actionHandler);
buttons.add(remove);
edit = new RolloverButton(GUIUtilities.loadIcon("ButtonProperties.png"));
edit.setToolTipText(jEdit.getProperty("options.abbrevs.edit"));
edit.addActionListener(actionHandler);
buttons.add(edit);
buttons.add(Box.createGlue());
add(BorderLayout.SOUTH,buttons);
updateEnabled();
} //}}}
//{{{ _save() method
protected void _save()
{
if(abbrevsTable.getCellEditor() != null)
abbrevsTable.getCellEditor().stopCellEditing();
Abbrevs.setExpandOnInput(expandOnInput.isSelected());
Abbrevs.setGlobalAbbrevs(globalAbbrevs.toHashtable());
Hashtable modeHash = new Hashtable();
Enumeration keys = modeAbbrevs.keys();
Enumeration values = modeAbbrevs.elements();
while(keys.hasMoreElements())
{
modeHash.put(keys.nextElement(),((AbbrevsModel)values.nextElement())
.toHashtable());
}
Abbrevs.setModeAbbrevs(modeHash);
} //}}}
//{{{ Private members
//{{{ Instance variables
private JComboBox setsComboBox;
private JCheckBox expandOnInput;
private JTable abbrevsTable;
private AbbrevsModel globalAbbrevs;
private Hashtable modeAbbrevs;
private JButton add;
private JButton edit;
private JButton remove;
//}}}
//{{{ updateEnabled() method
private void updateEnabled()
{
int selectedRow = abbrevsTable.getSelectedRow();
edit.setEnabled(selectedRow != -1);
remove.setEnabled(selectedRow != -1);
} //}}}
//{{{ edit() method
private void edit()
{
AbbrevsModel abbrevsModel = (AbbrevsModel)abbrevsTable.getModel();
int row = abbrevsTable.getSelectedRow();
String abbrev = (String)abbrevsModel.getValueAt(row,0);
String expansion = (String)abbrevsModel.getValueAt(row,1);
String oldAbbrev = abbrev;
EditAbbrevDialog dialog = new EditAbbrevDialog(
GUIUtilities.getParentDialog(AbbrevsOptionPane.this),
abbrev,expansion,abbrevsModel.toHashtable());
abbrev = dialog.getAbbrev();
expansion = dialog.getExpansion();
if(abbrev != null && expansion != null)
{
for(int i = 0; i < abbrevsModel.getRowCount(); i++)
{
if(abbrevsModel.getValueAt(i,0).equals(oldAbbrev))
{
abbrevsModel.remove(i);
break;
}
}
add(abbrevsModel,abbrev,expansion);
}
} //}}}
//{{{ add() method
private void add(AbbrevsModel abbrevsModel, String abbrev,
String expansion)
{
for(int i = 0; i < abbrevsModel.getRowCount(); i++)
{
if(abbrevsModel.getValueAt(i,0).equals(abbrev))
{
abbrevsModel.remove(i);
break;
}
}
abbrevsModel.add(abbrev,expansion);
updateEnabled();
} //}}}
//}}}
//{{{ HeaderMouseHandler class
class HeaderMouseHandler extends MouseAdapter
{
public void mouseClicked(MouseEvent evt)
{
switch(abbrevsTable.getTableHeader().columnAtPoint(evt.getPoint()))
{
case 0:
((AbbrevsModel)abbrevsTable.getModel()).sort(0);
break;
case 1:
((AbbrevsModel)abbrevsTable.getModel()).sort(1);
break;
}
}
} //}}}
//{{{ TableMouseHandler class
class TableMouseHandler extends MouseAdapter
{
public void mouseClicked(MouseEvent evt)
{
if(evt.getClickCount() == 2)
edit();
}
} //}}}
//{{{ SelectionHandler class
class SelectionHandler implements ListSelectionListener
{
public void valueChanged(ListSelectionEvent evt)
{
updateEnabled();
}
} //}}}
//{{{ ActionHandler class
class ActionHandler implements ActionListener
{
public void actionPerformed(ActionEvent evt)
{
AbbrevsModel abbrevsModel = (AbbrevsModel)abbrevsTable.getModel();
Object source = evt.getSource();
if(source == setsComboBox)
{
String selected = (String)setsComboBox.getSelectedItem();
if(selected.equals("global"))
{
abbrevsTable.setModel(globalAbbrevs);
}
else
{
abbrevsTable.setModel((AbbrevsModel)
modeAbbrevs.get(selected));
}
updateEnabled();
}
else if(source == add)
{
EditAbbrevDialog dialog = new EditAbbrevDialog(
GUIUtilities.getParentDialog(AbbrevsOptionPane.this),
null,null,abbrevsModel.toHashtable());
String abbrev = dialog.getAbbrev();
String expansion = dialog.getExpansion();
if(abbrev != null && abbrev.length() != 0
&& expansion != null
&& expansion.length() != 0)
{
add(abbrevsModel,abbrev,expansion);
}
}
else if(source == edit)
{
edit();
}
else if(source == remove)
{
int selectedRow = abbrevsTable.getSelectedRow();
abbrevsModel.remove(selectedRow);
updateEnabled();
}
}
} //}}}
//{{{ Renderer class
static class Renderer extends DefaultTableCellRenderer
{
public Component getTableCellRendererComponent(
JTable table,
Object value,
boolean isSelected,
boolean cellHasFocus,
int row,
int col)
{
String valueStr = value.toString();
// workaround for Swing's annoying processing of
// labels starting with , which often breaks
if(valueStr.toLowerCase().startsWith(""))
valueStr = " " + valueStr;
return super.getTableCellRendererComponent(table,valueStr,
isSelected,cellHasFocus,row,col);
}
} //}}}
} //}}}
//{{{ AbbrevsModel class
class AbbrevsModel extends AbstractTableModel
{
Vector abbrevs;
int lastSort;
//{{{ AbbrevsModel constructor
AbbrevsModel(Hashtable abbrevHash)
{
abbrevs = new Vector();
if(abbrevHash != null)
{
Enumeration abbrevEnum = abbrevHash.keys();
Enumeration expandEnum = abbrevHash.elements();
while(abbrevEnum.hasMoreElements())
{
abbrevs.addElement(new Abbrev((String)abbrevEnum.nextElement(),
(String)expandEnum.nextElement()));
}
sort(0);
}
} //}}}
//{{{ sort() method
void sort(int col)
{
lastSort = col;
MiscUtilities.quicksort(abbrevs,new AbbrevCompare(col));
fireTableDataChanged();
} //}}}
//{{{ add() method
void add(String abbrev, String expansion)
{
abbrevs.addElement(new Abbrev(abbrev,expansion));
sort(lastSort);
} //}}}
//{{{ remove() method
void remove(int index)
{
abbrevs.removeElementAt(index);
fireTableStructureChanged();
} //}}}
//{{{ toHashtable() method
public Hashtable toHashtable()
{
Hashtable hash = new Hashtable();
for(int i = 0; i < abbrevs.size(); i++)
{
Abbrev abbrev = (Abbrev)abbrevs.elementAt(i);
if(abbrev.abbrev.length() > 0
&& abbrev.expand.length() > 0)
{
hash.put(abbrev.abbrev,abbrev.expand);
}
}
return hash;
} //}}}
//{{{ getColumnCount() method
public int getColumnCount()
{
return 2;
} //}}}
//{{{ getRowCount() method
public int getRowCount()
{
return abbrevs.size();
} //}}}
//{{{ getValueAt() method
public Object getValueAt(int row, int col)
{
Abbrev abbrev = (Abbrev)abbrevs.elementAt(row);
switch(col)
{
case 0:
return abbrev.abbrev;
case 1:
return abbrev.expand;
default:
return null;
}
} //}}}
//{{{ isCellEditable() method
public boolean isCellEditable(int row, int col)
{
return false;
} //}}}
//{{{ setValueAt() method
public void setValueAt(Object value, int row, int col)
{
if(value == null)
value = "";
Abbrev abbrev = (Abbrev)abbrevs.elementAt(row);
if(col == 0)
abbrev.abbrev = (String)value;
else
abbrev.expand = (String)value;
fireTableRowsUpdated(row,row);
} //}}}
//{{{ getColumnName() method
public String getColumnName(int index)
{
switch(index)
{
case 0:
return jEdit.getProperty("options.abbrevs.abbrev");
case 1:
return jEdit.getProperty("options.abbrevs.expand");
default:
return null;
}
} //}}}
//{{{ AbbrevCompare class
class AbbrevCompare implements MiscUtilities.Compare
{
int col;
AbbrevCompare(int col)
{
this.col = col;
}
public int compare(Object obj1, Object obj2)
{
Abbrev a1 = (Abbrev)obj1;
Abbrev a2 = (Abbrev)obj2;
if(col == 0)
{
String abbrev1 = a1.abbrev.toLowerCase();
String abbrev2 = a2.abbrev.toLowerCase();
return MiscUtilities.compareStrings(
abbrev1,abbrev2,true);
}
else
{
String expand1 = a1.expand.toLowerCase();
String expand2 = a2.expand.toLowerCase();
return MiscUtilities.compareStrings(
expand1,expand2,true);
}
}
} //}}}
} //}}}
//{{{ Abbrev class
class Abbrev
{
Abbrev() {}
Abbrev(String abbrev, String expand)
{
this.abbrev = abbrev;
this.expand = expand;
}
String abbrev;
String expand;
} //}}}
|
| ... 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.