|
What this is
Other links
The source code/* * 00:23:37 03/08/00 * * HyperTyperMappingGrid.java - handles editing of existing mappings * Copyright (C) 2000 Romain Guy, Matt Albrecht * 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. */ import org.jext.*; import org.jext.gui.*; import java.util.Hashtable; import java.util.Vector; import java.util.Enumeration; import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.TableModelEvent; import javax.swing.table.*; /** * GUI for handling the display of a mapping set. */ public class HyperTyperMappingGrid extends JPanel implements SequenceChangedListener { private static final String PROP_TITLE = ".title"; private static final String PROP_COL1 = ".column1"; private static final String PROP_COL2 = ".column2"; private static final String PROP_MOVE_BUTTON = ".move_button.text"; private static final String PROP_MOVE_BUTTON_ACCEL = ".move_button.accelerator"; private static final String PROP_DEL_BUTTON = ".delete_button.text"; private static final String PROP_DEL_BUTTON_ACCEL = ".delete_button.accelerator"; private JTable table; private AbstractTableModel model; private HyperTyperSequenceList htsl, otherList; private String propertyBase; public HyperTyperMappingGrid( HyperTyperSequenceList htsl, HyperTyperSequenceList otherList, String propertyBase ) { this.htsl = htsl; this.otherList = otherList; this.propertyBase = propertyBase; construct(); htsl.addSequenceChangedListener( this ); } public String getName() { return HyperTyperObjectManager.getProperty( this.propertyBase + PROP_TITLE ); } public void sequenceAdded( SequenceChangedEvent sce ) { model.fireTableRowsInserted( sce.index, sce.index ); } public void sequenceRemoved( SequenceChangedEvent sce ) { model.fireTableRowsDeleted( sce.index, sce.index ); } protected void construct() { setLayout( new GridLayout( 1,1 ) ); setBorder( BorderFactory.createTitledBorder( HyperTyperObjectManager.getProperty( this.propertyBase + PROP_TITLE ) ) ); this.model = new TyperTableModel(); this.table = new JTable( model ); this.table.getTableHeader().setReorderingAllowed( false ); JScrollPane jsp = new JScrollPane( this.table ); JPanel panel = new JPanel( new BorderLayout() ); panel.add( "Center", jsp ); JPanel p2 = new JPanel( new FlowLayout() ); JextHighlightButton jb = new JextHighlightButton( HyperTyperObjectManager.getProperty( this.propertyBase + PROP_DEL_BUTTON ) ); jb.setMnemonic( HyperTyperObjectManager.getProperty( this.propertyBase + PROP_DEL_BUTTON_ACCEL ).charAt(0) ); jb.addActionListener( new ActionListener() { public void actionPerformed( ActionEvent ae ) { int row = table.getSelectedRow(); if (row >= 0 && row < htsl.getSequenceCount()) { Sequence seq = htsl.getSequenceAt( row ); htsl.removeMapping( seq.getShorthand() ); } } } ); p2.add( jb ); jb = new JextHighlightButton( HyperTyperObjectManager.getProperty( this.propertyBase + PROP_MOVE_BUTTON ) ); jb.setMnemonic( HyperTyperObjectManager.getProperty( this.propertyBase + PROP_MOVE_BUTTON_ACCEL ).charAt(0) ); jb.addActionListener( new ActionListener() { public void actionPerformed( ActionEvent ae ) { int row = table.getSelectedRow(); if (row >= 0 && row < htsl.getSequenceCount()) { Sequence seq = htsl.getSequenceAt( row ); htsl.removeMapping( seq.getShorthand() ); otherList.addMapping( seq ); } } } ); p2.add( jb ); panel.add( "South", p2 ); add( panel ); } public int getSelectedRow() { return this.table.getSelectedRow(); } public String getSelectedShorthand() { Sequence seq = getSelectedSequence(); return (seq == null ? null : getSelectedSequence().getShorthand() ); } public Sequence getSelectedSequence() { int i = getSelectedRow(); return (i < 0 ? null : this.htsl.getSequenceAt( i ) ); } class TyperTableModel extends AbstractTableModel { private String tempShorthand = "", tempExpanded = ""; TyperTableModel() { } public int getColumnCount() { return 2; } public int getRowCount() { return htsl.getSequenceCount() + 1; } public Object getValueAt(int row, int col) { if (row > htsl.getSequenceCount()) { return null; } if (row == htsl.getSequenceCount()) { return (col == 0 ? tempShorthand : tempExpanded ); } Sequence sequence = htsl.getSequenceAt( row ); return (col == 0 ? sequence.getShorthand() : sequence.getExpanded() ); } public boolean isCellEditable(int row, int col) { return true; } public String getColumnName(int index) { switch(index) { case 0: return HyperTyperObjectManager.getProperty( propertyBase + PROP_COL1 ); case 1: return HyperTyperObjectManager.getProperty( propertyBase + PROP_COL2 ); default: return null; } } public void setValueAt(Object value, int row, int col) { String val = (String) value; if (col == 0 && val.indexOf(' ') != -1) { Utilities.showError( HyperTyperObjectManager.getProperty("options.fastTyper.errorMessage")); return; } if (row == htsl.getSequenceCount()) { // last entry - used for creating a new entry. if (col == 0) { tempShorthand = val; } else { tempExpanded = val; } if (tempShorthand.length() > 0 && tempExpanded.length() > 0) { // make this a new entry htsl.addMapping( tempShorthand, tempExpanded ); tempShorthand = ""; tempExpanded = ""; } return; } Sequence seq = htsl.getSequenceAt(row); htsl.removeMapping( seq.getShorthand() ); if (col == 0) { if (val.length() > 0) { htsl.addMapping( val, seq.getExpanded() ); } // else, keep the mapping deleted } else { // don't delete the mapping if the length is <= 0 htsl.addMapping( seq.getShorthand(), val ); } fireTableRowsUpdated( row, row ); } } } |
... 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.