home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 5 / FreshFish_July-August1994.bin / bbs / util / yak-1.59.lha / Yak-1.59 / Src / popup.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-05-08  |  15.6 KB  |  534 lines

  1.  
  2. /*
  3.  *  Source machine generated by GadToolsBox V2.0b
  4.  *  which is (c) Copyright 1991-1993 Jaba Development
  5.  *
  6.  *  GUI Designed by : Martin W Scott and GaĆ«l Marziou
  7.  */
  8.  
  9.  
  10.  
  11.  
  12. #include <exec/types.h>
  13. #include <intuition/intuition.h>
  14. #include <intuition/classes.h>
  15. #include <intuition/classusr.h>
  16. #include <intuition/imageclass.h>
  17. #include <intuition/gadgetclass.h>
  18. #include <intuition/intuitionbase.h>
  19. #include <libraries/gadtools.h>
  20. #include <graphics/displayinfo.h>
  21. #include <graphics/gfxbase.h>
  22. #include <proto/exec.h>
  23. #include <proto/intuition.h>
  24. #include <proto/gadtools.h>
  25. #include <proto/graphics.h>
  26. #include <proto/locale.h>
  27. #include <proto/utility.h>
  28. #include <string.h>
  29.  
  30. #include "code.h"
  31. #include "version.h"
  32. #include "yak.h"
  33. #include "gui.h"
  34.  
  35. #define CATCOMP_NUMBERS
  36. #include "locale/yak_locale_strings.h"
  37.  
  38. #ifdef BETA_VERSION
  39. static UBYTE DisplayBetaRequester = TRUE;
  40. #endif
  41.  
  42.  
  43. extern struct Catalog    *Catalog;
  44.  
  45. struct Screen   *Scr = NULL;
  46. UBYTE           *PubScreenName;
  47. APTR             VisualInfo = NULL;
  48. struct Window   *RootWnd = NULL;
  49. struct Gadget   *RootGList = NULL;
  50. struct Menu     *RootMenus = NULL;
  51. struct Gadget   *RootGadgets[Root_CNT];
  52. UWORD            RootLeft = 0;
  53. UWORD            RootWidth = 586;
  54. UWORD            RootHeight = 126;
  55. UWORD            WindowTop;
  56. UBYTE           *RootWdt = NULL;
  57. struct TextAttr *Font,Attr;
  58. UWORD            FontX,FontY; 
  59. UWORD            OffX,OffY;
  60.  
  61. static BOOL GUIFirstOpening = TRUE;
  62.  
  63.  
  64. #define ROOT_TNUM 2
  65.  
  66. struct IntuiText RootIText[ROOT_TNUM] = 
  67. {
  68.     2,0,JAM1,37,7,NULL,NULL,NULL,
  69.     2,0,JAM1,301,7,NULL,NULL,NULL,
  70. };
  71.  
  72.  
  73.  
  74. static VOID
  75. InitIText(VOID)
  76. {
  77.    RootIText[0].IText = getString(TOGGLES_STRING);
  78.    RootIText[1].IText = getString(INCLUSION_PATTERNS_STRING);
  79.    BlankIText[0].IText = getString(TIMEOUT_STRING);
  80. }
  81.  
  82. struct NewMenu RootNewMenu[] = 
  83. {
  84.     NM_TITLE,NULL,NULL,0,NULL,NULL,
  85.     NM_ITEM ,NULL,NULL,0,0L  ,NULL,
  86.     NM_ITEM ,NULL,NULL,0,0L  ,NULL,
  87.     NM_ITEM ,NULL,NULL,0,0L  ,NULL,
  88.     NM_ITEM ,NULL,NULL,0,0L  ,NULL,
  89.     NM_ITEM ,NULL,NULL,0,NULL,NULL,
  90.     NM_SUB  ,NULL,NULL,0,0L  ,NULL,
  91.     NM_SUB  ,NULL,NULL,0,0L  ,NULL,
  92.     NM_SUB  ,NULL,NULL,0,0L  ,NULL,
  93.     NM_SUB  ,NULL,NULL,0,0L  ,NULL,
  94.     NM_SUB  ,NULL,NULL,0,0L  ,NULL,
  95.     NM_END  ,NULL,NULL,0,0L  ,NULL 
  96. };
  97.  
  98. VOID InitRootNewMenu (VOID)
  99. {
  100.         RootNewMenu[0].nm_Label   = (STRPTR)getString(PROJECT_STRING);
  101.         RootNewMenu[1].nm_Label   = (STRPTR)getString(LOAD_SETTINGS_STRING);
  102.         RootNewMenu[1].nm_CommKey = (STRPTR)getString(LOAD_SHORTCUT);
  103.         RootNewMenu[2].nm_Label   = (STRPTR)getString(SAVE_SETTINGS_STRING);
  104.         RootNewMenu[2].nm_CommKey = (STRPTR)getString(SAVE_SHORTCUT);
  105.         RootNewMenu[3].nm_Label   = (STRPTR)getString(HIDE_WINDOW_STRING);
  106.         RootNewMenu[3].nm_CommKey = (STRPTR)getString(HIDE_SHORTCUT);
  107.         RootNewMenu[4].nm_Label   = (STRPTR)getString(QUIT_STRING);
  108.         RootNewMenu[4].nm_CommKey = (STRPTR)getString(QUIT_SHORTCUT);
  109.         RootNewMenu[5].nm_Label   = (STRPTR)getString(Credits_STRING);
  110.         RootNewMenu[6].nm_Label   = (STRPTR)getString(Credits_Line1_STRING);
  111.         RootNewMenu[7].nm_Label   = (STRPTR)getString(Credits_Line2_STRING);
  112.         RootNewMenu[8].nm_Label   = (STRPTR)getString(Credits_Line3_STRING);
  113.         RootNewMenu[9].nm_Label   = (STRPTR)getString(Credits_Line4_STRING);
  114.         RootNewMenu[10].nm_Label  = (STRPTR)getString(Credits_Line5_STRING);
  115. }
  116.  
  117. UWORD RootGTypes[] = 
  118. {
  119.         BUTTON_KIND,
  120.         BUTTON_KIND,
  121.         CHECKBOX_KIND,
  122.         CHECKBOX_KIND,
  123.         CHECKBOX_KIND,
  124.         CHECKBOX_KIND,
  125.         CHECKBOX_KIND,
  126.         CHECKBOX_KIND,
  127.         CHECKBOX_KIND,
  128.         CHECKBOX_KIND,
  129.         BUTTON_KIND,
  130.         BUTTON_KIND,
  131.         STRING_KIND,
  132.         STRING_KIND,
  133.         STRING_KIND,
  134.         STRING_KIND,
  135.         CHECKBOX_KIND,
  136.         BUTTON_KIND
  137. };
  138.  
  139.  
  140. struct NewGadget RootNGad[] = 
  141. {
  142.         226,109,175,14,NULL,NULL,GD_Hide         ,PLACETEXT_IN   ,NULL,NULL,
  143.         405,109,175,14,NULL,NULL,GD_Quit         ,PLACETEXT_IN   ,NULL,NULL,
  144.           6,15,26,11,NULL,NULL,GD_AutoCheck      ,PLACETEXT_RIGHT,NULL,NULL,
  145.           6,39,26,11,NULL,NULL,GD_KeyActCheck    ,PLACETEXT_RIGHT,NULL,NULL,
  146.           6,51,26,11,NULL,NULL,GD_CTFCheck       ,PLACETEXT_RIGHT,NULL,NULL,
  147.           6,63,26,11,NULL,NULL,GD_CTBCheck       ,PLACETEXT_RIGHT,NULL,NULL,
  148.           6,99,26,11,NULL,NULL,GD_ScrCycleCheck  ,PLACETEXT_RIGHT,NULL,NULL,
  149.           6,111,26,11,NULL,NULL,GD_ScrActCheck   ,PLACETEXT_RIGHT,NULL,NULL,
  150.           6,27,26,11,NULL,NULL,GD_AutoPopCheck   ,PLACETEXT_RIGHT,NULL,NULL,
  151.           6,87,26,11,NULL,NULL,GD_RMBActCheck    ,PLACETEXT_RIGHT,NULL,NULL,
  152.         405,93,175,14,NULL,NULL,GD_Miscellaneous,PLACETEXT_IN   ,NULL,NULL,
  153.         226,93,175,14,NULL,NULL,GD_EditHotkeys  ,PLACETEXT_IN   ,NULL,NULL,
  154.         423,12,157,14,NULL,NULL,GD_AutoPat       ,PLACETEXT_LEFT ,NULL,NULL,
  155.         423,27,157,14,NULL,NULL,GD_ClickPat      ,PLACETEXT_LEFT ,NULL,NULL,
  156.         423,42,157,14,NULL,NULL,GD_PopPat        ,PLACETEXT_LEFT ,NULL,NULL,
  157.         423,57,157,14,NULL,NULL,GD_ClickWinPat   ,PLACETEXT_LEFT ,NULL,NULL,
  158.           6,75,26,11,NULL,NULL,GD_MMBActCheck    ,PLACETEXT_RIGHT,NULL,NULL,
  159.         405,77,175,14,NULL,NULL,GD_Blanking      ,PLACETEXT_IN   ,NULL,NULL
  160. };
  161.  
  162. VOID InitRootNGad (VOID)
  163. {
  164.         RootNGad[GD_Hide].ng_GadgetText          = getString(HIDE_STRING);
  165.         RootNGad[GD_Quit].ng_GadgetText          = getString(QUIT_STRING);
  166.         RootNGad[GD_AutoCheck].ng_GadgetText     = getString(AUTOPOINT_STRING);
  167.         RootNGad[GD_KeyActCheck].ng_GadgetText   = getString(KEY_ACTIVATE_STRING);
  168.         RootNGad[GD_CTFCheck].ng_GadgetText      = getString(CLICK_TO_FRONT_STRING);
  169.         RootNGad[GD_CTBCheck].ng_GadgetText      = getString(CLICK_TO_BACK_STRING);
  170.         RootNGad[GD_ScrCycleCheck].ng_GadgetText = getString(CYCLE_SCREENS_STRING);
  171.         RootNGad[GD_ScrActCheck].ng_GadgetText   = getString(SCREEN_ACTIVATE_STRING);
  172.         RootNGad[GD_AutoPopCheck].ng_GadgetText  = getString(AUTOPOPTOFRONT_STRING);
  173.         RootNGad[GD_RMBActCheck].ng_GadgetText   = getString(RMB_ACTIVATE_STRING);
  174.         RootNGad[GD_Miscellaneous].ng_GadgetText = getString(MISCELLANEOUS_STRING);
  175.         RootNGad[GD_EditHotkeys].ng_GadgetText   = getString(EDIT_HOTKEYS_STRING);
  176.         RootNGad[GD_AutoPat].ng_GadgetText       = getString(AUTOSCREENS_STRING);
  177.         RootNGad[GD_ClickPat].ng_GadgetText      = getString(CLICKSCREENS_STRING);
  178.         RootNGad[GD_PopPat].ng_GadgetText        = getString(POPWINDOWS_STRING);
  179.         RootNGad[GD_ClickWinPat].ng_GadgetText   = getString(CLICKWINDOWS_STRING);
  180.         RootNGad[GD_MMBActCheck].ng_GadgetText   = getString(MMB_ACTIVATE_STRING);
  181.         RootNGad[GD_Blanking].ng_GadgetText      = getString(Blanking);
  182. }
  183.  
  184.  
  185.  
  186. VOID InitGUI (VOID)
  187. {
  188.         static char title[80];
  189.  
  190. #ifdef BETA_VERSION
  191.         if (DisplayBetaRequester == TRUE)
  192.         {
  193.                 PostError("This is " VERSION_NAME " beta version\nBuilt on " __AMIGADATE__);
  194.                 DisplayBetaRequester = FALSE;
  195.         }
  196. #endif
  197.  
  198.         strcpy(title,VERSION_NAME ": ");
  199.         strcat(title,getString(Hotkey_Window_TITLE));
  200.         strcat(title,PopKeyStr);
  201.         strcat(title,">");
  202.         RootWdt = title;
  203.  
  204.         HotKeyWdt = getString(EDIT_HOTKEYS_STRING);
  205.  
  206.         MiscWdt = getString(MISCELLANEOUS_STRING);
  207.  
  208.         BlankWdt = getString(Blanking);
  209.  
  210.         InitOptions1Label ();
  211.         InitIText ();
  212.         InitRootNewMenu ();
  213.         InitRootNGad ();
  214.         InitActions1Nodes ();
  215.         InitHotKeyNGad ();
  216.         InitMiscNGad ();
  217.         InitMBMethod0Labels ();
  218.         InitBlankNGad ();
  219.         InitKeyDefNGad ();
  220.         InitClass0Labels ();
  221.         InitStroke0Labels ();
  222. }
  223.  
  224.  
  225. ULONG RootGTags[] = 
  226. {
  227.         (TAG_DONE),
  228.         (TAG_DONE),
  229.         (GTCB_Scaled),TRUE,(TAG_DONE),
  230.         (GTCB_Scaled),TRUE,(TAG_DONE),
  231.         (GTCB_Scaled),TRUE,(TAG_DONE),
  232.         (GTCB_Scaled),TRUE,(TAG_DONE),
  233.         (GTCB_Scaled),TRUE,(TAG_DONE),
  234.         (GTCB_Scaled),TRUE,(TAG_DONE),
  235.         (GTCB_Scaled),TRUE,(TAG_DONE),
  236.         (GTCB_Scaled),TRUE,(TAG_DONE),
  237.         (TAG_DONE),
  238.         (TAG_DONE),
  239.         (GTST_MaxChars),99,(TAG_DONE),
  240.         (GTST_MaxChars),99,(TAG_DONE),
  241.         (GTST_MaxChars),99,(TAG_DONE),
  242.         (GTST_MaxChars),99,(TAG_DONE),
  243.         (GTCB_Scaled),TRUE,(TAG_DONE),
  244.         (TAG_DONE)
  245. };
  246.  
  247.  
  248.  
  249. UWORD ComputeX(UWORD value)
  250. {
  251.         return((UWORD)(((FontX*value)+4)/8));
  252. }
  253.  
  254.  
  255. UWORD ComputeY(UWORD value)
  256. {
  257.         return((UWORD)(((FontY*value)+4)/8));
  258. }
  259.  
  260.  
  261.  
  262.  
  263. VOID ComputeFont(UWORD width,UWORD height)
  264. {
  265.         Font = &Attr;
  266.         Font->ta_Name = (STRPTR)Scr->RastPort.Font->tf_Message.mn_Node.ln_Name;
  267.         Font->ta_YSize = FontY = Scr->RastPort.Font->tf_YSize;
  268.  
  269.         FontX = CalcFontX();
  270.  
  271.         /* Don't go under 8 points */
  272.         if (FontY < 8) FontY = 8;
  273.  
  274.         OffX = Scr->WBorLeft;
  275.         OffY = Scr->RastPort.TxHeight +Scr->WBorTop +1;
  276.  
  277.         if (width && height) {
  278.                 if ((ComputeX(width) +OffX +Scr->WBorRight) > Scr->Width)
  279.                 goto UseTopaz;
  280.                 if ((ComputeY(height) +OffY +Scr->WBorBottom) > Scr->Height)
  281.                 goto UseTopaz;
  282.         }
  283.         return;
  284.  
  285. UseTopaz:
  286.         Font->ta_Name = (STRPTR)"topaz.font";
  287.         FontX = FontY = Font->ta_YSize = 8;
  288. }
  289.  
  290.  
  291.  
  292. UBYTE
  293. *GetPubScreenName( struct Screen *s)
  294. {
  295.         struct PubScreenNode *psnode; 
  296.         UBYTE *PSName;
  297.  
  298.         PSName = NULL;
  299.         if (s->Flags & WBENCHSCREEN)
  300.         {
  301.                 PSName = "Workbench";
  302.         }
  303.         else
  304.         {
  305.                 if (s->Flags & PUBLICSCREEN)
  306.                 {
  307.                         /* s is a public screen so find its name */
  308.  
  309.                         psnode=(struct PubScreenNode *)LockPubScreenList();
  310.  
  311.                         while ((psnode) && !(PSName))
  312.                         {
  313.                                 if ((psnode->psn_Flags != PSNF_PRIVATE) && (psnode->psn_Screen == s)) 
  314.                                 {
  315.                                         /* found it */
  316.                                         PSName = psnode->psn_Node.ln_Name;
  317.                                 }
  318.                                 else
  319.                                 {       
  320.                                         /* check next one */
  321.                                         psnode = (struct PubScreenNode *)psnode->psn_Node.ln_Succ;
  322.                                 }
  323.                         }
  324.  
  325.                         UnlockPubScreenList();                
  326.                 }
  327.         }
  328.         return(PSName);
  329.  
  330. int 
  331. SetupScreen()
  332. {
  333.         struct Screen *s;
  334.         ULONG lock;
  335.  
  336.         /* Choose a public screen to open our window */
  337.         lock = LockIBase(0);
  338.         s = AS;
  339.         UnlockIBase(lock);
  340.   
  341.         PubScreenName = GetPubScreenName(s);
  342.  
  343.         if (! (Scr = LockPubScreen(PubScreenName)))
  344.                 return(1L);
  345.  
  346.         ScreenToFront(Scr);
  347.  
  348.         ComputeFont(0,0);
  349.  
  350.         if (GUIFirstOpening)
  351.         {
  352.                 GUIFirstOpening = FALSE;
  353.                 WindowTop = Scr->BarHeight +1;
  354.         };
  355.  
  356.         if (! (VisualInfo = GetVisualInfo(Scr,TAG_DONE)))
  357.                 return(2L);
  358.  
  359.         return(0L);
  360. }
  361.  
  362.  
  363.  
  364.  
  365. VOID CloseDownScreen()
  366. {
  367.         if (VisualInfo) {
  368.                 FreeVisualInfo(VisualInfo);
  369.                 VisualInfo = NULL;
  370.         }
  371.  
  372.         if (Scr) {
  373.                 UnlockPubScreen(NULL,Scr);
  374.                 Scr = NULL;
  375.         }
  376. }
  377.  
  378.  
  379.  
  380.  
  381. VOID RootRender()
  382. {
  383.     UBYTE cnt;
  384.     UWORD X,Y;
  385.  
  386.     ComputeFont(RootWidth,RootHeight);
  387.  
  388.     /* Other windows gadgets box */
  389.  
  390.     X = OffX +ComputeX(220);
  391.     Y = OffY +ComputeY(74);
  392.     DrawBevelBox(RootWnd->RPort,X,Y,
  393.                  ComputeX(366),
  394.                  ComputeY(52),
  395.                  GT_VisualInfo,VisualInfo,TAG_DONE);
  396.  
  397.     /* Inclusion Patterns box */
  398.     Y = OffY;
  399.     DrawBevelBox(RootWnd->RPort,X,Y,
  400.                  ComputeX(366),
  401.                  ComputeY(74),
  402.                  GT_VisualInfo,VisualInfo,TAG_DONE);
  403.     RootIText[ 1 ].LeftEdge  = X +5;
  404.     RootIText[ 1 ].TopEdge   = Y +3;
  405.  
  406.     /* Toggles box */
  407.     X = OffX;
  408.     DrawBevelBox(RootWnd->RPort,X,Y,
  409.                  ComputeX(220),
  410.                  ComputeY(126),
  411.                  GT_VisualInfo,VisualInfo,TAG_DONE);
  412.     RootIText[ 0 ].LeftEdge  = X +5;
  413.     RootIText[ 0 ].TopEdge   = Y +3;
  414.  
  415.     for (cnt = 0; cnt < ROOT_TNUM; cnt++) 
  416.     {
  417.         RootIText[ cnt ].ITextFont = Font;
  418.         PrintIText(RootWnd->RPort,&RootIText[ cnt ],0,0);    
  419.     }
  420.  
  421. }
  422.  
  423.  
  424. int OpenRootWindow()
  425. {
  426.         struct NewGadget        ng;
  427.         struct Gadget   *g;
  428.         UWORD           lc,tc;
  429.         UWORD           wleft = RootLeft,wtop = WindowTop,ww,wh;
  430.  
  431.         ComputeFont(RootWidth,RootHeight);
  432.  
  433.         ww = ComputeX(RootWidth);
  434.         wh = ComputeY(RootHeight);
  435.  
  436.         if ((wleft +ww +OffX +Scr->WBorRight) > Scr->Width) wleft = Scr->Width -ww;
  437.         if ((wtop +wh +OffY +Scr->WBorBottom) > Scr->Height) wtop = Scr->Height -wh;
  438.  
  439.         if (! (g = CreateContext(&RootGList)))
  440.                 return(1L);
  441.  
  442.         for(lc = 0,tc = 0; lc < Root_CNT; lc++) {
  443.  
  444.                 CopyMem((char *)&RootNGad[ lc ],(char *)&ng,(long)sizeof(struct NewGadget));
  445.  
  446.                 ng.ng_VisualInfo = VisualInfo;
  447.                 ng.ng_TextAttr   = Font;
  448.                 ng.ng_LeftEdge   = OffX +ComputeX(ng.ng_LeftEdge);
  449.                 ng.ng_TopEdge    = OffY +ComputeY(ng.ng_TopEdge);
  450.                 ng.ng_Width      = ComputeX(ng.ng_Width);
  451.                 ng.ng_Height     = ComputeY(ng.ng_Height);
  452.  
  453.                 RootGadgets[ lc ] = g = CreateGadgetA((ULONG)RootGTypes[ lc ],g,&ng,(struct TagItem *)&RootGTags[ tc ]);
  454.  
  455.                 while(RootGTags[ tc ]) tc += 2;
  456.                 tc++;
  457.  
  458.                 if (NOT g)
  459.                         return(2L);
  460.         }
  461.  
  462.         /**** CHANGED */
  463.         if (! (RootMenus = CreateMenus(RootNewMenu,GTMN_NewLookMenus,
  464.                                                                          TRUE,0L,
  465.                                                                          TAG_DONE)))
  466.                 return(3L);
  467.  
  468.         LayoutMenus(RootMenus,VisualInfo,GTMN_NewLookMenus,TRUE,TAG_DONE);
  469.  
  470.  
  471.         if (! (RootWnd = OpenWindowTags(NULL,
  472.                                 WA_Left,        wleft,
  473.                                 WA_Top,         wtop,
  474.                                 WA_Width,       ww +OffX +Scr->WBorRight,
  475.                                 WA_Height,      wh +OffY +Scr->WBorBottom,
  476.                                 WA_IDCMP,       BUTTONIDCMP|CHECKBOXIDCMP|CYCLEIDCMP|STRINGIDCMP|INTEGERIDCMP|IDCMP_GADGETDOWN|IDCMP_INTUITICKS|IDCMP_MOUSEMOVE|IDCMP_MOUSEBUTTONS|
  477.                                                 
  478.                                                 IDCMP_MENUPICK|IDCMP_CLOSEWINDOW|
  479.                                                 
  480.                                                 
  481.                                                 IDCMP_CHANGEWINDOW|IDCMP_REFRESHWINDOW,
  482.                                 WA_Flags,       WFLG_DRAGBAR|WFLG_DEPTHGADGET|WFLG_CLOSEGADGET|WFLG_SMART_REFRESH|WFLG_ACTIVATE,
  483.                                 WA_Gadgets,     RootGList,
  484.                                 WA_Title,       RootWdt,
  485.                                 WA_ScreenTitle, getString(COPYRIGHT_STRING),
  486.                                 WA_AutoAdjust,  TRUE,
  487. /**** ADDED */                 
  488.                             WA_NewLookMenus,TRUE,
  489.                                 WA_PubScreen,TRUE,
  490.                                 WA_PubScreenName,PubScreenName,
  491.                                 TAG_DONE)))
  492.         return(4L);
  493.  
  494.         SetMenuStrip(RootWnd,RootMenus);
  495.         GT_RefreshWindow(RootWnd,NULL);
  496.  
  497.         RootRender();
  498.  
  499.         return(0L);
  500. }
  501.  
  502.  
  503.  
  504. VOID 
  505. CloseOneWindow (struct Window *Wnd, struct Menu *Menus, struct Gadget *GList)
  506. {
  507.         if (Menus) 
  508.         {
  509.                 ClearMenuStrip(Wnd);
  510.                 FreeMenus(Menus);
  511.         }
  512.  
  513.         if (Wnd) 
  514.         {
  515.                 CloseWindow(Wnd);
  516.         }
  517.  
  518.         if (GList) {
  519.                 FreeGadgets(GList);
  520.         }
  521. }
  522.  
  523.  
  524.  
  525.  
  526. VOID
  527. CloseRootWindow()
  528. {
  529.         CloseOneWindow (RootWnd,RootMenus,RootGList);
  530.         RootWnd = NULL;
  531. }
  532.  
  533.