home *** CD-ROM | disk | FTP | other *** search
/ Point Programming 1 / PPROG1.ISO / c / fli106c / examples / element.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  1992-01-25  |  11.2 KB  |  464 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 "elements.h"
  12. #include "mask.h"
  13. #include "dds.h"
  14. #include "colors.h"
  15.  
  16. #include <alloc.h>
  17. #include <string.h>
  18.  
  19. //-------------------------------------------------------------------------
  20. //
  21. // This places an element on the dialog
  22. //
  23. //-------------------------------------------------------------------------
  24.  
  25. void DialogWindow::PlaceElement(int Object)
  26. {
  27.   MaskDialog *Mask=0;
  28.   CheckDialog *CheckMask=0;
  29.   PushDialog *PushMask=0;
  30.   GroupDialog *GroupMask=0;
  31.   RadioDialog *RadioMask=0;
  32.   PickDialog *PickMask=0;
  33.  
  34.     Pieces=(PieceHandler **)realloc(Pieces,++NumberPieces*sizeof(char *));
  35.  
  36.     switch (Object)
  37.     {
  38.         case PieceHandler::Character:
  39.       Mask=new MaskDialog();
  40.       Mask->CharacterActive=1;
  41.       if (Mask->GetMask())
  42.       {
  43.         Pieces[NumberPieces-1]=new Character(&Blaze,CursorX,CursorY,strlen(Mask->ElementMask),1,Colors.CharNormal);
  44.         break;
  45.       }
  46.       delete Mask;
  47.       NumberPieces--;
  48.             return;
  49.  
  50.         case PieceHandler::Integer:
  51.       Mask=new MaskDialog();
  52.       if (Mask->GetMask())
  53.       {
  54.         Pieces[NumberPieces-1]=new Integer(&Blaze,CursorX,CursorY,strlen(Mask->ElementMask),1,Colors.NumNormal);
  55.         break;
  56.       }
  57.       delete Mask;
  58.       NumberPieces--;
  59.             return;
  60.  
  61.         case PieceHandler::Long:
  62.       Mask=new MaskDialog();
  63.       if (Mask->GetMask())
  64.       {
  65.         Pieces[NumberPieces-1]=new Long(&Blaze,CursorX,CursorY,strlen(Mask->ElementMask),1,Colors.NumNormal);
  66.         break;
  67.       }
  68.       delete Mask;
  69.       NumberPieces--;
  70.             return;
  71.  
  72.         case PieceHandler::Float:
  73.       Mask=new MaskDialog();
  74.       if (Mask->GetMask())
  75.       {
  76.         Pieces[NumberPieces-1]=new Float(&Blaze,CursorX,CursorY,strlen(Mask->ElementMask),1,Colors.NumNormal);
  77.         break;
  78.       }
  79.       delete Mask;
  80.       NumberPieces--;
  81.             return;
  82.  
  83.         case PieceHandler::Double:
  84.       Mask=new MaskDialog();
  85.       if (Mask->GetMask())
  86.       {
  87.         Pieces[NumberPieces-1]=new Double(&Blaze,CursorX,CursorY,strlen(Mask->ElementMask),1,Colors.NumNormal);
  88.         break;
  89.       }
  90.       delete Mask;
  91.       NumberPieces--;
  92.             return;
  93.  
  94.         case PieceHandler::Bcd:
  95.       Mask=new MaskDialog();
  96.       if (Mask->GetMask())
  97.       {
  98.         Pieces[NumberPieces-1]=new Bcd(&Blaze,CursorX,CursorY,strlen(Mask->ElementMask),1,Colors.NumNormal);
  99.         break;
  100.       }
  101.       delete Mask;
  102.       NumberPieces--;
  103.             return;
  104.  
  105.         case PieceHandler::Check:
  106.       CheckMask=new CheckDialog();
  107.       if (CheckMask->GetCheck())
  108.       {
  109.         Pieces[NumberPieces-1]=new Check(&Blaze,CursorX,CursorY,strlen(CheckMask->CheckText)+6,1,Colors.CheckText);
  110.         if (strchr(CheckMask->CheckText,'~'))
  111.           Pieces[NumberPieces-1]->Width--;
  112.         break;
  113.       }
  114.       delete CheckMask;
  115.       NumberPieces--;
  116.             return;
  117.  
  118.         case PieceHandler::Push:
  119.       PushMask=new PushDialog();
  120.       if (PushMask->GetPush())
  121.       {
  122.         Pieces[NumberPieces-1]=new Push(&Blaze,CursorX,CursorY,strlen(PushMask->PushText)+2,1,Colors.ButtonNormal);
  123.         if (strchr(PushMask->PushText,'~'))
  124.           Pieces[NumberPieces-1]->Width--;
  125.         break;
  126.       }
  127.       delete PushMask;
  128.       NumberPieces--;
  129.             return;
  130.  
  131.         case PieceHandler::GroupHeading:
  132.       GroupMask=new GroupDialog();
  133.       if (GroupMask->GetGroup())
  134.       {
  135.         Pieces[NumberPieces-1]=new GroupHeading(&Blaze,CursorX,CursorY,strlen(GroupMask->GroupText),1,Colors.DiaHeading);
  136.         if (strchr(GroupMask->GroupText,'~'))
  137.           Pieces[NumberPieces-1]->Width--;
  138.         break;
  139.       }
  140.       delete GroupMask;
  141.       NumberPieces--;
  142.             return;
  143.  
  144.         case PieceHandler::HRadio:
  145.       RadioMask=new RadioDialog();
  146.       RadioMask->Enabled=1;
  147.       if (RadioMask->GetRadio())
  148.       {
  149.         for (int i=0,j=1;i<10;i++)
  150.         {
  151.           if (!RadioMask->RadioButtons[i][0])
  152.             continue;
  153.           j+=(strlen(RadioMask->RadioButtons[i])+5);
  154.         }
  155.         Pieces[NumberPieces-1]=new HRadio(&Blaze,CursorX,CursorY,j,1,Colors.RadioText);
  156.         break;
  157.       }
  158.       delete RadioMask;
  159.       NumberPieces--;
  160.             return;
  161.  
  162.         case PieceHandler::VRadio:
  163.       RadioMask=new RadioDialog();
  164.       if (RadioMask->GetRadio())
  165.       {
  166.         for (int i=0,j=0,k=0;i<10;i++)
  167.         {
  168.           if (!RadioMask->RadioButtons[i][0])
  169.             continue;
  170.           k++;
  171.           if ((strlen(RadioMask->RadioButtons[i])+6)>j)
  172.             j=strlen(RadioMask->RadioButtons[i])+6;
  173.         }
  174.         Pieces[NumberPieces-1]=new VRadio(&Blaze,CursorX,CursorY,j,k,Colors.RadioText);
  175.         break;
  176.       }
  177.       delete RadioMask;
  178.       NumberPieces--;
  179.             return;
  180.  
  181.     case PieceHandler::PickGeneric:
  182.       PickMask=new PickDialog();
  183.       if (PickMask->GetPick())
  184.       {
  185.         Pieces[NumberPieces-1]=new PickGeneric(&Blaze,CursorX,CursorY,PickMask->Width+3,PickMask->Height,Colors.PickText);
  186.         break;
  187.       }
  188.       delete PickMask;
  189.       NumberPieces--;
  190.             return;
  191.     }
  192.  
  193.   PieceHandler &Piece=*Pieces[NumberPieces-1];
  194.  
  195.   if (Mask)
  196.   {
  197.  
  198.     Piece.Mask=new char[50];
  199.     strcpy(Piece.Mask,Mask->ElementMask);
  200.  
  201.     Piece.Variable=new char[50];
  202.     strcpy(Piece.Variable,Mask->VariableName);
  203.  
  204.     Piece.Prompter=new char[50];
  205.     strcpy(Piece.Prompter,Mask->Prompter);
  206.  
  207.     Piece.HotKey=new char[30];
  208.     strcpy(Piece.HotKey,Mask->HotKeyDefine);
  209.  
  210.     Piece.Help=new char[65];
  211.     strcpy(Piece.Help,Mask->HelpLine);
  212.  
  213.     Piece.DerivedClass=new char[50];
  214.     strcpy(Piece.DerivedClass,Mask->DerivedClass);
  215.  
  216.     Piece.GroupCode=Mask->GroupingCode;
  217.     Piece.HelpId=Mask->HelpScreen;
  218.     Piece.ToBeDerived=Mask->SetForLiving;
  219.  
  220.     Piece.MaskCharacter=Mask->MaskCharacter[0];
  221.     Piece.MaskWidth=Mask->MaskWidth;
  222.     Piece.ScrollWidth=Mask->ScrollWidth;
  223.  
  224.     if (Piece.ScrollWidth)
  225.       Piece.Width=Piece.ScrollWidth+2;
  226.     else if (Piece.MaskWidth)
  227.       Piece.Width=Piece.MaskWidth;
  228.     else
  229.       Piece.Width=strlen(Piece.Mask);
  230.  
  231.     delete Mask;
  232.  
  233.     if (*Piece.Prompter)
  234.       PlacePrompter(Piece);
  235.   }
  236.  
  237.   if (CheckMask)
  238.   {
  239.  
  240.     Piece.Text=new char[50];
  241.     strcpy(Piece.Text,CheckMask->CheckText);
  242.  
  243.     Piece.HotKey=new char[30];
  244.     strcpy(Piece.HotKey,CheckMask->HotKeyDefine);
  245.  
  246.     Piece.Variable=new char[50];
  247.     strcpy(Piece.Variable,CheckMask->VariableName);
  248.  
  249.     Piece.Help=new char[65];
  250.     strcpy(Piece.Help,CheckMask->HelpLine);
  251.  
  252.     Piece.DerivedClass=new char[50];
  253.     strcpy(Piece.DerivedClass,CheckMask->DerivedClass);
  254.  
  255.     Piece.GroupCode=CheckMask->GroupingCode;
  256.     Piece.HelpId=CheckMask->HelpScreen;
  257.     Piece.ToBeDerived=CheckMask->SetForLiving;
  258.  
  259.     delete CheckMask;
  260.  
  261.   }
  262.  
  263.   if (PushMask)
  264.   {
  265.  
  266.     Piece.Text=new char[50];
  267.     strcpy(Piece.Text,PushMask->PushText);
  268.  
  269.     Piece.Constant=new char[50];
  270.     strcpy(Piece.Constant,PushMask->Constant);
  271.  
  272.     Piece.HotKey=new char[30];
  273.     strcpy(Piece.HotKey,PushMask->HotKeyDefine);
  274.  
  275.     Piece.Help=new char[65];
  276.     strcpy(Piece.Help,PushMask->HelpLine);
  277.  
  278.     Piece.DerivedClass=new char[50];
  279.     strcpy(Piece.DerivedClass,PushMask->DerivedClass);
  280.  
  281.     Piece.GroupCode=PushMask->GroupingCode;
  282.     Piece.HelpId=PushMask->HelpScreen;
  283.     Piece.ToBeDerived=PushMask->SetForLiving;
  284.  
  285.     delete PushMask;
  286.  
  287.   }
  288.  
  289.   if (GroupMask)
  290.   {
  291.  
  292.     Piece.Text=new char[50];
  293.     strcpy(Piece.Text,GroupMask->GroupText);
  294.  
  295.     Piece.HotKey=new char[30];
  296.     strcpy(Piece.HotKey,GroupMask->HotKeyDefine);
  297.  
  298.     Piece.GroupCode=GroupMask->GroupingCode;
  299.  
  300.     delete GroupMask;
  301.  
  302.   }
  303.  
  304.   if (RadioMask)
  305.   {
  306.  
  307.     Piece.Variable=new char[50];
  308.     strcpy(Piece.Variable,RadioMask->VariableName);
  309.  
  310.     Piece.Prompter=new char[50];
  311.     strcpy(Piece.Prompter,RadioMask->Prompter);
  312.  
  313.     Piece.HotKey=new char[30];
  314.     strcpy(Piece.HotKey,RadioMask->HotKeyDefine);
  315.  
  316.     Piece.Help=new char[65];
  317.     strcpy(Piece.Help,RadioMask->HelpLine);
  318.  
  319.     Piece.DerivedClass=new char[50];
  320.     strcpy(Piece.DerivedClass,RadioMask->DerivedClass);
  321.  
  322.     Piece.GroupCode=RadioMask->GroupingCode;
  323.     Piece.HelpId=RadioMask->HelpScreen;
  324.     Piece.ToBeDerived=RadioMask->SetForLiving;
  325.  
  326.     Piece.Elements=new char*[10];
  327.  
  328.     for (int i=0;i<10;i++)
  329.     {
  330.       Piece.Elements[i]=new char[50];
  331.       strcpy(Piece.Elements[i],RadioMask->RadioButtons[i]);
  332.     }
  333.  
  334.     delete RadioMask;
  335.  
  336.     if (*Piece.Prompter)
  337.       PlacePrompter(Piece);
  338.  
  339.   }
  340.  
  341.   if (PickMask)
  342.   {
  343.  
  344.     Piece.Prompter=new char[50];
  345.     strcpy(Piece.Prompter,PickMask->Prompter);
  346.  
  347.     Piece.HotKey=new char[30];
  348.     strcpy(Piece.HotKey,PickMask->HotKeyDefine);
  349.  
  350.     Piece.Help=new char[65];
  351.     strcpy(Piece.Help,PickMask->HelpLine);
  352.  
  353.     Piece.DerivedClass=new char[50];
  354.     strcpy(Piece.DerivedClass,PickMask->DerivedClass);
  355.  
  356.     Piece.HelpId=PickMask->HelpScreen;
  357.     Piece.ToBeDerived=1;
  358.  
  359.     delete PickMask;
  360.  
  361.     if (*Piece.Prompter)
  362.       PlacePrompter(Piece);
  363.  
  364.   }
  365.  
  366.   RemoveTheMenus();
  367.  
  368.   VirtualizedInterior();
  369. }
  370.  
  371. //-------------------------------------------------------------------------
  372. //
  373. // This permits positioning of the prompter on the dialog
  374. //
  375. //-------------------------------------------------------------------------
  376.  
  377. void DialogWindow::PlacePrompter(PieceHandler &Piece)
  378. {
  379.   RemoveTheMenus();
  380.  
  381.   Piece.DrawFigure();
  382.  
  383.   Blaze.HelpLine(0,"Use the keyboard or mouse to place the prompter");
  384.  
  385.   MousePosition(X+Piece.PromptX+1,Y+Piece.PromptY+1);
  386.   MouseLocate();
  387.  
  388.   Event EventHandler;
  389.  
  390.   int MouseX=MouseHorizontal;
  391.   int MouseY=MouseVertical;
  392.  
  393.   for (;;)
  394.   {
  395.     switch (EventHandler.GetEvent())
  396.     {
  397.       case kbUp:
  398.         if (!Piece.PromptY)
  399.           continue;
  400.         Piece.PromptY--;
  401.         VirtualizedInterior();
  402.         break;
  403.  
  404.       case kbDown:
  405.         if (Piece.PromptY>=Blaze.WhatWinHeight()-1)
  406.           break;
  407.         Piece.PromptY++;
  408.         VirtualizedInterior();
  409.         break;
  410.  
  411.       case kbLeft:
  412.         if (!Piece.PromptX)
  413.           continue;
  414.         Piece.PromptX--;
  415.         VirtualizedInterior();
  416.         break;
  417.  
  418.       case kbRight:
  419.         if (Piece.PromptX>=Blaze.WhatWinWidth()-1)
  420.           break;
  421.         Piece.PromptX++;
  422.         VirtualizedInterior();
  423.         break;
  424.  
  425.       case MousedEvent:
  426.         if (MouseEvent&MouseMoved)
  427.         {
  428.           int NewX=MouseHorizontal-MouseX;
  429.           int NewY=MouseVertical-MouseY;
  430.           Piece.PromptX+=NewX;
  431.           Piece.PromptY+=NewY;
  432.           MouseX=MouseHorizontal;
  433.           MouseY=MouseVertical;
  434.  
  435.           if (Piece.PromptX<0)
  436.             Piece.PromptX=0;
  437.           if (Piece.PromptY<0)
  438.             Piece.PromptY=0;
  439.  
  440.           if (Piece.PromptX>Blaze.WhatWinWidth()-1)
  441.             Piece.PromptX=Blaze.WhatWinWidth()-1;
  442.           if (Piece.PromptY>Blaze.WhatWinHeight()-1)
  443.             Piece.PromptY=Blaze.WhatWinHeight()-1;
  444.  
  445.           if (MouseX!=Piece.PromptX+X+1 || MouseY!=Piece.PromptY+Y+1)
  446.           {
  447.             MousePosition(X+Piece.PromptX+1,Y+Piece.PromptY+1);
  448.             MouseLocate();
  449.             MouseX=MouseHorizontal;
  450.             MouseY=MouseVertical;
  451.           }
  452.  
  453.           VirtualizedInterior();
  454.         }
  455.         if (MouseEvent&MouseLeftButtonRelease)
  456.           return;
  457.         break;
  458.  
  459.       case kbCr:
  460.         return;
  461.     }
  462.   }
  463. }
  464.