home *** CD-ROM | disk | FTP | other *** search
/ POINT Software Programming / PPROG1.ISO / c / fli106c / diapush.cpp < prev    next >
C/C++ Source or Header  |  1992-03-11  |  4KB  |  184 lines

  1. //
  2. // The Fusion Library Interface for DOS
  3. // Version 1.06c
  4. // Copyright (C) 1990, 1991, 1992
  5. // Software Dimensions
  6. //
  7. // DialogClass
  8. // DiaPushButton
  9. //
  10.  
  11. #include "fli.h"
  12. #include "elements.h"
  13. #include "colors.h"
  14.  
  15. #ifdef __BCPLUSPLUS__
  16. #pragma hdrstop
  17. #endif
  18.  
  19. #include <string.h>
  20. #include <dos.h>
  21.  
  22. //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  23. //
  24. // DiaPushButton()
  25. //
  26. // Constructor for DiaPushButton
  27. //
  28. //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  29.  
  30. DiaPushButton::DiaPushButton(int _X,int _Y,char *_Button,int _Action,
  31.   int _Key,int _Active) :
  32.   Button(_Button),
  33.   Action(_Action)
  34. {
  35.   X=_X;
  36.   Y=_Y;
  37.   Width=strlen(_Button)+2-((strchr(_Button,'~'))?1:0);
  38.   Height=1;
  39.   Pushed=0;
  40.   QuickKey=_Key;
  41.   FusionHelp=_Action;
  42.   Active=_Active;
  43. }
  44.  
  45. //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  46. //
  47. // Show()
  48. //
  49. // Show the push button
  50. //
  51. //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  52.  
  53. void DiaPushButton::Show()
  54. {
  55.   MouseHide();
  56.  
  57.   int Avail=(Available()==CompleteEvent);
  58.  
  59.   (*Blaze) (X,Y)
  60.     << ((Avail)?((!Active)?Colors.ButtonNormal:Colors.ButtonActive):
  61.        Colors.DiaDeadLocator)
  62.     << ' ';
  63.  
  64.   int Key;
  65.  
  66.   Key=Blaze->QuickDisplay(X+1,Y,
  67.     (Avail)?((!Active)?Colors.ButtonBold:Colors.ButtonActive):
  68.       Colors.DiaDeadLocator,
  69.     (Avail)?((!Active)?Colors.ButtonNormal:Colors.ButtonActive):
  70.       Colors.DiaDeadLocator,
  71.     Button);
  72.  
  73.   if (!QuickKey)
  74.     QuickKey=Key;
  75.  
  76.   (*Blaze)
  77.     << ((Avail)?((!Active)?Colors.ButtonNormal:Colors.ButtonActive):
  78.         Colors.DiaDeadLocator)
  79.     << ' '
  80.     << ((Avail)?Colors.DiaInterior:Colors.DiaDeadLocator)
  81.     << '\xdc';
  82.  
  83.   Blaze->CharacterRepeater(X+1,Y+1,Width,
  84.     (Avail)?Colors.DiaInterior:Colors.DiaDeadLocator,223);
  85.  
  86.   MouseShow();
  87. }
  88.  
  89. //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  90. //
  91. // HighLight()
  92. //
  93. // Highlight the current push button
  94. //
  95. //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  96.  
  97. void DiaPushButton::HighLight()
  98. {
  99.   MouseHide();
  100.  
  101.   (*Blaze) (X,Y)
  102.     << Colors.ButtonHiLite
  103.     << ' ';
  104.  
  105.   Blaze->QuickDisplay(X+1,Y,Colors.ButtonHiLite,Colors.ButtonHiLite,Button);
  106.  
  107.   (*Blaze)
  108.     << Colors.ButtonHiLite
  109.     << ' '
  110.     << Colors.DiaInterior
  111.     << '\xdc';
  112.  
  113.   Blaze->CharacterRepeater(X+1,Y+1,Width,Colors.DiaInterior,223);
  114.   Blaze->WindowGotoXY(X+1,Y);
  115.  
  116.   Pushed=0;
  117.  
  118.   MouseShow();
  119. }
  120.  
  121. //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  122. //
  123. // PushIn()
  124. //
  125. // Push the button in
  126. //
  127. //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  128.  
  129. void DiaPushButton::PushIn()
  130. {
  131.   Pushed=1;
  132.  
  133.   MouseHide();
  134.  
  135.   Blaze->WindowGotoXY(X+2,Y);
  136.  
  137.   (*Blaze) (X,Y)
  138.     << Colors.DiaInterior
  139.     << ' '
  140.     << Colors.ButtonHiLite
  141.     << ' ';
  142.  
  143.   Blaze->QuickDisplay(X+2,Y,Colors.ButtonHiLite,Colors.ButtonHiLite,Button);
  144.  
  145.   (*Blaze)
  146.     << Colors.ButtonHiLite
  147.     << ' ';
  148.  
  149.   Blaze->CharacterRepeater(X+1,Y+1,Width,Colors.DiaInterior,' ');
  150.  
  151.   MouseShow();
  152. }
  153.  
  154. //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  155. //
  156. // EventHandler()
  157. //
  158. // Handles the events
  159. //
  160. //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  161.  
  162. int DiaPushButton::EventHandler(int Event)
  163. {
  164.   if (Event==kbCr || Event==' ' || Event==QuickKey ||
  165.     (Event>='a' && Event<='z' && (Event-32)==QuickKey) ||
  166.     (Event==ValidatedMousedEvent && MouseEvent&MouseLeftButtonRelease))
  167.   {
  168.     PushIn();
  169.     delay(50);
  170.     HighLight();
  171.     return Action;
  172.   }
  173.  
  174.   if (Event==ValidatedMousedEvent && MouseEvent&MouseLeftButtonPress &&
  175.     !Pushed)
  176.     PushIn();
  177.   else if (Pushed && Event!=ValidatedMousedEvent)
  178.     HighLight();
  179.   else if (!Pushed && Event==ValidatedMousedEvent && MouseButtons()&LeftButton)
  180.     PushIn();
  181.  
  182.   return Event;
  183. }
  184.