Project

General

Profile

evl_upd20151125a.diff

Resource cleanup added - Eugenie Lyzenko, 11/25/2015 09:17 AM

Download (7.23 KB)

View differences:

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 13:59:48 +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.
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 static 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 13:59:48 +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.
41 42
*/
42 43

  
43 44
package com.goldencode.p2j.ui.client.gui;
......
730 731
   }
731 732

  
732 733
   /**
734
    * Destroy this widget.  Cleans up all including widgets before destruction.
735
    */
736
   @Override
737
   public void destroy()
738
   {
739
      // stop the mouse related thread if it is active
740
      if (!mouseInputExecutor.isShutdown())
741
      {
742
         mouseInputExecutor.shutdownNow();
743
      }
744

  
745
      // call superclass for main destruction
746
      super.destroy();
747
   }
748
   
749
   /**
733 750
    * Get size of the travel area available for thumb scrolling.
734 751
    *
735 752
    * @return size of travel area, in pixels.