home *** CD-ROM | disk | FTP | other *** search
/ Magazyn Exec 3 / CD_Magazyn_EXEC_nr_3.iso / Recent / util / mouse / FreeWheel.lha / FreeWheel / ButtonWin.c < prev    next >
C/C++ Source or Header  |  2000-05-26  |  8KB  |  273 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.  
  21. #define MIDCLICK_ID 1
  22. #define MIDCLICKROLL_ID 2
  23. #define MIDDOUBLECLICK_ID 3
  24. #define FOURTHCLICK_ID 4
  25. #define FOURTHCLICKROLL_ID 5
  26. #define FOURTHDOUBLECLICK_ID 6
  27.  
  28. BOOL ButtonWin_Show(struct ButtonWinContext *pwc);
  29. void ButtonWin_Hide(struct ButtonWinContext *pwc);
  30. BOOL ButtonWin_Handle(struct ButtonWinContext *pwc,unsigned long sigs);
  31. void ButtonWin_Dispose(struct ButtonWinContext *pwc);
  32.  
  33. extern struct WheelMouseContext *MyWM;
  34. extern struct CxContext *MyCx;
  35.  
  36. char *BWinGadTitles[]=
  37. {
  38.   "Middle button:",
  39.   "Fourth button:",
  40.   "Click:",
  41.   "Click + Roll:",
  42.   "Double Click:",
  43.   NULL
  44. };
  45.  
  46. #define MIDBUTTON_TITLE 0
  47. #define FOURTHBUTTON_TITLE 1
  48. #define CLICK_TITLE 2
  49. #define CLICKROLL_TITLE 3
  50. #define DOUBLECLICK_TITLE 4
  51.  
  52. BOOL ButtonWin_Show(struct ButtonWinContext *pwc)
  53. {
  54.   struct Gadget *gg;
  55.   int width,width2;
  56.   int winleft,wintop;
  57.  
  58.   if(pwc->Visible)
  59.     return(FALSE);
  60.  
  61.   if(!(pwc->Screen=LockPubScreen(NULL)))
  62.     return(FALSE);
  63.  
  64.   if(!(pwc->GUI=GUI_Create(pwc->Screen,pwc->Screen->Font,8,8)))
  65.   {
  66.     pwc->Hide(pwc);
  67.     return(FALSE);
  68.   }
  69.  
  70.   GUI_StringTab(pwc->GUI,BWinGadTitles);
  71.  
  72.   width=GUI_MaxStringWidth(pwc->GUI,MyWM->MidButton.ClickModeNames);
  73.   width2=GUI_MaxStringWidth(pwc->GUI,MyWM->MidButton.DoubleClickModeNames);
  74.   if(width2>width) width=width2;
  75.   width2=GUI_MaxStringWidth(pwc->GUI,MyWM->MidButton.ClickRollModeNames);
  76.   if(width2>width) width=width2;
  77.  
  78.   pwc->GUI->InnerWidth=pwc->GUI->TabStop+width+64;
  79.  
  80.   /* Middle mouse button stuff */
  81.  
  82.   gg=GUI_BuildText(pwc->GUI,BWinGadTitles[MIDBUTTON_TITLE]);
  83.  
  84.   gg=GUI_BuildCycleGadget(pwc->GUI,BWinGadTitles[CLICK_TITLE],MyWM->MidButton.ClickModeNames,MIDCLICK_ID);
  85.   GT_SetGadgetAttrs(gg,NULL,NULL,GTCY_Active,
  86.                     pwc->Prefs->GetLong(pwc->Prefs,"MidClick",0),TAG_DONE);
  87.  
  88.   gg=GUI_BuildCycleGadget(pwc->GUI,BWinGadTitles[CLICKROLL_TITLE],MyWM->MidButton.ClickRollModeNames,MIDCLICKROLL_ID);
  89.   GT_SetGadgetAttrs(gg,NULL,NULL,GTCY_Active,
  90.                     pwc->Prefs->GetLong(pwc->Prefs,"MidCRoll",0),TAG_DONE);
  91.  
  92.   gg=GUI_BuildCycleGadget(pwc->GUI,BWinGadTitles[DOUBLECLICK_TITLE],MyWM->MidButton.DoubleClickModeNames,MIDDOUBLECLICK_ID);
  93.   GT_SetGadgetAttrs(gg,NULL,NULL,GTCY_Active,
  94.                     pwc->Prefs->GetLong(pwc->Prefs,"MidDClick",0),TAG_DONE);
  95.  
  96.   /* Fourth mouse button stuff */
  97.  
  98.   gg=GUI_BuildText(pwc->GUI,BWinGadTitles[FOURTHBUTTON_TITLE]);
  99.  
  100.   gg=GUI_BuildCycleGadget(pwc->GUI,BWinGadTitles[CLICK_TITLE],MyWM->FourthButton.ClickModeNames,FOURTHCLICK_ID);
  101.   GT_SetGadgetAttrs(gg,NULL,NULL,GTCY_Active,
  102.                     pwc->Prefs->GetLong(pwc->Prefs,"4thClick",0),TAG_DONE);
  103.  
  104.   gg=GUI_BuildCycleGadget(pwc->GUI,BWinGadTitles[CLICKROLL_TITLE],MyWM->FourthButton.ClickRollModeNames,FOURTHCLICKROLL_ID);
  105.   GT_SetGadgetAttrs(gg,NULL,NULL,GTCY_Active,
  106.                     pwc->Prefs->GetLong(pwc->Prefs,"4thCRoll",0),TAG_DONE);
  107.  
  108.   gg=GUI_BuildCycleGadget(pwc->GUI,BWinGadTitles[DOUBLECLICK_TITLE],MyWM->FourthButton.DoubleClickModeNames,FOURTHDOUBLECLICK_ID);
  109.   GT_SetGadgetAttrs(gg,NULL,NULL,GTCY_Active,
  110.                     pwc->Prefs->GetLong(pwc->Prefs,"4thDClick",0),TAG_DONE);
  111.  
  112.   if(!(pwc->GUI->LastGadget))
  113.   {
  114.     pwc->Hide(pwc);
  115.     return(FALSE);
  116.   }
  117.  
  118.   winleft=pwc->Prefs->GetLong(pwc->Prefs,"ButtLeft",0);
  119.   wintop=pwc->Prefs->GetLong(pwc->Prefs,"ButtTop",1+pwc->Screen->BarHeight);
  120.  
  121.   if(!(pwc->Window=OpenWindowTags(NULL,WA_Left,winleft,
  122.                                        WA_Top,wintop,
  123.                                        WA_InnerWidth,pwc->GUI->InnerWidth,
  124.                                        WA_InnerHeight,pwc->GUI->InnerHeight,
  125.                                        WA_IDCMP,IDCMP_REFRESHWINDOW|IDCMP_CLOSEWINDOW|pwc->GUI->IDCMP,
  126.                                        WA_SizeGadget,FALSE,WA_DragBar,TRUE,
  127.                                        WA_DepthGadget,TRUE,WA_CloseGadget,TRUE,
  128.                                        WA_NewLookMenus,TRUE,
  129.                                        WA_Activate,FALSE,
  130.                                        WA_Title,"Button settings...",TAG_DONE)))
  131.   {
  132.     pwc->Hide(pwc);
  133.     return(FALSE);
  134.   }
  135.  
  136.   pwc->GUI->Attach(pwc->GUI,pwc->Window);
  137.  
  138.   pwc->Signals=1<<pwc->Window->UserPort->mp_SigBit;
  139.  
  140.   pwc->Visible=TRUE;
  141.   return(TRUE);
  142. }
  143.  
  144.  
  145. void ButtonWin_Hide(struct ButtonWinContext *pwc)
  146. {
  147.   if(pwc->Window)
  148.   {
  149.     pwc->Prefs->SetLong(pwc->Prefs,"ButtTop",pwc->Window->TopEdge);
  150.     pwc->Prefs->SetLong(pwc->Prefs,"ButtLeft",pwc->Window->LeftEdge);
  151.     CloseWindow(pwc->Window);
  152.   }
  153.   pwc->Window=FALSE;
  154.   pwc->Signals=0;
  155.  
  156.   if(pwc->GUI)
  157.     pwc->GUI->Dispose(pwc->GUI);
  158.   pwc->GUI=NULL;
  159.  
  160.   if(pwc->Screen)
  161.     UnlockPubScreen(NULL,pwc->Screen);
  162.   pwc->Screen=FALSE;
  163.  
  164.   if(pwc->Visible)
  165.     pwc->Visible=FALSE;
  166. }
  167.  
  168.  
  169. void ButtonWin_Dispose(struct ButtonWinContext *pwc)
  170. {
  171.   if(pwc)
  172.   {
  173.     if(pwc->Visible)
  174.       pwc->Hide(pwc);
  175.     free(pwc);
  176.   }
  177. }
  178.  
  179.  
  180. struct ButtonWinContext *ButtonWin_Create(struct PrefsGroup *pg)
  181. {
  182.   struct ButtonWinContext *pwc;
  183.   if(!(pwc=malloc(sizeof(struct ButtonWinContext))))
  184.     return(NULL);
  185.   memset(pwc,0,sizeof(struct ButtonWinContext));
  186.   pwc->Dispose=ButtonWin_Dispose;
  187.   pwc->Handle=ButtonWin_Handle;
  188.   pwc->Hide=ButtonWin_Hide;
  189.   pwc->Show=ButtonWin_Show;
  190.  
  191.   pwc->Prefs=pg;
  192.  
  193.   return(pwc);
  194. }
  195.  
  196.  
  197. BOOL ButtonWin_Handle(struct ButtonWinContext *pwc,unsigned long sigs)
  198. {
  199.   BOOL cont=TRUE,close=FALSE;
  200.   long value;
  201.   if(pwc)
  202.   {
  203.     if(sigs&pwc->Signals)
  204.     {
  205.       struct IntuiMessage *im;
  206.       while(im=GT_GetIMsg(pwc->Window->UserPort))
  207.       {
  208.         int class,code,id;
  209.         struct Gadget *gg;
  210.         class=im->Class;
  211.         code=im->Code;
  212.         switch(class)
  213.         {
  214.           case IDCMP_GADGETUP:
  215.             gg=(struct Gadget *)im->IAddress;
  216.             id=gg->GadgetID;
  217.             GT_ReplyIMsg(im);
  218.             switch(id)
  219.             {
  220.               case MIDCLICK_ID:
  221.                 GT_GetGadgetAttrs(gg,pwc->Window,NULL,GTCY_Active,&value,TAG_DONE);
  222.                 pwc->Prefs->SetLong(pwc->Prefs,"MidClick",value);
  223.                 MyWM->MidButton.ClickMode=value;
  224.                 break;
  225.               case MIDCLICKROLL_ID:
  226.                 GT_GetGadgetAttrs(gg,pwc->Window,NULL,GTCY_Active,&value,TAG_DONE);
  227.                 pwc->Prefs->SetLong(pwc->Prefs,"MidCRoll",value);
  228.                 MyWM->MidButton.ClickRollMode=value;
  229.                 break;
  230.               case MIDDOUBLECLICK_ID:
  231.                 GT_GetGadgetAttrs(gg,pwc->Window,NULL,GTCY_Active,&value,TAG_DONE);
  232.                 pwc->Prefs->SetLong(pwc->Prefs,"MidDClick",value);
  233.                 MyWM->MidButton.DoubleClickMode=value;
  234.                 break;
  235.               case FOURTHCLICK_ID:
  236.                 GT_GetGadgetAttrs(gg,pwc->Window,NULL,GTCY_Active,&value,TAG_DONE);
  237.                 pwc->Prefs->SetLong(pwc->Prefs,"4thClick",value);
  238.                 MyWM->FourthButton.ClickMode=value;
  239.                 break;
  240.               case FOURTHCLICKROLL_ID:
  241.                 GT_GetGadgetAttrs(gg,pwc->Window,NULL,GTCY_Active,&value,TAG_DONE);
  242.                 pwc->Prefs->SetLong(pwc->Prefs,"4thCRoll",value);
  243.                 MyWM->FourthButton.ClickRollMode=value;
  244.                 break;
  245.               case FOURTHDOUBLECLICK_ID:
  246.                 GT_GetGadgetAttrs(gg,pwc->Window,NULL,GTCY_Active,&value,TAG_DONE);
  247.                 pwc->Prefs->SetLong(pwc->Prefs,"4thDClick",value);
  248.                 MyWM->FourthButton.DoubleClickMode=value;
  249.                 break;
  250.             }
  251.             break;
  252.           case IDCMP_CLOSEWINDOW:
  253.             GT_ReplyIMsg(im);
  254.             close=TRUE;
  255.             break;
  256.           case IDCMP_REFRESHWINDOW:
  257.             GT_ReplyIMsg(im);
  258.             GT_BeginRefresh(pwc->Window);
  259.             GT_EndRefresh(pwc->Window, TRUE);
  260.             break;
  261.           default:
  262.             GT_ReplyIMsg(im);
  263.             break;
  264.         }
  265.       }
  266.     }
  267.   }
  268.   if(close)
  269.     pwc->Hide(pwc);
  270.   return(cont);
  271. }
  272.  
  273.