home *** CD-ROM | disk | FTP | other *** search
/ Frozen Fish 1: Amiga / FrozenFish-Apr94.iso / bbs / alib / d8xx / d832 / term.lha / Term / term-3.1-Source.lha / EmulationPanel.c < prev    next >
C/C++ Source or Header  |  1993-02-18  |  11KB  |  377 lines

  1. /*
  2. **    EmulationPanel.c
  3. **
  4. **    Editing panel for emulation configuration
  5. **
  6. **    Copyright © 1990-1993 by Olaf `Olsen' Barthel & MXM
  7. **        All Rights Reserved
  8. */
  9.  
  10. #include "termGlobal.h"
  11.  
  12. enum    {    GAD_CURSORKEYS, GAD_NUMKEYPAD, GAD_WRAPCURSOR, GAD_WRAPCHARACTERS,
  13.         GAD_INSERTMODE, GAD_NEWLINE, GAD_FONTSCALE, GAD_SCROLLING,
  14.         GAD_DESTRUCTIVE_BACKSPACE, GAD_SWAP_BS_DEL, GAD_PRINTER_CONTROL,
  15.         GAD_ANSWERBACK, GAD_USE, GAD_CANCEL, GAD_DEFAULT };
  16.  
  17. STATIC STRPTR    ControlMode[3],
  18.         ScrollMode[3],
  19.         ScaleFontText[3];
  20.  
  21. STATIC struct Gadget *
  22. CreateAllGadgets(struct Configuration *Config,struct Gadget *GadgetArray[],struct Gadget **GadgetList,BYTE *Default)
  23. {
  24.     struct Gadget        *Gadget;
  25.     struct NewGadget     NewGadget;
  26.     UWORD             Counter = 0;
  27.  
  28.     SZ_SizeSetup(Window -> WScreen,&UserFont,TRUE);
  29.  
  30.     LocalizeString(ControlMode,MSG_EMULATIONPANEL_STANDARD_MODE_TXT,MSG_EMULATIONPANEL_APPLICATION_MODE_TXT);
  31.     LocalizeString(ScaleFontText,MSG_EMULATIONPANEL_NORMAL_SCALE_TXT,MSG_EMULATIONPANEL_HALF_WIDTH_TXT);
  32.     LocalizeString(ScrollMode,MSG_EMULATIONPANEL_JUMP_TXT,MSG_EMULATIONPANEL_SMOOTH_TXT);
  33.  
  34.     memset(&NewGadget,0,sizeof(struct NewGadget));
  35.  
  36.     if(Gadget = CreateContext(GadgetList))
  37.     {
  38.         SZ_AddLeftOffset(SZ_LeftOffsetDelta(MSG_EMULATIONPANEL_CURSOR_KEYS_GAD,MSG_EMULATIONPANEL_ANSWERBACK_MESSAGE_GAD));
  39.  
  40.         SZ_ResetMaxWidth();
  41.  
  42.         SZ_UpdateMaxWidth(CYCLE_KIND,NULL,0,ControlMode);
  43.         SZ_UpdateMaxWidth(CYCLE_KIND,NULL,0,ScrollMode);
  44.         SZ_UpdateMaxWidth(CYCLE_KIND,NULL,0,ScaleFontText);
  45.         SZ_UpdateMaxWidth(STRING_KIND,NULL,20,NULL);
  46.  
  47.         SZ_SetWidth(SZ_ResetMaxWidth());
  48.  
  49.         NewGadget . ng_GadgetText    = LocaleString(MSG_EMULATIONPANEL_CURSOR_KEYS_GAD);
  50.         NewGadget . ng_GadgetID        = Counter;
  51.  
  52.         GadgetArray[Counter++] = Gadget = CreateGadget(CYCLE_KIND,Gadget,&NewGadget,
  53.             SZ_Adjust,    TRUE,
  54.             SZ_AutoWidth,    TRUE,
  55.  
  56.             GTCY_Labels,    ControlMode,
  57.             GTCY_Active,    Config -> EmulationConfig -> CursorMode,
  58.         TAG_DONE);
  59.  
  60.         NewGadget . ng_GadgetText    = LocaleString(MSG_EMULATIONPANEL_NUMERIC_KEYPAD_GAD);
  61.         NewGadget . ng_GadgetID        = Counter;
  62.  
  63.         GadgetArray[Counter++] = Gadget = CreateGadget(CYCLE_KIND,Gadget,&NewGadget,
  64.             SZ_Adjust,    TRUE,
  65.             SZ_AutoWidth,    TRUE,
  66.  
  67.             GTCY_Labels,    ControlMode,
  68.             GTCY_Active,    Config -> EmulationConfig -> NumericMode,
  69.         TAG_DONE);
  70.  
  71.         NewGadget . ng_GadgetText    = LocaleString(MSG_EMULATIONPANEL_WRAP_CURSOR_MOVES_GAD);
  72.         NewGadget . ng_GadgetID        = Counter;
  73.  
  74.         GadgetArray[Counter++] = Gadget = CreateGadget(CHECKBOX_KIND,Gadget,&NewGadget,
  75.             SZ_Adjust,    TRUE,
  76.             SZ_AutoWidth,    TRUE,
  77.  
  78.             GTCB_Checked,    Config -> EmulationConfig -> CursorWrap,
  79.         TAG_DONE);
  80.  
  81.         NewGadget . ng_GadgetText    = LocaleString(MSG_EMULATIONPANEL_WRAP_CHARACTERS_GAD);
  82.         NewGadget . ng_GadgetID        = Counter;
  83.  
  84.         GadgetArray[Counter++] = Gadget = CreateGadget(CHECKBOX_KIND,Gadget,&NewGadget,
  85.             SZ_Adjust,    TRUE,
  86.             SZ_AutoWidth,    TRUE,
  87.  
  88.             GTCB_Checked,    Config -> EmulationConfig -> LineWrap,
  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.             GTCB_Checked,    Config -> EmulationConfig -> InsertMode,
  99.         TAG_DONE);
  100.  
  101.         NewGadget . ng_GadgetText    = LocaleString(MSG_EMULATIONPANEL_NEW_LINE_MODE_GAD);
  102.         NewGadget . ng_GadgetID        = Counter;
  103.  
  104.         GadgetArray[Counter++] = Gadget = CreateGadget(CHECKBOX_KIND,Gadget,&NewGadget,
  105.             SZ_Adjust,    TRUE,
  106.             SZ_AutoWidth,    TRUE,
  107.  
  108.             GTCB_Checked,    Config -> EmulationConfig -> NewLineMode,
  109.         TAG_DONE);
  110.  
  111.         NewGadget . ng_GadgetText    = LocaleString(MSG_EMULATIONPANEL_FONT_SCALE_GAD);
  112.         NewGadget . ng_GadgetID        = Counter;
  113.  
  114.         GadgetArray[Counter++] = Gadget = CreateGadget(CYCLE_KIND,Gadget,&NewGadget,
  115.             SZ_Adjust,    TRUE,
  116.             SZ_AutoWidth,    TRUE,
  117.  
  118.             GTCY_Labels,    ScaleFontText,
  119.             GTCY_Active,    Config -> EmulationConfig -> FontScale,
  120.         TAG_DONE);
  121.  
  122.         NewGadget . ng_GadgetText    = LocaleString(MSG_EMULATIONPANEL_SMOOTH_SCROLLING_GAD);
  123.         NewGadget . ng_GadgetID        = Counter;
  124.  
  125.         GadgetArray[Counter++] = Gadget = CreateGadget(CYCLE_KIND,Gadget,&NewGadget,
  126.             SZ_Adjust,    TRUE,
  127.             SZ_AutoWidth,    TRUE,
  128.  
  129.             GTCY_Labels,    ScrollMode,
  130.             GTCY_Active,    Config -> EmulationConfig -> ScrollMode,
  131.         TAG_DONE);
  132.  
  133.         NewGadget . ng_GadgetText    = LocaleString(MSG_EMULATIONPANEL_DESTRUCTIVE_BACKSPACE_GAD);
  134.         NewGadget . ng_GadgetID        = Counter;
  135.  
  136.         GadgetArray[Counter++] = Gadget = CreateGadget(CHECKBOX_KIND,Gadget,&NewGadget,
  137.             SZ_Adjust,    TRUE,
  138.             SZ_AutoWidth,    TRUE,
  139.  
  140.             GTCB_Checked,    Config -> EmulationConfig -> DestructiveBackspace,
  141.         TAG_DONE);
  142.  
  143.         NewGadget . ng_GadgetText    = LocaleString(MSG_EMULATIONPANEL_SWAP_BS_AND_DEL_GAD);
  144.         NewGadget . ng_GadgetID        = Counter;
  145.  
  146.         GadgetArray[Counter++] = Gadget = CreateGadget(CHECKBOX_KIND,Gadget,&NewGadget,
  147.             SZ_Adjust,    TRUE,
  148.             SZ_AutoWidth,    TRUE,
  149.  
  150.             GTCB_Checked,    Config -> EmulationConfig -> SwapBSDelete,
  151.         TAG_DONE);
  152.  
  153.         NewGadget . ng_GadgetText    = LocaleString(MSG_EMULATIONPANEL_PRINTER_CONTROL_GAD);
  154.         NewGadget . ng_GadgetID        = Counter;
  155.  
  156.         GadgetArray[Counter++] = Gadget = CreateGadget(CHECKBOX_KIND,Gadget,&NewGadget,
  157.             SZ_Adjust,    TRUE,
  158.             SZ_AutoWidth,    TRUE,
  159.  
  160.             GTCB_Checked,    Config -> EmulationConfig -> PrinterEnabled,
  161.         TAG_DONE);
  162.  
  163.         NewGadget . ng_GadgetText    = LocaleString(MSG_EMULATIONPANEL_ANSWERBACK_MESSAGE_GAD);
  164.         NewGadget . ng_GadgetID        = Counter;
  165.  
  166.         GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
  167.             SZ_Adjust,    TRUE,
  168.             SZ_AutoWidth,    TRUE,
  169.  
  170.             GTST_MaxChars,    79,
  171.             GTST_String,    Config -> EmulationConfig -> AnswerBack,
  172.         TAG_DONE);
  173.  
  174.         SZ_UpdateMaxWidth(BUTTON_KIND,LocaleString(MSG_GLOBAL_USE_GAD),0,NULL);
  175.         SZ_UpdateMaxWidth(BUTTON_KIND,LocaleString(MSG_GLOBAL_CANCEL_GAD),0,NULL);
  176.         SZ_UpdateMaxWidth(BUTTON_KIND,LocaleString(MSG_GLOBAL_DEFAULT_GAD),0,NULL);
  177.  
  178.         SZ_SetWidth(SZ_ResetMaxWidth());
  179.  
  180.         NewGadget . ng_GadgetText    = LocaleString(MSG_GLOBAL_USE_GAD);
  181.         NewGadget . ng_GadgetID        = Counter;
  182.         NewGadget . ng_Flags        = 0;
  183.  
  184.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  185.             SZ_AlignExtra,    TRUE,
  186.             SZ_Adjust,    TRUE,
  187.             SZ_AutoWidth,    TRUE,
  188.             SZ_AlignLeft,    TRUE,
  189.         TAG_DONE);
  190.  
  191.         NewGadget . ng_GadgetText    = LocaleString(MSG_GLOBAL_CANCEL_GAD);
  192.         NewGadget . ng_GadgetID        = Counter;
  193.  
  194.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  195.             SZ_Adjust,    TRUE,
  196.             SZ_AutoWidth,    TRUE,
  197.             SZ_AlignRight,    TRUE,
  198.         TAG_DONE);
  199.  
  200.         if(Default)
  201.         {
  202.             NewGadget . ng_GadgetText    = LocaleString(MSG_GLOBAL_DEFAULT_GAD);
  203.             NewGadget . ng_GadgetID        = Counter;
  204.  
  205.             GadgetArray[Counter] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  206.                 SZ_Adjust,    TRUE,
  207.                 SZ_AutoWidth,    TRUE,
  208.                 SZ_AlignCentre,    TRUE,
  209.             TAG_DONE);
  210.         }
  211.     }
  212.  
  213.     return(Gadget);
  214. }
  215.  
  216. BYTE
  217. EmulationPanel(struct Configuration *Config,BYTE *Default)
  218. {
  219.     struct Window    *PanelWindow;
  220.     struct Gadget    *GadgetList;
  221.     struct Gadget    *GadgetArray[GAD_DEFAULT + 1];
  222.     BYTE         Changed = FALSE;
  223.  
  224.     SaveConfig(Config,PrivateConfig);
  225.  
  226.     if(CreateAllGadgets(Config,GadgetArray,&GadgetList,Default))
  227.     {
  228.         if(PanelWindow = OpenWindowTags(NULL,
  229.             WA_Left,    GetScreenLeft(Window) + (GetScreenWidth(Window) - SZ_GetWindowWidth()) / 2,
  230.             WA_Top,        GetScreenTop(Window) + (GetScreenHeight(Window) - SZ_GetWindowHeight())    / 2,
  231.             WA_Width,    SZ_GetWindowWidth(),
  232.             WA_Height,    SZ_GetWindowHeight(),
  233.  
  234.             WA_Activate,    TRUE,
  235.             WA_DragBar,    TRUE,
  236.             WA_DepthGadget,    TRUE,
  237.             WA_RMBTrap,    TRUE,
  238.             WA_DepthGadget,    TRUE,
  239.             WA_CloseGadget,    TRUE,
  240.             WA_CustomScreen,Window -> WScreen,
  241.             WA_IDCMP,    IDCMP_CLOSEWINDOW | IDCMP_GADGETDOWN | IDCMP_ACTIVEWINDOW | IDCMP_VANILLAKEY | IDCMP_RAWKEY | STRINGIDCMP | BUTTONIDCMP | CHECKBOXIDCMP | CYCLEIDCMP,
  242.             WA_Title,    LocaleString(MSG_EMULATIONPANEL_EMULATION_PREFERENCES_TXT),
  243.         TAG_DONE))
  244.         {
  245.             struct IntuiMessage    *Massage;
  246.             ULONG             IClass,Code;
  247.             struct Gadget        *Gadget;
  248.             BYTE             Terminated = FALSE;
  249.  
  250.             GuideContext(CONTEXT_EMULATION);
  251.  
  252.             PushWindow(PanelWindow);
  253.  
  254.             AddGList(PanelWindow,GadgetList,(UWORD)-1,(UWORD)-1,NULL);
  255.             RefreshGList(GadgetList,PanelWindow,NULL,(UWORD)-1);
  256.             GT_RefreshWindow(PanelWindow,NULL);
  257.  
  258.             ActiveGadget = NULL;
  259.  
  260.             SetSignal(0,SIG_BREAK);
  261.  
  262.             while(!Terminated)
  263.             {
  264.                 if(Wait(PORTMASK(PanelWindow -> UserPort) | SIG_BREAK) & SIG_BREAK)
  265.                 {
  266.                     SaveConfig(PrivateConfig,Config);
  267.  
  268.                     break;
  269.                 }
  270.  
  271.                 while(!Terminated && (Massage = (struct IntuiMessage *)GT_GetIMsg(PanelWindow -> UserPort)))
  272.                 {
  273.                     IClass    = Massage -> Class;
  274.                     Code    = Massage -> Code;
  275.                     Gadget    = (struct Gadget *)Massage -> IAddress;
  276.  
  277.                     GT_ReplyIMsg(Massage);
  278.  
  279.                     KeySelect(GadgetArray,GAD_CANCEL,Code,PanelWindow,&Gadget,&IClass,&Code);
  280.  
  281.                     if(IClass == IDCMP_GADGETDOWN)
  282.                     {
  283.                         if((Gadget -> GadgetType & GTYP_GTYPEMASK) == GTYP_STRGADGET)
  284.                             ActiveGadget = Gadget;
  285.                     }
  286.  
  287.                     if(IClass == IDCMP_ACTIVEWINDOW && ActiveGadget)
  288.                         ActivateGadget(ActiveGadget,PanelWindow,NULL);
  289.  
  290.                     if(IClass == IDCMP_CLOSEWINDOW)
  291.                     {
  292.                         SaveConfig(PrivateConfig,Config);
  293.  
  294.                         Terminated = TRUE;
  295.                     }
  296.  
  297.                     if(IClass == IDCMP_GADGETUP)
  298.                     {
  299.                         switch(Gadget -> GadgetID)
  300.                         {
  301.                             case GAD_USE:
  302.  
  303.                                 Terminated = TRUE;
  304.  
  305.                                 Config -> EmulationConfig -> CursorWrap            = SZ_GetChecked(GadgetArray[GAD_WRAPCURSOR]);
  306.                                 Config -> EmulationConfig -> LineWrap            = SZ_GetChecked(GadgetArray[GAD_WRAPCHARACTERS]);
  307.  
  308.                                 Config -> EmulationConfig -> InsertMode            = SZ_GetChecked(GadgetArray[GAD_INSERTMODE]);
  309.                                 Config -> EmulationConfig -> NewLineMode        = SZ_GetChecked(GadgetArray[GAD_NEWLINE]);
  310.  
  311.                                 Config -> EmulationConfig -> DestructiveBackspace    = SZ_GetChecked(GadgetArray[GAD_DESTRUCTIVE_BACKSPACE]);
  312.                                 Config -> EmulationConfig -> SwapBSDelete        = SZ_GetChecked(GadgetArray[GAD_SWAP_BS_DEL]);
  313.                                 Config -> EmulationConfig -> PrinterEnabled        = SZ_GetChecked(GadgetArray[GAD_PRINTER_CONTROL]);
  314.  
  315.                                 strcpy(Config -> EmulationConfig -> AnswerBack,SZ_GetString(GadgetArray[GAD_ANSWERBACK]));
  316.  
  317.                                 Changed = TRUE;
  318.  
  319.                                 break;
  320.  
  321.                             case GAD_CANCEL:
  322.  
  323.                                 Terminated = TRUE;
  324.  
  325.                                 SaveConfig(PrivateConfig,Config);
  326.  
  327.                                 break;
  328.  
  329.                             case GAD_DEFAULT:
  330.  
  331.                                 *Default    = TRUE;
  332.  
  333.                                 Terminated    = TRUE;
  334.  
  335.                                 break;
  336.  
  337.                             case GAD_CURSORKEYS:
  338.  
  339.                                 Config -> EmulationConfig -> CursorMode = Code;
  340.                                 break;
  341.  
  342.                             case GAD_NUMKEYPAD:
  343.  
  344.                                 Config -> EmulationConfig -> NumericMode = Code;
  345.                                 break;
  346.  
  347.                             case GAD_FONTSCALE:
  348.  
  349.                                 Config -> EmulationConfig -> FontScale = Code;
  350.                                 break;
  351.  
  352.                             case GAD_SCROLLING:
  353.  
  354.                                 Config -> EmulationConfig -> ScrollMode = Code;
  355.                                 break;
  356.                         }
  357.                     }
  358.                 }
  359.             }
  360.  
  361.             RemoveGList(PanelWindow,GadgetList,(UWORD)-1);
  362.  
  363.             PopWindow();
  364.  
  365.             CloseWindow(PanelWindow);
  366.         }
  367.  
  368.         FreeGadgets(GadgetList);
  369.     }
  370.  
  371.         /* Set up the window size. */
  372.  
  373.     ScreenSizeStuff();
  374.  
  375.     return(Changed);
  376. }
  377.