home *** CD-ROM | disk | FTP | other *** search
/ Magazyn Exec 3 / CD_Magazyn_EXEC_nr_3.iso / Recent / util / mouse / FreeWheel.lha / FreeWheel / PrefsWin.c < prev    next >
C/C++ Source or Header  |  2000-05-26  |  10KB  |  365 lines

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