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 / ClipPanel.c < prev    next >
C/C++ Source or Header  |  1993-02-18  |  8KB  |  316 lines

  1. /*
  2. **    ClipPanel.c
  3. **
  4. **    Editing panel for clipboard 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_UNIT,GAD_CHARDELAY,GAD_LINEDELAY,GAD_PREFIX,GAD_SUFFIX,GAD_USE,GAD_CANCEL,GAD_DEFAULT };
  13.  
  14. STATIC STRPTR __saveds
  15. ShowTime(struct Gadget *SomeGadget,WORD Level)
  16. {
  17.     return(LocaleSeconds(Level));
  18. }
  19.  
  20. STATIC struct Gadget *
  21. CreateAllGadgets(struct Configuration *Config,struct Gadget **GadgetArray,struct Gadget **GadgetList,BYTE *Default)
  22. {
  23.     struct Gadget        *Gadget;
  24.     struct NewGadget     NewGadget;
  25.     UWORD             Counter = 0;
  26.  
  27.     SZ_SizeSetup(Window -> WScreen,&UserFont,TRUE);
  28.  
  29.     memset(&NewGadget,0,sizeof(struct NewGadget));
  30.  
  31.     if(Gadget = CreateContext(GadgetList))
  32.     {
  33.         SZ_AddLeftOffset(SZ_LeftOffsetDelta(MSG_CLIPPANEL_UNIT_GAD,MSG_CLIPPANEL_CLIP_SETTINGS_TXT));
  34.  
  35.         if(SZ_Width(INTEGER_KIND,NULL,20,NULL) > 108)
  36.             SZ_SetWidth(SZ_Width(INTEGER_KIND,NULL,20,NULL));
  37.         else
  38.             SZ_SetWidth(108);
  39.  
  40.         NewGadget . ng_GadgetText    = LocaleString(MSG_CLIPPANEL_UNIT_GAD);
  41.         NewGadget . ng_GadgetID        = Counter;
  42.  
  43.         GadgetArray[Counter++] = Gadget = CreateGadget(INTEGER_KIND,Gadget,&NewGadget,
  44.             SZ_Adjust,    TRUE,
  45.             SZ_AutoWidth,    TRUE,
  46.  
  47.             GTIN_MaxChars,    3,
  48.             GTIN_Number,    Config -> ClipConfig -> ClipboardUnit,
  49.         TAG_DONE);
  50.  
  51.         NewGadget . ng_GadgetText    = LocaleString(MSG_CLIPPANEL_CHAR_DELAY_GAD);
  52.         NewGadget . ng_GadgetID        = Counter;
  53.  
  54.         GadgetArray[Counter++] = Gadget = CreateGadget(SLIDER_KIND,Gadget,&NewGadget,
  55.             SZ_Adjust,        TRUE,
  56.             SZ_AutoWidth,        TRUE,
  57.             SZ_AlignExtra,        TRUE,
  58.  
  59.             GTSL_Min,        0,
  60.             GTSL_Max,        10 * 100,
  61.             GTSL_Level,        Config -> ClipConfig -> CharDelay,
  62.             GTSL_MaxLevelLen,    7,
  63.             GTSL_LevelFormat,    "%s s",
  64.             GTSL_DispFunc,        ShowTime,
  65.             PGA_Freedom,        LORIENT_HORIZ,
  66.             GA_Immediate,        TRUE,
  67.             GA_RelVerify,        TRUE,
  68.         TAG_DONE);
  69.  
  70.         NewGadget . ng_GadgetText    = LocaleString(MSG_CLIPPANEL_LINE_DELAY_GAD);
  71.         NewGadget . ng_GadgetID        = Counter;
  72.  
  73.         GadgetArray[Counter++] = Gadget = CreateGadget(SLIDER_KIND,Gadget,&NewGadget,
  74.             SZ_Adjust,        TRUE,
  75.             SZ_AutoWidth,        TRUE,
  76.  
  77.             GTSL_Min,        0,
  78.             GTSL_Max,        10 * 100,
  79.             GTSL_Level,        Config -> ClipConfig -> LineDelay,
  80.             GTSL_MaxLevelLen,    7,
  81.             GTSL_LevelFormat,    "%s s",
  82.             GTSL_DispFunc,        ShowTime,
  83.             PGA_Freedom,        LORIENT_HORIZ,
  84.             GA_Immediate,        TRUE,
  85.             GA_RelVerify,        TRUE,
  86.         TAG_DONE);
  87.  
  88.         NewGadget . ng_GadgetText    = LocaleString(MSG_CLIPPANEL_PASTE_PREFIX_GAD);
  89.         NewGadget . ng_GadgetID        = Counter;
  90.  
  91.         GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
  92.             SZ_Adjust,    TRUE,
  93.             SZ_AutoWidth,    TRUE,
  94.             SZ_AlignExtra,    TRUE,
  95.  
  96.             GTST_MaxChars,    79,
  97.             GTST_String,    Config -> ClipConfig -> InsertPrefix,
  98.         TAG_DONE);
  99.  
  100.         NewGadget . ng_GadgetText    = LocaleString(MSG_CLIPPANEL_PASTE_SUFFIX_GAD);
  101.         NewGadget . ng_GadgetID        = Counter;
  102.  
  103.         GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
  104.             SZ_Adjust,    TRUE,
  105.             SZ_AutoWidth,    TRUE,
  106.  
  107.             GTST_MaxChars,    79,
  108.             GTST_String,    Config -> ClipConfig -> InsertSuffix,
  109.         TAG_DONE);
  110.  
  111.         SZ_ResetMaxWidth();
  112.  
  113.         SZ_UpdateMaxWidth(BUTTON_KIND,LocaleString(MSG_GLOBAL_USE_GAD),0,NULL);
  114.         SZ_UpdateMaxWidth(BUTTON_KIND,LocaleString(MSG_GLOBAL_CANCEL_GAD),0,NULL);
  115.         SZ_UpdateMaxWidth(BUTTON_KIND,LocaleString(MSG_GLOBAL_DEFAULT_GAD),0,NULL);
  116.  
  117.         SZ_SetWidth(SZ_ResetMaxWidth());
  118.  
  119.         NewGadget . ng_GadgetText    = LocaleString(MSG_GLOBAL_USE_GAD);
  120.         NewGadget . ng_GadgetID        = Counter;
  121.         NewGadget . ng_Flags        = 0;
  122.  
  123.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  124.             SZ_AlignExtra,    TRUE,
  125.             SZ_Adjust,    TRUE,
  126.             SZ_AutoWidth,    TRUE,
  127.             SZ_AlignLeft,    TRUE,
  128.             SZ_AlignBottom,    TRUE,
  129.         TAG_DONE);
  130.  
  131.         NewGadget . ng_GadgetText    = LocaleString(MSG_GLOBAL_CANCEL_GAD);
  132.         NewGadget . ng_GadgetID        = Counter;
  133.  
  134.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  135.             SZ_Adjust,    TRUE,
  136.             SZ_AutoWidth,    TRUE,
  137.             SZ_AlignRight,    TRUE,
  138.         TAG_DONE);
  139.  
  140.         if(Default)
  141.         {
  142.             NewGadget . ng_GadgetText    = LocaleString(MSG_GLOBAL_DEFAULT_GAD);
  143.             NewGadget . ng_GadgetID        = Counter;
  144.  
  145.             GadgetArray[Counter] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  146.                 SZ_Adjust,    TRUE,
  147.                 SZ_AutoWidth,    TRUE,
  148.                 SZ_AlignCentre,    TRUE,
  149.             TAG_DONE);
  150.         }
  151.     }
  152.  
  153.     return(Gadget);
  154. }
  155.  
  156. BYTE
  157. ClipPanel(struct Configuration *Config,BYTE *Default)
  158. {
  159.     struct Window    *PanelWindow;
  160.     struct Gadget    *GadgetList = NULL;
  161.     struct Gadget    *GadgetArray[GAD_DEFAULT + 1];
  162.  
  163.     SaveConfig(Config,PrivateConfig);
  164.  
  165.     if(CreateAllGadgets(Config,GadgetArray,&GadgetList,Default))
  166.     {
  167.         if(PanelWindow = OpenWindowTags(NULL,
  168.             WA_Left,    GetScreenLeft(Window) + (GetScreenWidth(Window) - SZ_GetWindowWidth()) / 2,
  169.             WA_Top,        GetScreenTop(Window) + (GetScreenHeight(Window) - SZ_GetWindowHeight())    / 2,
  170.             WA_Width,    SZ_GetWindowWidth(),
  171.             WA_Height,    SZ_GetWindowHeight(),
  172.  
  173.             WA_Activate,    TRUE,
  174.             WA_DragBar,    TRUE,
  175.             WA_DepthGadget,    TRUE,
  176.             WA_RMBTrap,    TRUE,
  177.             WA_DepthGadget,    TRUE,
  178.             WA_CloseGadget,    TRUE,
  179.             WA_CustomScreen,Window -> WScreen,
  180.  
  181.             WA_IDCMP,    IDCMP_GADGETDOWN | IDCMP_ACTIVEWINDOW | IDCMP_CLOSEWINDOW | IDCMP_VANILLAKEY | IDCMP_RAWKEY | SLIDERIDCMP | BUTTONIDCMP | INTEGERIDCMP | STRINGIDCMP,
  182.  
  183.             WA_Title,    LocaleString(MSG_CLIPPANEL_CLIP_SETTINGS_TXT),
  184.         TAG_DONE))
  185.         {
  186.             struct IntuiMessage    *Massage;
  187.             ULONG             IClass,Code;
  188.             struct Gadget        *Gadget;
  189.             BYTE             Terminated = FALSE;
  190.  
  191.             GuideContext(CONTEXT_CLIP);
  192.  
  193.             PushWindow(PanelWindow);
  194.  
  195.             AddGList(PanelWindow,GadgetList,(UWORD)-1,(UWORD)-1,NULL);
  196.             RefreshGList(GadgetList,PanelWindow,NULL,(UWORD)-1);
  197.             GT_RefreshWindow(PanelWindow,NULL);
  198.  
  199.             ActiveGadget = NULL;
  200.  
  201.             SetSignal(0,SIG_BREAK);
  202.  
  203.             while(!Terminated)
  204.             {
  205.                 if(Wait(PORTMASK(PanelWindow -> UserPort) | SIG_BREAK) & SIG_BREAK)
  206.                 {
  207.                     SaveConfig(PrivateConfig,Config);
  208.  
  209.                     break;
  210.                 }
  211.  
  212.                 while(!Terminated && (Massage = (struct IntuiMessage *)GT_GetIMsg(PanelWindow -> UserPort)))
  213.                 {
  214.                     IClass    = Massage -> Class;
  215.                     Code    = Massage -> Code;
  216.                     Gadget    = (struct Gadget *)Massage -> IAddress;
  217.  
  218.                     GT_ReplyIMsg(Massage);
  219.  
  220.                     KeySelect(GadgetArray,GAD_CANCEL,Code,PanelWindow,&Gadget,&IClass,&Code);
  221.  
  222.                     if(IClass == IDCMP_GADGETDOWN)
  223.                     {
  224.                         if((Gadget -> GadgetType & GTYP_GTYPEMASK) == GTYP_STRGADGET)
  225.                             ActiveGadget = Gadget;
  226.                     }
  227.  
  228.                     if(IClass == IDCMP_ACTIVEWINDOW && ActiveGadget)
  229.                         ActivateGadget(ActiveGadget,PanelWindow,NULL);
  230.  
  231.                     if(IClass == IDCMP_CLOSEWINDOW)
  232.                     {
  233.                         SaveConfig(PrivateConfig,Config);
  234.  
  235.                         Terminated = TRUE;
  236.                     }
  237.  
  238.                     if(IClass == IDCMP_MOUSEMOVE)
  239.                     {
  240.                         switch(Gadget -> GadgetID)
  241.                         {
  242.                             case GAD_CHARDELAY:
  243.  
  244.                                 Config -> ClipConfig -> CharDelay = Code;
  245.                                 break;
  246.  
  247.                             case GAD_LINEDELAY:
  248.  
  249.                                 Config -> ClipConfig -> LineDelay = Code;
  250.                                 break;
  251.                         }
  252.                     }
  253.  
  254.                     if(IClass == IDCMP_GADGETUP)
  255.                     {
  256.                         switch(Gadget -> GadgetID)
  257.                         {
  258.                             case GAD_CHARDELAY:
  259.  
  260.                                 Config -> ClipConfig -> CharDelay = Code;
  261.                                 break;
  262.  
  263.                             case GAD_LINEDELAY:
  264.  
  265.                                 Config -> ClipConfig -> LineDelay = Code;
  266.                                 break;
  267.  
  268.                             case GAD_PREFIX:
  269.  
  270.                                 ActivateGadget(ActiveGadget = GadgetArray[GAD_SUFFIX],PanelWindow,NULL);
  271.                                 break;
  272.  
  273.                             case GAD_USE:
  274.  
  275.                                 Terminated = TRUE;
  276.  
  277.                                 strcpy(Config -> ClipConfig -> InsertPrefix,    SZ_GetString(GadgetArray[GAD_PREFIX]));
  278.                                 strcpy(Config -> ClipConfig -> InsertSuffix,    SZ_GetString(GadgetArray[GAD_SUFFIX]));
  279.  
  280.                                 Config -> ClipConfig -> ClipboardUnit = SZ_GetInteger(GadgetArray[GAD_UNIT]);
  281.  
  282.                                 break;
  283.  
  284.                             case GAD_CANCEL:
  285.  
  286.                                 Terminated = TRUE;
  287.  
  288.                                 SaveConfig(PrivateConfig,Config);
  289.  
  290.                                 break;
  291.  
  292.                             case GAD_DEFAULT:
  293.  
  294.                                 *Default    = TRUE;
  295.  
  296.                                 Terminated    = TRUE;
  297.  
  298.                                 break;
  299.                         }
  300.                     }
  301.                 }
  302.             }
  303.  
  304.             RemoveGList(PanelWindow,GadgetList,(UWORD)-1);
  305.  
  306.             PopWindow();
  307.  
  308.             CloseWindow(PanelWindow);
  309.         }
  310.     }
  311.  
  312.     FreeGadgets(GadgetList);
  313.  
  314.     return((BYTE)memcmp(PrivateConfig -> ClipConfig,Config -> ClipConfig,sizeof(struct ClipSettings)));
  315. }
  316.