|
HistoryComboBoxHelper |
|
/*
** Luxor - XML User Interface Language (XUL) Toolkit
** Copyright (c) 2001, 2002 by Gerald Bauer
**
** This program is free software.
**
** You may redistribute it and/or modify it under the terms of the GNU
** General Public License as published by the Free Software Foundation.
** Version 2 of the license should be included with this distribution in
** the file LICENSE, as well as License.html. If the license is not
** included with this distribution, you may find a copy at the FSF web
** site at 'www.gnu.org' or 'www.fsf.org', or you may write to the
** Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139 USA.
**
** THIS SOFTWARE IS PROVIDED AS-IS WITHOUT WARRANTY OF ANY KIND,
** NOT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY. THE AUTHOR
** OF THIS SOFTWARE, ASSUMES _NO_ RESPONSIBILITY FOR ANY
** CONSEQUENCE RESULTING FROM THE USE, MODIFICATION, OR
** REDISTRIBUTION OF THIS SOFTWARE.
**
*/
package luxor.swing.widget;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import luxor.spi.*;
import luxor.status.*;
import luxor.*;
public class HistoryComboBoxHelper
{
static Logger T = Logger.getLogger( HistoryComboBoxHelper.class );
private HistoryComboBox _combo;
private HistoryModel _history;
private Object _selectedItemBackup;
public HistoryComboBoxHelper( HistoryComboBox combo, HistoryModel history )
{
_combo = combo;
_history = history;
JTextField editor = ( JTextField ) _combo.getEditor().getEditorComponent();
editor.addFocusListener(
new FocusListener()
{
public void focusGained( FocusEvent e )
{
onFocusGained();
}
public void focusLost( FocusEvent e )
{
onFocusLost();
}
} );
}
public void setSelectedItemBackup( Object obj )
{
_selectedItemBackup = obj;
}
public Object getSelectedItemBackup()
{
return _selectedItemBackup;
}
public void add( String text )
{
_history.add( text );
}
public void onFocusGained()
{
T.debug( "enter onFocusGained()" );
populate();
// restore selection
_combo.setSelectedItem( getSelectedItemBackup() );
T.debug( "leave onFocusGained()" );
}
public void onFocusLost()
{
try
{
T.debug( "enter onFocusLost()" );
// save selection so we can restore it once we regain focus
setSelectedItemBackup( _combo.getSelectedItem() );
// check if we should add the current text to the history box
// method: check if top history entry is a substring of current text
// if it is, replace it with current text
// otherwise add it to history box on top as a new entry
// note, that I don't replace substrings originating from the user profile
String text = _combo.getText();
text = text.trim();
if( text.equals( "" ) )
return;
if( _history.size() > 0 )
{
HistoryNode top = _history.getHistoryNode( 0 );
if( text.equals( top.getText() ) )
return;
if( text.startsWith( top.getText() ) && top.getSource() == HistoryNode.MEMORY )
{
T.debug( "removing history entry " + top.getText() + " for upgrade" );
_history.removeHistoryNode( top );
}
}
T.debug( "adding history entry " + text );
_history.prepend( text );
// save selection to new text
setSelectedItemBackup( text );
}
finally
{
T.debug( "leave onFocusLost()" );
}
}
public void populate()
{
_combo.removeAllItems();
for( int i = 0; i < _history.size(); i++ )
{
HistoryNode item = _history.getHistoryNode( i );
_combo.addItem( item.getText() );
}
}
}
|
HistoryComboBoxHelper |
|