home *** CD-ROM | disk | FTP | other *** search
/ Amiga Elysian Archive / AmigaElysianArchive.iso / comm / term23_2.lha / Source_Code / termSource / EmulationPanel.c < prev    next >
C/C++ Source or Header  |  1992-08-18  |  8KB  |  315 lines

  1. /*
  2. **    $Id: EmulationPanel.c,v 1.7 92/08/15 20:12:39 olsen Sta Locker: olsen $
  3. **    $Revision: 1.7 $
  4. **    $Date: 92/08/15 20:12:39 $
  5. **
  6. **    Editing panel for emulation configuration
  7. **
  8. **    Copyright © 1990-1992 by Olaf `Olsen' Barthel & MXM
  9. **        All Rights Reserved
  10. */
  11.  
  12. #include "termGlobal.h"
  13.  
  14. enum    {    GAD_SMOOTHSCROLL,GAD_WRAPCHARS,GAD_WRAPCURSOR,GAD_INSERTMODE,GAD_NEWLINE,
  15.         GAD_NUMKEYPAD,GAD_CURSORKEYS,GAD_FONTSCALE,GAD_USE,GAD_CANCEL };
  16.  
  17. STATIC STRPTR ControlMode[3] =
  18. {
  19.     NULL,
  20.     NULL,
  21.     NULL
  22. };
  23.  
  24. STATIC STRPTR ScaleFontText[3] =
  25. {
  26.     NULL,
  27.     NULL,
  28.     NULL
  29. };
  30.  
  31. STATIC struct Gadget *
  32. CreateAllGadgets(struct Configuration *Config,struct Gadget *GadgetArray[],struct Gadget **GadgetList,APTR VisualInfo,UWORD TopEdge)
  33. {
  34.     struct Gadget        *Gadget;
  35.     struct NewGadget     NewGadget;
  36.     UWORD             Counter = 0;
  37.  
  38.     SZ_SizeSetup(Screen,&UserFont,TRUE);
  39.  
  40.     LocalizeString(ControlMode,MSG_EMULATIONPANEL_STANDARD_MODE_TXT,MSG_EMULATIONPANEL_APPLICATION_MODE_TXT);
  41.     LocalizeString(ScaleFontText,MSG_EMULATIONPANEL_NORMAL_SCALE_TXT,MSG_EMULATIONPANEL_HALF_WIDTH_TXT);
  42.  
  43.     memset(&NewGadget,0,sizeof(struct NewGadget));
  44.  
  45.     if(Gadget = CreateContext(GadgetList))
  46.     {
  47.         SZ_AddLeftOffset(SZ_LeftOffsetDelta(MSG_EMULATIONPANEL_SMOOTH_SCROLLING_GAD,MSG_EMULATIONPANEL_FONT_SCALE_GAD));
  48.  
  49.         SZ_ResetMaxWidth();
  50.  
  51.         SZ_UpdateMaxWidth(CYCLE_KIND,NULL,0,ControlMode);
  52.         SZ_UpdateMaxWidth(CYCLE_KIND,NULL,0,ScaleFontText);
  53.  
  54.         SZ_SetWidth(SZ_ResetMaxWidth());
  55.  
  56.         NewGadget . ng_GadgetText    = LocaleString(MSG_EMULATIONPANEL_SMOOTH_SCROLLING_GAD);
  57.         NewGadget . ng_TextAttr        = &UserFont;
  58.         NewGadget . ng_VisualInfo    = VisualInfo;
  59.         NewGadget . ng_GadgetID        = Counter;
  60.  
  61.         GadgetArray[Counter++] = Gadget = CreateGadget(CHECKBOX_KIND,Gadget,&NewGadget,
  62.             SZ_Adjust,    TRUE,
  63.             SZ_AutoWidth,    TRUE,
  64.  
  65.             GT_Underscore,    '_',
  66.             GTCB_Checked,    !Config -> JumpScroll,
  67.         TAG_DONE);
  68.  
  69.         NewGadget . ng_GadgetText    = LocaleString(MSG_EMULATIONPANEL_WRAP_CHARACTERS_GAD);
  70.         NewGadget . ng_GadgetID        = Counter;
  71.  
  72.         GadgetArray[Counter++] = Gadget = CreateGadget(CHECKBOX_KIND,Gadget,&NewGadget,
  73.             SZ_Adjust,    TRUE,
  74.             SZ_AutoWidth,    TRUE,
  75.  
  76.             GT_Underscore,    '_',
  77.             GTCB_Checked,    Config -> AutoWrap,
  78.         TAG_DONE);
  79.  
  80.         NewGadget . ng_GadgetText    = LocaleString(MSG_EMULATIONPANEL_WRAP_CURSOR_MOVES_GAD);
  81.         NewGadget . ng_GadgetID        = Counter;
  82.  
  83.         GadgetArray[Counter++] = Gadget = CreateGadget(CHECKBOX_KIND,Gadget,&NewGadget,
  84.             SZ_Adjust,    TRUE,
  85.             SZ_AutoWidth,    TRUE,
  86.  
  87.             GT_Underscore,    '_',
  88.             GTCB_Checked,    Config -> CursorWrap,
  89.         TAG_DONE);
  90.  
  91.         NewGadget . ng_GadgetText    = LocaleString(MSG_EMULATIONPANEL_INSERT_MODE_GAD);
  92.         NewGadget . ng_GadgetID        = Counter;
  93.  
  94.         GadgetArray[Counter++] = Gadget = CreateGadget(CHECKBOX_KIND,Gadget,&NewGadget,
  95.             SZ_Adjust,    TRUE,
  96.             SZ_AutoWidth,    TRUE,
  97.  
  98.             GT_Underscore,    '_',
  99.             GTCB_Checked,    Config -> InsertChar,
  100.         TAG_DONE);
  101.  
  102.         NewGadget . ng_GadgetText    = LocaleString(MSG_EMULATIONPANEL_NEW_LINE_MODE_GAD);
  103.         NewGadget . ng_GadgetID        = Counter;
  104.  
  105.         GadgetArray[Counter++] = Gadget = CreateGadget(CHECKBOX_KIND,Gadget,&NewGadget,
  106.             SZ_Adjust,    TRUE,
  107.             SZ_AutoWidth,    TRUE,
  108.  
  109.             GT_Underscore,    '_',
  110.             GTCB_Checked,    Config -> NewLine,
  111.         TAG_DONE);
  112.  
  113.         NewGadget . ng_GadgetText    = LocaleString(MSG_EMULATIONPANEL_NUMERIC_KEYPAD_GAD);
  114.         NewGadget . ng_GadgetID        = Counter;
  115.  
  116.         GadgetArray[Counter++] = Gadget = CreateGadget(CYCLE_KIND,Gadget,&NewGadget,
  117.             SZ_Adjust,    TRUE,
  118.             SZ_AutoWidth,    TRUE,
  119.  
  120.             GT_Underscore,    '_',
  121.             GTCY_Labels,    ControlMode,
  122.             GTCY_Active,    Config -> NumApp,
  123.         TAG_DONE);
  124.  
  125.         NewGadget . ng_GadgetText    = LocaleString(MSG_EMULATIONPANEL_CURSOR_KEYS_GAD);
  126.         NewGadget . ng_GadgetID        = Counter;
  127.  
  128.         GadgetArray[Counter++] = Gadget = CreateGadget(CYCLE_KIND,Gadget,&NewGadget,
  129.             SZ_Adjust,    TRUE,
  130.             SZ_AutoWidth,    TRUE,
  131.  
  132.             GT_Underscore,    '_',
  133.             GTCY_Labels,    ControlMode,
  134.             GTCY_Active,    Config -> CursorApp,
  135.         TAG_DONE);
  136.  
  137.         NewGadget . ng_GadgetText    = LocaleString(MSG_EMULATIONPANEL_FONT_SCALE_GAD);
  138.         NewGadget . ng_GadgetID        = Counter;
  139.  
  140.         GadgetArray[Counter++] = Gadget = CreateGadget(CYCLE_KIND,Gadget,&NewGadget,
  141.             SZ_Adjust,    TRUE,
  142.             SZ_AutoWidth,    TRUE,
  143.  
  144.             GT_Underscore,    '_',
  145.             GTCY_Labels,    ScaleFontText,
  146.             GTCY_Active,    Config -> FontScale,
  147.         TAG_DONE);
  148.  
  149.         SZ_UpdateMaxWidth(BUTTON_KIND,LocaleString(MSG_GLOBAL_USE_GAD),0,NULL);
  150.         SZ_UpdateMaxWidth(BUTTON_KIND,LocaleString(MSG_GLOBAL_CANCEL_GAD),0,NULL);
  151.  
  152.         SZ_SetWidth(SZ_ResetMaxWidth());
  153.  
  154.         NewGadget . ng_GadgetText    = LocaleString(MSG_GLOBAL_USE_GAD);
  155.         NewGadget . ng_GadgetID        = Counter;
  156.  
  157.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  158.             SZ_AlignExtra,    TRUE,
  159.             SZ_Adjust,    TRUE,
  160.             SZ_AutoWidth,    TRUE,
  161.             SZ_AlignLeft,    TRUE,
  162.  
  163.             GT_Underscore,    '_',
  164.         TAG_DONE);
  165.  
  166.         NewGadget . ng_GadgetText    = LocaleString(MSG_GLOBAL_CANCEL_GAD);
  167.         NewGadget . ng_GadgetID        = Counter;
  168.  
  169.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  170.             SZ_Adjust,    TRUE,
  171.             SZ_AutoWidth,    TRUE,
  172.             SZ_AlignRight,    TRUE,
  173.  
  174.             GT_Underscore,    '_',
  175.         TAG_DONE);
  176.     }
  177.  
  178.     return(Gadget);
  179. }
  180.  
  181. VOID
  182. EmulationPanel(struct Configuration *Config)
  183. {
  184.     struct Window    *PanelWindow;
  185.     struct Gadget    *GadgetList;
  186.     struct Gadget    *GadgetArray[GAD_CANCEL + 1];
  187.  
  188.     ClearCursor();
  189.  
  190.     CopyMem(Config,&PrivateConfig,sizeof(struct Configuration));
  191.  
  192.     if(CreateAllGadgets(Config,&GadgetArray[0],&GadgetList,VisualInfo,Screen -> WBorTop + Screen -> Font -> ta_YSize + 1))
  193.     {
  194.         if(PanelWindow = OpenWindowTags(NULL,
  195.             WA_Left,    (Screen -> Width    - SZ_GetWindowWidth())    / 2,
  196.             WA_Top,        (Screen -> Height    - SZ_GetWindowHeight())    / 2,
  197.             WA_Width,    SZ_GetWindowWidth(),
  198.             WA_Height,    SZ_GetWindowHeight(),
  199.  
  200.             WA_Activate,    TRUE,
  201.             WA_DragBar,    TRUE,
  202.             WA_DepthGadget,    TRUE,
  203.             WA_RMBTrap,    TRUE,
  204.             WA_DepthGadget,    TRUE,
  205.             WA_CloseGadget,    TRUE,
  206.             WA_CustomScreen,Screen,
  207.             WA_IDCMP,    IDCMP_CLOSEWINDOW | IDCMP_VANILLAKEY | CHECKBOXIDCMP | CYCLEIDCMP,
  208.             WA_Title,    LocaleString(MSG_EMULATIONPANEL_EMULATION_PREFERENCES_TXT),
  209.         TAG_DONE))
  210.         {
  211.             struct IntuiMessage    *Massage;
  212.             ULONG             Class,Code;
  213.             struct Gadget        *Gadget;
  214.             BYTE             Terminated = FALSE;
  215.  
  216.             PushWindow(PanelWindow);
  217.  
  218.             AddGList(PanelWindow,GadgetList,(UWORD)-1,(UWORD)-1,NULL);
  219.             RefreshGList(GadgetList,PanelWindow,NULL,(UWORD)-1);
  220.             GT_RefreshWindow(PanelWindow,NULL);
  221.  
  222.             while(!Terminated)
  223.             {
  224.                 WaitPort(PanelWindow -> UserPort);
  225.  
  226.                 while(!Terminated && (Massage = (struct IntuiMessage *)GT_GetIMsg(PanelWindow -> UserPort)))
  227.                 {
  228.                     Class    = Massage -> Class;
  229.                     Code    = Massage -> Code;
  230.                     Gadget    = (struct Gadget *)Massage -> IAddress;
  231.  
  232.                     GT_ReplyIMsg(Massage);
  233.  
  234.                     if(Class == IDCMP_VANILLAKEY)
  235.                         KeySelect(GadgetArray,GAD_CANCEL,Code,PanelWindow,&Gadget,&Class,&Code);
  236.  
  237.                     if(Class == IDCMP_CLOSEWINDOW)
  238.                         Terminated = TRUE;
  239.  
  240. GadCheck:                if(Class == IDCMP_GADGETUP)
  241.                     {
  242.                         switch(Gadget -> GadgetID)
  243.                         {
  244.                             case GAD_USE:        Terminated = TRUE;
  245.  
  246.                                         Config -> JumpScroll    = !GT_CHECKED(GadgetArray[GAD_SMOOTHSCROLL]);
  247.                                         Config -> AutoWrap    = GT_CHECKED(GadgetArray[GAD_WRAPCHARS]);
  248.                                         Config -> CursorWrap    = GT_CHECKED(GadgetArray[GAD_WRAPCURSOR]);
  249.                                         Config -> InsertChar    = GT_CHECKED(GadgetArray[GAD_INSERTMODE]);
  250.                                         Config -> NewLine    = GT_CHECKED(GadgetArray[GAD_NEWLINE]);
  251.  
  252.                                         break;
  253.  
  254.                             case GAD_CANCEL:    Terminated = TRUE;
  255.  
  256.                                         CopyMem(&PrivateConfig,Config,sizeof(struct Configuration));
  257.  
  258.                                         break;
  259.  
  260.                             case GAD_NUMKEYPAD:    Config -> NumApp = Code;
  261.                                         break;
  262.  
  263.                             case GAD_CURSORKEYS:    Config -> CursorApp = Code;
  264.                                         break;
  265.  
  266.                             case GAD_FONTSCALE:    Config -> FontScale = Code;
  267.                                         break;
  268.  
  269.                             default:        break;
  270.                         }
  271.                     }
  272.                 }
  273.             }
  274.  
  275.             RemoveGList(PanelWindow,GadgetList,(UWORD)-1);
  276.  
  277.             PopWindow();
  278.  
  279.             CloseWindow(PanelWindow);
  280.         }
  281.  
  282.         FreeGadgets(GadgetList);
  283.     }
  284.  
  285.     if(PrivateConfig . FontScale == SCALE_HALF && Config -> FontScale != SCALE_HALF)
  286.     {
  287.         if(Config -> EightyColumns)
  288.         {
  289.             LastColumn    = 79;
  290.             LastPixel    = 80 * 8 - 1;
  291.         }
  292.         else
  293.         {
  294.             LastColumn    = Window -> Width / TextFontWidth - 1;
  295.             LastPixel    = (LastColumn + 1) * TextFontWidth - 1;
  296.         }
  297.     }
  298.  
  299.     if(PrivateConfig . FontScale != SCALE_HALF && Config -> FontScale == SCALE_HALF)
  300.     {
  301.         if(Config -> EightyColumns)
  302.         {
  303.             LastColumn    = 131;
  304.             LastPixel    = 80 * 8 - 1;
  305.         }
  306.         else
  307.         {
  308.             LastColumn    = Window -> Width / (TextFontWidth / 2) - 1;
  309.             LastPixel    = (LastColumn + 1) * (TextFontWidth / 2) - 1;
  310.         }
  311.     }
  312.  
  313.     SetCursor();
  314. }
  315.