home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 6 / AACD06.ISO / AACD / System / FreeWheel / PrefsWin.c < prev    next >
C/C++ Source or Header  |  1999-12-29  |  9KB  |  303 lines

  1.  
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4.  
  5. #include <exec/types.h>
  6. #include <intuition/intuition.h>
  7. #include <intuition/screens.h>
  8.  
  9. #include <clib/exec_protos.h>
  10. #include <clib/intuition_protos.h>
  11. #include <clib/gadtools_protos.h>
  12.  
  13. #include "Cx.h"
  14. #include "Prefs.h"
  15. #include "GUI.h"
  16. #include "WheelMouse.h"
  17.  
  18. #include "PrefsWin.h"
  19.  
  20. #define WINDOWMODE_ID 1
  21. #define MMBMODE_ID 2
  22. #define FOURTHMODE_ID 3
  23. #define SAVE_ID 4
  24. #define HIDE_ID 5
  25. #define QUIT_ID 6
  26. #define HOTKEY_ID 7
  27. #define SPEED_ID 8
  28. #define CLICKFRONT_ID 9
  29. #define CLICKBACK_ID 10
  30.  
  31. BOOL PrefsWin_Show(struct PrefsWinContext *pwc);
  32. void PrefsWin_Hide(struct PrefsWinContext *pwc);
  33. BOOL PrefsWin_Handle(struct PrefsWinContext *pwc,unsigned long sigs);
  34. void PrefsWin_Dispose(struct PrefsWinContext *pwc);
  35.  
  36. extern struct WheelMouseContext *MyWM;
  37. extern struct CxContext *MyCx;
  38.  
  39. char *GadgetTitles[]=
  40. {
  41.   "Scroll window:",
  42.   "Middle button:",
  43.   "Fourth button:",
  44.   "Mouse speed: %ld%%",
  45.   "Click to front:",
  46.   "Hot key:",
  47.   "Click to back:",
  48.   NULL
  49. };
  50.  
  51. #define SCROLLWINDOW_TITLE 0
  52. #define MMBMODE_TITLE 1
  53. #define FOURTHMODE_TITLE 2
  54. #define MOUSESPEED_TITLE 3
  55. #define CLICKFRONT_TITLE 4
  56. #define HOTKEY_TITLE 5
  57. #define CLICKBACK_TITLE 6
  58.  
  59. BOOL PrefsWin_Show(struct PrefsWinContext *pwc)
  60. {
  61.   struct Gadget *gg;
  62.   int width,width2,leftedge,topedge;
  63.  
  64.   if(pwc->Visible)
  65.     return(FALSE);
  66.  
  67.   if(!(pwc->Screen=LockPubScreen(NULL)))
  68.     return(FALSE);
  69.  
  70.   if(!(pwc->GUI=GUI_Create(pwc->Screen,pwc->Screen->Font,8,8)))
  71.   {
  72.     pwc->Hide(pwc);
  73.     return(FALSE);
  74.   }
  75.  
  76.   GUI_StringTab(pwc->GUI,GadgetTitles);
  77.  
  78.   width=GUI_MaxStringWidth(pwc->GUI,MyWM->WindowModeNames);
  79.   width2=GUI_MaxStringWidth(pwc->GUI,MyWM->MMBModeNames);
  80.   if(width2>width) width=width2;
  81.   width2=GUI_MaxStringWidth(pwc->GUI,MyWM->FourthButtonModeNames);
  82.   if(width2>width) width=width2;
  83.  
  84.   pwc->GUI->InnerWidth=pwc->GUI->TabStop+width+64;
  85.  
  86.   gg=GUI_BuildCycleGadget(pwc->GUI,GadgetTitles[SCROLLWINDOW_TITLE],MyWM->WindowModeNames,WINDOWMODE_ID);
  87.   GT_SetGadgetAttrs(gg,NULL,NULL,GTCY_Active,
  88.                     pwc->Prefs->GetLong(pwc->Prefs,"WindowMode",0),TAG_DONE);
  89.  
  90.   gg=GUI_BuildCycleGadget(pwc->GUI,GadgetTitles[MMBMODE_TITLE],MyWM->MMBModeNames,MMBMODE_ID);
  91.   GT_SetGadgetAttrs(gg,NULL,NULL,GTCY_Active,
  92.                     pwc->Prefs->GetLong(pwc->Prefs,"MMBMode",0),TAG_DONE);
  93.  
  94.   gg=GUI_BuildCycleGadget(pwc->GUI,GadgetTitles[FOURTHMODE_TITLE],MyWM->FourthButtonModeNames,FOURTHMODE_ID);
  95.   GT_SetGadgetAttrs(gg,NULL,NULL,GTCY_Active,
  96.                     pwc->Prefs->GetLong(pwc->Prefs,"FourthMode",0),TAG_DONE);
  97.  
  98.   gg=GUI_BuildSliderFormatted(pwc->GUI,GadgetTitles[MOUSESPEED_TITLE],33,300,100,SPEED_ID);
  99.   GT_SetGadgetAttrs(gg,NULL,NULL,GTSL_Level,
  100.                     pwc->Prefs->GetLong(pwc->Prefs,"MouseSpeed",100),TAG_DONE);
  101.  
  102.   gg=GUI_BuildCheckBox(pwc->GUI,GadgetTitles[CLICKFRONT_TITLE],CLICKFRONT_ID);
  103.   GT_SetGadgetAttrs(gg,NULL,NULL,GTCB_Checked,
  104.                     pwc->Prefs->GetLong(pwc->Prefs,"ClickFront",TRUE),TAG_DONE);
  105.  
  106.   gg=GUI_BuildCheckBox(pwc->GUI,GadgetTitles[CLICKBACK_TITLE],CLICKBACK_ID);
  107.   GT_SetGadgetAttrs(gg,NULL,NULL,GTCB_Checked,
  108.                     pwc->Prefs->GetLong(pwc->Prefs,"ClickBack",FALSE),TAG_DONE);
  109.  
  110.   gg=GUI_BuildString(pwc->GUI,GadgetTitles[HOTKEY_TITLE],255,HOTKEY_ID);
  111.   GT_SetGadgetAttrs(gg,NULL,NULL,GTST_String,
  112.                     pwc->Prefs->GetString(pwc->Prefs,"Hot Key","ctrl alt m"),TAG_DONE);
  113.  
  114.   GUI_StringTab(pwc->GUI,NULL);
  115.  
  116.   width=pwc->GUI->InnerWidth;
  117.   leftedge=pwc->GUI->BorderLeft;
  118.   topedge=pwc->GUI->InnerHeight;
  119.  
  120.   pwc->GUI->InnerWidth=width/3;
  121.   GUI_BuildWideButton(pwc->GUI,"Save",SAVE_ID);
  122.  
  123.   pwc->GUI->InnerHeight=topedge;
  124.   pwc->GUI->BorderLeft+=width/3;
  125.   GUI_BuildWideButton(pwc->GUI,"Hide",HIDE_ID);
  126.  
  127.   pwc->GUI->InnerHeight=topedge;
  128.   pwc->GUI->BorderLeft+=width/3;
  129.   GUI_BuildWideButton(pwc->GUI,"Quit",QUIT_ID);
  130.  
  131.   pwc->GUI->BorderLeft=leftedge;
  132.   pwc->GUI->InnerWidth=width;
  133.  
  134.   if(!(pwc->GUI->LastGadget))
  135.   {
  136.     pwc->Hide(pwc);
  137.     return(FALSE);
  138.   }
  139.  
  140.   if(!(pwc->Window=OpenWindowTags(NULL,WA_Left,0,
  141.                                        WA_Top,1+pwc->Screen->BarHeight,
  142.                                        WA_InnerWidth,pwc->GUI->InnerWidth,
  143.                                        WA_InnerHeight,pwc->GUI->InnerHeight,
  144.                                        WA_IDCMP,IDCMP_REFRESHWINDOW|IDCMP_CLOSEWINDOW|pwc->GUI->IDCMP,
  145.                                        WA_SizeGadget,FALSE,WA_DragBar,TRUE,
  146.                                        WA_DepthGadget,TRUE,WA_CloseGadget,TRUE,
  147.                                        WA_NewLookMenus,TRUE,
  148.                                        WA_Activate,FALSE,
  149.                                        WA_Title,"FreeWheel V1.0",TAG_DONE)))
  150.   {
  151.     pwc->Hide(pwc);
  152.     return(FALSE);
  153.   }
  154.  
  155.   pwc->GUI->Attach(pwc->GUI,pwc->Window);
  156.  
  157.   pwc->Signals=1<<pwc->Window->UserPort->mp_SigBit;
  158.  
  159.   pwc->Visible=TRUE;
  160.   return(TRUE);
  161. }
  162.  
  163.  
  164. void PrefsWin_Hide(struct PrefsWinContext *pwc)
  165. {
  166.   if(pwc->Window)
  167.     CloseWindow(pwc->Window);
  168.   pwc->Window=FALSE;
  169.   pwc->Signals=0;
  170.  
  171.   if(pwc->GUI)
  172.     pwc->GUI->Dispose(pwc->GUI);
  173.   pwc->GUI=NULL;
  174.  
  175.   if(pwc->Screen)
  176.     UnlockPubScreen(NULL,pwc->Screen);
  177.   pwc->Screen=FALSE;
  178.  
  179.   if(pwc->Visible)
  180.     pwc->Visible=FALSE;
  181. }
  182.  
  183.  
  184. void PrefsWin_Dispose(struct PrefsWinContext *pwc)
  185. {
  186.   if(pwc)
  187.   {
  188.     if(pwc->Visible)
  189.       pwc->Hide(pwc);
  190.     free(pwc);
  191.   }
  192. }
  193.  
  194.  
  195. struct PrefsWinContext *PrefsWin_Create(struct PrefsGroup *pg)
  196. {
  197.   struct PrefsWinContext *pwc;
  198.   if(!(pwc=malloc(sizeof(struct PrefsWinContext))))
  199.     return(NULL);
  200.   memset(pwc,0,sizeof(struct PrefsWinContext));
  201.   pwc->Dispose=PrefsWin_Dispose;
  202.   pwc->Handle=PrefsWin_Handle;
  203.   pwc->Hide=PrefsWin_Hide;
  204.   pwc->Show=PrefsWin_Show;
  205.  
  206.   pwc->Prefs=pg;
  207.  
  208.   return(pwc);
  209. }
  210.  
  211.  
  212. BOOL PrefsWin_Handle(struct PrefsWinContext *pwc,unsigned long sigs)
  213. {
  214.   BOOL cont=TRUE,close=FALSE;
  215.   long value;
  216.   char *string;
  217.   if(pwc)
  218.   {
  219.     if(sigs&pwc->Signals)
  220.     {
  221.       struct IntuiMessage *im;
  222.       while(im=GT_GetIMsg(pwc->Window->UserPort))
  223.       {
  224.         int class,code,id;
  225.         struct Gadget *gg;
  226.         class=im->Class;
  227.         code=im->Code;
  228.         switch(class)
  229.         {
  230.           case IDCMP_GADGETUP:
  231.             gg=(struct Gadget *)im->IAddress;
  232.             id=gg->GadgetID;
  233.             GT_ReplyIMsg(im);
  234.             switch(id)
  235.             {
  236.               case HOTKEY_ID:
  237.                 GT_GetGadgetAttrs(gg,pwc->Window,NULL,GTST_String,&string,TAG_DONE);
  238.                 pwc->Prefs->SetString(pwc->Prefs,"Hot Key",string);
  239.                 MyCx->SetHotKey(MyCx,string);
  240.                 break;
  241.               case WINDOWMODE_ID:
  242.                 GT_GetGadgetAttrs(gg,pwc->Window,NULL,GTCY_Active,&value,TAG_DONE);
  243.                 pwc->Prefs->SetLong(pwc->Prefs,"WindowMode",value);
  244.                 MyWM->WindowMode=value;
  245.                 break;
  246.               case MMBMODE_ID:
  247.                 GT_GetGadgetAttrs(gg,pwc->Window,NULL,GTCY_Active,&value,TAG_DONE);
  248.                 pwc->Prefs->SetLong(pwc->Prefs,"MMBMode",value);
  249.                 MyWM->MMBMode=value;
  250.                 break;
  251.               case FOURTHMODE_ID:
  252.                 GT_GetGadgetAttrs(gg,pwc->Window,NULL,GTCY_Active,&value,TAG_DONE);
  253.                 pwc->Prefs->SetLong(pwc->Prefs,"FourthMode",value);
  254.                 MyWM->FourthButtonMode=value;
  255.                 break;
  256.               case SPEED_ID:
  257.                 GT_GetGadgetAttrs(gg,pwc->Window,NULL,GTSL_Level,&value,TAG_DONE);
  258.                 pwc->Prefs->SetLong(pwc->Prefs,"MouseSpeed",value);
  259.                 MyWM->MouseSpeed=value;
  260.                 break;
  261.               case CLICKFRONT_ID:
  262.                 GT_GetGadgetAttrs(gg,pwc->Window,NULL,GTCB_Checked,&value,TAG_DONE);
  263.                 pwc->Prefs->SetLong(pwc->Prefs,"ClickFront",value);
  264.                 MyWM->ClickToFront=value;
  265.                 break;
  266.               case CLICKBACK_ID:
  267.                 GT_GetGadgetAttrs(gg,pwc->Window,NULL,GTCB_Checked,&value,TAG_DONE);
  268.                 pwc->Prefs->SetLong(pwc->Prefs,"ClickBack",value);
  269.                 MyWM->ClickToBack=value;
  270.                 break;
  271.               case QUIT_ID:
  272.                 cont=FALSE;
  273.                 break;
  274.               case HIDE_ID:
  275.                 close=TRUE;
  276.                 break;
  277.               case SAVE_ID:
  278.                 pwc->Prefs->Save(pwc->Prefs);
  279.                 break;
  280.             }
  281.             break;
  282.           case IDCMP_CLOSEWINDOW:
  283.             GT_ReplyIMsg(im);
  284.             close=TRUE;
  285.             break;
  286.           case IDCMP_REFRESHWINDOW:
  287.             GT_ReplyIMsg(im);
  288.             GT_BeginRefresh(pwc->Window);
  289.             GT_EndRefresh(pwc->Window, TRUE);
  290.             break;
  291.           default:
  292.             GT_ReplyIMsg(im);
  293.             break;
  294.         }
  295.       }
  296.     }
  297.   }
  298.   if(close)
  299.     pwc->Hide(pwc);
  300.   return(cont);
  301. }
  302.  
  303.