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

  1. //
  2. // The Fusion Library Interface for DOS
  3. // Version 1.06c
  4. // Copyright (C) 1990, 1991, 1992
  5. // Software Dimensions
  6. //
  7. // InfoBox
  8. //
  9.  
  10. #include "fli.h"
  11. #include "elements.h"
  12. #include "colors.h"
  13.  
  14. #ifdef __BCPLUSPLUS__
  15. #pragma hdrstop
  16. #endif
  17.  
  18. #include <alloc.h>
  19. #include <string.h>
  20.  
  21. //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  22. //
  23. // InfoBox()
  24. //
  25. // Constructor for InfoBox class
  26. //
  27. //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  28.  
  29. InfoBox::InfoBox()
  30. {
  31.   AllocationError=0;
  32.   MessageLineStorage=NULL;
  33.   NumberOfInfoLines=0;
  34.   CloseIcon=1;
  35.   TitleOfInfoBox=NULL;
  36. }
  37.  
  38. //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  39. //
  40. // ~InfoBox()
  41. //
  42. // Destructor for InfoBox class
  43. //
  44. //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  45.  
  46. InfoBox::~InfoBox()
  47. {
  48.   if (MessageLineStorage)
  49.     free(MessageLineStorage);
  50. }
  51.  
  52. //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  53. //
  54. // Title()
  55. //
  56. // Define a title
  57. //
  58. //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  59.  
  60. void InfoBox::Title(char *Title)
  61. {
  62.   TitleOfInfoBox=Title;
  63. }
  64.  
  65. //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  66. //
  67. // NoCloseIcon()
  68. //
  69. // Shut off close icon
  70. //
  71. //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  72.  
  73. void InfoBox::NoCloseIcon()
  74. {
  75.   CloseIcon=0;
  76. }
  77.  
  78. //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  79. //
  80. // operator+
  81. //
  82. // Define a info box message line
  83. //
  84. //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  85.  
  86. InfoBox& InfoBox::operator +(char *MessageLine)
  87. {
  88.   if (!AllocationError)
  89.   {
  90.     NumberOfInfoLines++;
  91.  
  92.     if (!(MessageLineStorage=(char **)realloc(MessageLineStorage,sizeof(char *)*NumberOfInfoLines)))
  93.       AllocationError++;
  94.  
  95.     if (AllocationError)
  96.       return *this;
  97.  
  98.     MessageLineStorage[NumberOfInfoLines-1]=MessageLine;
  99.   }
  100.   return *this;
  101. }
  102.  
  103. //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  104. //
  105. // InfoDialog class
  106. //
  107. // Defines the event handler for a dialog
  108. //
  109. //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  110.  
  111. const winAcceptButton=32764;
  112.  
  113. class InfoDialog : public DialogClass
  114. {
  115. public:
  116.  
  117.   InfoDialog(int Width,int Height,char *Title,int CloseIcon) :
  118.     DialogClass(Width,Height,Title,CloseIcon) { }
  119.  
  120.   int EventHandler(int Event)
  121.   {
  122.     if ((Event==kbEsc || Event==CloseEvent || Event==OutsideEvent)
  123.        && Event::CloseIcon)
  124.       return StopEvent;
  125.     if (Event==kbCr || Event==winAcceptButton)
  126.       return StopEvent;
  127.     return CompleteEvent;
  128.   }
  129. };
  130.  
  131. //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  132. //
  133. // UseInfoBox()
  134. //
  135. // Activate the menu and pass control to InfoBox class.
  136. //
  137. //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  138.  
  139. int InfoBox::UseInfoBox()
  140. {
  141.   if (AllocationError)
  142.     return 800;
  143.  
  144.   if (!NumberOfInfoLines)
  145.     return 900;
  146.  
  147.   for (register int i=0, Widest=0;i<NumberOfInfoLines;i++)
  148.     if (strlen(MessageLineStorage[i])>Widest)
  149.       Widest=strlen(MessageLineStorage[i]);
  150.  
  151.   InfoDialog &Dialog=*new InfoDialog(Widest+4,NumberOfInfoLines+6,TitleOfInfoBox,CloseIcon);
  152.  
  153.   Dialog.Element(new DiaPushButton((Widest-8)/2,NumberOfInfoLines+2,"Continue",winAcceptButton));
  154.   Dialog.Help("Click on the Continue button or press (Return) to proceed");
  155.  
  156.   MouseHide();
  157.  
  158.   Dialog.Blaze << Colors.DiaInterior;
  159.  
  160.   for (i=0;i<NumberOfInfoLines;i++)
  161.     Dialog.Blaze ((Widest-strlen(MessageLineStorage[i])+2)/2,1+i) <<
  162.       MessageLineStorage[i];
  163.  
  164.   MouseShow();
  165.  
  166.   Dialog.UseDialog();
  167.  
  168.   delete &Dialog;
  169.  
  170.   return 0;
  171. }
  172.