|
XulInput |
|
/* ** 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; import java.awt.event.*; import java.util.*; import javax.swing.*; import luxor.config.*; import luxor.core.*; import luxor.event.*; import luxor.spi.*; import luxor.status.*; import luxor.*; public class XulInput { static Logger T = Logger.getLogger( XulInput.class ); private NInput _comp; /** * aka controller, parent */ private XulForm _form; /** * validation handlers */ private ArrayList _handler = new ArrayList(); private String _id; private Validator _validator; public XulInput( XulForm form, String id ) { _form = form; _id = id; // register input control/element with xul form form.addInput( this ); _validator = new Validator( this ); } public void setChecked( boolean checked ) { if( checked ) _comp.setText( "true" ); else _comp.setText( "false" ); } public void setComponent( NInput comp ) { _comp = comp; _comp.addFocusListener( new FocusListener() { public void focusGained( FocusEvent e ) { onFocusGained(); } public void focusLost( FocusEvent e ) { onFocusLost(); } } ); } public void setText( String text ) { // todo: should i differentiate between populate and setText _comp.setText( text ); updateValidationStatus(); } /** * help id consists of panel id + input id e.g. extension.href cut of _PANEL * panel id suffix cut of _INPUT input id suffix */ public String getHelpId() { String formId = _form.getId(); if( formId.endsWith( "_PANEL" ) ) formId = formId.substring( 0, formId.length() - 6 ); String inputId = getId(); if( inputId.endsWith( "_INPUT" ) ) inputId = inputId.substring( 0, inputId.length() - 6 ); return formId + "." + inputId; } public String getId() { return _id; } public JComponent getJComponent() { if( _comp != null ) return _comp.getJComponent(); else return null; } /** * return field name; helpful for error reporting */ public String getName() { JLabel label = _comp.getLabel(); if( label == null ) return getId(); else { String labelText = label.getText().trim(); // cut off trailing colon if there is any if( labelText.endsWith( ":" ) ) labelText = labelText.substring( 0, labelText.length() - 1 ); return labelText; } } public String getText() { return _comp.getText(); } public Validator getValidator() { return _validator; } /** * convenience methods for checkboxes */ public boolean isChecked() { if( _comp.getText().equalsIgnoreCase( "true" ) ) return true; else return false; } public boolean isValid() { return getValidator().isValid(); } public void addValidationHandler( XulInputValidationHandler handler ) { _handler.add( handler ); } public void onFocusGained() { T.debug( "focusGained() " + getId() ); _form.fireFocusGained( this ); } public void onFocusLost() { T.debug( "focusLost() " + getId() ); // todo: make validation dependent on data change (performance feature) updateValidationStatus(); _form.fireFocusLost( this ); } private void updateValidationStatus() { validate(); JLabel label = _comp.getLabel(); if( label == null ) return; if( !isValid() ) { XulDefaults def = XulDefaults.getXulDefaults(); label.setIcon( def.getErrorIcon() ); } else { label.setIcon( null ); // make error icon disappear } } private void validate() { getValidator().clearErrors(); if( _handler.size() == 0 ) return; for( Iterator it = _handler.iterator(); it.hasNext(); ) { XulInputValidationHandler handler = ( XulInputValidationHandler ) it.next(); handler.validate( this ); } T.debug( "isValid=" + isValid() ); } }
|
XulInput |
|