home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / yacl-012.zip / uidemo / wait / appwin.cxx next >
C/C++ Source or Header  |  1995-02-25  |  3KB  |  130 lines

  1.  
  2. #include "appwin.h"
  3. #include "ui/cntroler.h"
  4. #include "ui/dialog.h"
  5. #include "ui/pushbtn.h"
  6.  
  7. #include <fstream.h>
  8.  
  9.  
  10.  
  11.  
  12. #define LOOP_COUNT 9000000L
  13.  
  14.  
  15. #define ID_LABEL            20
  16. #define ID_CANCELBTN        21
  17.  
  18.  
  19. UI_ViewDescriptor ProgressDialogDesc[] = {
  20. {View_Label,      ID_LABEL,      50,  20, 200,  20, FALSE,  ""},
  21. {View_PushButton, ID_CANCELBTN, 110, 100,  80,  40, TRUE,  "Cancel"},
  22. {View_None, 0}
  23. };
  24.  
  25. UI_DialogEventDescriptor fini [] = {
  26. {ID_CANCELBTN,  Event_Select},
  27. {-1,            Event_None}
  28. };
  29.  
  30.  
  31. class ProgressDialog: public UI_Dialog {
  32.  
  33. public:
  34.     ProgressDialog (UI_CompositeVObject* parent)
  35.     : UI_Dialog (parent, ProgressDialogDesc,
  36.                  UI_Rectangle (100, 100, 300, 200), fini) {};
  37.  
  38.     bool WantToQuit () {return FALSE;};  // Cannot terminate it.
  39. };
  40.  
  41.  
  42.  
  43.  
  44. #define ID_BUTTON1 11
  45. #define ID_BUTTON2 12
  46.  
  47.  
  48.  
  49. UI_ViewDescriptor desc[] = {
  50.     {View_PushButton, ID_BUTTON1, 100,  15, 100, 40, TRUE, ""},
  51.     {View_PushButton, ID_BUTTON2,  50,  75, 200, 40, TRUE, ""},
  52.     {View_None, 0}
  53. };
  54.     
  55. AppWindow::AppWindow()
  56. : UI_CompositeVObject (NULL, desc, FALSE, UI_Rectangle (50, 50, 300, 200))
  57. {
  58.     (*this)[ID_BUTTON1]->Title() = "Wait demo";
  59.     (*this)[ID_BUTTON2]->Title() = "Progress dialog demo";
  60.     _title                       = "YACL Wait/Progress Demo";
  61.     _inProgressDemo              = 0;
  62. }
  63.  
  64.  
  65. bool AppWindow::HandleChildEvent (const UI_Event& e)
  66. {
  67.     if (e.Origin()->ViewID() == ID_BUTTON1 && e.Type() == Event_Select) {
  68.         WaitDemo ();
  69.         return TRUE;
  70.     }
  71.  
  72.     if (e.Origin()->ViewID() == ID_BUTTON2 && e.Type() == Event_Select) {
  73.         ProgressDialogDemo ();
  74.         return TRUE;
  75.     }
  76.  
  77.     return FALSE;
  78. }
  79.  
  80.  
  81. void AppWindow::ProgressDialogDemo ()
  82. {
  83.     ProgressDialog* progress = new ProgressDialog (this);
  84.     _inProgressDemo++;
  85.     progress->Title() = "Counting";
  86.     for (long i = 0; i < LOOP_COUNT; i++) {
  87.         // Dummy loop
  88.         if (i % 100000 == 0) {
  89.             (*progress)[ID_LABEL]->Title() = CL_String (i);
  90.             // Must periodically check for pending events, for the "cancel"
  91.             // button to take effect:
  92.             _Controller->DispatchPendingEvents();
  93.             if (progress->LastDialogEvent().id == ID_CANCELBTN)
  94.                 break;
  95.         }
  96.     }
  97.     _inProgressDemo--;
  98.     // And now suddenly, it becomes a modal dialog:
  99.     (*progress)[ID_CANCELBTN]->Title() = "Ok";
  100.     progress->ExecuteModal();
  101.     _Application->Destroy (progress);
  102. }
  103.  
  104. void AppWindow::WaitDemo ()
  105. {
  106.     ProgressDialog* progress = new ProgressDialog (this);
  107.     progress->Title() = "Counting";
  108.     UI_PushButton& btn = (UI_PushButton&) *((*progress)[ID_CANCELBTN]);
  109.     _Controller->BeginWait ();
  110.     btn.MakeInvisible();
  111.     for (long i = 0; i < LOOP_COUNT; i++) {
  112.         if (i % 100000 == 0)
  113.             (*progress)[ID_LABEL]->Title() = CL_String (i);
  114.     };
  115.     _Controller->EndWait ();
  116.  
  117.     // And now suddenly, it becomes a modal dialog:
  118.     btn.MakeVisible();
  119.     btn.Title() = "Ok";
  120.     progress->ExecuteModal();
  121.     _Application->Destroy (progress);
  122. }
  123.  
  124.  
  125.  
  126. bool AppWindow::WantToQuit ()
  127. {
  128.     return !_inProgressDemo;
  129. }
  130.