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 / HotkeyPanel.c < prev    next >
C/C++ Source or Header  |  1991-11-03  |  13KB  |  427 lines

  1. /* $Revision Header * Header built automatically - do not edit! *************
  2.  *
  3.  *    (C) Copyright 1991 by Olaf 'Olsen' Barthel & MXM
  4.  *
  5.  *    Name .....: HotkeyPanel.c
  6.  *    Created ..: Wednesday 19-Jun-91 17:43
  7.  *    Revision .: 0
  8.  *
  9.  *    Date            Author          Comment
  10.  *    =========       ========        ====================
  11.  *    19-Jun-91       Olsen           Created this file!
  12.  *
  13.  * $Revision Header ********************************************************/
  14.  
  15. #include "TermGlobal.h"
  16.  
  17. enum    {    GAD_TERMTOFRONT,GAD_BUFFERTOFRONT,GAD_SKIP,GAD_PRIORITY,
  18.         GAD_SOMEHOTKEYS,GAD_USE,GAD_LOAD,GAD_SAVE,GAD_CANCEL };
  19.  
  20. #define WIDTH    527
  21. #define HEIGHT    94
  22.  
  23. enum    {    MEN_PRIORITY,MEN_SOMEHOTKEYS,MEN_LOAD,MEN_SAVEIT,MEN_USE,MEN_CANCEL };
  24.  
  25. STATIC struct NewMenu HotkeyMenu[] =
  26. {
  27.     { NM_TITLE, "Project",             0 , 0, 0, (APTR)0},
  28.     {  NM_ITEM, "Commodity Priority",    "P", 0, 0, (APTR)MEN_PRIORITY},
  29.     {  NM_ITEM, "Hotkeys enabled",        "H", 0, 0, (APTR)MEN_SOMEHOTKEYS},
  30.     {  NM_ITEM, NM_BARLABEL,         0 , 0, 0, (APTR)0},
  31.     {  NM_ITEM, "Load",            "L", 0, 0, (APTR)MEN_LOAD},
  32.     {  NM_ITEM, "Save",            "S", 0, 0, (APTR)MEN_SAVEIT},
  33.     {  NM_ITEM, NM_BARLABEL,         0 , 0, 0, (APTR)0},
  34.     {  NM_ITEM, "Use",            "U", 0, 0, (APTR)MEN_USE},
  35.     {  NM_ITEM, "Cancel",            "C", 0, 0, (APTR)MEN_CANCEL},
  36.     {  NM_ITEM, NM_BARLABEL,         0 , 0, 0, (APTR)0},
  37.     {  NM_ITEM, "Quit",            "Q", 0, 0, (APTR)MEN_USE},
  38.     { NM_END, 0,                 0 , 0, 0, (APTR)0}
  39. };
  40.  
  41. STATIC struct Gadget *
  42. CreateAllGadgets(struct Hotkeys *Hotkeys,struct Gadget **GadgetArray,struct Gadget **GadgetList,APTR VisualInfo,UWORD TopEdge)
  43. {
  44.     struct Gadget        *Gadget;
  45.     struct NewGadget     NewGadget;
  46.     LONG             Counter = 0;
  47.  
  48.     memset(&NewGadget,0,sizeof(struct NewGadget));
  49.  
  50.     if(Gadget = CreateContext(GadgetList))
  51.     {
  52.         NewGadget . ng_Width        = 300;
  53.         NewGadget . ng_Height        = 12;
  54.         NewGadget . ng_GadgetText    = "     term Screen To Front";
  55.         NewGadget . ng_TextAttr        = &DefaultFont;
  56.         NewGadget . ng_VisualInfo    = VisualInfo;
  57.         NewGadget . ng_GadgetID        = Counter;
  58.         NewGadget . ng_LeftEdge        = (strlen(NewGadget . ng_GadgetText) + 2 - 1) * 8 + 1;
  59.         NewGadget . ng_TopEdge        = 1 + TopEdge;
  60.  
  61.         GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
  62.             GTST_MaxChars,    256,
  63.             GTST_String,    Hotkeys -> termScreenToFront,
  64.             GTST_EditHook,    &CommandHook,
  65.         TAG_DONE);
  66.  
  67.         NewGadget . ng_GadgetText    = "Buffer Screen To Front";
  68.         NewGadget . ng_GadgetID        = Counter;
  69.         NewGadget . ng_TopEdge        = NewGadget . ng_TopEdge + NewGadget . ng_Height + 1;
  70.  
  71.         GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
  72.             GTST_MaxChars,    256,
  73.             GTST_String,    Hotkeys -> BufferScreenToFront,
  74.             GTST_EditHook,    &CommandHook,
  75.         TAG_DONE);
  76.  
  77.         NewGadget . ng_GadgetText    = "Skip Dial Entry";
  78.         NewGadget . ng_GadgetID        = Counter;
  79.         NewGadget . ng_TopEdge        = NewGadget . ng_TopEdge + NewGadget . ng_Height + 1;
  80.  
  81.         GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
  82.             GTST_MaxChars,    256,
  83.             GTST_String,    Hotkeys -> SkipDialEntry,
  84.             GTST_EditHook,    &CommandHook,
  85.         TAG_DONE);
  86.  
  87.         NewGadget . ng_GadgetText    = "Commodity _Priority      ";
  88.         NewGadget . ng_GadgetID        = Counter;
  89.         NewGadget . ng_TopEdge        = NewGadget . ng_TopEdge + NewGadget . ng_Height + 1;
  90.         NewGadget . ng_Width        = 100;
  91.  
  92.         GadgetArray[Counter++] = Gadget = CreateGadget(SLIDER_KIND,Gadget,&NewGadget,
  93.             GT_Underscore,        '_',
  94.             GTSL_Min,        -128,
  95.             GTSL_Max,        127,
  96.             GTSL_Level,        Hotkeys -> CommodityPriority,
  97.             GTSL_LevelFormat,    "%4ld",
  98.             GTSL_MaxLevelLen,    4,
  99.         TAG_DONE);
  100.  
  101.         NewGadget . ng_Width        = 26;
  102.         NewGadget . ng_GadgetText    = "_Hotkeys enabled";
  103.         NewGadget . ng_GadgetID        = Counter;
  104.         NewGadget . ng_TopEdge        = NewGadget . ng_TopEdge + NewGadget . ng_Height + 1;
  105.         NewGadget . ng_Height        = 11;
  106.  
  107.         GadgetArray[Counter++] = Gadget = CreateGadget(CHECKBOX_KIND,Gadget,&NewGadget,
  108.             GT_Underscore,    '_',
  109.             GTCB_Checked,    Hotkeys -> HotkeysEnabled,
  110.         TAG_DONE);
  111.  
  112.         NewGadget . ng_Width        = 52;
  113.         NewGadget . ng_Height        = 12;
  114.         NewGadget . ng_GadgetText    = "_Use";
  115.         NewGadget . ng_GadgetID        = Counter;
  116.         NewGadget . ng_Flags        = 0;
  117.         NewGadget . ng_LeftEdge        = 10;
  118.         NewGadget . ng_TopEdge        = HEIGHT - 3 - NewGadget . ng_Height;
  119.  
  120.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  121.             GT_Underscore,    '_',
  122.         TAG_DONE);
  123.  
  124.         NewGadget . ng_GadgetText    = "_Load";
  125.         NewGadget . ng_GadgetID        = Counter;
  126.         NewGadget . ng_LeftEdge        = NewGadget . ng_LeftEdge + (WIDTH + NewGadget . ng_Width) / 4 + 8;
  127.  
  128.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  129.             GT_Underscore,    '_',
  130.         TAG_DONE);
  131.  
  132.         NewGadget . ng_GadgetText    = "_Save";
  133.         NewGadget . ng_GadgetID        = Counter;
  134.         NewGadget . ng_LeftEdge        = NewGadget . ng_LeftEdge + (WIDTH + NewGadget . ng_Width) / 4 + 8;
  135.  
  136.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  137.             GT_Underscore,    '_',
  138.         TAG_DONE);
  139.  
  140.         NewGadget . ng_GadgetText    = "_Cancel";
  141.         NewGadget . ng_GadgetID        = Counter;
  142.         NewGadget . ng_LeftEdge        = WIDTH - 10 - NewGadget . ng_Width;
  143.  
  144.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  145.             GT_Underscore,    '_',
  146.         TAG_DONE);
  147.     }
  148.  
  149.     return(Gadget);
  150. }
  151.  
  152. BYTE
  153. HotkeyPanel(struct Hotkeys *Hotkeys)
  154. {
  155.     struct Hotkeys         PrivateHotkeys;
  156.     struct Window        *PanelWindow;
  157.     struct Menu        *PanelMenu;
  158.     struct Gadget        *GadgetList = NULL;
  159.     struct Gadget        *GadgetArray[GAD_CANCEL + 1];
  160.  
  161.     struct FileRequest    *FileRequest;
  162.     UBYTE             DummyBuffer[256],*DummyChar;
  163.  
  164.     CopyMem(Hotkeys,&PrivateHotkeys,sizeof(struct Hotkeys));
  165.  
  166.     if(CreateAllGadgets(Hotkeys,&GadgetArray[0],&GadgetList,VisualInfo,Screen -> WBorTop + Screen -> Font -> ta_YSize + 1))
  167.     {
  168.         if(PanelMenu = CreateMenus(HotkeyMenu,
  169.             GTMN_FrontPen, 0,
  170.         TAG_DONE))
  171.         {
  172.             if(LayoutMenus(PanelMenu,VisualInfo,
  173.                 GTMN_TextAttr,&DefaultFont,
  174.             TAG_DONE))
  175.             {
  176.                 if(PanelWindow = OpenWindowTags(NULL,
  177.                     WA_Left,    (Screen -> Width - WIDTH) >> 1,
  178.                     WA_Top,        (Screen -> Height - HEIGHT) >> 1,
  179.                     WA_Width,    WIDTH,
  180.                     WA_Height,    HEIGHT,
  181.  
  182.                     WA_Activate,    TRUE,
  183.                     WA_DragBar,    TRUE,
  184.                     WA_DepthGadget,    TRUE,
  185.                     WA_RMBTrap,    TRUE,
  186.                     WA_DepthGadget,    TRUE,
  187.                     WA_CloseGadget,    TRUE,
  188.                     WA_CustomScreen,Screen,
  189.  
  190.                     WA_IDCMP,    IDCMP_GADGETDOWN | IDCMP_ACTIVEWINDOW | IDCMP_CLOSEWINDOW | SLIDERIDCMP | CHECKBOXIDCMP | LISTVIEWIDCMP | IDCMP_MENUPICK | IDCMP_RAWKEY,
  191.  
  192.                     WA_Title,    "Hotkey Preferences",
  193.                 TAG_DONE))
  194.                 {
  195.                     struct IntuiMessage    *Massage;
  196.                     ULONG             Class,Code;
  197.                     struct Gadget        *Gadget;
  198.                     BYTE             Terminated = FALSE;
  199.  
  200.                     PushWindow(PanelWindow);
  201.  
  202.                     AddGList(PanelWindow,GadgetList,(UWORD)-1,(UWORD)-1,NULL);
  203.                     RefreshGList(GadgetList,PanelWindow,NULL,(UWORD)-1);
  204.                     GT_RefreshWindow(PanelWindow,NULL);
  205.  
  206.                     SetMenuStrip(PanelWindow,PanelMenu);
  207.  
  208.                     PanelWindow -> Flags &= ~WFLG_RMBTRAP;
  209.  
  210.                     ActivateGadget(GadgetArray[GAD_TERMTOFRONT],PanelWindow,NULL);
  211.  
  212.                     ActiveGadget = GadgetArray[GAD_TERMTOFRONT];
  213.  
  214.                     while(!Terminated)
  215.                     {
  216.                         WaitPort(PanelWindow -> UserPort);
  217.  
  218.                         while(!Terminated && (Massage = (struct IntuiMessage *)GT_GetIMsg(PanelWindow -> UserPort)))
  219.                         {
  220.                             Class    = Massage -> Class;
  221.                             Code    = Massage -> Code;
  222.                             Gadget    = (struct Gadget *)Massage -> IAddress;
  223.  
  224.                             GT_ReplyIMsg(Massage);
  225.  
  226.                             if(Class == IDCMP_GADGETDOWN)
  227.                             {
  228.                                 if((Gadget -> GadgetType & GTYP_GTYPEMASK) == GTYP_STRGADGET)
  229.                                     ActiveGadget = Gadget;
  230.                             }
  231.  
  232.                             if(Class == IDCMP_ACTIVEWINDOW && ActiveGadget)
  233.                                 ActivateGadget(ActiveGadget,PanelWindow,NULL);
  234.  
  235.                             if(Class == IDCMP_RAWKEY)
  236.                             {
  237.                                 if(Code == IECODE_UP_PREFIX|103 && CommandWindow == PanelWindow)
  238.                                     ActivateGadget(CommandGadget,PanelWindow,NULL);
  239.                             }
  240.  
  241.                             if(Class == IDCMP_MENUPICK)
  242.                             {
  243.                                 struct MenuItem *MenuItem;
  244.  
  245.                                 while(Code != MENUNULL)
  246.                                 {
  247.                                     MenuItem = ItemAddress(PanelMenu,Code);
  248.  
  249.                                     switch((ULONG)GTMENUITEM_USERDATA(MenuItem))
  250.                                     {
  251.                                         case MEN_PRIORITY:    if(Hotkeys -> CommodityPriority < 127)
  252.                                                         Hotkeys -> CommodityPriority++;
  253.                                                     else
  254.                                                         Hotkeys -> CommodityPriority = -128;
  255.  
  256.                                                     GT_SetGadgetAttrs(GadgetArray[GAD_PRIORITY],PanelWindow,NULL,
  257.                                                         GTSL_Level,Hotkeys -> CommodityPriority,
  258.                                                     TAG_DONE);
  259.  
  260.                                                     break;
  261.  
  262.                                         case MEN_SOMEHOTKEYS:    GT_SetGadgetAttrs(GadgetArray[GAD_SOMEHOTKEYS],PanelWindow,NULL,
  263.                                                         GTCB_Checked,GadgetArray[GAD_SOMEHOTKEYS] -> Flags & GFLG_SELECTED ? FALSE : TRUE,
  264.                                                     TAG_DONE);
  265.  
  266.                                                     break;
  267.  
  268.                                         case MEN_LOAD:        Class = IDCMP_GADGETUP;
  269.                                                     Gadget = GadgetArray[GAD_LOAD];
  270.                                                     break;
  271.  
  272.                                         case MEN_SAVEIT:        Class = IDCMP_GADGETUP;
  273.                                                     Gadget = GadgetArray[GAD_SAVE];
  274.                                                     break;
  275.  
  276.                                         case MEN_USE:        Class = IDCMP_GADGETUP;
  277.                                                     Gadget = GadgetArray[GAD_USE];
  278.                                                     break;
  279.  
  280.                                         case MEN_CANCEL:    Class = IDCMP_GADGETUP;
  281.                                                     Gadget = GadgetArray[GAD_CANCEL];
  282.                                                     break;
  283.  
  284.                                         default:        break;
  285.                                     }
  286.  
  287.                                     Code = MenuItem -> NextSelect;
  288.                                 }
  289.  
  290.                                 if(ActiveGadget)
  291.                                     ActivateGadget(ActiveGadget,PanelWindow,NULL);
  292.                             }
  293.  
  294.                             if(Class == IDCMP_CLOSEWINDOW)
  295.                             {
  296.                                 Hotkeys -> HotkeysEnabled = GadgetArray[GAD_SOMEHOTKEYS] -> Flags & GFLG_SELECTED;
  297.  
  298.                                 Terminated = TRUE;
  299.                             }
  300.  
  301.                             if(Class == IDCMP_MOUSEMOVE)
  302.                                 Hotkeys -> CommodityPriority = (WORD)Code;
  303.  
  304. GadCheck:                        if(Class == IDCMP_GADGETUP)
  305.                             {
  306.                                 switch(Gadget -> GadgetID)
  307.                                 {
  308.                                     case GAD_TERMTOFRONT:    strcpy(Hotkeys -> termScreenToFront,((struct StringInfo *)Gadget -> SpecialInfo) -> Buffer);
  309.                                                 break;
  310.  
  311.                                     case GAD_BUFFERTOFRONT:    strcpy(Hotkeys -> BufferScreenToFront,((struct StringInfo *)Gadget -> SpecialInfo) -> Buffer);
  312.                                                 break;
  313.  
  314.                                     case GAD_SKIP:        strcpy(Hotkeys -> SkipDialEntry,((struct StringInfo *)Gadget -> SpecialInfo) -> Buffer);
  315.                                                 break;
  316.  
  317.                                     case GAD_LOAD:        strcpy(DummyBuffer,LastKeys);
  318.  
  319.                                                 DummyChar = PathPart(DummyBuffer);
  320.  
  321.                                                 *DummyChar = 0;
  322.  
  323.                                                 SetWait(PanelWindow);
  324.  
  325.                                                 PanelWindow -> Flags |= WFLG_RMBTRAP;
  326.  
  327.                                                 if(FileRequest = GetFile("Load Hotkeys",DummyBuffer,FilePart(LastKeys),DummyBuffer,"#?.term",FALSE,FALSE,FALSE,"Load"))
  328.                                                 {
  329.                                                     if(ReadIFFData(DummyBuffer,Hotkeys,sizeof(struct Hotkeys),'HOTK'))
  330.                                                         MyEasyRequest(Window,"Couldn't load hotkeys\n\"%s\"!","Continue",DummyBuffer);
  331.                                                     else
  332.                                                     {
  333.                                                         strcpy(LastKeys,DummyBuffer);
  334.  
  335.                                                         GT_SetGadgetAttrs(GadgetArray[GAD_TERMTOFRONT],PanelWindow,NULL,
  336.                                                             GTST_String,Hotkeys -> termScreenToFront,
  337.                                                         TAG_DONE);
  338.  
  339.                                                         GT_SetGadgetAttrs(GadgetArray[GAD_BUFFERTOFRONT],PanelWindow,NULL,
  340.                                                             GTST_String,Hotkeys -> BufferScreenToFront,
  341.                                                         TAG_DONE);
  342.  
  343.                                                         GT_SetGadgetAttrs(GadgetArray[GAD_SKIP],PanelWindow,NULL,
  344.                                                             GTST_String,Hotkeys -> SkipDialEntry,
  345.                                                         TAG_DONE);
  346.  
  347.                                                         GT_SetGadgetAttrs(GadgetArray[GAD_PRIORITY],PanelWindow,NULL,
  348.                                                             GTSL_Level,Hotkeys -> CommodityPriority,
  349.                                                         TAG_DONE);
  350.  
  351.                                                         GT_SetGadgetAttrs(GadgetArray[GAD_PRIORITY],PanelWindow,NULL,
  352.                                                             GTCB_Checked,Hotkeys -> HotkeysEnabled,
  353.                                                         TAG_DONE);
  354.                                                     }
  355.                                                 }
  356.  
  357.                                                 ClearPointer(PanelWindow);
  358.                                                 PanelWindow -> Flags &= ~WFLG_RMBTRAP;
  359.  
  360.                                                 break;
  361.  
  362.                                     case GAD_SAVE:        strcpy(DummyBuffer,LastKeys);
  363.  
  364.                                                 DummyChar = PathPart(DummyBuffer);
  365.  
  366.                                                 *DummyChar = 0;
  367.  
  368.                                                 SetWait(PanelWindow);
  369.                                                 PanelWindow -> Flags |= WFLG_RMBTRAP;
  370.  
  371.                                                 Hotkeys -> HotkeysEnabled = GadgetArray[GAD_SOMEHOTKEYS] -> Flags & GFLG_SELECTED;
  372.  
  373.                                                 if(FileRequest = GetFile("Save Hot Keys",DummyBuffer,FilePart(LastKeys),DummyBuffer,"#?.term",TRUE,FALSE,FALSE,"Save"))
  374.                                                 {
  375.                                                     if(!WriteIFFData(DummyBuffer,Hotkeys,sizeof(struct Hotkeys),'HOTK'))
  376.                                                         MyEasyRequest(Window,"Couldn't save macro keys\n\"%s\"!","Continue",DummyBuffer);
  377.                                                     else
  378.                                                         strcpy(LastKeys,DummyBuffer);
  379.                                                 }
  380.  
  381.                                                 ClearPointer(PanelWindow);
  382.                                                 PanelWindow -> Flags &= ~WFLG_RMBTRAP;
  383.  
  384.                                                 break;
  385.  
  386.                                     case GAD_USE:        Terminated = TRUE;
  387.  
  388.                                                 Hotkeys -> HotkeysEnabled = GadgetArray[GAD_SOMEHOTKEYS] -> Flags & GFLG_SELECTED;
  389.  
  390.                                                 break;
  391.  
  392.                                     case GAD_CANCEL:    Terminated = TRUE;
  393.  
  394.                                                 CopyMem(&PrivateHotkeys,Hotkeys,sizeof(struct Hotkeys));
  395.  
  396.                                                 break;
  397.  
  398.                                     default:        break;
  399.                                 }
  400.                             }
  401.                         }
  402.                     }
  403.  
  404.                     PanelWindow -> Flags |= WFLG_RMBTRAP;
  405.  
  406.                     ClearMenuStrip(PanelWindow);
  407.  
  408.                     RemoveGList(PanelWindow,GadgetList,(UWORD)-1);
  409.  
  410.                     PopWindow();
  411.  
  412.                     CloseWindow(PanelWindow);
  413.                 }
  414.             }
  415.  
  416.             FreeMenus(PanelMenu);
  417.         }
  418.     }
  419.  
  420.     FreeGadgets(GadgetList);
  421.  
  422.     if(memcmp(&PrivateHotkeys,Hotkeys,sizeof(struct Hotkeys)))
  423.         return(TRUE);
  424.     else
  425.         return(FALSE);
  426. }
  427.