Revision: 450 http://skycastle.svn.sourceforge.net/skycastle/?rev=450&view=rev Author: zzorn Date: 2008-04-10 05:48:52 -0700 (Thu, 10 Apr 2008) Log Message: ----------- Some more UI code Modified Paths: -------------- trunk/skycastle/modules/core/src/main/java/org/skycastle/core/property/PropertyFacade.java trunk/skycastle/modules/ui/src/main/java/org/skycastle/ui/PropertyReference.java trunk/skycastle/modules/ui/src/main/java/org/skycastle/ui/PropertyReferenceImpl.java trunk/skycastle/modules/ui/src/main/java/org/skycastle/ui/TextFieldUi.java trunk/skycastle/modules/ui/src/main/java/org/skycastle/ui/UiObject.java Added Paths: ----------- trunk/skycastle/modules/ui/src/main/java/org/skycastle/ui/ActionButtonUi.java trunk/skycastle/modules/ui/src/main/java/org/skycastle/ui/ActionReference.java trunk/skycastle/modules/ui/src/main/java/org/skycastle/ui/ActionReferenceImpl.java trunk/skycastle/modules/ui/src/main/java/org/skycastle/ui/ActionReferenceListener.java trunk/skycastle/modules/ui/src/main/java/org/skycastle/ui/PropertyReferenceListener.java Removed Paths: ------------- trunk/skycastle/modules/ui/src/main/java/org/skycastle/ui/PropertyListener.java Modified: trunk/skycastle/modules/core/src/main/java/org/skycastle/core/property/PropertyFacade.java =================================================================== --- trunk/skycastle/modules/core/src/main/java/org/skycastle/core/property/PropertyFacade.java 2008-04-08 08:39:57 UTC (rev 449) +++ trunk/skycastle/modules/core/src/main/java/org/skycastle/core/property/PropertyFacade.java 2008-04-10 12:48:52 UTC (rev 450) @@ -15,9 +15,6 @@ extends Serializable { - //====================================================================== - // Public Methods - /** * @param propertyIdentifier identifier of the property to get. * @param defaultValue the default value of the property. @@ -37,7 +34,8 @@ * @throws ParameterValidationException describing the error if there was a * problem with setting the property value. */ - void setPropertyValue( String propertyIdentifier, Serializable value ) throws ParameterValidationException; + void setPropertyValue( String propertyIdentifier, Serializable value ) + throws ParameterValidationException; /** * @param propertyIdentifier the name of the property to check for. Added: trunk/skycastle/modules/ui/src/main/java/org/skycastle/ui/ActionButtonUi.java =================================================================== --- trunk/skycastle/modules/ui/src/main/java/org/skycastle/ui/ActionButtonUi.java (rev 0) +++ trunk/skycastle/modules/ui/src/main/java/org/skycastle/ui/ActionButtonUi.java 2008-04-10 12:48:52 UTC (rev 450) @@ -0,0 +1,107 @@ +package org.skycastle.ui; + +import org.skycastle.core.ActionMetadata; +import org.skycastle.util.parameters.ParameterSet; +import org.skycastle.util.parameters.ParameterSetImpl; + +import javax.swing.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +/** + * An UI object that shows a button, which will invoke a specified action when pressed. + * + * @author Hans Haggstrom + */ +// TODO: Option for wether this action button UI should be a toolbutton or full button? Maybe automatially resizing based on availabel space / importance / user preference / layout? +public class ActionButtonUi + extends UiObject +{ + + //====================================================================== + // Private Fields + + private final ActionReference myActionReference = new ActionReferenceImpl(); + + private JButton myButton = null; + private ParameterSet myParameters = new ParameterSetImpl(); + + //====================================================================== + // Private Constants + + private static final long serialVersionUID = 1L; + + //====================================================================== + // Protected Methods + + @Override + protected JComponent createUi() + { + myButton = new JButton(); + + updateAction(); + + myActionReference.addActionReferenceListener( new ActionReferenceListener() + { + + public void onActionMetadataChanged( final ActionReference actionReference ) + { + updateAction(); + } + + + public void onActionDisappeared( final ActionReference actionReference ) + { + updateAction(); + } + + + public void onActionAppeared( final ActionReference actionReference ) + { + updateAction(); + } + + } ); + + myButton.addActionListener( new ActionListener() + { + + public void actionPerformed( final ActionEvent e ) + { + if ( myActionReference.isAvailable() ) + { + myActionReference.invokeAction( myParameters ); + } + } + + } ); + + return myButton; + } + + //====================================================================== + // Private Methods + + private void updateAction() + { + if ( myActionReference.isAvailable() ) + { + myButton.setEnabled( true ); + final ActionMetadata actionMetadata = myActionReference.getMetadata(); + + myButton.setText( actionMetadata.getUiMetadata().getUserReadableName() ); + myButton.setToolTipText( actionMetadata.getUiMetadata().getDescription() ); + + // TODO: Set icon based on the icon metadata + } + else + { + myButton.setEnabled( false ); + + myButton.setText( "" ); + myButton.setToolTipText( null ); + myButton.setIcon( null ); + } + } + +} Added: trunk/skycastle/modules/ui/src/main/java/org/skycastle/ui/ActionReference.java =================================================================== --- trunk/skycastle/modules/ui/src/main/java/org/skycastle/ui/ActionReference.java (rev 0) +++ trunk/skycastle/modules/ui/src/main/java/org/skycastle/ui/ActionReference.java 2008-04-10 12:48:52 UTC (rev 450) @@ -0,0 +1,26 @@ +package org.skycastle.ui; + +import org.skycastle.core.ActionMetadata; +import org.skycastle.util.parameters.ParameterSet; + +import java.io.Serializable; + +/** + * @author Hans Haggstrom + */ +public interface ActionReference + extends Serializable +{ + + void addActionReferenceListener( final ActionReferenceListener listener ); + + /** + * @return true if this action is currently available. If false, the getMetadata and invoke action methods will throw exceptions if called. + */ + boolean isAvailable(); + + ActionMetadata getMetadata(); + + void invokeAction( ParameterSet parameters ); + +} Added: trunk/skycastle/modules/ui/src/main/java/org/skycastle/ui/ActionReferenceImpl.java =================================================================== --- trunk/skycastle/modules/ui/src/main/java/org/skycastle/ui/ActionReferenceImpl.java (rev 0) +++ trunk/skycastle/modules/ui/src/main/java/org/skycastle/ui/ActionReferenceImpl.java 2008-04-10 12:48:52 UTC (rev 450) @@ -0,0 +1,44 @@ +package org.skycastle.ui; + +import org.skycastle.core.ActionMetadata; +import org.skycastle.util.parameters.ParameterSet; + +/** + * @author Hans Haggstrom + */ +public class ActionReferenceImpl + implements ActionReference +{ + + //====================================================================== + // Private Constants + + private static final long serialVersionUID = 1L; + + //====================================================================== + // Public Methods + + //---------------------------------------------------------------------- + // ActionReference Implementation + + public void addActionReferenceListener( final ActionReferenceListener listener ) + { + throw new UnsupportedOperationException( "This method has not yet been implemented." ); // IMPLEMENT + } + + public boolean isAvailable() + { + throw new UnsupportedOperationException( "This method has not yet been implemented." ); // IMPLEMENT + } + + public ActionMetadata getMetadata() + { + throw new UnsupportedOperationException( "This method has not yet been implemented." ); // IMPLEMENT + } + + public void invokeAction( final ParameterSet parameters ) + { + throw new UnsupportedOperationException( "This method has not yet been implemented." ); // IMPLEMENT + } + +} Added: trunk/skycastle/modules/ui/src/main/java/org/skycastle/ui/ActionReferenceListener.java =================================================================== --- trunk/skycastle/modules/ui/src/main/java/org/skycastle/ui/ActionReferenceListener.java (rev 0) +++ trunk/skycastle/modules/ui/src/main/java/org/skycastle/ui/ActionReferenceListener.java 2008-04-10 12:48:52 UTC (rev 450) @@ -0,0 +1,16 @@ +package org.skycastle.ui; + +/** + * @author Hans Haggstrom + */ +public interface ActionReferenceListener +{ + + void onActionMetadataChanged( ActionReference actionReference ); + + void onActionDisappeared( ActionReference actionReference ); + + + void onActionAppeared( ActionReference actionReference ); + +} Deleted: trunk/skycastle/modules/ui/src/main/java/org/skycastle/ui/PropertyListener.java =================================================================== --- trunk/skycastle/modules/ui/src/main/java/org/skycastle/ui/PropertyListener.java 2008-04-08 08:39:57 UTC (rev 449) +++ trunk/skycastle/modules/ui/src/main/java/org/skycastle/ui/PropertyListener.java 2008-04-10 12:48:52 UTC (rev 450) @@ -1,25 +0,0 @@ -package org.skycastle.ui; - -import org.skycastle.util.parameters.ParameterMetadata; - -/** - * A listener that is notified of property value changes. - * - * @author Hans Haggstrom - */ -public interface PropertyListener -{ - void onPropertyValueChange( Object newValue ); - - void onPropertyMetadataChanged( ParameterMetadata newMetadata ); - - /** - * Called when the property is no longer available. - */ - void onPropertyDissappeared(); - - /** - * Called when a new property is available. - */ - void onPropertyAppeared( ParameterMetadata parameterMetadata, Object parameterValue, boolean editable ); -} Modified: trunk/skycastle/modules/ui/src/main/java/org/skycastle/ui/PropertyReference.java =================================================================== --- trunk/skycastle/modules/ui/src/main/java/org/skycastle/ui/PropertyReference.java 2008-04-08 08:39:57 UTC (rev 449) +++ trunk/skycastle/modules/ui/src/main/java/org/skycastle/ui/PropertyReference.java 2008-04-10 12:48:52 UTC (rev 450) @@ -76,15 +76,16 @@ /** * @param listener a listener that is notified when the value changes. */ - void addChangeListener( PropertyListener listener ); + void addChangeListener( PropertyReferenceListener listener ); /** * @param listener listener to remove. */ - void removeChangeListener( PropertyListener listener ); + void removeChangeListener( PropertyReferenceListener listener ); /** * @return true if the property is editable. */ boolean isEditable(); + } Modified: trunk/skycastle/modules/ui/src/main/java/org/skycastle/ui/PropertyReferenceImpl.java =================================================================== --- trunk/skycastle/modules/ui/src/main/java/org/skycastle/ui/PropertyReferenceImpl.java 2008-04-08 08:39:57 UTC (rev 449) +++ trunk/skycastle/modules/ui/src/main/java/org/skycastle/ui/PropertyReferenceImpl.java 2008-04-10 12:48:52 UTC (rev 450) @@ -10,6 +10,18 @@ public class PropertyReferenceImpl implements PropertyReference { + + //====================================================================== + // Private Constants + + private static final long serialVersionUID = 1L; + + //====================================================================== + // Public Methods + + //---------------------------------------------------------------------- + // PropertyReference Implementation + public GameObjectId getGameObjectId() { throw new UnsupportedOperationException( "This method has not yet been implemented." ); // IMPLEMENT @@ -51,12 +63,12 @@ throw new UnsupportedOperationException( "This method has not yet been implemented." ); // IMPLEMENT } - public void addChangeListener( final PropertyListener listener ) + public void addChangeListener( final PropertyReferenceListener listener ) { throw new UnsupportedOperationException( "This method has not yet been implemented." ); // IMPLEMENT } - public void removeChangeListener( final PropertyListener listener ) + public void removeChangeListener( final PropertyReferenceListener listener ) { throw new UnsupportedOperationException( "This method has not yet been implemented." ); // IMPLEMENT } @@ -65,4 +77,5 @@ { throw new UnsupportedOperationException( "This method has not yet been implemented." ); // IMPLEMENT } + } Copied: trunk/skycastle/modules/ui/src/main/java/org/skycastle/ui/PropertyReferenceListener.java (from rev 449, trunk/skycastle/modules/ui/src/main/java/org/skycastle/ui/PropertyListener.java) =================================================================== --- trunk/skycastle/modules/ui/src/main/java/org/skycastle/ui/PropertyReferenceListener.java (rev 0) +++ trunk/skycastle/modules/ui/src/main/java/org/skycastle/ui/PropertyReferenceListener.java 2008-04-10 12:48:52 UTC (rev 450) @@ -0,0 +1,25 @@ +package org.skycastle.ui; + +import org.skycastle.util.parameters.ParameterMetadata; + +/** + * A listener that is notified of property value changes. + * + * @author Hans Haggstrom + */ +public interface PropertyReferenceListener +{ + void onPropertyValueChange( Object newValue ); + + void onPropertyMetadataChanged( ParameterMetadata newMetadata ); + + /** + * Called when the property is no longer available. + */ + void onPropertyDissappeared(); + + /** + * Called when a new property is available. + */ + void onPropertyAppeared( ParameterMetadata parameterMetadata, Object parameterValue, boolean editable ); +} Modified: trunk/skycastle/modules/ui/src/main/java/org/skycastle/ui/TextFieldUi.java =================================================================== --- trunk/skycastle/modules/ui/src/main/java/org/skycastle/ui/TextFieldUi.java 2008-04-08 08:39:57 UTC (rev 449) +++ trunk/skycastle/modules/ui/src/main/java/org/skycastle/ui/TextFieldUi.java 2008-04-10 12:48:52 UTC (rev 450) @@ -17,20 +17,25 @@ public class TextFieldUi extends UiObject { + + //====================================================================== + // Private Fields + private final PropertyReference myPropertyReference = new PropertyReferenceImpl(); + private JTextField myTextField; - public TextFieldUi() - { - } + //====================================================================== + // Protected Methods @Override protected JComponent createUi() { myTextField = new JTextField(); - myPropertyReference.addChangeListener( new PropertyListener() + myPropertyReference.addChangeListener( new PropertyReferenceListener() { + public void onPropertyValueChange( final Object newValue ) { // TODO: Only update the text field if it is not currently being actively edited? @@ -38,11 +43,13 @@ updateValue( newValue ); } + public void onPropertyMetadataChanged( final ParameterMetadata newMetadata ) { updateDescription( newMetadata ); } + public void onPropertyDissappeared() { myTextField.setEditable( false ); @@ -52,6 +59,7 @@ updateDescription( null ); } + public void onPropertyAppeared( final ParameterMetadata parameterMetadata, final Object parameterValue, final boolean editable ) { myTextField.setEditable( editable ); @@ -60,12 +68,14 @@ updateValue( parameterValue ); updateDescription( parameterMetadata ); } + } ); // TODO: Check for correctness while the field is being edited myTextField.addActionListener( new ActionListener() { + public void actionPerformed( final ActionEvent e ) { try @@ -79,14 +89,21 @@ // Show errors as tooltip, or on other error indicator? final List<ValidationError> validationErrors = e1.getValidationErrors(); + + // DEBUG: + e1.printStackTrace(); } } + } ); return myTextField; } + //====================================================================== + // Private Methods + private void updateDescription( final ParameterMetadata parameterMetadata ) { if ( parameterMetadata != null ) @@ -99,6 +116,7 @@ } } + private void updateValue( final Object parameterValue ) { if ( parameterValue != null ) @@ -110,4 +128,5 @@ myTextField.setText( "" ); } } + } Modified: trunk/skycastle/modules/ui/src/main/java/org/skycastle/ui/UiObject.java =================================================================== --- trunk/skycastle/modules/ui/src/main/java/org/skycastle/ui/UiObject.java 2008-04-08 08:39:57 UTC (rev 449) +++ trunk/skycastle/modules/ui/src/main/java/org/skycastle/ui/UiObject.java 2008-04-10 12:48:52 UTC (rev 450) @@ -11,6 +11,7 @@ * Typically provides ports for connecting to properties or other GameObjects, and showing some data about * them, or providing some access to them. */ +// TODO: A way to get a label for UIObjects also, to display in tab captions, property lists, etc. public abstract class UiObject extends PojoGameObject { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.