Subversion Repository Public Repository

litesoft

Diff Revisions 949 vs 950 for /trunk/Java/KeyHole/src/org/litesoft/aokeyhole/swing/namevaluecomponents/NamedComponent.java

Diff revisions: vs.
  @@ -1,214 +1,214 @@
1 - // This Source Code is in the Public Domain per: http://unlicense.org
2 - package org.litesoft.aokeyhole.swing.namevaluecomponents;
3 -
4 - import org.litesoft.aokeyhole.objects.*;
5 - import org.litesoft.aokeyhole.objects.support.*;
6 - import org.litesoft.aokeyhole.swing.*;
7 - import org.litesoft.aokeyhole.toolkit.*;
8 -
9 - import javax.swing.*;
10 -
11 - public abstract class NamedComponent extends LabeledComponent implements NameValueComponent,
12 - ValueChangedListener // todo: Indicate Errors?
13 - {
14 - private static final ValueStringConverter NULL_VALIDATER = new NullValueStringConverter();
15 - private static final int VALUE_CHANGE_REJECTED = 0;
16 - private static final int VALUE_CHANGE_ACCEPTED = 1;
17 - private static final int VALUE_CHANGE_BUT_MUTATED = 2;
18 -
19 - private boolean mDataRequired;
20 - private boolean mPermDisabled = false;
21 - protected NameValueChangedByUserListener mNameValueChangedByUserListener = null;
22 - private ValueStringConverter mValidater = NULL_VALIDATER;
23 - private String mInitialValue = null; // 'External' (non-Native) Value
24 - protected Object mLastValue = null; // Component Native Value
25 - protected boolean mSystemUpdate = false;
26 -
27 - protected NamedComponent( NameValueComponentParams pParams ) {
28 - super( pParams );
29 -
30 - mDataRequired = pParams.isDataRequired();
31 - setName( pParams.getName() );
32 - mPermDisabled = pParams.isPermDisabled();
33 - mNameValueChangedByUserListener = pParams.getNameValueChangedByUserListener();
34 - mValidater = (pParams.getValidater() != null) ? pParams.getValidater() : NULL_VALIDATER;
35 - mInitialValue = mValidater.valueToString( mValidater.validateAndNormalize( pParams.getInitialValue() ) );
36 - }
37 -
38 - @Override
39 - public LabeledComponent initialize() {
40 - super.initialize();
41 -
42 - if ( mPermDisabled ) {
43 - LLsetComponentEnabled( false );
44 - }
45 -
46 - return this;
47 - }
48 -
49 - public String getInitialValue() {
50 - return mInitialValue;
51 - }
52 -
53 - public boolean isDataRequired() {
54 - return mDataRequired;
55 - }
56 -
57 - @Override
58 - public String getValue() {
59 - String rv = mValidater.valueToString( mValidater.validateAndNormalize( getComponentValue() ) );
60 - return (rv.length() != 0) ? rv : null;
61 - }
62 -
63 - @Override
64 - public void clearValue() {
65 - if ( !setValue( mInitialValue ) ) {
66 - System.err.println( "NamedComponent(" + getName() + ").clearValue failed with: '" + mInitialValue + "'" );
67 - }
68 - }
69 -
70 - @Override
71 - public void initializeView() {
72 - // Nothing needed at the common level
73 - }
74 -
75 - @Override
76 - public boolean setValue( String pValue ) {
77 - try {
78 - systemSetComponentValue( mValidater.validateAndNormalize( pValue ) );
79 - }
80 - catch ( ParseException e ) {
81 - return false;
82 - }
83 - return true;
84 - }
85 -
86 - @Override
87 - public boolean setOptions( String[] pOptions ) {
88 - return false;
89 - }
90 -
91 - @Override
92 - public void setComponentEnabled( boolean pEnable ) {
93 - if ( !mPermDisabled ) {
94 - LLsetComponentEnabled( pEnable );
95 - }
96 - }
97 -
98 - @Override
99 - public boolean isComponentEnabled() {
100 - return !mPermDisabled && LLisComponentEnabled();
101 - }
102 -
103 - abstract protected boolean LLisComponentEnabled();
104 -
105 - abstract protected void LLsetComponentEnabled( boolean pEnable );
106 -
107 - protected void systemSetComponentValue( Object pValue ) {
108 - mSystemUpdate = true;
109 - try {
110 - setComponentValue( mLastValue = normalize( pValue ) );
111 - }
112 - finally {
113 - mSystemUpdate = false;
114 - }
115 - }
116 -
117 - protected Object normalize( Object pValue ) {
118 - return pValue;
119 - }
120 -
121 - protected int determineValueChangeType( Object pCurCompValue, Object pMutatedCompValue ) {
122 - if ( AbstractBase.areEqual( pMutatedCompValue, mLastValue ) ) {
123 - return VALUE_CHANGE_REJECTED;
124 - }
125 - if ( AbstractBase.areEqual( pMutatedCompValue, pCurCompValue ) ) {
126 - return VALUE_CHANGE_ACCEPTED;
127 - }
128 - return VALUE_CHANGE_BUT_MUTATED;
129 - }
130 -
131 - protected void notifyValueChangedByUser() {
132 - if ( mNameValueChangedByUserListener != null ) {
133 - mNameValueChangedByUserListener.namedValueChangedByUser( getName() );
134 - }
135 - }
136 -
137 - @Override
138 - public void valueChanged() {
139 - if ( !mSystemUpdate ) {
140 - Object curValue = getComponentValue();
141 - if ( !AbstractBase.areEqual( curValue, mLastValue ) ) {
142 - Object mutatedValue = mutateChangeTo( mLastValue, curValue );
143 - Runnable r;
144 - switch ( determineValueChangeType( curValue, mutatedValue ) ) {
145 - default:
146 - case VALUE_CHANGE_REJECTED:
147 - r = new ValueChangeRejectedRunner();
148 - break;
149 - case VALUE_CHANGE_ACCEPTED:
150 - mLastValue = curValue;
151 - r = new ValueChangeAcceptedRunner();
152 - break;
153 - case VALUE_CHANGE_BUT_MUTATED:
154 - r = new ValueChangeButMutatedRunner( mutatedValue );
155 - break;
156 - }
157 - SwingUtilities.invokeLater( r );
158 - }
159 - }
160 - }
161 -
162 - protected Object mutateChangeTo( Object pLastValue, Object pCurValue ) {
163 - return pCurValue;
164 - }
165 -
166 - abstract public Object getComponentValue();
167 -
168 - abstract public void setComponentValue( Object pValue );
169 -
170 - protected String toString( Object pValue ) {
171 - return mValidater.valueToString( pValue );
172 - }
173 -
174 - private static class NullValueStringConverter implements ValueStringConverter {
175 - @Override
176 - public Object validateAndNormalize( Object pValue )
177 - throws ParseException {
178 - return pValue;
179 - }
180 -
181 - @Override
182 - public String valueToString( Object pValue ) {
183 - return (pValue == null) ? null : pValue.toString();
184 - }
185 - }
186 -
187 - private class ValueChangeRejectedRunner implements Runnable {
188 - @Override
189 - public void run() {
190 - systemSetComponentValue( mLastValue );
191 - }
192 - }
193 -
194 - private class ValueChangeAcceptedRunner implements Runnable {
195 - @Override
196 - public void run() {
197 - notifyValueChangedByUser();
198 - }
199 - }
200 -
201 - private class ValueChangeButMutatedRunner implements Runnable {
202 - private Object mMutatedValue;
203 -
204 - public ValueChangeButMutatedRunner( Object pMutatedValue ) {
205 - mMutatedValue = pMutatedValue;
206 - }
207 -
208 - @Override
209 - public void run() {
210 - systemSetComponentValue( mMutatedValue );
211 - notifyValueChangedByUser();
212 - }
213 - }
214 - }
1 + // This Source Code is in the Public Domain per: http://unlicense.org
2 + package org.litesoft.aokeyhole.swing.namevaluecomponents;
3 +
4 + import org.litesoft.aokeyhole.objects.*;
5 + import org.litesoft.aokeyhole.objects.support.*;
6 + import org.litesoft.aokeyhole.swing.*;
7 + import org.litesoft.aokeyhole.toolkit.*;
8 +
9 + import javax.swing.*;
10 +
11 + public abstract class NamedComponent extends LabeledComponent implements NameValueComponent,
12 + ValueChangedListener // todo: Indicate Errors?
13 + {
14 + private static final ValueStringConverter NULL_VALIDATER = new NullValueStringConverter();
15 + private static final int VALUE_CHANGE_REJECTED = 0;
16 + private static final int VALUE_CHANGE_ACCEPTED = 1;
17 + private static final int VALUE_CHANGE_BUT_MUTATED = 2;
18 +
19 + private boolean mDataRequired;
20 + private boolean mPermDisabled = false;
21 + protected NameValueChangedByUserListener mNameValueChangedByUserListener = null;
22 + private ValueStringConverter mValidater = NULL_VALIDATER;
23 + private String mInitialValue = null; // 'External' (non-Native) Value
24 + protected Object mLastValue = null; // Component Native Value
25 + protected boolean mSystemUpdate = false;
26 +
27 + protected NamedComponent( NameValueComponentParams pParams ) {
28 + super( pParams );
29 +
30 + mDataRequired = pParams.isDataRequired();
31 + setName( pParams.getName() );
32 + mPermDisabled = pParams.isPermDisabled();
33 + mNameValueChangedByUserListener = pParams.getNameValueChangedByUserListener();
34 + mValidater = (pParams.getValidater() != null) ? pParams.getValidater() : NULL_VALIDATER;
35 + mInitialValue = mValidater.valueToString( mValidater.validateAndNormalize( pParams.getInitialValue() ) );
36 + }
37 +
38 + @Override
39 + public LabeledComponent initialize() {
40 + super.initialize();
41 +
42 + if ( mPermDisabled ) {
43 + LLsetComponentEnabled( false );
44 + }
45 +
46 + return this;
47 + }
48 +
49 + public String getInitialValue() {
50 + return mInitialValue;
51 + }
52 +
53 + public boolean isDataRequired() {
54 + return mDataRequired;
55 + }
56 +
57 + @Override
58 + public String getValue() {
59 + String rv = mValidater.valueToString( mValidater.validateAndNormalize( getComponentValue() ) );
60 + return (rv.length() != 0) ? rv : null;
61 + }
62 +
63 + @Override
64 + public void clearValue() {
65 + if ( !setValue( mInitialValue ) ) {
66 + System.err.println( "NamedComponent(" + getName() + ").clearValue failed with: '" + mInitialValue + "'" );
67 + }
68 + }
69 +
70 + @Override
71 + public void initializeView() {
72 + // Nothing needed at the common level
73 + }
74 +
75 + @Override
76 + public boolean setValue( String pValue ) {
77 + try {
78 + systemSetComponentValue( mValidater.validateAndNormalize( pValue ) );
79 + }
80 + catch ( ParseException e ) {
81 + return false;
82 + }
83 + return true;
84 + }
85 +
86 + @Override
87 + public boolean setOptions( String[] pOptions ) {
88 + return false;
89 + }
90 +
91 + @Override
92 + public void setComponentEnabled( boolean pEnable ) {
93 + if ( !mPermDisabled ) {
94 + LLsetComponentEnabled( pEnable );
95 + }
96 + }
97 +
98 + @Override
99 + public boolean isComponentEnabled() {
100 + return !mPermDisabled && LLisComponentEnabled();
101 + }
102 +
103 + abstract protected boolean LLisComponentEnabled();
104 +
105 + abstract protected void LLsetComponentEnabled( boolean pEnable );
106 +
107 + protected void systemSetComponentValue( Object pValue ) {
108 + mSystemUpdate = true;
109 + try {
110 + setComponentValue( mLastValue = normalize( pValue ) );
111 + }
112 + finally {
113 + mSystemUpdate = false;
114 + }
115 + }
116 +
117 + protected Object normalize( Object pValue ) {
118 + return pValue;
119 + }
120 +
121 + protected int determineValueChangeType( Object pCurCompValue, Object pMutatedCompValue ) {
122 + if ( AbstractBase.areEqual( pMutatedCompValue, mLastValue ) ) {
123 + return VALUE_CHANGE_REJECTED;
124 + }
125 + if ( AbstractBase.areEqual( pMutatedCompValue, pCurCompValue ) ) {
126 + return VALUE_CHANGE_ACCEPTED;
127 + }
128 + return VALUE_CHANGE_BUT_MUTATED;
129 + }
130 +
131 + protected void notifyValueChangedByUser() {
132 + if ( mNameValueChangedByUserListener != null ) {
133 + mNameValueChangedByUserListener.namedValueChangedByUser( getName() );
134 + }
135 + }
136 +
137 + @Override
138 + public void valueChanged() {
139 + if ( !mSystemUpdate ) {
140 + Object curValue = getComponentValue();
141 + if ( !AbstractBase.areEqual( curValue, mLastValue ) ) {
142 + Object mutatedValue = mutateChangeTo( mLastValue, curValue );
143 + Runnable r;
144 + switch ( determineValueChangeType( curValue, mutatedValue ) ) {
145 + default:
146 + case VALUE_CHANGE_REJECTED:
147 + r = new ValueChangeRejectedRunner();
148 + break;
149 + case VALUE_CHANGE_ACCEPTED:
150 + mLastValue = curValue;
151 + r = new ValueChangeAcceptedRunner();
152 + break;
153 + case VALUE_CHANGE_BUT_MUTATED:
154 + r = new ValueChangeButMutatedRunner( mutatedValue );
155 + break;
156 + }
157 + SwingUtilities.invokeLater( r );
158 + }
159 + }
160 + }
161 +
162 + protected Object mutateChangeTo( Object pLastValue, Object pCurValue ) {
163 + return pCurValue;
164 + }
165 +
166 + abstract public Object getComponentValue();
167 +
168 + abstract public void setComponentValue( Object pValue );
169 +
170 + protected String toString( Object pValue ) {
171 + return mValidater.valueToString( pValue );
172 + }
173 +
174 + private static class NullValueStringConverter implements ValueStringConverter {
175 + @Override
176 + public Object validateAndNormalize( Object pValue )
177 + throws ParseException {
178 + return pValue;
179 + }
180 +
181 + @Override
182 + public String valueToString( Object pValue ) {
183 + return (pValue == null) ? null : pValue.toString();
184 + }
185 + }
186 +
187 + private class ValueChangeRejectedRunner implements Runnable {
188 + @Override
189 + public void run() {
190 + systemSetComponentValue( mLastValue );
191 + }
192 + }
193 +
194 + private class ValueChangeAcceptedRunner implements Runnable {
195 + @Override
196 + public void run() {
197 + notifyValueChangedByUser();
198 + }
199 + }
200 +
201 + private class ValueChangeButMutatedRunner implements Runnable {
202 + private Object mMutatedValue;
203 +
204 + public ValueChangeButMutatedRunner( Object pMutatedValue ) {
205 + mMutatedValue = pMutatedValue;
206 + }
207 +
208 + @Override
209 + public void run() {
210 + systemSetComponentValue( mMutatedValue );
211 + notifyValueChangedByUser();
212 + }
213 + }
214 + }