Subversion Repository Public Repository

litesoft

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

Diff revisions: vs.
  @@ -1,210 +1,210 @@
1 - // This Source Code is in the Public Domain per: http://unlicense.org
2 - package org.litesoft.GWT.client.widgets;
3 -
4 - import org.litesoft.GWT.client.widgets.nonpublic.*;
5 - import org.litesoft.commonfoundation.typeutils.*;
6 -
7 - import com.google.gwt.user.client.ui.*;
8 -
9 - public class SizeableImage extends AbstractSizeableComposite implements SourcesClickEvents,
10 - SourcesMouseEvents,
11 - SourcesLoadEvents,
12 - LoadListener {
13 - protected Image mImage = new OurImage();
14 -
15 - protected SizeableImage( String pStyle, String pUrl ) {
16 - initWidget( new ConstrainingSizeableOuterLayers( mImage, pStyle ) );
17 -
18 - mImage.addLoadListener( this );
19 -
20 - setUrl( pUrl );
21 - }
22 -
23 - /**
24 - * Creates an image with a specified URL.
25 - *
26 - * @param pUrl the URL of the image to be displayed
27 - */
28 - public SizeableImage( String pUrl ) {
29 - this( "LayoutSizeableImage", pUrl );
30 - }
31 -
32 - public SizeableImage() {
33 - this( null );
34 - }
35 -
36 - public SizeableImage style( String pStyleName ) {
37 - addStyleName( pStyleName );
38 - return this;
39 - }
40 -
41 - /**
42 - * Gets the URL of the image.
43 - *
44 - * @return the image URL
45 - */
46 - public String getUrl() {
47 - return mImage.getUrl();
48 - }
49 -
50 - /**
51 - * Sets the URL of the image to be displayed.
52 - *
53 - * @param url the image URL
54 - */
55 - public void setUrl( String url ) {
56 - if ( null != (url = Strings.noEmpty( url )) ) {
57 - setLoading();
58 - mImage.setUrl( url );
59 - }
60 - }
61 -
62 - // proxies to FocusPanel
63 -
64 - private DelegatingClickListenerCollection mClickListeners;
65 - private DelegatingMouseListenerCollection mMouseListeners;
66 - private DelegatingLoadListenerCollection mLoadListeners;
67 -
68 - @Override
69 - public void addClickListener( ClickListener listener ) {
70 - if ( listener != null ) {
71 - if ( mClickListeners == null ) {
72 - mClickListeners = new DelegatingClickListenerCollection( this, mImage );
73 - }
74 - mClickListeners.add( listener );
75 - }
76 - }
77 -
78 - @Override
79 - public void removeClickListener( ClickListener listener ) {
80 - if ( (listener != null) && (mClickListeners != null) && //
81 - mClickListeners.remove( listener ) && mClickListeners.isEmpty() ) {
82 - mImage.removeClickListener( mClickListeners );
83 - mClickListeners = null;
84 - }
85 - }
86 -
87 - @Override
88 - public void addMouseListener( MouseListener listener ) {
89 - if ( listener != null ) {
90 - if ( mMouseListeners == null ) {
91 - mMouseListeners = new DelegatingMouseListenerCollection( this, mImage );
92 - }
93 - mMouseListeners.add( listener );
94 - }
95 - }
96 -
97 - @Override
98 - public void removeMouseListener( MouseListener listener ) {
99 - if ( (listener != null) && (mMouseListeners != null) && //
100 - mMouseListeners.remove( listener ) && mMouseListeners.isEmpty() ) {
101 - mImage.removeMouseListener( mMouseListeners );
102 - mMouseListeners = null;
103 - }
104 - }
105 -
106 - @Override
107 - public void addLoadListener( LoadListener listener ) {
108 - if ( listener != null ) {
109 - if ( mLoadListeners == null ) {
110 - mLoadListeners = new DelegatingLoadListenerCollection( this, mImage );
111 - }
112 - mLoadListeners.add( listener );
113 - }
114 - }
115 -
116 - @Override
117 - public void removeLoadListener( LoadListener listener ) {
118 - if ( (listener != null) && (mLoadListeners != null) && //
119 - mLoadListeners.remove( listener ) && mLoadListeners.isEmpty() ) {
120 - mImage.removeLoadListener( mLoadListeners );
121 - mLoadListeners = null;
122 - }
123 - }
124 -
125 - //****** Implementation Code Block to support delegation to AbsoluteSizeHelper
126 -
127 - public SizeableImage stretchable() {
128 - LLstretchable();
129 - return this;
130 - }
131 -
132 - public SizeableImage stretchableVertically() {
133 - LLstretchableVertically();
134 - return this;
135 - }
136 -
137 - public SizeableImage stretchableHorizontally() {
138 - LLstretchableHorizontally();
139 - return this;
140 - }
141 -
142 - // private implementation
143 -
144 - @Override
145 - public void setWidth( String width ) {
146 - mExternalWidth = width;
147 - super.setWidth( width );
148 - }
149 -
150 - @Override
151 - public void setHeight( String height ) {
152 - mExternalHeight = height;
153 - super.setHeight( height );
154 - }
155 -
156 - private String mExternalWidth = null;
157 - private String mExternalHeight = null;
158 - private boolean mLoaded = false;
159 -
160 - private void setLoading() {
161 - mLoaded = false;
162 - }
163 -
164 - private void setLoaded() {
165 - if ( !mLoaded ) {
166 - mLoaded = true;
167 - if ( mExternalWidth == null ) {
168 - super.setWidth( "" + getOffsetWidth() );
169 - }
170 - if ( mExternalHeight == null ) {
171 - super.setHeight( "" + getOffsetHeight() );
172 - }
173 - }
174 - }
175 -
176 - @Override
177 - public void onError( Widget sender ) {
178 - setLoaded();
179 - }
180 -
181 - @Override
182 - public void onLoad( Widget sender ) {
183 - setLoaded();
184 - }
185 -
186 - public static class DelegatingLoadListenerCollection extends LoadListenerCollection implements LoadListener {
187 - private final Widget owner;
188 -
189 - /**
190 - * Constructor for {@link DelegatingLoadListenerCollection}.
191 - *
192 - * @param owner owner of listeners
193 - * @param delegatedTo source of events
194 - */
195 - public DelegatingLoadListenerCollection( Widget owner, SourcesLoadEvents delegatedTo ) {
196 - this.owner = owner;
197 - delegatedTo.addLoadListener( this );
198 - }
199 -
200 - @Override
201 - public void onError( Widget sender ) {
202 - fireError( owner );
203 - }
204 -
205 - @Override
206 - public void onLoad( Widget sender ) {
207 - fireLoad( owner );
208 - }
209 - }
210 - }
1 + // This Source Code is in the Public Domain per: http://unlicense.org
2 + package org.litesoft.GWT.client.widgets;
3 +
4 + import org.litesoft.GWT.client.widgets.nonpublic.*;
5 + import org.litesoft.commonfoundation.base.*;
6 +
7 + import com.google.gwt.user.client.ui.*;
8 +
9 + public class SizeableImage extends AbstractSizeableComposite implements SourcesClickEvents,
10 + SourcesMouseEvents,
11 + SourcesLoadEvents,
12 + LoadListener {
13 + protected Image mImage = new OurImage();
14 +
15 + protected SizeableImage( String pStyle, String pUrl ) {
16 + initWidget( new ConstrainingSizeableOuterLayers( mImage, pStyle ) );
17 +
18 + mImage.addLoadListener( this );
19 +
20 + setUrl( pUrl );
21 + }
22 +
23 + /**
24 + * Creates an image with a specified URL.
25 + *
26 + * @param pUrl the URL of the image to be displayed
27 + */
28 + public SizeableImage( String pUrl ) {
29 + this( "LayoutSizeableImage", pUrl );
30 + }
31 +
32 + public SizeableImage() {
33 + this( null );
34 + }
35 +
36 + public SizeableImage style( String pStyleName ) {
37 + addStyleName( pStyleName );
38 + return this;
39 + }
40 +
41 + /**
42 + * Gets the URL of the image.
43 + *
44 + * @return the image URL
45 + */
46 + public String getUrl() {
47 + return mImage.getUrl();
48 + }
49 +
50 + /**
51 + * Sets the URL of the image to be displayed.
52 + *
53 + * @param url the image URL
54 + */
55 + public void setUrl( String url ) {
56 + if ( null != (url = ConstrainTo.significantOrNull( url )) ) {
57 + setLoading();
58 + mImage.setUrl( url );
59 + }
60 + }
61 +
62 + // proxies to FocusPanel
63 +
64 + private DelegatingClickListenerCollection mClickListeners;
65 + private DelegatingMouseListenerCollection mMouseListeners;
66 + private DelegatingLoadListenerCollection mLoadListeners;
67 +
68 + @Override
69 + public void addClickListener( ClickListener listener ) {
70 + if ( listener != null ) {
71 + if ( mClickListeners == null ) {
72 + mClickListeners = new DelegatingClickListenerCollection( this, mImage );
73 + }
74 + mClickListeners.add( listener );
75 + }
76 + }
77 +
78 + @Override
79 + public void removeClickListener( ClickListener listener ) {
80 + if ( (listener != null) && (mClickListeners != null) && //
81 + mClickListeners.remove( listener ) && mClickListeners.isEmpty() ) {
82 + mImage.removeClickListener( mClickListeners );
83 + mClickListeners = null;
84 + }
85 + }
86 +
87 + @Override
88 + public void addMouseListener( MouseListener listener ) {
89 + if ( listener != null ) {
90 + if ( mMouseListeners == null ) {
91 + mMouseListeners = new DelegatingMouseListenerCollection( this, mImage );
92 + }
93 + mMouseListeners.add( listener );
94 + }
95 + }
96 +
97 + @Override
98 + public void removeMouseListener( MouseListener listener ) {
99 + if ( (listener != null) && (mMouseListeners != null) && //
100 + mMouseListeners.remove( listener ) && mMouseListeners.isEmpty() ) {
101 + mImage.removeMouseListener( mMouseListeners );
102 + mMouseListeners = null;
103 + }
104 + }
105 +
106 + @Override
107 + public void addLoadListener( LoadListener listener ) {
108 + if ( listener != null ) {
109 + if ( mLoadListeners == null ) {
110 + mLoadListeners = new DelegatingLoadListenerCollection( this, mImage );
111 + }
112 + mLoadListeners.add( listener );
113 + }
114 + }
115 +
116 + @Override
117 + public void removeLoadListener( LoadListener listener ) {
118 + if ( (listener != null) && (mLoadListeners != null) && //
119 + mLoadListeners.remove( listener ) && mLoadListeners.isEmpty() ) {
120 + mImage.removeLoadListener( mLoadListeners );
121 + mLoadListeners = null;
122 + }
123 + }
124 +
125 + //****** Implementation Code Block to support delegation to AbsoluteSizeHelper
126 +
127 + public SizeableImage stretchable() {
128 + LLstretchable();
129 + return this;
130 + }
131 +
132 + public SizeableImage stretchableVertically() {
133 + LLstretchableVertically();
134 + return this;
135 + }
136 +
137 + public SizeableImage stretchableHorizontally() {
138 + LLstretchableHorizontally();
139 + return this;
140 + }
141 +
142 + // private implementation
143 +
144 + @Override
145 + public void setWidth( String width ) {
146 + mExternalWidth = width;
147 + super.setWidth( width );
148 + }
149 +
150 + @Override
151 + public void setHeight( String height ) {
152 + mExternalHeight = height;
153 + super.setHeight( height );
154 + }
155 +
156 + private String mExternalWidth = null;
157 + private String mExternalHeight = null;
158 + private boolean mLoaded = false;
159 +
160 + private void setLoading() {
161 + mLoaded = false;
162 + }
163 +
164 + private void setLoaded() {
165 + if ( !mLoaded ) {
166 + mLoaded = true;
167 + if ( mExternalWidth == null ) {
168 + super.setWidth( "" + getOffsetWidth() );
169 + }
170 + if ( mExternalHeight == null ) {
171 + super.setHeight( "" + getOffsetHeight() );
172 + }
173 + }
174 + }
175 +
176 + @Override
177 + public void onError( Widget sender ) {
178 + setLoaded();
179 + }
180 +
181 + @Override
182 + public void onLoad( Widget sender ) {
183 + setLoaded();
184 + }
185 +
186 + public static class DelegatingLoadListenerCollection extends LoadListenerCollection implements LoadListener {
187 + private final Widget owner;
188 +
189 + /**
190 + * Constructor for {@link DelegatingLoadListenerCollection}.
191 + *
192 + * @param owner owner of listeners
193 + * @param delegatedTo source of events
194 + */
195 + public DelegatingLoadListenerCollection( Widget owner, SourcesLoadEvents delegatedTo ) {
196 + this.owner = owner;
197 + delegatedTo.addLoadListener( this );
198 + }
199 +
200 + @Override
201 + public void onError( Widget sender ) {
202 + fireError( owner );
203 + }
204 +
205 + @Override
206 + public void onLoad( Widget sender ) {
207 + fireLoad( owner );
208 + }
209 + }
210 + }