Subversion Repository Public Repository

litesoft

Diff Revisions 949 vs 950 for /trunk/Java/GWT/Client/src/org/litesoft/GWT/client/widgets/nonpublic/DeferableFloaterDimensionHandler.java

Diff revisions: vs.
  @@ -1,213 +1,213 @@
1 - // This Source Code is in the Public Domain per: http://unlicense.org
2 - package org.litesoft.GWT.client.widgets.nonpublic;
3 -
4 - import org.litesoft.core.delayed.*;
5 - import org.litesoft.logger.nonpublic.*;
6 -
7 - import com.google.gwt.user.client.*;
8 -
9 - public class DeferableFloaterDimensionHandler {
10 - private AbstractLogger mLogger;
11 - private AbstractSizeableWidget mOurWidget;
12 - private ISizeableDimensionHelper mDimensionHelper;
13 - private FloaterPositionHandler mPositionHandler;
14 -
15 - private boolean mMinimumDimensionSet = false;
16 -
17 - private boolean mPendingAny = false;
18 - private boolean mPendingReinitialize = false;
19 - private boolean mPendingSetDimension = false;
20 - private boolean mPendingRelayout = false;
21 - private boolean mPendingMaximizeVisable = false;
22 - private int mSetDimensionValue = 0;
23 -
24 - public DeferableFloaterDimensionHandler( AbstractSizeableWidget pOurWidget, AbstractLogger pLogger, ISizeableDimensionHelper pDimensionHelper,
25 - FloaterPositionHandler pPositionHandler ) {
26 - mLogger = pLogger;
27 - mOurWidget = pOurWidget;
28 - mDimensionHelper = pDimensionHelper;
29 - mPositionHandler = pPositionHandler;
30 - }
31 -
32 - public boolean isPendingAny() {
33 - return mPendingAny;
34 - }
35 -
36 - public void initializeDimension() {
37 - if ( !mMinimumDimensionSet ) {
38 - reinitializeDimension();
39 - }
40 - }
41 -
42 - public void setDimension( String pDimension ) {
43 - if ( mLogger != null ) {
44 - mLogger.log( mDimensionHelper.getWhat(), "=", pDimension );
45 - }
46 - try {
47 - setDimension( Integer.parseInt( pDimension ) );
48 - }
49 - catch ( NumberFormatException e ) {
50 - // Not a Number?
51 - }
52 - }
53 -
54 - private boolean setPrefferredDimension() {
55 - int zSaved = mSetDimensionValue;
56 - mMinimumDimensionSet = mDimensionHelper.setPrefferredDimension();
57 - if ( zSaved != 0 ) {
58 - mSetDimensionValue = zSaved;
59 - }
60 - return mMinimumDimensionSet;
61 - }
62 -
63 - public void reinitializeDimension() {
64 - mMinimumDimensionSet = false;
65 - if ( mPendingAny ) {
66 - mPendingReinitialize = true;
67 - return;
68 - }
69 - if ( mOurWidget.isSizingWorking() ) {
70 - if ( setPrefferredDimension() ) {
71 - return;
72 - }
73 - }
74 - mPendingAny = mPendingReinitialize = true;
75 - launchInitialDeferredProcess();
76 - }
77 -
78 - private void setDimension( int pDimension ) {
79 - LLsetDimension( pDimension );
80 - initializeDimension();
81 - if ( mPendingAny ) {
82 - mPendingSetDimension = true;
83 - return;
84 - }
85 - if ( mOurWidget.isSizingWorking() ) {
86 - if ( setOverallDimension( mSetDimensionValue ) ) {
87 - return;
88 - }
89 - }
90 - mPendingAny = mPendingSetDimension = true;
91 - launchInitialDeferredProcess();
92 - }
93 -
94 - public void LLsetDimension( int pDimension ) {
95 - mSetDimensionValue = pDimension;
96 - }
97 -
98 - public void relayout() {
99 - initializeDimension();
100 - if ( mPendingAny ) {
101 - mPendingRelayout = true;
102 - return;
103 - }
104 - if ( mOurWidget.isSizingWorking() ) {
105 - Element zInnerElement = mOurWidget.getHelper().getInnerElement();
106 - int zCurInnerSize = mDimensionHelper.getDimension( zInnerElement );
107 - int zCurOuterSize = mDimensionHelper.getDimension();
108 - if ( (zCurInnerSize != 0) && (zCurOuterSize != 0) && setOverallDimension( zCurOuterSize ) ) {
109 - mDimensionHelper.distributeToChildrenChangedDimension();
110 - return;
111 - }
112 - }
113 - mPendingAny = mPendingRelayout = true;
114 - launchInitialDeferredProcess();
115 - }
116 -
117 - public void maximizeVisibility() {
118 - initializeDimension();
119 - if ( mPendingAny ) {
120 - mPendingMaximizeVisable = true;
121 - return;
122 - }
123 - if ( mOurWidget.isSizingWorking() ) {
124 - if ( LLmaximizeVisibility() ) {
125 - return;
126 - }
127 - }
128 - mPendingAny = mPendingMaximizeVisable = true;
129 - launchInitialDeferredProcess();
130 - }
131 -
132 - private boolean LLmaximizeVisibility() {
133 - int zMaxSize = mPositionHandler.getMaxPotentialSize();
134 - if ( (mSetDimensionValue != 0) && (zMaxSize > 1) ) {
135 - int zPos = mPositionHandler.getPos();
136 - int zSpace = zMaxSize - (zPos + mSetDimensionValue);
137 - if ( (zPos > 0) && (zSpace < 0) ) {
138 - zPos += zSpace;
139 - mPositionHandler.setPos( (zPos < 0) ? 0 : zPos );
140 - }
141 - return true;
142 - }
143 - return false;
144 - }
145 -
146 - private boolean setOverallDimension( int pDimension ) {
147 - int curDimension = mDimensionHelper.getDimension();
148 - if ( curDimension <= 0 ) {
149 - if ( mLogger.isEnabled() ) {
150 - mLogger.log( mDimensionHelper.getWhat() + " : setOverallDimension from " + curDimension + " **** <= 0" );
151 - }
152 - return false;
153 - }
154 - int zSaved = mSetDimensionValue;
155 - boolean rv = mDimensionHelper.adjustSizeBy( pDimension - curDimension );
156 - if ( zSaved != 0 ) {
157 - mSetDimensionValue = zSaved;
158 - }
159 - if ( mLogger.isEnabled() ) {
160 - mLogger.log( mDimensionHelper.getWhat() + " : setOverallDimension from " + curDimension + " to " + pDimension + " set? " + rv );
161 - }
162 - return rv;
163 - }
164 -
165 - private void launchInitialDeferredProcess() {
166 - new EscalatingProcess( new MyDelayedProcess() ).schedule();
167 - }
168 -
169 - private class MyDelayedProcess implements DelayedProcess {
170 - @Override
171 - public boolean process() // Todo: Special Sizing Support...
172 - {
173 - if ( mPendingReinitialize ) {
174 - if ( !setPrefferredDimension() ) {
175 - trace( "Reinitialize" );
176 - return false;
177 - }
178 - mPendingReinitialize = false;
179 - }
180 - boolean nnSetDimension = true;
181 - if ( mPendingSetDimension ) {
182 - if ( !setOverallDimension( mSetDimensionValue ) ) {
183 - trace( "SetDimension" );
184 - return false;
185 - }
186 - nnSetDimension = mPendingSetDimension = false;
187 - }
188 - if ( mPendingRelayout ) {
189 - if ( nnSetDimension && !setOverallDimension( mDimensionHelper.getDimension() ) ) {
190 - trace( "Relayout" );
191 - return false;
192 - }
193 - mPendingRelayout = false;
194 - mDimensionHelper.distributeToChildrenChangedDimension();
195 - }
196 - if ( mPendingMaximizeVisable ) {
197 - if ( !LLmaximizeVisibility() ) {
198 - trace( "MaximizeVisable" );
199 - return false;
200 - }
201 - mPendingMaximizeVisable = false;
202 - }
203 - mPendingAny = false;
204 - mOurWidget.setSizingWorking();
205 - return true;
206 - }
207 - }
208 -
209 - @SuppressWarnings({"UnusedParameters"})
210 - private void trace( String pMessage ) {
211 - // System.out.println( mDimensionHelper.getWhat() + " - " + pMessage);
212 - }
213 - }
1 + // This Source Code is in the Public Domain per: http://unlicense.org
2 + package org.litesoft.GWT.client.widgets.nonpublic;
3 +
4 + import org.litesoft.core.delayed.*;
5 + import org.litesoft.logger.nonpublic.*;
6 +
7 + import com.google.gwt.user.client.*;
8 +
9 + public class DeferableFloaterDimensionHandler {
10 + private AbstractLogger mLogger;
11 + private AbstractSizeableWidget mOurWidget;
12 + private ISizeableDimensionHelper mDimensionHelper;
13 + private FloaterPositionHandler mPositionHandler;
14 +
15 + private boolean mMinimumDimensionSet = false;
16 +
17 + private boolean mPendingAny = false;
18 + private boolean mPendingReinitialize = false;
19 + private boolean mPendingSetDimension = false;
20 + private boolean mPendingRelayout = false;
21 + private boolean mPendingMaximizeVisable = false;
22 + private int mSetDimensionValue = 0;
23 +
24 + public DeferableFloaterDimensionHandler( AbstractSizeableWidget pOurWidget, AbstractLogger pLogger, ISizeableDimensionHelper pDimensionHelper,
25 + FloaterPositionHandler pPositionHandler ) {
26 + mLogger = pLogger;
27 + mOurWidget = pOurWidget;
28 + mDimensionHelper = pDimensionHelper;
29 + mPositionHandler = pPositionHandler;
30 + }
31 +
32 + public boolean isPendingAny() {
33 + return mPendingAny;
34 + }
35 +
36 + public void initializeDimension() {
37 + if ( !mMinimumDimensionSet ) {
38 + reinitializeDimension();
39 + }
40 + }
41 +
42 + public void setDimension( String pDimension ) {
43 + if ( mLogger != null ) {
44 + mLogger.log( mDimensionHelper.getWhat(), "=", pDimension );
45 + }
46 + try {
47 + setDimension( Integer.parseInt( pDimension ) );
48 + }
49 + catch ( NumberFormatException e ) {
50 + // Not a Number?
51 + }
52 + }
53 +
54 + private boolean setPrefferredDimension() {
55 + int zSaved = mSetDimensionValue;
56 + mMinimumDimensionSet = mDimensionHelper.setPrefferredDimension();
57 + if ( zSaved != 0 ) {
58 + mSetDimensionValue = zSaved;
59 + }
60 + return mMinimumDimensionSet;
61 + }
62 +
63 + public void reinitializeDimension() {
64 + mMinimumDimensionSet = false;
65 + if ( mPendingAny ) {
66 + mPendingReinitialize = true;
67 + return;
68 + }
69 + if ( mOurWidget.isSizingWorking() ) {
70 + if ( setPrefferredDimension() ) {
71 + return;
72 + }
73 + }
74 + mPendingAny = mPendingReinitialize = true;
75 + launchInitialDeferredProcess();
76 + }
77 +
78 + private void setDimension( int pDimension ) {
79 + LLsetDimension( pDimension );
80 + initializeDimension();
81 + if ( mPendingAny ) {
82 + mPendingSetDimension = true;
83 + return;
84 + }
85 + if ( mOurWidget.isSizingWorking() ) {
86 + if ( setOverallDimension( mSetDimensionValue ) ) {
87 + return;
88 + }
89 + }
90 + mPendingAny = mPendingSetDimension = true;
91 + launchInitialDeferredProcess();
92 + }
93 +
94 + public void LLsetDimension( int pDimension ) {
95 + mSetDimensionValue = pDimension;
96 + }
97 +
98 + public void relayout() {
99 + initializeDimension();
100 + if ( mPendingAny ) {
101 + mPendingRelayout = true;
102 + return;
103 + }
104 + if ( mOurWidget.isSizingWorking() ) {
105 + Element zInnerElement = mOurWidget.getHelper().getInnerElement();
106 + int zCurInnerSize = mDimensionHelper.getDimension( zInnerElement );
107 + int zCurOuterSize = mDimensionHelper.getDimension();
108 + if ( (zCurInnerSize != 0) && (zCurOuterSize != 0) && setOverallDimension( zCurOuterSize ) ) {
109 + mDimensionHelper.distributeToChildrenChangedDimension();
110 + return;
111 + }
112 + }
113 + mPendingAny = mPendingRelayout = true;
114 + launchInitialDeferredProcess();
115 + }
116 +
117 + public void maximizeVisibility() {
118 + initializeDimension();
119 + if ( mPendingAny ) {
120 + mPendingMaximizeVisable = true;
121 + return;
122 + }
123 + if ( mOurWidget.isSizingWorking() ) {
124 + if ( LLmaximizeVisibility() ) {
125 + return;
126 + }
127 + }
128 + mPendingAny = mPendingMaximizeVisable = true;
129 + launchInitialDeferredProcess();
130 + }
131 +
132 + private boolean LLmaximizeVisibility() {
133 + int zMaxSize = mPositionHandler.getMaxPotentialSize();
134 + if ( (mSetDimensionValue != 0) && (zMaxSize > 1) ) {
135 + int zPos = mPositionHandler.getPos();
136 + int zSpace = zMaxSize - (zPos + mSetDimensionValue);
137 + if ( (zPos > 0) && (zSpace < 0) ) {
138 + zPos += zSpace;
139 + mPositionHandler.setPos( (zPos < 0) ? 0 : zPos );
140 + }
141 + return true;
142 + }
143 + return false;
144 + }
145 +
146 + private boolean setOverallDimension( int pDimension ) {
147 + int curDimension = mDimensionHelper.getDimension();
148 + if ( curDimension <= 0 ) {
149 + if ( mLogger.isEnabled() ) {
150 + mLogger.log( mDimensionHelper.getWhat() + " : setOverallDimension from " + curDimension + " **** <= 0" );
151 + }
152 + return false;
153 + }
154 + int zSaved = mSetDimensionValue;
155 + boolean rv = mDimensionHelper.adjustSizeBy( pDimension - curDimension );
156 + if ( zSaved != 0 ) {
157 + mSetDimensionValue = zSaved;
158 + }
159 + if ( mLogger.isEnabled() ) {
160 + mLogger.log( mDimensionHelper.getWhat() + " : setOverallDimension from " + curDimension + " to " + pDimension + " set? " + rv );
161 + }
162 + return rv;
163 + }
164 +
165 + private void launchInitialDeferredProcess() {
166 + new EscalatingProcess( new MyDelayedProcess() ).schedule();
167 + }
168 +
169 + private class MyDelayedProcess implements DelayedProcess {
170 + @Override
171 + public boolean process() // Todo: Special Sizing Support...
172 + {
173 + if ( mPendingReinitialize ) {
174 + if ( !setPrefferredDimension() ) {
175 + trace( "Reinitialize" );
176 + return false;
177 + }
178 + mPendingReinitialize = false;
179 + }
180 + boolean nnSetDimension = true;
181 + if ( mPendingSetDimension ) {
182 + if ( !setOverallDimension( mSetDimensionValue ) ) {
183 + trace( "SetDimension" );
184 + return false;
185 + }
186 + nnSetDimension = mPendingSetDimension = false;
187 + }
188 + if ( mPendingRelayout ) {
189 + if ( nnSetDimension && !setOverallDimension( mDimensionHelper.getDimension() ) ) {
190 + trace( "Relayout" );
191 + return false;
192 + }
193 + mPendingRelayout = false;
194 + mDimensionHelper.distributeToChildrenChangedDimension();
195 + }
196 + if ( mPendingMaximizeVisable ) {
197 + if ( !LLmaximizeVisibility() ) {
198 + trace( "MaximizeVisable" );
199 + return false;
200 + }
201 + mPendingMaximizeVisable = false;
202 + }
203 + mPendingAny = false;
204 + mOurWidget.setSizingWorking();
205 + return true;
206 + }
207 + }
208 +
209 + @SuppressWarnings({"UnusedParameters"})
210 + private void trace( String pMessage ) {
211 + // System.out.println( mDimensionHelper.getWhat() + " - " + pMessage);
212 + }
213 + }