evl_upd20151125b.diff
src/com/goldencode/p2j/ui/client/gui/ComboBoxGuiImpl.java 2015-11-24 23:01:14 +0000 | ||
---|---|---|
48 | 48 |
** GUI mode ignoring SESSION:DATA-ENTRY-RETURN value. The combo-box does not |
49 | 49 |
** react to the ENTER key in GUI. Key processsing fixes for GUI mode. |
50 | 50 |
** 014 EVL 20151120 Fix for drop-down line spacing issue. And fix for button incorrect drawing |
51 |
** over 3d border. |
|
51 |
** over 3d border. Drop-down button fix for pressed state drawing. Pressing |
|
52 |
** the drop-down button need to be painted accordingly. |
|
52 | 53 |
*/ |
53 | 54 | |
54 | 55 |
package com.goldencode.p2j.ui.client.gui; |
... | ... | |
396 | 397 |
{ |
397 | 398 |
requestFocus(); |
398 | 399 |
pressed = true; |
400 | ||
399 | 401 |
// drop-down is opening on mouse press |
400 | 402 |
if (config.mode != ComboBoxConfig.Mode.SIMPLE) |
401 | 403 |
{ |
404 |
// first need to display the button pressing effect |
|
405 |
ThinClient.getInstance().independentEventDrawingBracket(this, new Runnable() |
|
406 |
{ |
|
407 |
public void run() |
|
408 |
{ |
|
409 |
repaint(); |
|
410 |
} |
|
411 |
}); |
|
412 | ||
413 |
// depending on current state activate or dismiss drop-down |
|
402 | 414 |
if (dropDownActive) |
403 | 415 |
{ |
404 | 416 |
// second click to drop-down button or area dismisses the active drop-down |
src/com/goldencode/p2j/ui/client/gui/ScrollBarGuiButton.java 2015-11-25 21:08:59 +0000 | ||
---|---|---|
24 | 24 |
** 010 EVL 20151010 Fix for thumb drawing issues. Also reworked image loader specifically for |
25 | 25 |
** small images. Optimization for button painting on mouse press, release. In |
26 | 26 |
** these cases we do not need to repaint whole window. |
27 |
** 011 EVL 20151124 The button pressed state needs repaint() call to properly display pressed mode |
|
28 |
** when running indide drop-down life cycle. Improved mouse handling, in 4GL |
|
29 |
** if to press mouse, move inside button and release - this generates click. So |
|
30 |
** we have to track the mouse release, not click. Adding auto-scroll feature on |
|
31 |
** press and hold mouse button. The mouse executor shoule be stopped on widget |
|
32 |
** destroy to free the resources. Changing static executor to be instance based. |
|
27 | 33 |
*/ |
28 | 34 | |
29 | 35 |
package com.goldencode.p2j.ui.client.gui; |
... | ... | |
31 | 37 |
// this usage of AWT events is intentional, they are being used separately from the |
32 | 38 |
// AWT/Swing event model itself; no other AWT/Swing usage is occurring in this class |
33 | 39 |
import java.awt.event.MouseEvent; |
40 |
import java.util.concurrent.*; |
|
34 | 41 | |
35 | 42 |
import com.goldencode.p2j.ui.*; |
36 | 43 |
import com.goldencode.p2j.ui.chui.ThinClient; |
... | ... | |
65 | 72 |
private ImageWrapper<?> img_d; |
66 | 73 |
|
67 | 74 |
/** Button state */ |
68 |
boolean up = true; |
|
75 |
private volatile boolean up = true;
|
|
69 | 76 |
|
77 |
/** Executor for handling mouse input. */ |
|
78 |
private ExecutorService mouseInputExecutor = Executors.newSingleThreadExecutor(); |
|
79 |
|
|
70 | 80 |
/** |
71 | 81 |
* This constructor creates a scroll bar button. |
72 | 82 |
* |
... | ... | |
198 | 208 |
} |
199 | 209 | |
200 | 210 |
/** |
201 |
* Notification of a mouse clicked event occurred for this widget. |
|
202 |
* |
|
203 |
* @param e |
|
204 |
* The mouse event. |
|
205 |
*/ |
|
206 |
@Override |
|
207 |
public void mouseClicked(MouseEvent e) |
|
208 |
{ |
|
209 |
// check if the scrollbar widget is enabled |
|
210 |
if (owner.isEnabled()) |
|
211 |
{ |
|
212 |
// call scroll bar |
|
213 |
owner.onButtonClick(position, false); |
|
214 |
} |
|
215 |
} |
|
216 | ||
217 |
/** |
|
218 | 211 |
* Notification of a mouse pressed event occurred for this widget. |
219 | 212 |
* |
220 | 213 |
* @param e |
... | ... | |
227 | 220 |
if (owner.isEnabled()) |
228 | 221 |
{ |
229 | 222 |
up = false; |
230 |
refresh(); |
|
223 |
// need to use repaint() here instead of refresh() because for example inside combo-box |
|
224 |
// drop-down standalone event loop the screen synchronization is not happening |
|
225 |
repaint(); |
|
226 | ||
227 |
// for holding mouse we need to genereate scroll events |
|
228 |
mouseInputExecutor.execute(new Runnable() |
|
229 |
{ |
|
230 | ||
231 |
@Override |
|
232 |
public void run() |
|
233 |
{ |
|
234 |
// finisho on mouse release |
|
235 |
while (!up) |
|
236 |
{ |
|
237 |
try |
|
238 |
{ |
|
239 |
// wait to see if the mouse is still pressed |
|
240 |
Thread.sleep(GuiConstants.REPEAT_MILLIS); |
|
241 | ||
242 |
if (!up) |
|
243 |
{ |
|
244 |
// emit the sequential click events |
|
245 |
ThinClient.getInstance().independentEventDrawingBracket(owner, |
|
246 |
new Runnable() |
|
247 |
{ |
|
248 |
public void run() |
|
249 |
{ |
|
250 |
owner.onButtonClick(position, false); |
|
251 |
} |
|
252 |
}); |
|
253 | ||
254 |
} |
|
255 |
} |
|
256 |
catch (InterruptedException ex) |
|
257 |
{ |
|
258 |
// nop |
|
259 |
} |
|
260 |
} |
|
261 |
} |
|
262 |
}); |
|
231 | 263 |
} |
232 | 264 |
} |
233 | 265 | |
... | ... | |
244 | 276 |
if (owner.isEnabled()) |
245 | 277 |
{ |
246 | 278 |
up = true; |
247 |
refresh(); |
|
279 |
repaint(); |
|
280 |
// call scroll bar |
|
281 |
owner.onButtonClick(position, false); |
|
248 | 282 |
} |
249 | 283 |
} |
250 | 284 |
|
251 | 285 |
/** |
286 |
* Destroy this widget. Cleans up all including widgets before destruction. |
|
287 |
*/ |
|
288 |
@Override |
|
289 |
public void destroy() |
|
290 |
{ |
|
291 |
// stop the mouse related thread if it is active |
|
292 |
if (!mouseInputExecutor.isShutdown()) |
|
293 |
{ |
|
294 |
mouseInputExecutor.shutdownNow(); |
|
295 |
} |
|
296 | ||
297 |
// call superclass for main destruction |
|
298 |
super.destroy(); |
|
299 |
} |
|
300 |
|
|
301 |
/** |
|
252 | 302 |
* Refresh the scrollbar button not repainting full window. |
253 | 303 |
*/ |
254 | 304 |
@Override |
src/com/goldencode/p2j/ui/client/gui/ScrollBarGuiImpl.java 2015-11-25 21:08:59 +0000 | ||
---|---|---|
38 | 38 |
** 018 SVL 20151029 Added support for scroll bar controllers. |
39 | 39 |
** EVL 20151111 Fix for scrollbar thumb size calculation. The minimum size is 8. When nothing |
40 | 40 |
** to scroll - it is not required to draw the thumb. Fix for background drawing. |
41 |
** 019 EVL 20151125 Adding executor shutdown to prevent resource leak. Changing static executor |
|
42 |
** to be instance based. |
|
41 | 43 |
*/ |
42 | 44 |
|
43 | 45 |
package com.goldencode.p2j.ui.client.gui; |
... | ... | |
73 | 75 |
public static final int SCROLLBAR_SIZE = 16; |
74 | 76 |
|
75 | 77 |
/** Executor for handling mouse input. */ |
76 |
private static ExecutorService mouseInputExecutor = Executors.newSingleThreadExecutor();
|
|
78 |
private ExecutorService mouseInputExecutor = Executors.newSingleThreadExecutor(); |
|
77 | 79 |
|
78 | 80 |
/** Screen driver */ |
79 | 81 |
private GuiDriver gd; |
... | ... | |
730 | 732 |
} |
731 | 733 |
|
732 | 734 |
/** |
735 |
* Destroy this widget. Cleans up all including widgets before destruction. |
|
736 |
*/ |
|
737 |
@Override |
|
738 |
public void destroy() |
|
739 |
{ |
|
740 |
// stop the mouse related thread if it is active |
|
741 |
if (!mouseInputExecutor.isShutdown()) |
|
742 |
{ |
|
743 |
mouseInputExecutor.shutdownNow(); |
|
744 |
} |
|
745 |
|
|
746 |
// call superclass for main destruction |
|
747 |
super.destroy(); |
|
748 |
} |
|
749 |
|
|
750 |
/** |
|
733 | 751 |
* Get size of the travel area available for thumb scrolling. |
734 | 752 |
* |
735 | 753 |
* @return size of travel area, in pixels. |