home *** CD-ROM | disk | FTP | other *** search
/ Point Programming 1 / PPROG1.ISO / c / fli106c / examples / test.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  1992-01-25  |  8.4 KB  |  328 lines

  1. //
  2. // The Fusion Library Interface for DOS
  3. // Version 1.02
  4. // Copyright (C) 1990, 1991
  5. // Software Dimensions
  6. //
  7. // Dialog Development System
  8. //
  9.  
  10. #include "fliwin.h"
  11. #include "colors.h"
  12. #include "elements.h"
  13. #include "dds.h"
  14.  
  15. #include <stdio.h>
  16. #include <dos.h>
  17. #include <string.h>
  18. #include <alloc.h>
  19.  
  20. //-------------------------------------------------------------------------
  21. //
  22. // This is a generic pick list that is used with the testing system
  23. //
  24. //-------------------------------------------------------------------------
  25.  
  26. class CustomPickList : public DiaPickGeneric
  27. {
  28.   public:
  29.  
  30.     int Item;
  31.     int ItemCount;
  32.  
  33.     CustomPickList(int _X,int _Y,int _Width,int _Height)
  34.      : DiaPickGeneric(_X,_Y,_Width,_Height,Item,ItemCount)
  35.     {
  36.       Item=0;
  37.       ItemCount=18;
  38.     }
  39.  
  40.     char *GetItem(int ItemNumber)
  41.     {
  42.       static char *Items[] =
  43.         { "This","Is","A","Test","Pick","List","So","You","Can","See",
  44.           "If","It","Works","Correctly","In","Your","Own","Program!" };
  45.       return Items[ItemNumber];
  46.     }
  47. };
  48.  
  49. //-------------------------------------------------------------------------
  50. //
  51. // Dialog Tester class
  52. //
  53. //-------------------------------------------------------------------------
  54.  
  55. class TestingDialog : public DialogClass
  56. {
  57. public:
  58.   int EventHandler(int);
  59.   TestingDialog(int Width,int Height,char *Title) :
  60.     DialogClass(Width,Height,Title) { };
  61. };
  62.  
  63. int TestingDialog::EventHandler(int Event)
  64. {
  65.     if (Event==kbEsc ||
  66.             Event==kbCr ||
  67.             Event==CloseEvent ||
  68.             Event==OutsideEvent)
  69.         return StopEvent;
  70.     return CompleteEvent;
  71. }
  72.  
  73. //-------------------------------------------------------------------------
  74. //
  75. // Dialog Tester
  76. //
  77. //-------------------------------------------------------------------------
  78.  
  79. void DialogWindow::TestDialog()
  80. {
  81.   // check for elements
  82.  
  83.   TestingDialog &Dialog=*new TestingDialog(Width,Height,Title);
  84.  
  85.   MouseHide();
  86.  
  87.   //-------------------------------------------------------------------------
  88.   //
  89.   // Output Blaze Drawing Code (not Text)
  90.   //
  91.   //-------------------------------------------------------------------------
  92.  
  93.   if (NumberPieces)
  94.   {
  95.     for (int i=0;i<NumberPieces;i++)
  96.     {
  97.       PieceHandler &Piece=*Pieces[i];
  98.       if (Piece.LayOut<PieceHandler::__DUMMY__)
  99.       {
  100.         switch(Piece.LayOut)
  101.         {
  102.           case PieceHandler::Box:
  103.             Dialog.Blaze.Box(Piece.X,Piece.Y,Piece.Width,Piece.Height,
  104.               Piece.Color);
  105.             break;
  106.  
  107.           case PieceHandler::FilledBox:
  108.             Dialog.Blaze.BoxFilled(Piece.X,Piece.Y,Piece.Width,Piece.Height,
  109.               Piece.Color);
  110.             break;
  111.  
  112.           case PieceHandler::HorizontalLine:
  113.             Dialog.Blaze.CharacterRepeater(Piece.X,Piece.Y,Piece.Width,
  114.               Piece.Color,196);
  115.             break;
  116.  
  117.           case PieceHandler::VerticalLine:
  118.             Dialog.Blaze.CharacterRepeaterDown(Piece.X,Piece.Y,Piece.Height,
  119.               Piece.Color,179);
  120.             break;
  121.  
  122.           case PieceHandler::Shadow:
  123.             Dialog.Blaze.Shadow(Piece.X,Piece.Y,Piece.Width,Piece.Height);
  124.             break;
  125.  
  126.           case PieceHandler::EraseArea:
  127.             Dialog.Blaze.EraseArea(Piece.X,Piece.Y,Piece.Width,Piece.Height,
  128.               Piece.Color);
  129.             break;
  130.  
  131.           case PieceHandler::ColorizeArea:
  132.             Dialog.Blaze.BoxAttribute(Piece.X,Piece.Y,Piece.Width,
  133.               Piece.Height,Piece.Color);
  134.             break;
  135.         }
  136.       }
  137.     }
  138.   }
  139.  
  140.   //-------------------------------------------------------------------------
  141.   //
  142.   // Output Blaze Text Code
  143.   //
  144.   //-------------------------------------------------------------------------
  145.  
  146.   for (int y=0;y<Height;y++)
  147.   {
  148.     char *OutPut=Interior[y];
  149.     for (int x=0;x<Width;x++,OutPut+=2)
  150.     {
  151.       if (*OutPut)
  152.         Dialog.Blaze (x,y) << (int)*(OutPut+1) << *OutPut;
  153.     }
  154.   }
  155.  
  156.   //-------------------------------------------------------------------------
  157.   //
  158.   // Output Group Headings
  159.   //
  160.   //-------------------------------------------------------------------------
  161.  
  162.   if (NumberPieces)
  163.   {
  164.     for (int i=0;i<NumberPieces;i++)
  165.     {
  166.       PieceHandler &Piece=*Pieces[i];
  167.       if (Piece.LayOut>PieceHandler::__DUMMY2__)
  168.       {
  169.         Dialog.GroupHeading(Piece.X,Piece.Y,Piece.GroupCode,Piece.Text,0);
  170.       }
  171.     }
  172.   }
  173.  
  174.   //-------------------------------------------------------------------------
  175.   //
  176.   // Output Dialog Class Code
  177.   //
  178.   //-------------------------------------------------------------------------
  179.  
  180.   int *IntStorage=new int[NumberPieces];
  181.   long *LongStorage=new long[NumberPieces];
  182.   char **CharacterStorage=0;
  183.  
  184.   int NumInts=0;
  185.   int NumLongs=0;
  186.   int NumChars=0;
  187.  
  188.   if (NumberPieces)
  189.   {
  190.     for (int i=0;i<NumberPieces;i++)
  191.     {
  192.       PieceHandler &Piece=*Pieces[i];
  193.  
  194.       if (Piece.LayOut<PieceHandler::__DUMMY__ ||
  195.         Piece.LayOut>PieceHandler::__DUMMY2__)
  196.         continue;
  197.  
  198.       DialogElement *Save;
  199.  
  200.       // Declare variables
  201.  
  202.       switch(Piece.LayOut)
  203.       {
  204.         case PieceHandler::Character:
  205.           CharacterStorage=(char **)realloc(CharacterStorage,++NumChars*sizeof(char *));
  206.           CharacterStorage[NumChars-1]=
  207.             new char[(!Piece.MaskWidth)?(strlen(Piece.Mask)+1):(Piece.MaskWidth+1)];
  208.           *(CharacterStorage[NumChars-1]+0)=0;
  209.           break;
  210.  
  211.         case PieceHandler::Integer:
  212.         case PieceHandler::Long:
  213.         case PieceHandler::Float:
  214.         case PieceHandler::Double:
  215.         case PieceHandler::Bcd:
  216.           LongStorage[NumLongs++]=0;
  217.           break;
  218.  
  219.         case PieceHandler::Check:
  220.         case PieceHandler::HRadio:
  221.         case PieceHandler::VRadio:
  222.           IntStorage[NumInts++]=0;
  223.           break;
  224.       }
  225.  
  226.       // Declare elements
  227.  
  228.       switch(Piece.LayOut)
  229.       {
  230.         case PieceHandler::Character:
  231.           Save=new DiaChar(Piece.X,Piece.Y,Piece.Mask,CharacterStorage[NumChars-1],
  232.             Piece.ScrollWidth,Piece.MaskCharacter,Piece.MaskWidth);
  233.           break;
  234.  
  235.         case PieceHandler::Integer:
  236.         case PieceHandler::Long:
  237.         case PieceHandler::Float:
  238.         case PieceHandler::Double:
  239.         case PieceHandler::Bcd:
  240.           Save=new DiaLong(Piece.X,Piece.Y,Piece.Mask,LongStorage[NumLongs-1]);
  241.           break;
  242.  
  243.         case PieceHandler::Push:
  244.           Save=new DiaPushButton(Piece.X,Piece.Y,Piece.Text,0,0);
  245.           break;
  246.  
  247.         case PieceHandler::Check:
  248.           Save=new DiaCheckBox(Piece.X,Piece.Y,IntStorage[NumInts-1],Piece.Text,0);
  249.           break;
  250.  
  251.         case PieceHandler::HRadio:
  252.           Save=new DiaHorizRadio(Piece.X,Piece.Y,IntStorage[NumInts-1],0,0);
  253.           break;
  254.  
  255.         case PieceHandler::VRadio:
  256.           Save=new DiaVertRadio(Piece.X,Piece.Y,IntStorage[NumInts-1],0,0);
  257.           break;
  258.  
  259.         case PieceHandler::PickGeneric:
  260.           Save=new CustomPickList(Piece.X,Piece.Y,Piece.Width-3,Piece.Height);
  261.           break;
  262.       }
  263.  
  264.       // Give the dialog controller information about the element
  265.  
  266.       if (Piece.GroupCode)
  267.         Dialog.GroupElement(Piece.GroupCode,Save);
  268.       else
  269.         Dialog.Element(Save);
  270.  
  271.       // For radio buttons
  272.  
  273.       if (Piece.LayOut==PieceHandler::HRadio ||
  274.         Piece.LayOut==PieceHandler::VRadio)
  275.       {
  276.         for (int j=0;j<10;j++)
  277.         {
  278.           if (!*(Piece.Elements[j]+0))
  279.             break;
  280.           Dialog + Piece.Elements[j];
  281.         }
  282.       }
  283.  
  284.       // Place other connection pieces
  285.  
  286.       if (Piece.Prompter && *Piece.HotKey)
  287.       {
  288.         Dialog.HotKey(Piece.PromptX,Piece.PromptY,Piece.Prompter,0);
  289.       }
  290.  
  291.       if (Piece.Help && *Piece.Help)
  292.       {
  293.         Dialog.Help(Piece.Help);
  294.       }
  295.     }
  296.   }
  297.  
  298.   //-------------------------------------------------------------------------
  299.   //
  300.   // Pop up the dialog
  301.   //
  302.   //-------------------------------------------------------------------------
  303.  
  304.   Dialog.UseDialog();
  305.   delete &Dialog;
  306.  
  307.   //-------------------------------------------------------------------------
  308.   //
  309.   // Free up declared variables
  310.   //
  311.   //-------------------------------------------------------------------------
  312.  
  313.   if (NumInts)
  314.     delete IntStorage;
  315.  
  316.   if (NumLongs)
  317.     delete LongStorage;
  318.  
  319.   if (NumChars)
  320.   {
  321.     for (int i=0;i<NumChars;i++)
  322.       delete CharacterStorage[i];
  323.     delete CharacterStorage;
  324.   }
  325. }
  326.  
  327.  
  328.