home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Games 1996 October
/
Amiga_Games_Extra_CD_10-96.bin
/
userbox
/
publicdomain
/
grabkey
/
source
/
gk_gui.c
< prev
next >
Wrap
C/C++ Source or Header
|
1996-08-02
|
19KB
|
716 lines
/*
** GrabKEY
**
** © 1996 by Timo C. Nentwig
** All Rights Reserved !
**
** Tcn@techbase.in-berlin.de
**
**
*/
/// #include
#include "gk_GST.h"
#include "gk_Protos.h"
///
/// #define
#define LT_VertGroup(Handle) LT_New (Handle, LA_Type, VERTICAL_KIND, TAG_END)
#define LT_HortGroup(Handle) LT_New (Handle, LA_Type, VERTICAL_KIND, TAG_END)
#define CHARS 20
enum
{
GAD_PAGER,
GAD_PAGEGROUP,
GAD_SAVE,
GAD_CANCEL,
GAD_HIDE,
GAD_QUIT,
GAD_PAGE_HOTKEYS_SCREEN_SAVE,
GAD_PAGE_HOTKEYS_SCREEN_CLIP,
GAD_PAGE_HOTKEYS_SCREEN_PRINT,
GAD_PAGE_HOTKEYS_WINDOW_SAVE,
GAD_PAGE_HOTKEYS_WINDOW_CLIP,
GAD_PAGE_HOTKEYS_WINDOW_PRINT,
GAD_PAGE_NOTIFY_START,
GAD_PAGE_NOTIFY_DONE,
GAD_PAGE_NOTIFY_ERROR,
GAD_PAGE_SAVE_FILE,
GAD_PAGE_SAVE_COUNT,
GAD_PAGE_SAVE_ICON,
};
enum
{
MEN_SAVE,
MEN_ABOUT,
MEN_QUIT,
};
///
/// proto
proto BOOL CreateGUI (VOID);
proto BOOL HandleGUI (VOID);
proto VOID RemoveGUI (VOID);
///
struct LayoutHandle *Handle;
struct Window *Window;
struct Menu *Menu;
struct Settings *GUI;
ULONG GUIMask;
/// CreateGUI ()
/*
* FUNCTION Creates the GUI.
*
* NOTE
*
* EXAMPLE CreateGUI ();
*
*/
BOOL
CreateGUI (VOID)
{
// Are we already open ?
if ( ! (Handle))
{
// Temp copy of settings for the GUI
GUI = Set;
if (Handle = LT_CreateHandleTags (NULL, LAHN_LocaleHook, &LocaleHook,
TAG_END))
{
LT_VertGroup (Handle);
{
LT_HortGroup (Handle);
{
BYTE InitPage = 0;
const LONG PageTitleID [] =
{
MSG_GUI_PAGE_HOTKEYS,
MSG_GUI_PAGE_NOTIFY,
MSG_GUI_PAGE_SAVE,
-1
};
LT_VertGroup (Handle);
{
LT_New (Handle, LA_Type, TAB_KIND,
LA_ID, GAD_PAGER,
LA_BYTE, &InitPage,
LATB_LabelTable, PageTitleID,
LATB_AutoPageID, GAD_PAGEGROUP,
LATB_TabKey, TRUE,
LATB_FullSize, TRUE,
TAG_END);
LT_EndGroup (Handle);
}
LT_New (Handle, LA_Type, VERTICAL_KIND,
LA_ID, GAD_PAGEGROUP,
LAGR_ActivePage, InitPage,
TAG_END);
{
/*
* Page: HotKeys
*/
LT_VertGroup (Handle);
{
LT_New (Handle, LA_Type, VERTICAL_KIND,
LA_LabelID, MSG_GUI_PAGE_HOTKEYS,
TAG_END);
{
LT_New (Handle, LA_Type, VERTICAL_KIND,
LA_LabelID, MSG_GUI_PAGE_HOTKEYS_WINDOW,
TAG_END);
{
LT_New (Handle, LA_Type, STRING_KIND,
LA_Chars, CHARS,
LA_ID, GAD_PAGE_HOTKEYS_WINDOW_SAVE,
LA_LabelID, MSG_GUI_PAGE_HOTKEYS_SAVE,
LA_STRPTR, GUI -> Key . Window . Save,
GTST_MaxChars, sizeof (GUI -> Key . Window . Save) - 1,
TAG_END);
LT_New (Handle, LA_Type, STRING_KIND,
LA_Chars, CHARS,
LA_ID, GAD_PAGE_HOTKEYS_WINDOW_CLIP,
LA_LabelID, MSG_GUI_PAGE_HOTKEYS_CLIP,
LA_STRPTR, GUI -> Key . Window . Clip,
GTST_MaxChars, sizeof (GUI -> Key . Window . Clip) - 1,
TAG_END);
LT_New (Handle, LA_Type, STRING_KIND,
LA_Chars, CHARS,
LA_ID, GAD_PAGE_HOTKEYS_WINDOW_PRINT,
LA_LabelID, MSG_GUI_PAGE_HOTKEYS_PRINT,
LA_STRPTR, GUI -> Key . Window . Print,
GTST_MaxChars, sizeof (GUI -> Key . Window . Print) - 1,
TAG_END);
LT_EndGroup (Handle);
}
LT_New (Handle, LA_Type, VERTICAL_KIND,
LA_LabelID, MSG_GUI_PAGE_HOTKEYS_SCREEN,
TAG_END);
{
LT_New (Handle, LA_Type, STRING_KIND,
LA_Chars, CHARS,
LA_ID, GAD_PAGE_HOTKEYS_SCREEN_SAVE,
LA_LabelID, MSG_GUI_PAGE_HOTKEYS_SAVE,
LA_STRPTR, GUI -> Key . Screen . Save,
GTST_MaxChars, sizeof (GUI -> Key . Screen . Save) - 1,
TAG_END);
LT_New (Handle, LA_Type, STRING_KIND,
LA_Chars, CHARS,
LA_ID, GAD_PAGE_HOTKEYS_SCREEN_CLIP,
LA_LabelID, MSG_GUI_PAGE_HOTKEYS_CLIP,
LA_STRPTR, GUI -> Key . Screen . Clip,
GTST_MaxChars, sizeof (GUI -> Key . Screen . Clip) - 1,
TAG_END);
LT_New (Handle, LA_Type, STRING_KIND,
LA_Chars, CHARS,
LA_ID, GAD_PAGE_HOTKEYS_SCREEN_PRINT,
LA_LabelID, MSG_GUI_PAGE_HOTKEYS_PRINT,
LA_STRPTR, GUI -> Key . Screen . Print,
GTST_MaxChars, sizeof (GUI -> Key . Screen . Print) - 1,
TAG_END);
LT_EndGroup (Handle);
}
LT_EndGroup (Handle);
}
LT_EndGroup (Handle);
}
/*
* Page: Notify
*/
LT_VertGroup (Handle);
{
LT_New (Handle, LA_Type, VERTICAL_KIND,
LA_LabelID, MSG_GUI_PAGE_NOTIFY,
TAG_END);
{
LT_New (Handle, LA_Type, STRING_KIND,
LA_Chars, CHARS,
LA_ID, GAD_PAGE_NOTIFY_START,
LA_LabelID, MSG_GUI_PAGE_NOTIFY_START,
LA_STRPTR, GUI -> Sound . Start,
GTST_MaxChars, sizeof (GUI -> Sound . Start) - 1,
LAST_Picker, TRUE,
TAG_END);
LT_New (Handle, LA_Type, STRING_KIND,
LA_Chars, CHARS,
LA_ID, GAD_PAGE_NOTIFY_DONE,
LA_LabelID, MSG_GUI_PAGE_NOTIFY_DONE,
LA_STRPTR, GUI -> Sound . Done,
GTST_MaxChars, sizeof (GUI -> Sound . Done) - 1,
LAST_Picker, TRUE,
TAG_END);
LT_New (Handle, LA_Type, XBAR_KIND,
TAG_END);
LT_New (Handle, LA_Type, STRING_KIND,
LA_Chars, CHARS,
LA_ID, GAD_PAGE_NOTIFY_ERROR,
LA_LabelID, MSG_GUI_PAGE_NOTIFY_ERROR,
LA_STRPTR, GUI -> Sound . Error,
GTST_MaxChars, sizeof (GUI -> Sound . Error) - 1,
LAST_Picker, TRUE,
TAG_END);
LT_EndGroup (Handle);
}
LT_EndGroup (Handle);
}
/*
* Page: Save
*/
LT_VertGroup (Handle);
{
LT_New (Handle, LA_Type, VERTICAL_KIND,
LA_LabelID, MSG_GUI_PAGE_SAVE,
TAG_END);
{
LT_New (Handle, LA_Type, STRING_KIND,
LA_Chars, CHARS,
LA_ID, GAD_PAGE_SAVE_FILE,
LA_LabelID, MSG_GUI_PAGE_SAVE_FILE,
LA_STRPTR, GUI -> File . Path,
GTST_MaxChars, sizeof (GUI -> File . Path) - 1,
LAST_Picker, TRUE,
TAG_END);
LT_New (Handle, LA_Type, CHECKBOX_KIND,
LA_ID, GAD_PAGE_SAVE_COUNT,
LA_LabelID, MSG_GUI_PAGE_SAVE_COUNT,
LA_BOOL, &GUI -> File . Count,
TAG_END);
LT_New (Handle, LA_Type, CHECKBOX_KIND,
LA_ID, GAD_PAGE_SAVE_ICON,
LA_LabelID, MSG_GUI_PAGE_SAVE_ICON,
LA_BOOL, &GUI -> File . Icon,
TAG_END);
LT_EndGroup (Handle);
}
LT_EndGroup (Handle);
}
LT_EndGroup (Handle);
}
LT_EndGroup (Handle);
}
LT_New (Handle, LA_Type, XBAR_KIND,
LAXB_FullSize, TRUE,
TAG_END);
LT_New (Handle, LA_Type, HORIZONTAL_KIND,
LAGR_Spread, TRUE,
LAGR_SameSize, TRUE,
TAG_END);
{
LT_New (Handle, LA_Type, BUTTON_KIND,
LA_LabelID, MSG_GUI_HIDE,
LA_ID, GAD_HIDE,
LABT_ReturnKey, TRUE,
LABT_ExtraFat, TRUE,
TAG_END);
/*
LT_New (Handle, LA_Type, BUTTON_KIND,
LA_LabelID, MSG_GUI_SAVE,
LA_ID, GAD_SAVE,
TAG_END);
*/
LT_New (Handle, LA_Type, BUTTON_KIND,
LA_LabelID, MSG_GUI_CANCEL,
LA_ID, GAD_CANCEL,
TAG_END);
LT_New (Handle, LA_Type, BUTTON_KIND,
LA_LabelID, MSG_GUI_QUIT,
LA_ID, GAD_QUIT,
LABT_EscKey, TRUE,
TAG_END);
LT_EndGroup (Handle);
}
LT_EndGroup (Handle);
}
{
LONG Error;
if ( ! (Menu = LT_NewMenuTags (LAMN_LayoutHandle, Handle,
LAMN_TitleText, PRG_TITLE,
LAMN_Error, &Error,
/*
LAMN_ItemID, MSG_GUI_MEN_SAVE, LAMN_UserData, MEN_SAVE,
LAMN_ItemText, NM_BARLABEL,
*/
LAMN_ItemID, MSG_GUI_MEN_ABOUT, LAMN_UserData, MEN_ABOUT,
LAMN_ItemText, NM_BARLABEL,
LAMN_ItemID, MSG_GUI_MEN_QUIT, LAMN_UserData, MEN_QUIT,
TAG_END)))
{
switch (Error)
{
case GTMENU_TRIMMED:
if ( ! (ErrorRequest ("OK|Cancel", LocaleString (MSG_ERR_GUI_MEN_TRIMMED))))
{
RemoveGUI();
}
break;
case GTMENU_NOMEM:
if ( ! (ErrorRequest ("OK|Cancel", LocaleString (MSG_ERR_GUI_MEN_NOMEM))))
{
RemoveGUI();
}
break;
// case GTMENU_INVALID:
default:
if ( ! (ErrorRequest ("OK|Cancel", LocaleString (MSG_ERR_GUI_MEN_INVALID))))
{
RemoveGUI();
}
break;
}
}
}
if (Window = LT_Build (Handle, LAWN_Title, PRG_TITLE,
LAWN_IDCMP, IDCMP_CLOSEWINDOW | IDCMP_MENUPICK | IDCMP_IDCMPUPDATE | IDCMP_GADGETUP,
LAWN_AutoRefresh, TRUE,
LAWN_SmartZoom, TRUE,
LAWN_BelowMouse, TRUE,
LAWN_Menu, Menu,
WA_Activate, TRUE,
WA_CloseGadget, TRUE,
WA_DepthGadget, TRUE,
WA_DragBar, TRUE,
WA_SmartRefresh, TRUE,
TAG_END))
{
GUIMask = PortMask (Window -> UserPort);
return (TRUE);
}
else
{
RemoveGUI();
ErrorRequest ("OK", LocaleString (MSG_ERR_OPENWINDOW));
}
}
GUIMask = NULL;
return (FALSE);
}
return (TRUE);
}
///
/// HandleGUI ()
/*
* FUNCTION Handle window IDCMP etc.
*
* NOTE
*
* EXAMPLE HandleGUI ();
*
*/
BOOL
HandleGUI (VOID)
{
if (Window)
{
struct MenuItem *MenuItem;
struct IntuiMessage *Message;
ULONG MsgClass,
MsgQualifier;
UWORD MsgCode;
struct Gadget *MsgGadget;
BOOL NewKeys = FALSE;
while (Message = LT_GetIMsg (Handle))
{
MsgClass = Message -> Class;
MsgCode = Message -> Code;
MsgQualifier = Message -> Qualifier;
MsgGadget = Message -> IAddress;
LT_ReplyIMsg (Message);
LT_HandleInput (Handle, MsgQualifier, &MsgClass, &MsgCode, &MsgGadget);
switch (MsgClass)
{
case IDCMP_CLOSEWINDOW:
RemoveGUI();
return (FALSE);
break;
case IDCMP_IDCMPUPDATE:
switch (MsgGadget -> GadgetID)
{
case GAD_PAGE_SAVE_FILE:
case GAD_PAGE_NOTIFY_DONE:
case GAD_PAGE_NOTIFY_START:
case GAD_PAGE_NOTIFY_ERROR:
{
UBYTE File [TT_LEN];
LT_LockWindow (Window);
strcpy (File, GetFile());
if (File)
{
LT_SetAttributes (Handle, (LONG) MsgGadget -> GadgetID, GTST_String, File,
TAG_END);
}
LT_UnlockWindow (Window);
}
break;
}
case IDCMP_GADGETUP:
switch (MsgGadget -> GadgetID)
{
case GAD_HIDE:
Set = GUI;
NewKeys = TRUE;
break;
case GAD_QUIT:
RemoveGUI();
return (TRUE);
break;
case GAD_SAVE:
Set = GUI;
SaveTTypes();
NewKeys = TRUE;
break;
case GAD_CANCEL:
RemoveGUI();
return (FALSE);
break;
/*
* Page: Notify
*/
case GAD_PAGE_NOTIFY_START:
LT_LockWindow (Window);
PlaySound (GUI -> Sound . Start);
LT_UnlockWindow (Window);
break;
case GAD_PAGE_NOTIFY_DONE:
LT_LockWindow (Window);
PlaySound (GUI -> Sound . Done);
LT_UnlockWindow (Window);
break;
case GAD_PAGE_NOTIFY_ERROR:
LT_LockWindow (Window);
PlaySound (GUI -> Sound . Error);
LT_UnlockWindow (Window);
break;
}
break;
case IDCMP_MENUPICK:
while (MsgCode != MENUNULL)
{
if (MenuItem = ItemAddress (Menu, (ULONG) MsgCode))
{
switch ((ULONG) GTMENUITEM_USERDATA (MenuItem))
{
case MEN_SAVE:
Set = GUI;
SaveTTypes();
NewKeys = TRUE;
break;
case MEN_ABOUT:
ShowRequest ("OK", PRG_TITLE " " PRG_VERSION "\n\n" \
"© " PRG_YEAR " by " PRG_AUTHOR "\n" \
"All Rights Reserved !\n\n" \
PRG_EMAIL);
break;
case MEN_QUIT:
RemoveGUI();
return (TRUE);
break;
}
break;
}
else
{
break;
}
}
break;
}
if (NewKeys)
{
LT_LockWindow (Window);
SetupCx();
LT_UnlockWindow (Window);
RemoveGUI();
return (FALSE);
}
}
}
return (FALSE);
}
///
/// RemoveGUI ()
/*
* FUNCTION Close the GUI.
*
* NOTE
*
* EXAMPLE RemoveGUI ();
*
*/
VOID
RemoveGUI (VOID)
{
if (Handle)
{
LT_DeleteHandle (Handle);
Handle = NULL;
}
Window = NULL;
GUIMask = NULL;
}
///