home *** CD-ROM | disk | FTP | other *** search
/ Magazyn Exec 3 / CD_Magazyn_EXEC_nr_3.iso / Recent / util / mouse / FreeWheel.lha / FreeWheel / ScrollWin.c < prev    next >
C/C++ Source or Header  |  2000-05-26  |  11KB  |  352 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 "Prefs.h"
  15. #include "GUI.h"
  16. #include "WheelMouse.h"
  17.  
  18. #include "ScrollWin.h"
  19.  
  20. #define HSCROLL_ID 1
  21. #define VSCROLL_ID 2
  22. #define NUDGEPROP_ID 3
  23. #define FORGERAWKEY_ID 4
  24. #define RAWKEYPAGE_ID 5
  25. #define PAGETHRESHOLD_ID 6
  26. #define FAKESCROLLSPEED_ID 7
  27. #define WINDOWMODE_ID 8
  28. #define HORIZSWAP_ID 9
  29. #define VERTSWAP_ID 10
  30. #define IGNOREMUI_ID 11
  31.  
  32. BOOL ScrollWin_Show(struct ScrollWinContext *pwc);
  33. void ScrollWin_Hide(struct ScrollWinContext *pwc);
  34. BOOL ScrollWin_Handle(struct ScrollWinContext *pwc,unsigned long sigs);
  35. void ScrollWin_Dispose(struct ScrollWinContext *pwc);
  36.  
  37. extern struct WheelMouseContext *MyWM;
  38.  
  39. char *SWinGadTitles[]=
  40. {
  41.   "Prop Gadgets:",
  42.   "H Speed:",
  43.   "V Speed:",
  44.   "Move->Scroll speed:",
  45.   "Enabled:",
  46.   "Shift paging:",
  47.   "Page after %ld lines ",
  48.   "Keypresses:",
  49.   "Scroll Window:",
  50.   "Mirror H Scroll:",
  51.   "Mirror V Scroll:",
  52.   "Ignore MUI:",
  53.   NULL
  54. };
  55.  
  56. #define PROPGADGETS_TITLE 0
  57. #define HORIZSPEED_TITLE 1
  58. #define VERTSPEED_TITLE 2
  59. #define FAKESCROLLSPEED_TITLE 3
  60. #define ENABLED_TITLE 4
  61. #define KEYPAGING_TITLE 5
  62. #define PAGETHRESHOLD_TITLE 6
  63. #define KEYPRESSES_TITLE 7
  64. #define WINDOWMODE_TITLE 8
  65. #define HORIZSWAP_TITLE 9
  66. #define VERTSWAP_TITLE 10
  67. #define IGNOREMUI_TITLE 11
  68.  
  69. BOOL ScrollWin_Show(struct ScrollWinContext *pwc)
  70. {
  71.   struct Gadget *gg;
  72.   int width,width2,topedge,tabstop;
  73.   int winleft,wintop;
  74.  
  75.   if(pwc->Visible)
  76.     return(FALSE);
  77.  
  78.   if(!(pwc->Screen=LockPubScreen(NULL)))
  79.     return(FALSE);
  80.  
  81.   if(!(pwc->GUI=GUI_Create(pwc->Screen,pwc->Screen->Font,8,8)))
  82.   {
  83.     pwc->Hide(pwc);
  84.     return(FALSE);
  85.   }
  86.  
  87.   GUI_StringTab(pwc->GUI,SWinGadTitles);
  88.  
  89.   width=GUI_MaxStringWidth(pwc->GUI,MyWM->MidButton.ClickModeNames);
  90.   width2=GUI_MaxStringWidth(pwc->GUI,MyWM->MidButton.DoubleClickModeNames);
  91.   if(width2>width) width=width2;
  92.   width2=GUI_MaxStringWidth(pwc->GUI,MyWM->MidButton.ClickRollModeNames);
  93.   if(width2>width) width=width2;
  94.  
  95.   pwc->GUI->InnerWidth=pwc->GUI->TabStop+width+64;
  96.  
  97.   gg=GUI_BuildCycleGadget(pwc->GUI,SWinGadTitles[WINDOWMODE_TITLE],MyWM->WindowModeNames,WINDOWMODE_ID);
  98.   GT_SetGadgetAttrs(gg,NULL,NULL,GTCY_Active,
  99.                     pwc->Prefs->GetLong(pwc->Prefs,"WindowMode",0),TAG_DONE);
  100.  
  101.   gg=GUI_BuildSlider(pwc->GUI,SWinGadTitles[FAKESCROLLSPEED_TITLE],1,32,17,FAKESCROLLSPEED_ID);
  102.   GT_SetGadgetAttrs(gg,NULL,NULL,GTSL_Level,
  103.                     pwc->Prefs->GetLong(pwc->Prefs,"FakeScrollSpeed",17),TAG_DONE);
  104.  
  105.   topedge=pwc->GUI->InnerHeight;
  106.  
  107.   gg=GUI_BuildCheckBox(pwc->GUI,SWinGadTitles[HORIZSWAP_TITLE],HORIZSWAP_ID);
  108.   GT_SetGadgetAttrs(gg,NULL,NULL,GTCB_Checked,
  109.                     pwc->Prefs->GetLong(pwc->Prefs,"HorizSwap",FALSE),TAG_DONE);
  110.  
  111.   pwc->GUI->InnerHeight=topedge;
  112.   tabstop=pwc->GUI->TabStop;
  113.  
  114.   pwc->GUI->TabStop=pwc->GUI->InnerWidth;
  115.   pwc->GUI->TabStop-=gg->Width+8+pwc->GUI->BorderLeft+pwc->GUI->BorderRight;
  116.  
  117.   gg=GUI_BuildCheckBox(pwc->GUI,SWinGadTitles[VERTSWAP_TITLE],VERTSWAP_ID);
  118.   GT_SetGadgetAttrs(gg,NULL,NULL,GTCB_Checked,
  119.                     pwc->Prefs->GetLong(pwc->Prefs,"VertSwap",FALSE),TAG_DONE);
  120.  
  121.   pwc->GUI->TabStop=tabstop;
  122.  
  123.   gg=GUI_BuildCheckBox(pwc->GUI,SWinGadTitles[IGNOREMUI_TITLE],IGNOREMUI_ID);
  124.   GT_SetGadgetAttrs(gg,NULL,NULL,GTCB_Checked,
  125.                     pwc->Prefs->GetLong(pwc->Prefs,"IgnoreMUI",TRUE),TAG_DONE);
  126.  
  127.   pwc->GUI->InnerHeight+=6;
  128.  
  129.   gg=GUI_BuildCheckBox(pwc->GUI,SWinGadTitles[PROPGADGETS_TITLE],NUDGEPROP_ID);
  130.   GT_SetGadgetAttrs(gg,NULL,NULL,GTCB_Checked,
  131.                     pwc->Prefs->GetLong(pwc->Prefs,"NudgeProp",TRUE),TAG_DONE);
  132.  
  133.   gg=GUI_BuildSlider(pwc->GUI,SWinGadTitles[HORIZSPEED_TITLE],1,32,17,HSCROLL_ID);
  134.   GT_SetGadgetAttrs(gg,NULL,NULL,GTSL_Level,
  135.                     pwc->Prefs->GetLong(pwc->Prefs,"XScrollSpeed",17),TAG_DONE);
  136.  
  137.   gg=GUI_BuildSlider(pwc->GUI,SWinGadTitles[VERTSPEED_TITLE],1,32,17,VSCROLL_ID);
  138.   GT_SetGadgetAttrs(gg,NULL,NULL,GTSL_Level,
  139.                     pwc->Prefs->GetLong(pwc->Prefs,"YScrollSpeed",17),TAG_DONE);
  140.  
  141.   pwc->GUI->InnerHeight+=6;
  142.  
  143.   topedge=pwc->GUI->InnerHeight;
  144.  
  145.   gg=GUI_BuildCheckBox(pwc->GUI,SWinGadTitles[KEYPRESSES_TITLE],FORGERAWKEY_ID);
  146.   GT_SetGadgetAttrs(gg,NULL,NULL,GTCB_Checked,
  147.                     pwc->Prefs->GetLong(pwc->Prefs,"ForgeRawKey",TRUE),TAG_DONE);
  148.  
  149.   tabstop=pwc->GUI->TabStop;
  150.   pwc->GUI->InnerHeight=topedge;
  151.  
  152.   pwc->GUI->TabStop=pwc->GUI->InnerWidth;
  153.   pwc->GUI->TabStop-=gg->Width+8+pwc->GUI->BorderLeft+pwc->GUI->BorderRight;
  154.  
  155.   gg=GUI_BuildCheckBox(pwc->GUI,SWinGadTitles[KEYPAGING_TITLE],RAWKEYPAGE_ID);
  156.   GT_SetGadgetAttrs(gg,NULL,NULL,GTCB_Checked,
  157.                     pwc->Prefs->GetLong(pwc->Prefs,"RawKeyPage",TRUE),TAG_DONE);
  158.  
  159.   pwc->GUI->TabStop=tabstop;
  160.  
  161.   gg=GUI_BuildSliderFormatted(pwc->GUI,SWinGadTitles[PAGETHRESHOLD_TITLE],1,12,4,PAGETHRESHOLD_ID);
  162.   GT_SetGadgetAttrs(gg,NULL,NULL,GTSL_Level,
  163.                     pwc->Prefs->GetLong(pwc->Prefs,"PageThreshold",4),TAG_DONE);
  164.  
  165.  
  166.   if(!(pwc->GUI->LastGadget))
  167.   {
  168.     pwc->Hide(pwc);
  169.     return(FALSE);
  170.   }
  171.  
  172.   winleft=pwc->Prefs->GetLong(pwc->Prefs,"ScrollLeft",0);
  173.   wintop=pwc->Prefs->GetLong(pwc->Prefs,"ScrollTop",1+pwc->Screen->BarHeight);
  174.  
  175.   if(!(pwc->Window=OpenWindowTags(NULL,WA_Left,winleft,
  176.                                        WA_Top,wintop,
  177.                                        WA_InnerWidth,pwc->GUI->InnerWidth,
  178.                                        WA_InnerHeight,pwc->GUI->InnerHeight,
  179.                                        WA_IDCMP,IDCMP_REFRESHWINDOW|IDCMP_CLOSEWINDOW|pwc->GUI->IDCMP,
  180.                                        WA_SizeGadget,FALSE,WA_DragBar,TRUE,
  181.                                        WA_DepthGadget,TRUE,WA_CloseGadget,TRUE,
  182.                                        WA_NewLookMenus,TRUE,
  183.                                        WA_Activate,FALSE,
  184.                                        WA_Title,"Scrolling settings...",TAG_DONE)))
  185.   {
  186.     pwc->Hide(pwc);
  187.     return(FALSE);
  188.   }
  189.  
  190.   pwc->GUI->Attach(pwc->GUI,pwc->Window);
  191.  
  192.   pwc->Signals=1<<pwc->Window->UserPort->mp_SigBit;
  193.  
  194.   pwc->Visible=TRUE;
  195.   return(TRUE);
  196. }
  197.  
  198.  
  199. void ScrollWin_Hide(struct ScrollWinContext *pwc)
  200. {
  201.   if(pwc->Window)
  202.   {
  203.     pwc->Prefs->SetLong(pwc->Prefs,"ScrollTop",pwc->Window->TopEdge);
  204.     pwc->Prefs->SetLong(pwc->Prefs,"ScrollLeft",pwc->Window->LeftEdge);
  205.     CloseWindow(pwc->Window);
  206.   }
  207.   pwc->Window=FALSE;
  208.   pwc->Signals=0;
  209.  
  210.   if(pwc->GUI)
  211.     pwc->GUI->Dispose(pwc->GUI);
  212.   pwc->GUI=NULL;
  213.  
  214.   if(pwc->Screen)
  215.     UnlockPubScreen(NULL,pwc->Screen);
  216.   pwc->Screen=FALSE;
  217.  
  218.   if(pwc->Visible)
  219.     pwc->Visible=FALSE;
  220. }
  221.  
  222.  
  223. void ScrollWin_Dispose(struct ScrollWinContext *pwc)
  224. {
  225.   if(pwc)
  226.   {
  227.     if(pwc->Visible)
  228.       pwc->Hide(pwc);
  229.     free(pwc);
  230.   }
  231. }
  232.  
  233.  
  234. struct ScrollWinContext *ScrollWin_Create(struct PrefsGroup *pg)
  235. {
  236.   struct ScrollWinContext *pwc;
  237.   if(!(pwc=malloc(sizeof(struct ScrollWinContext))))
  238.     return(NULL);
  239.   memset(pwc,0,sizeof(struct ScrollWinContext));
  240.   pwc->Dispose=ScrollWin_Dispose;
  241.   pwc->Handle=ScrollWin_Handle;
  242.   pwc->Hide=ScrollWin_Hide;
  243.   pwc->Show=ScrollWin_Show;
  244.  
  245.   pwc->Prefs=pg;
  246.  
  247.   return(pwc);
  248. }
  249.  
  250.  
  251. BOOL ScrollWin_Handle(struct ScrollWinContext *pwc,unsigned long sigs)
  252. {
  253.   BOOL cont=TRUE,close=FALSE;
  254.   long value;
  255.   if(pwc)
  256.   {
  257.     if(sigs&pwc->Signals)
  258.     {
  259.       struct IntuiMessage *im;
  260.       while(im=GT_GetIMsg(pwc->Window->UserPort))
  261.       {
  262.         int class,code,id;
  263.         struct Gadget *gg;
  264.         class=im->Class;
  265.         code=im->Code;
  266.         switch(class)
  267.         {
  268.           case IDCMP_GADGETUP:
  269.             gg=(struct Gadget *)im->IAddress;
  270.             id=gg->GadgetID;
  271.             GT_ReplyIMsg(im);
  272.             switch(id)
  273.             {
  274.               case HSCROLL_ID:
  275.                 GT_GetGadgetAttrs(gg,pwc->Window,NULL,GTSL_Level,&value,TAG_DONE);
  276.                 pwc->Prefs->SetLong(pwc->Prefs,"XScrollSpeed",value);
  277.                 MyWM->ScrollSpeedX=value;
  278.                 break;
  279.               case VSCROLL_ID:
  280.                 GT_GetGadgetAttrs(gg,pwc->Window,NULL,GTSL_Level,&value,TAG_DONE);
  281.                 pwc->Prefs->SetLong(pwc->Prefs,"YScrollSpeed",value);
  282.                 MyWM->ScrollSpeedY=value;
  283.                 break;
  284.               case FAKESCROLLSPEED_ID:
  285.                 GT_GetGadgetAttrs(gg,pwc->Window,NULL,GTSL_Level,&value,TAG_DONE);
  286.                 pwc->Prefs->SetLong(pwc->Prefs,"FakeScrollSpeed",value);
  287.                 MyWM->FakeScrollSpeed=value;
  288.                 break;
  289.               case PAGETHRESHOLD_ID:
  290.                 GT_GetGadgetAttrs(gg,pwc->Window,NULL,GTSL_Level,&value,TAG_DONE);
  291.                 pwc->Prefs->SetLong(pwc->Prefs,"PageThreshold",value);
  292.                 MyWM->PageThreshold=value;
  293.                 break;
  294.               case NUDGEPROP_ID:
  295.                 GT_GetGadgetAttrs(gg,pwc->Window,NULL,GTCB_Checked,&value,TAG_DONE);
  296.                 pwc->Prefs->SetLong(pwc->Prefs,"NudgeProp",value);
  297.                 MyWM->NudgeProp=value;
  298.                 break;
  299.               case FORGERAWKEY_ID:
  300.                 GT_GetGadgetAttrs(gg,pwc->Window,NULL,GTCB_Checked,&value,TAG_DONE);
  301.                 pwc->Prefs->SetLong(pwc->Prefs,"ForgeRawKey",value);
  302.                 MyWM->ForgeRawKey=value;
  303.                 break;
  304.               case RAWKEYPAGE_ID:
  305.                 GT_GetGadgetAttrs(gg,pwc->Window,NULL,GTCB_Checked,&value,TAG_DONE);
  306.                 pwc->Prefs->SetLong(pwc->Prefs,"RawKeyPage",value);
  307.                 MyWM->RawKeyPage=value;
  308.                 break;
  309.               case WINDOWMODE_ID:
  310.                 GT_GetGadgetAttrs(gg,pwc->Window,NULL,GTCY_Active,&value,TAG_DONE);
  311.                 pwc->Prefs->SetLong(pwc->Prefs,"WindowMode",value);
  312.                 MyWM->WindowMode=value;
  313.                 break;
  314.               case HORIZSWAP_ID:
  315.                 GT_GetGadgetAttrs(gg,pwc->Window,NULL,GTCB_Checked,&value,TAG_DONE);
  316.                 pwc->Prefs->SetLong(pwc->Prefs,"HorizSwap",value);
  317.                 MyWM->HorizSwap=value;
  318.                 break;
  319.               case VERTSWAP_ID:
  320.                 GT_GetGadgetAttrs(gg,pwc->Window,NULL,GTCB_Checked,&value,TAG_DONE);
  321.                 pwc->Prefs->SetLong(pwc->Prefs,"VertSwap",value);
  322.                 MyWM->VertSwap=value;
  323.                 break;
  324.               case IGNOREMUI_ID:
  325.                 GT_GetGadgetAttrs(gg,pwc->Window,NULL,GTCB_Checked,&value,TAG_DONE);
  326.                 pwc->Prefs->SetLong(pwc->Prefs,"IgnoreMUI",value);
  327.                 MyWM->IgnoreMUI=value;
  328.                 break;
  329.             }
  330.             break;
  331.           case IDCMP_CLOSEWINDOW:
  332.             GT_ReplyIMsg(im);
  333.             close=TRUE;
  334.             break;
  335.           case IDCMP_REFRESHWINDOW:
  336.             GT_ReplyIMsg(im);
  337.             GT_BeginRefresh(pwc->Window);
  338.             GT_EndRefresh(pwc->Window, TRUE);
  339.             break;
  340.           default:
  341.             GT_ReplyIMsg(im);
  342.             break;
  343.         }
  344.       }
  345.     }
  346.   }
  347.   if(close)
  348.     pwc->Hide(pwc);
  349.   return(cont);
  350. }
  351.  
  352.