home *** CD-ROM | disk | FTP | other *** search
/ The Fred Fish Collection 1.5 / ffcollection-1-5-1992-11.iso / ff_disks / 500-599 / ff589.lza / Term / TermSrc.lha / EmulationPanel.c < prev    next >
C/C++ Source or Header  |  1991-11-01  |  12KB  |  401 lines

  1. /* $Revision Header * Header built automatically - do not edit! *************
  2.  *
  3.  *    (C) Copyright 1990 by Olaf 'Olsen' Barthel & MXM
  4.  *
  5.  *    Name .....: EmulationPanel.c
  6.  *    Created ..: Thursday 21-Mar-91 20:19
  7.  *    Revision .: 0
  8.  *
  9.  *    Date            Author          Comment
  10.  *    =========       ========        ====================
  11.  *    21-Mar-91       Olsen           Created this file!
  12.  *
  13.  * $Revision Header ********************************************************/
  14.  
  15. #include "TermGlobal.h"
  16.  
  17. enum    {    GAD_SMOOTHSCROLL,GAD_WRAPCHARS,GAD_WRAPCURSOR,GAD_INSERTMODE,GAD_NEWLINE,
  18.         GAD_NUMKEYPAD,GAD_CURSORKEYS,GAD_FONTSCALE,GAD_USE,GAD_CANCEL };
  19.  
  20. #define WIDTH    367
  21. #define HEIGHT    129
  22.  
  23. STATIC STRPTR ControlMode[3] =
  24. {
  25.     (STRPTR)"Standard Mode",
  26.     (STRPTR)"Application Mode",
  27.     NULL
  28. };
  29.  
  30. STATIC STRPTR ScaleFontText[3] =
  31. {
  32.     (STRPTR)"Normal Scale",
  33.     (STRPTR)"Half Width",
  34.     NULL
  35. };
  36.  
  37. enum    {    MEN_SMOOTHSCROLL,MEN_WRAPCHARS,MEN_WRAPCURSOR,MEN_INSERTMODE,MEN_NEWLINE,
  38.         MEN_NUMKEYPAD,MEN_CURSORKEYS,MEN_FONTSCALE,MEN_USE,MEN_CANCEL,MEN_QUITPANEL };
  39.  
  40. STATIC struct NewMenu EmulationMenu[] =
  41. {
  42.     { NM_TITLE, "Project",             0 , 0, 0, (APTR)0},
  43.     {  NM_ITEM, "Smooth Scrolling",        "S", 0, 0, (APTR)MEN_SMOOTHSCROLL},
  44.     {  NM_ITEM, "Wrap Characters",        "W", 0, 0, (APTR)MEN_WRAPCHARS},
  45.     {  NM_ITEM, "Wrap Cursor Movements",    "M", 0, 0, (APTR)MEN_WRAPCURSOR},
  46.     {  NM_ITEM, "Insert Mode",        "I", 0, 0, (APTR)MEN_INSERTMODE},
  47.     {  NM_ITEM, "New-Line Mode",        "L", 0, 0, (APTR)MEN_NEWLINE},
  48.     {  NM_ITEM, NM_BARLABEL,         0 , 0, 0, (APTR)0},
  49.     {  NM_ITEM, "Numeric Keypad Mode",    "N", 0, 0, (APTR)MEN_NUMKEYPAD},
  50.     {  NM_ITEM, "Cursor Keys Mode",        "K", 0, 0, (APTR)MEN_CURSORKEYS},
  51.     {  NM_ITEM, "Font Scale",        "F", 0, 0, (APTR)MEN_FONTSCALE},
  52.     {  NM_ITEM, NM_BARLABEL,         0 , 0, 0, (APTR)0},
  53.     {  NM_ITEM, "Use",            "U", 0, 0, (APTR)MEN_USE},
  54.     {  NM_ITEM, "Cancel",            "C", 0, 0, (APTR)MEN_CANCEL},
  55.     {  NM_ITEM, NM_BARLABEL,         0 , 0, 0, (APTR)0},
  56.     {  NM_ITEM, "Quit",            "Q", 0, 0, (APTR)MEN_QUITPANEL},
  57.     { NM_END, 0,                 0 , 0, 0, (APTR)0}
  58. };
  59.  
  60. STATIC struct Gadget *
  61. CreateAllGadgets(struct Configuration *Config,struct Gadget *GadgetArray[],struct Gadget **GadgetList,APTR VisualInfo,UWORD TopEdge)
  62. {
  63.     struct Gadget        *Gadget;
  64.     struct NewGadget     NewGadget;
  65.     UWORD             Counter = 0;
  66.  
  67.     memset(&NewGadget,0,sizeof(struct NewGadget));
  68.  
  69.     if(Gadget = CreateContext(GadgetList))
  70.     {
  71.         NewGadget . ng_Width        = 26;
  72.         NewGadget . ng_Height        = 11;
  73.         NewGadget . ng_GadgetText    = "_Smooth Scrolling";
  74.         NewGadget . ng_TextAttr        = &DefaultFont;
  75.         NewGadget . ng_VisualInfo    = VisualInfo;
  76.         NewGadget . ng_GadgetID        = Counter;
  77.         NewGadget . ng_LeftEdge        = (strlen(NewGadget . ng_GadgetText) + 2) * 8 + 1;
  78.         NewGadget . ng_TopEdge        = 1 + TopEdge;
  79.  
  80.         GadgetArray[Counter++] = Gadget = CreateGadget(CHECKBOX_KIND,Gadget,&NewGadget,
  81.             GT_Underscore,    '_',
  82.             GTCB_Checked,    Config -> JumpScroll ^ TRUE,
  83.         TAG_DONE);
  84.  
  85.         NewGadget . ng_GadgetText    = "_Wrap Characters";
  86.         NewGadget . ng_GadgetID        = Counter;
  87.         NewGadget . ng_TopEdge        = NewGadget . ng_TopEdge + NewGadget . ng_Height + 1;
  88.  
  89.         GadgetArray[Counter++] = Gadget = CreateGadget(CHECKBOX_KIND,Gadget,&NewGadget,
  90.             GT_Underscore,    '_',
  91.             GTCB_Checked,    Config -> AutoWrap,
  92.         TAG_DONE);
  93.  
  94.         NewGadget . ng_GadgetText    = "Wrap Cursor _Moves";
  95.         NewGadget . ng_GadgetID        = Counter;
  96.         NewGadget . ng_TopEdge        = NewGadget . ng_TopEdge + NewGadget . ng_Height + 1;
  97.  
  98.         GadgetArray[Counter++] = Gadget = CreateGadget(CHECKBOX_KIND,Gadget,&NewGadget,
  99.             GT_Underscore,    '_',
  100.             GTCB_Checked,    Config -> CursorWrap,
  101.         TAG_DONE);
  102.  
  103.         NewGadget . ng_GadgetText    = "_Insert Mode";
  104.         NewGadget . ng_GadgetID        = Counter;
  105.         NewGadget . ng_TopEdge        = NewGadget . ng_TopEdge + NewGadget . ng_Height + 1;
  106.  
  107.         GadgetArray[Counter++] = Gadget = CreateGadget(CHECKBOX_KIND,Gadget,&NewGadget,
  108.             GT_Underscore,    '_',
  109.             GTCB_Checked,    Config -> InsertChar,
  110.         TAG_DONE);
  111.  
  112.         NewGadget . ng_GadgetText    = "New-_Line Mode";
  113.         NewGadget . ng_GadgetID        = Counter;
  114.         NewGadget . ng_TopEdge        = NewGadget . ng_TopEdge + NewGadget . ng_Height + 1;
  115.  
  116.         GadgetArray[Counter++] = Gadget = CreateGadget(CHECKBOX_KIND,Gadget,&NewGadget,
  117.             GT_Underscore,    '_',
  118.             GTCB_Checked,    Config -> NewLine,
  119.         TAG_DONE);
  120.  
  121.         NewGadget . ng_GadgetText    = "_Numeric Keypad";
  122.         NewGadget . ng_GadgetID        = Counter;
  123.         NewGadget . ng_TopEdge        = NewGadget . ng_TopEdge + NewGadget . ng_Height + 1;
  124.         NewGadget . ng_Width        = 204;
  125.         NewGadget . ng_Height        = 12;
  126.  
  127.         GadgetArray[Counter++] = Gadget = CreateGadget(CYCLE_KIND,Gadget,&NewGadget,
  128.             GT_Underscore,    '_',
  129.             GTCY_Labels,    ControlMode,
  130.             GTCY_Active,    Config -> NumApp,
  131.         TAG_DONE);
  132.  
  133.         NewGadget . ng_GadgetText    = "Cursor _Keys";
  134.         NewGadget . ng_GadgetID        = Counter;
  135.         NewGadget . ng_TopEdge        = NewGadget . ng_TopEdge + NewGadget . ng_Height + 1;
  136.  
  137.         GadgetArray[Counter++] = Gadget = CreateGadget(CYCLE_KIND,Gadget,&NewGadget,
  138.             GT_Underscore,    '_',
  139.             GTCY_Labels,    ControlMode,
  140.             GTCY_Active,    Config -> CursorApp,
  141.         TAG_DONE);
  142.  
  143.         NewGadget . ng_GadgetText    = "_Font Scale";
  144.         NewGadget . ng_GadgetID        = Counter;
  145.         NewGadget . ng_TopEdge        = NewGadget . ng_TopEdge + NewGadget . ng_Height + 1;
  146.  
  147.         GadgetArray[Counter++] = Gadget = CreateGadget(CYCLE_KIND,Gadget,&NewGadget,
  148.             GT_Underscore,    '_',
  149.             GTCY_Labels,    ScaleFontText,
  150.             GTCY_Active,    Config -> FontScale,
  151.         TAG_DONE);
  152.  
  153.         NewGadget . ng_Width        = 52;
  154.         NewGadget . ng_Height        = 12;
  155.         NewGadget . ng_GadgetText    = "_Use";
  156.         NewGadget . ng_GadgetID        = Counter;
  157.         NewGadget . ng_Flags        = 0;
  158.         NewGadget . ng_LeftEdge        = 10;
  159.         NewGadget . ng_TopEdge        = HEIGHT - 3 - NewGadget . ng_Height;
  160.  
  161.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  162.             GT_Underscore,    '_',
  163.         TAG_DONE);
  164.  
  165.         NewGadget . ng_GadgetText    = "_Cancel";
  166.         NewGadget . ng_GadgetID        = Counter;
  167.         NewGadget . ng_LeftEdge        = WIDTH - 10 - NewGadget . ng_Width;
  168.  
  169.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  170.             GT_Underscore,    '_',
  171.         TAG_DONE);
  172.     }
  173.  
  174.     return(Gadget);
  175. }
  176.  
  177. VOID
  178. EmulationPanel(struct Configuration *Config)
  179. {
  180.     struct Window    *PanelWindow;
  181.     struct Menu    *PanelMenu;
  182.     struct Gadget    *GadgetList;
  183.     struct Gadget    *GadgetArray[GAD_CANCEL + 1];
  184.  
  185.     ClearCursor();
  186.  
  187.     CopyMem(Config,&PrivateConfig,sizeof(struct Configuration));
  188.  
  189.     if(CreateAllGadgets(Config,&GadgetArray[0],&GadgetList,VisualInfo,Screen -> WBorTop + Screen -> Font -> ta_YSize + 1))
  190.     {
  191.         if(PanelMenu = CreateMenus(EmulationMenu,
  192.             GTMN_FrontPen, 0,
  193.         TAG_DONE))
  194.         {
  195.             if(LayoutMenus(PanelMenu,VisualInfo,
  196.                 GTMN_TextAttr,&DefaultFont,
  197.             TAG_DONE))
  198.             {
  199.                 if(PanelWindow = OpenWindowTags(NULL,
  200.                     WA_Left,    (Screen -> Width - WIDTH) >> 1,
  201.                     WA_Top,        (Screen -> Height - HEIGHT) >> 1,
  202.                     WA_Width,    WIDTH,
  203.                     WA_Height,    HEIGHT,
  204.                     WA_Activate,    TRUE,
  205.                     WA_DragBar,    TRUE,
  206.                     WA_DepthGadget,    TRUE,
  207.                     WA_RMBTrap,    TRUE,
  208.                     WA_DepthGadget,    TRUE,
  209.                     WA_CloseGadget,    TRUE,
  210.                     WA_CustomScreen,Screen,
  211.                     WA_IDCMP,    IDCMP_GADGETDOWN | IDCMP_ACTIVEWINDOW | IDCMP_CLOSEWINDOW | SLIDERIDCMP | CHECKBOXIDCMP | LISTVIEWIDCMP | IDCMP_MENUPICK | IDCMP_RAWKEY,
  212.                     WA_Title,    "Emulation Preferences",
  213.                 TAG_DONE))
  214.                 {
  215.                     struct IntuiMessage    *Massage;
  216.                     ULONG             Class,Code;
  217.                     struct Gadget        *Gadget;
  218.                     BYTE             Terminated = FALSE;
  219.  
  220.                     PushWindow(PanelWindow);
  221.  
  222.                     AddGList(PanelWindow,GadgetList,(UWORD)-1,(UWORD)-1,NULL);
  223.                     RefreshGList(GadgetList,PanelWindow,NULL,(UWORD)-1);
  224.                     GT_RefreshWindow(PanelWindow,NULL);
  225.  
  226.                     SetMenuStrip(PanelWindow,PanelMenu);
  227.  
  228.                     PanelWindow -> Flags &= ~WFLG_RMBTRAP;
  229.  
  230.                     while(!Terminated)
  231.                     {
  232.                         WaitPort(PanelWindow -> UserPort);
  233.  
  234.                         while(!Terminated && (Massage = (struct IntuiMessage *)GT_GetIMsg(PanelWindow -> UserPort)))
  235.                         {
  236.                             Class    = Massage -> Class;
  237.                             Code    = Massage -> Code;
  238.                             Gadget    = (struct Gadget *)Massage -> IAddress;
  239.  
  240.                             GT_ReplyIMsg(Massage);
  241.  
  242.                             if(Class == IDCMP_MENUPICK)
  243.                             {
  244.                                 struct MenuItem *MenuItem;
  245.  
  246.                                 while(Code != MENUNULL)
  247.                                 {
  248.                                     MenuItem = ItemAddress(PanelMenu,Code);
  249.  
  250.                                     switch((ULONG)MENU_USERDATA(MenuItem))
  251.                                     {
  252.                                         case MEN_QUITPANEL:    Class = IDCMP_CLOSEWINDOW;
  253.                                                     break;
  254.  
  255.                                         case MEN_USE:        Class = IDCMP_GADGETUP;
  256.                                                     Gadget = GadgetArray[GAD_USE];
  257.                                                     break;
  258.  
  259.                                         case MEN_CANCEL:    Class = IDCMP_GADGETUP;
  260.                                                     Gadget = GadgetArray[GAD_CANCEL];
  261.                                                     break;
  262.  
  263.                                         case MEN_SMOOTHSCROLL:    GT_SetGadgetAttrs(GadgetArray[GAD_SMOOTHSCROLL],PanelWindow,NULL,
  264.                                                         GTCB_Checked,GadgetArray[GAD_SMOOTHSCROLL] -> Flags & GFLG_SELECTED ? FALSE : TRUE,
  265.                                                     TAG_DONE);
  266.  
  267.                                                     break;
  268.  
  269.                                         case MEN_WRAPCHARS:    GT_SetGadgetAttrs(GadgetArray[GAD_WRAPCHARS],PanelWindow,NULL,
  270.                                                         GTCB_Checked,GadgetArray[GAD_WRAPCHARS] -> Flags & GFLG_SELECTED ? FALSE : TRUE,
  271.                                                     TAG_DONE);
  272.  
  273.                                                     break;
  274.  
  275.                                         case MEN_WRAPCURSOR:    GT_SetGadgetAttrs(GadgetArray[GAD_WRAPCURSOR],PanelWindow,NULL,
  276.                                                         GTCB_Checked,GadgetArray[GAD_WRAPCURSOR] -> Flags & GFLG_SELECTED ? FALSE : TRUE,
  277.                                                     TAG_DONE);
  278.  
  279.                                                     break;
  280.  
  281.                                         case MEN_NEWLINE:    GT_SetGadgetAttrs(GadgetArray[GAD_NEWLINE],PanelWindow,NULL,
  282.                                                         GTCB_Checked,GadgetArray[GAD_NEWLINE] -> Flags & GFLG_SELECTED ? FALSE : TRUE,
  283.                                                     TAG_DONE);
  284.  
  285.                                                     break;
  286.  
  287.                                         case MEN_INSERTMODE:    GT_SetGadgetAttrs(GadgetArray[GAD_INSERTMODE],PanelWindow,NULL,
  288.                                                         GTCB_Checked,GadgetArray[GAD_INSERTMODE] -> Flags & GFLG_SELECTED ? FALSE : TRUE,
  289.                                                     TAG_DONE);
  290.  
  291.                                                     break;
  292.  
  293.                                         case MEN_NUMKEYPAD:    Config -> NumApp ^= TRUE;
  294.  
  295.                                                     GT_SetGadgetAttrs(GadgetArray[GAD_NUMKEYPAD],PanelWindow,NULL,
  296.                                                         GTCY_Active,Config -> NumApp,
  297.                                                     TAG_DONE);
  298.  
  299.                                                     break;
  300.  
  301.                                         case MEN_CURSORKEYS:    Config -> CursorApp ^= TRUE;
  302.  
  303.                                                     GT_SetGadgetAttrs(GadgetArray[GAD_CURSORKEYS],PanelWindow,NULL,
  304.                                                         GTCY_Active,Config -> CursorApp,
  305.                                                     TAG_DONE);
  306.  
  307.                                                     break;
  308.  
  309.                                         case MEN_FONTSCALE:    if(Config -> FontScale == SCALE_HALF)
  310.                                                         Config -> FontScale = SCALE_NORMAL;
  311.                                                     else
  312.                                                         Config -> FontScale++;
  313.  
  314.                                                     GT_SetGadgetAttrs(GadgetArray[GAD_FONTSCALE],PanelWindow,NULL,
  315.                                                         GTCY_Active,Config -> FontScale,
  316.                                                     TAG_DONE);
  317.  
  318.                                                     break;
  319.  
  320.                                         default:        break;
  321.                                     }
  322.  
  323.                                     Code = MenuItem -> NextSelect;
  324.                                 }
  325.                             }
  326.  
  327.                             if(Class == IDCMP_CLOSEWINDOW)
  328.                                 Terminated = TRUE;
  329.  
  330. GadCheck:                        if(Class == IDCMP_GADGETUP)
  331.                             {
  332.                                 switch(Gadget -> GadgetID)
  333.                                 {
  334.                                     case GAD_USE:        Terminated = TRUE;
  335.  
  336.                                                 Config -> JumpScroll = (GadgetArray[GAD_SMOOTHSCROLL] -> Flags & GFLG_SELECTED) ? FALSE : TRUE;
  337.                                                 Config -> AutoWrap = GadgetArray[GAD_WRAPCHARS] -> Flags & GFLG_SELECTED;
  338.                                                 Config -> CursorWrap = GadgetArray[GAD_WRAPCURSOR] -> Flags & GFLG_SELECTED;
  339.                                                 Config -> InsertChar = GadgetArray[GAD_INSERTMODE] -> Flags & GFLG_SELECTED;
  340.                                                 Config -> NewLine = GadgetArray[GAD_NEWLINE] -> Flags & GFLG_SELECTED;
  341.  
  342.                                                 break;
  343.  
  344.                                     case GAD_CANCEL:    Terminated = TRUE;
  345.  
  346.                                                 CopyMem(&PrivateConfig,Config,sizeof(struct Configuration));
  347.  
  348.                                                 break;
  349.  
  350.                                     case GAD_NUMKEYPAD:    Config -> NumApp = Code;
  351.                                                 break;
  352.  
  353.                                     case GAD_CURSORKEYS:    Config -> CursorApp = Code;
  354.                                                 break;
  355.  
  356.                                     case GAD_FONTSCALE:    Config -> FontScale = Code;
  357.                                                 break;
  358.  
  359.                                     default:        break;
  360.                                 }
  361.                             }
  362.                         }
  363.                     }
  364.  
  365.                     PanelWindow -> Flags |= WFLG_RMBTRAP;
  366.  
  367.                     ClearMenuStrip(PanelWindow);
  368.  
  369.                     RemoveGList(PanelWindow,GadgetList,(UWORD)-1);
  370.  
  371.                     PopWindow();
  372.  
  373.                     CloseWindow(PanelWindow);
  374.                 }
  375.             }
  376.  
  377.             FreeMenus(PanelMenu);
  378.         }
  379.  
  380.         FreeGadgets(GadgetList);
  381.     }
  382.  
  383.     if(PrivateConfig . FontScale == SCALE_HALF && Config -> FontScale != SCALE_HALF)
  384.     {
  385.         if(Config -> EightyColumns)
  386.             LastColumn = 79;
  387.         else
  388.             LastColumn = (Window -> Width >> 3) - 1;
  389.     }
  390.  
  391.     if(PrivateConfig . FontScale != SCALE_HALF && Config -> FontScale == SCALE_HALF)
  392.     {
  393.         if(Config -> EightyColumns)
  394.             LastColumn = 131;
  395.         else
  396.             LastColumn = (Window -> Width >> 2) - 1;
  397.     }
  398.  
  399.     SetCursor();
  400. }
  401.