home *** CD-ROM | disk | FTP | other *** search
/ POINT Software Programming / PPROG1.ISO / c / fli106c / diavrad.cpp < prev    next >
C/C++ Source or Header  |  1992-03-11  |  4KB  |  191 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. // DiaVertRadioButton
  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 <alloc.h>
  21.  
  22. //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  23. //
  24. // DiaVertRadio()
  25. //
  26. // Constructor for DiaVertRadio
  27. //
  28. //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  29.  
  30. DiaVertRadio::DiaVertRadio(int _X,int _Y,int &_Item,int _ItemCount,char **_Items) :
  31.   Item(_Item),
  32.   Items(_Items),
  33.   ItemCount(_ItemCount)
  34. {
  35.   X=_X;
  36.   Y=_Y;
  37.  
  38.   IsQueued=0;
  39.  
  40.   int i, j=0, k;
  41.  
  42.   if (_ItemCount)
  43.   {
  44.     for (i=0;i<_ItemCount;i++)
  45.       if ((k=strlen(_Items[i]))>j)
  46.         j=k;
  47.   }
  48.  
  49.   Width=j+6;
  50.   Height=_ItemCount;
  51. }
  52.  
  53. //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  54. //
  55. // ~DiaVertRadio()
  56. //
  57. // Destructor for DiaVertRadio
  58. //
  59. //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  60.  
  61. DiaVertRadio::~DiaVertRadio()
  62. {
  63.   if (IsQueued)
  64.     free(Items);
  65. }
  66.  
  67. //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  68. //
  69. // operator +
  70. //
  71. // Quick method to defining radio buttons
  72. //
  73. //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  74.  
  75. void DiaVertRadio::operator+ (char *Item)
  76. {
  77.   if (!IsQueued && Items)
  78.     return;
  79.  
  80.   IsQueued++;
  81.   Items=(char **)realloc(Items,sizeof(char *)*++ItemCount);
  82.   Items[ItemCount-1]=Item;
  83.  
  84.   Height=ItemCount;
  85.   Width=(strlen(Item)+6>Width)?(strlen(Item)+6):Width;
  86. }
  87.  
  88. //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  89. //
  90. // Show()
  91. //
  92. // Show the radio buttons
  93. //
  94. //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  95.  
  96. void DiaVertRadio::Show()
  97. {
  98.   MouseHide();
  99.  
  100.   int Avail=(Available()==CompleteEvent);
  101.  
  102.   if (Item>=ItemCount)
  103.     Item=ItemCount-1;
  104.  
  105.   if (Item<0)
  106.     Item=0;
  107.  
  108.   for (int i=0;i<ItemCount;i++)
  109.   {
  110.     (*Blaze) (X,Y+i)
  111.       << ((Avail)?Colors.RadioText:Colors.DiaDeadLocator)
  112.       << " ("
  113.       << ((Avail)?((i==Item)?Colors.RadioCheckMark:Colors.RadioText):Colors.DiaDeadLocator)
  114.       << ((i==Item)?'\x7':' ')
  115.       << ((Avail)?Colors.RadioText:Colors.DiaDeadLocator)
  116.       << ") "
  117.       << Items[i]
  118.       << ' ';
  119.     int Calc=5+strlen(Items[i]);
  120.     Blaze->CharacterRepeater(X+Calc,Y+i,Width-Calc,
  121.       (Avail)?Colors.RadioText:Colors.DiaDeadLocator,' ');
  122.   }
  123.  
  124.   MouseShow();
  125. }
  126.  
  127. //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  128. //
  129. // HighLight()
  130. //
  131. // Highlight the current radio button
  132. //
  133. //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  134.  
  135. void DiaVertRadio::HighLight()
  136. {
  137.   MouseHide();
  138.  
  139.   Blaze->LineAttribute(X,Y+Item,Width,Colors.RadioHiLite);
  140.   Blaze->WindowGotoXY(X+2,Y+Item);
  141.  
  142.   MouseShow();
  143. }
  144.  
  145. //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  146. //
  147. // EventHandler()
  148. //
  149. // Handles the events
  150. //
  151. //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  152.  
  153. int DiaVertRadio::EventHandler(int Event)
  154. {
  155.   if (Event==kbDown || Event==' ')
  156.   {
  157.     if (ItemCount>1)
  158.     {
  159.       Item=(Item==ItemCount-1)?0:(++Item);
  160.       Show();
  161.       HighLight();
  162.     }
  163.     return CompleteEvent;
  164.   }
  165.  
  166.   if (Event==kbUp)
  167.   {
  168.     if (ItemCount>1)
  169.     {
  170.       Item=(!Item)?(ItemCount-1):(--Item);
  171.       Show();
  172.       HighLight();
  173.     }
  174.     return CompleteEvent;
  175.   }
  176.  
  177.   if (Event==ValidatedMousedEvent && MouseEvent&MouseLeftButtonRelease)
  178.   {
  179.     MouseVertical-=Y;
  180.     if (Item!=MouseVertical)
  181.     {
  182.       Item=MouseVertical;
  183.       Show();
  184.       HighLight();
  185.     }
  186.     return CompleteEvent;
  187.   }
  188.  
  189.   return Event;
  190. }
  191.