home *** CD-ROM | disk | FTP | other *** search
- /************************************************************************
- ********************** BGUI MOUSECYCLING WINDOW ***********************
- ************************************************************************/
-
- #define __USE_SYSBASE
-
- #include <exec/execbase.h>
- #include <exec/memory.h>
- #include <exec/types.h>
- #include <intuition/intuition.h>
- #include <intuition/classes.h>
- #include <intuition/classusr.h>
- #include <intuition/imageclass.h>
- #include <intuition/gadgetclass.h>
- #include <libraries/bgui.h>
- #include <libraries/bgui_macros.h>
- #include <workbench/workbench.h>
- #include <proto/exec.h>
- #include <proto/dos.h>
- #include <proto/intuition.h>
- #include <proto/bgui.h>
- #include <proto/wb.h>
- #include <clib/alib_protos.h>
- #include <string.h>
- #include <stdlib.h>
-
- #include "code.h"
- #include "version.h"
- #include "yak.h"
- #include "hotkey_types.h"
- #include "MouseCycling_Window.h"
- #include "KeyDef_Window.h"
- #include "gui.h"
- #include "Handlers.h"
- #include "Requesters.h"
-
- #define CATCOMP_NUMBERS
- #include "yak_locale_strings.h"
-
- /************************************************************************
- ***************************** REFERENCES ******************************
- ************************************************************************/
-
- IMPORT LONG (*HandleReturnID)(LONG ID);
-
- IMPORT char *PrefsHelp;
-
- /************************************************************************
- ***************************** LOCAL DATA ******************************
- ************************************************************************/
-
- struct Window *MouseCyclingWnd = NULL;
- Object *MouseCyclingWndObj = NULL;
- Object *MouseCyclingObjects[MouseCycling_CNT];
- Object *WindowToFrontGroup,*WindowToBackGroup,*ScreenCyclingGroup;
- Object *MouseCyclingPageObj = NULL;
- Object *MouseCyclingTabsObj = NULL;
- UBYTE *MouseCyclingPageLabels[4];
- UBYTE *Click1Labels[4];
- struct IBox MouseCyclingBox;
- BOOL MouseCyclingBoxValid = FALSE;
-
- /************************************************************************
- ********************* CREATEMOUSECYCLINGWINDOW() **********************
- *************************************************************************
- * Create the mousecycling window object tree. Returns the window object
- * ptr or NULL if create failed. Gadgets are initialised with default
- * values, InitMouseCyclingGadgets must be called after window opened to
- * reflect current settings.
- *
- *************************************************************************/
-
- APTR CreateMouseCyclingWindow(void)
- {
- Object *obj,*wtfpg,*wtbpg,*scrcycpg;
-
- static struct TagItem MxToPageMap[] = { /* update map between tabs */
- MX_Active, PAGE_Active, TAG_DONE /* gadget and page object */
- };
-
- /* put localised strings into Clicks cycle gadget labels */
- Click1Labels[0] = getString(SIMPLE_CLICK_STRING);
- Click1Labels[1] = getString(DOUBLE_CLICK_STRING);
- Click1Labels[2] = getString(TRIPLE_CLICK_STRING);
- Click1Labels[3] = NULL;
-
- /* put localised strings into MouseCycling page gadget labels */
- MouseCyclingPageLabels[0] = getString(WINDOW_TO_FRONT);
- MouseCyclingPageLabels[1] = getString(WINDOW_TO_BACK);
- MouseCyclingPageLabels[2] = getString(SCREENS_CYCLING);
- MouseCyclingPageLabels[3] = NULL;
-
- /* Create Window To Front Page */
-
- wtfpg = VGroupObject, Spacing(2),
- StartMember,
- CH_WinToFrontActive = CheckBoxObject,
- LAB_Label, getString(STATE_ACTIVE_STRING),
- LAB_Place, PLACE_RIGHT,
- GA_ID, GD_WindowToFrontActive,
- ButtonFrame,
- FRM_Flags, FRF_EDGES_ONLY,
- EndObject, FixMinWidth,
- EndMember,
- VarSpace(DEFAULT_WEIGHT/10),
- StartMember,
- WindowToFrontGroup = VGroupObject, Spacing(2),
- StartMember,
- CH_ScrToFront = CheckBoxObject,
- LAB_Label, getString(ScreenToFront_ACT),
- LAB_Place, PLACE_RIGHT,
- GA_ID, GD_ScreenToFront_Check,
- ButtonFrame,
- FRM_Flags, FRF_EDGES_ONLY,
- EndObject, FixMinWidth,
- EndMember,
- VarSpace(DEFAULT_WEIGHT/10),
- StartMember,
- CH_ExcludeWBWin = CheckBoxObject,
- LAB_Label, getString(EXCLUDE_WB_WINDOW),
- LAB_Place, PLACE_RIGHT,
- GA_ID, GD_ExcludeWbWindow,
- ButtonFrame,
- FRM_Flags, FRF_EDGES_ONLY,
- EndObject, FixMinWidth,
- EndMember,
- VarSpace(DEFAULT_WEIGHT/10),
- StartMember,
- STR_WinToFrontPat = StringObject,
- LAB_Label, getString(INCLUDE_SCREENS),
- RidgeFrame,
- STRINGA_MaxChars,256,
- STRINGA_MinCharsVisible,10,
- GA_ID, GD_WindowToFrontPattern,
- GA_TabCycle, TRUE,
- EndObject, NoAlign,
- EndMember,
- VarSpace(DEFAULT_WEIGHT/10),
- StartMember,
- HGroupObject, Spacing(2),
- StartMember,
- CYC_WinToFrontClicks = CycleObject,
- GA_ID, GD_WindowToFrontClicks,
- ButtonFrame,
- CYC_Labels, Click1Labels,
- CYC_Popup, TRUE, /* "drop-down" menu */
- EndObject,
- EndMember,
- StartMember,
- BT_HotkeyWinToFront = Button(
- getString(DEFINITION_STRING),
- GD_HotkeyWindowToFront),
- EndMember,
- EndObject,
- EndMember,
- EndObject, Weight(DEFAULT_WEIGHT*5),
- EndMember,
- EndObject;
-
- /* Create Window To Back Page */
-
- wtbpg = VGroupObject, Spacing(2),
- StartMember,
- CH_WinToBackActive = CheckBoxObject,
- LAB_Label, getString(STATE_ACTIVE_STRING),
- LAB_Place, PLACE_RIGHT,
- GA_ID, GD_WindowToBackActive,
- ButtonFrame,
- FRM_Flags, FRF_EDGES_ONLY,
- EndObject, FixMinWidth,
- EndMember,
- VarSpace(DEFAULT_WEIGHT/10),
- StartMember,
- WindowToBackGroup = VGroupObject, Spacing(2),
- VarSpace(DEFAULT_WEIGHT*11/10),
- StartMember,
- CH_ScrToBack = CheckBoxObject,
- LAB_Label, getString(ScreenToBack_ACT),
- LAB_Place, PLACE_RIGHT,
- GA_ID, GD_ScreenToBack_Check,
- ButtonFrame,
- FRM_Flags, FRF_EDGES_ONLY,
- EndObject, FixMinWidth,
- EndMember,
- VarSpace(DEFAULT_WEIGHT/10),
- StartMember,
- STR_WinToBackPat = StringObject,
- LAB_Label, getString(INCLUDE_SCREENS),
- RidgeFrame,
- STRINGA_MaxChars,256,
- STRINGA_MinCharsVisible,10,
- GA_ID, GD_WindowToBackPattern,
- GA_TabCycle, TRUE,
- EndObject, NoAlign,
- EndMember,
- VarSpace(DEFAULT_WEIGHT/10),
- StartMember,
- HGroupObject, Spacing(2),
- StartMember,
- CYC_WinToBackClicks = CycleObject,
- GA_ID, GD_WindowToBackClicks,
- ButtonFrame,
- CYC_Labels, Click1Labels,
- CYC_Popup, TRUE, /* "drop-down" menu */
- EndObject,
- EndMember,
- StartMember,
- BT_HotkeyWinToBack = Button(
- getString(DEFINITION_STRING),
- GD_HotkeyWindowToBack),
- EndMember,
- EndObject,
- EndMember,
- EndObject, Weight(DEFAULT_WEIGHT*5),
- EndMember,
- EndObject;
-
- /* Create Screens Cycling Page */
-
- scrcycpg = VGroupObject, Spacing(2),
- StartMember,
- CH_ScrCyclingActive = CheckBoxObject,
- LAB_Label, getString(STATE_ACTIVE_STRING),
- LAB_Place, PLACE_RIGHT,
- GA_ID, GD_ScreenCyclingActive,
- ButtonFrame,
- FRM_Flags, FRF_EDGES_ONLY,
- EndObject, FixMinWidth,
- EndMember,
- VarSpace(DEFAULT_WEIGHT/10),
- StartMember,
- ScreenCyclingGroup = VGroupObject, Spacing(2),
- VarSpace(DEFAULT_WEIGHT*22/10),
- StartMember,
- STR_ScrCyclingPat = StringObject,
- LAB_Label, getString(INCLUDE_SCREENS),
- RidgeFrame,
- STRINGA_MaxChars,256,
- STRINGA_MinCharsVisible,10,
- GA_ID, GD_ScreenCyclingPattern,
- GA_TabCycle, TRUE,
- EndObject, NoAlign,
- EndMember,
- VarSpace(DEFAULT_WEIGHT/10),
- StartMember,
- HGroupObject, Spacing(2),
- StartMember,
- CYC_ScrCyclingClicks = CycleObject,
- GA_ID, GD_ScreenCyclingClicks,
- ButtonFrame,
- CYC_Labels, Click1Labels,
- CYC_Popup, TRUE, /* "drop-down" menu */
- EndObject,
- EndMember,
- StartMember,
- BT_HotkeyScrCycling = Button(
- getString(DEFINITION_STRING),
- GD_HotkeyScreenCycling),
- EndMember,
- EndObject,
- EndMember,
- EndObject, Weight(DEFAULT_WEIGHT*5),
- EndMember,
- EndObject;
-
- obj = WindowObject,
- WINDOW_PubScreenName, PubScreenName,
- WINDOW_Title, getString(MOUSECYCLING_STRING),
- WINDOW_ScreenTitle, getString(COPYRIGHT_STRING),
- WINDOW_SmartRefresh, TRUE,
- WINDOW_SizeBottom, FALSE, /* put size gadget in right border */
- WINDOW_SizeRight, TRUE,
- WINDOW_AutoAspect, TRUE, /* automatic edges pixel width */
- (MouseCyclingBoxValid ? WINDOW_Bounds : TAG_IGNORE), &MouseCyclingBox,
- WINDOW_Position, POS_CENTERMOUSE,
- WINDOW_AppWindow, TRUE, /* make it an appwindow */
- WINDOW_RMBTrap, TRUE, /* trap rmb - no menu */
- WINDOW_CloseGadget, FALSE, /* no windowclose gadget please */
- (TextFont ? WINDOW_Font : TAG_IGNORE), &Attr, /* use font if specified */
- WINDOW_HelpFile, PrefsHelp, /* online help system */
- WINDOW_HelpNode, "MouseCycling",
- WINDOW_MasterGroup,
- VGroupObject, Spacing(4), HOffset(4), VOffset(4),
- StartMember,
- MouseCyclingTabsObj = MxObject,
- MX_TabsObject, TRUE,
- GA_ID, GD_Page_MCycling,
- MX_Labels, MouseCyclingPageLabels,
- EndObject,
- EndMember,
- StartMember,
- HorizSeparator,
- EndMember,
- StartMember,
- MouseCyclingPageObj = PageObject,
- PageMember, wtfpg,
- PageMember, wtbpg,
- PageMember, scrcycpg,
- EndObject, Weight(DEFAULT_WEIGHT*5),
- EndMember,
- VarSpace(DEFAULT_WEIGHT/10),
- StartMember,
- HorizSeparator,
- EndMember,
- StartMember,
- HGroupObject,
- VarSpace(DEFAULT_WEIGHT),
- StartMember,
- BT_Return5 = Button(getString(OK_STRING),GD_Return5),
- EndMember,
- VarSpace(DEFAULT_WEIGHT),
- EndObject,
- EndMember,
- EndObject,
- EndObject;
-
- if (obj)
- {
- /* add a notification map from page tabs gadget to page object */
- AddMap(MouseCyclingTabsObj,MouseCyclingPageObj,MxToPageMap);
-
- /* add conditional map: disables WindowToFront */
- /* group when CH_WinToFrontActive is unchecked */
- AddCondit(CH_WinToFrontActive,WindowToFrontGroup,GA_Selected,TRUE,
- GA_Disabled,FALSE,GA_Disabled,TRUE);
-
- /* add conditional map: disables WindowToBack */
- /* group when CH_WinToBackActive is unchecked */
- AddCondit(CH_WinToBackActive,WindowToBackGroup,GA_Selected,TRUE,
- GA_Disabled,FALSE,GA_Disabled,TRUE);
-
- /* add conditional map: disables ScreenCycling */
- /* group when CH_ScrCyclingActive is unchecked */
- AddCondit(CH_ScrCyclingActive,ScreenCyclingGroup,GA_Selected,TRUE,
- GA_Disabled,FALSE,GA_Disabled,TRUE);
- }
-
- return(obj);
- }
-
- /************************************************************************
- ********************** CLOSEMOUSECYCLINGWINDOW() **********************
- *************************************************************************
- * Close the mousecycling window, disposing of the window object.
- *
- *************************************************************************/
-
- void CloseMouseCyclingWindow(void)
- {
- if (MouseCyclingWnd)
- {
- GetAttr(WINDOW_Bounds,MouseCyclingWndObj,(ULONG *) &MouseCyclingBox);
- MouseCyclingBoxValid = TRUE;
- }
-
- DisposeObject(MouseCyclingWndObj);
- MouseCyclingWndObj = NULL;
- MouseCyclingWnd = NULL;
- }
-
- /************************************************************************
- ********************* INITMOUSECYCLINGGADGETS() ***********************
- *************************************************************************
- * Initialize the mousecycling window gadgets to reflect current settings.
- *
- *************************************************************************/
-
- static void InitMouseCyclingGadgets(void)
- {
- /* Notification doesn't seem to enable/disable these groups initially */
- SetGadgetAttrs((struct Gadget *)WindowToFrontGroup, MouseCyclingWnd, NULL,
- GA_Disabled, !Window_To_Front.State, TAG_DONE);
- SetGadgetAttrs((struct Gadget *)WindowToBackGroup, MouseCyclingWnd, NULL,
- GA_Disabled, !Window_To_Back.State, TAG_DONE);
- SetGadgetAttrs((struct Gadget *)ScreenCyclingGroup, MouseCyclingWnd, NULL,
- GA_Disabled, !ScreenCycling.State, TAG_DONE);
-
- InitWindowGadget(GDX_WindowToFrontActive, GA_Selected, Window_To_Front.State, MCYCLING_WINDOW);
- InitWindowGadget(GDX_WindowToFrontClicks, CYC_Active, Window_To_Front.RequiredClicks-1, MCYCLING_WINDOW);
- InitWindowGadget(GDX_ScreenToFront_Check, GA_Selected, Window_To_Front.Options & Opt_ScreenToFront, MCYCLING_WINDOW);
- InitWindowGadget(GDX_ExcludeWbWindow, GA_Selected, Window_To_Front.Options & Opt_ExcludeWbWindow, MCYCLING_WINDOW);
- InitWindowGadget(GDX_WindowToFrontPattern, STRINGA_TextVal, (LONG)Window_To_Front.ScreenPatternData.patstr, MCYCLING_WINDOW);
-
- InitWindowGadget(GDX_WindowToBackActive, GA_Selected, Window_To_Back.State, MCYCLING_WINDOW);
- InitWindowGadget(GDX_WindowToBackClicks, CYC_Active, Window_To_Back.RequiredClicks-1, MCYCLING_WINDOW);
- InitWindowGadget(GDX_ScreenToBack_Check, GA_Selected, Window_To_Back.Options & Opt_ScreenToBack, MCYCLING_WINDOW);
- InitWindowGadget(GDX_WindowToBackPattern, STRINGA_TextVal, (LONG)Window_To_Back.ScreenPatternData.patstr, MCYCLING_WINDOW);
-
- InitWindowGadget(GDX_ScreenCyclingActive, GA_Selected, ScreenCycling.State, MCYCLING_WINDOW);
- InitWindowGadget(GDX_ScreenCyclingClicks, CYC_Active, ScreenCycling.RequiredClicks-1, MCYCLING_WINDOW);
- InitWindowGadget(GDX_ScreenCyclingPattern, STRINGA_TextVal, (LONG)ScreenCycling.ScreenPatternData.patstr, MCYCLING_WINDOW);
- }
-
- /************************************************************************
- ******************** HANDLEMOUSECYCLINGRETURNID() *********************
- *************************************************************************
- * Handle msgs arriving at mousecycling window - supply the ID returned by
- * BGUI. Returns either RET_OKAY or RET_QUIT.
- *
- *************************************************************************/
-
- LONG HandleMouseCyclingReturnID(LONG id)
- {
- LONG ret,num;
-
- ret = RET_OKAY;
-
- switch(id)
- {
- case GD_Return5:
- CloseMouseCyclingWindow();
- if (!ShowWindowID(ROOT_WINDOW))
- ret = RET_QUIT;
- break;
-
- /*******************/
- /* Window To Front */
- /* Gadgets */
- /*******************/
-
- case GD_WindowToFrontActive:
- Window_To_Front.State ^= YKHK_ACTIVE;
- break;
-
- case GD_ScreenToFront_Check:
- Window_To_Front.Options ^= Opt_ScreenToFront;
- break;
-
- case GD_ExcludeWbWindow:
- Window_To_Front.Options ^= Opt_ExcludeWbWindow;
- break;
-
- case GD_WindowToFrontClicks:
- GetAttr(CYC_Active,CYC_WinToFrontClicks,(ULONG *)&num);
- Window_To_Front.RequiredClicks = num + 1;
- break;
-
- case GD_HotkeyWindowToFront:
- if (!SwitchToKeyDefWindow(MCYCLING_WINDOW,
- &Window_To_Front,getString(WINDOW_TO_FRONT)))
- {
- PostError(getString(Couldnt_open_other_window_ERR));
- ret = RET_QUIT;
- }
- break;
-
- case GD_WindowToFrontPattern:
- NewPattern(GDX_WindowToFrontPattern, &Window_To_Front.ScreenPatternData,
- (struct Gadget *)STR_WinToFrontPat, MCYCLING_WINDOW);
- break;
-
- /******************/
- /* Window To Back */
- /* Gadgets */
- /******************/
-
- case GD_WindowToBackActive:
- Window_To_Back.State ^= YKHK_ACTIVE;
- break;
-
- case GD_ScreenToBack_Check:
- Window_To_Back.Options ^= Opt_ScreenToBack;
- break;
-
- case GD_WindowToBackClicks:
- GetAttr(CYC_Active,CYC_WinToBackClicks,(ULONG *)&num);
- Window_To_Back.RequiredClicks = num + 1;
- break;
-
- case GD_HotkeyWindowToBack:
- if (!SwitchToKeyDefWindow(MCYCLING_WINDOW,
- &Window_To_Back,getString(WINDOW_TO_BACK)))
- {
- PostError(getString(Couldnt_open_other_window_ERR));
- ret = RET_QUIT;
- }
- break;
-
- case GD_WindowToBackPattern:
- NewPattern(GDX_WindowToBackPattern, &Window_To_Back.ScreenPatternData,
- (struct Gadget *)STR_WinToBackPat, MCYCLING_WINDOW);
- break;
-
- /******************/
- /* Screen Cycling */
- /* Gadgets */
- /******************/
-
- case GD_ScreenCyclingActive:
- ScreenCycling.State ^= YKHK_ACTIVE;
- break;
-
- case GD_ScreenCyclingClicks:
- GetAttr(CYC_Active,CYC_ScrCyclingClicks,(ULONG *)&num);
- ScreenCycling.RequiredClicks = num + 1;
- break;
-
- case GD_HotkeyScreenCycling:
- if (!SwitchToKeyDefWindow(MCYCLING_WINDOW,
- &ScreenCycling,getString(SCREENS_CYCLING)))
- {
- PostError(getString(Couldnt_open_other_window_ERR));
- ret = RET_QUIT;
- }
- break;
-
- case GD_ScreenCyclingPattern:
- NewPattern(GDX_ScreenCyclingPattern, &ScreenCycling.ScreenPatternData,
- (struct Gadget *)STR_ScrCyclingPat, MCYCLING_WINDOW);
- break;
-
- default:
- break;
- }
-
- return(ret);
- }
-
- /************************************************************************
- ********************** SHOWMOUSECYCLINGWINDOW() ***********************
- *************************************************************************
- * Create and open the mousecycling window and initialize the gadgets to
- * reflect current settings. Sets up HandleReturnID function, curwin,
- * curwinobj and curwinID. Returns TRUE or FALSE to indicate success.
- *
- *************************************************************************/
-
- BOOL ShowMouseCyclingWindow(void)
- {
- if (MouseCyclingWndObj = (Object *)CreateMouseCyclingWindow())
- {
- if (MouseCyclingWnd = WindowOpen(MouseCyclingWndObj))
- {
- InitMouseCyclingGadgets();
- HandleReturnID = HandleMouseCyclingReturnID;
- curwin = MouseCyclingWnd;
- curwinobj = MouseCyclingWndObj;
- curwinID = MCYCLING_WINDOW;
- return(TRUE);
- }
- }
-
- CloseMouseCyclingWindow();
- curwin = NULL;
- curwinobj = NULL;
- wndsigflag = 0L;
- appwinsigflag = 0L;
- return(FALSE);
- }
-
-
-