home *** CD-ROM | disk | FTP | other *** search
-
- /*
- * Source machine generated by GadToolsBox V2.0b
- * which is (c) Copyright 1991-1993 Jaba Development
- *
- * GUI Designed by : Martin W Scott, Gaƫl Marziou & Philippe Bastiani
- */
-
-
-
-
- #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 <intuition/intuitionbase.h>
- #include <libraries/gadtools.h>
- #include <graphics/displayinfo.h>
- #include <graphics/gfxbase.h>
- #include <proto/exec.h>
- #include <proto/intuition.h>
- #include <proto/gadtools.h>
- #include <proto/graphics.h>
- #include <proto/locale.h>
- #include <proto/utility.h>
- #include <proto/wb.h>
- #include <string.h>
-
- #include "code.h"
- #include "yak.h"
- #include "version.h"
- #include "hotkey_types.h"
- #include "gui.h"
- #include "hotkey_window.h"
- #include "KeyDef_window.h"
- #include "Options_window.h"
- #include "Requesters.h"
-
- #define CATCOMP_NUMBERS
- #include "yak_locale_strings.h"
-
- #ifdef _DCC
- # include <lists.h>
- #else
- # include "sas_lists.h"
- #endif
-
-
-
- IMPORT struct Catalog *Catalog;
-
- extern LONG (*HandleIDCMP)(VOID);
-
- struct Window *HotKeyWnd = NULL;
- struct Gadget *HotKeyGList = NULL;
- struct Gadget *HotKeyGadgets[HotKey_CNT];
- UWORD HotKeyWidth = 560;
- UWORD HotKeyHeight = 175;
- UBYTE *HotKeyWdt = NULL;
- BOOL HotKeyWdi = FALSE;
-
- struct AppWindow *HotKeyAppWin; /* AppWindow pointer */
- IMPORT struct MsgPort *AppMsgPort;
-
- /* Online help system */
- IMPORT void ShowYakHelp(char *, char *);
- IMPORT char *PrefsHelp;
-
-
- UBYTE *State1Labels[3];
-
-
- VOID
- InitState1Labels(VOID)
- {
- State1Labels[0] = getString(STATE_INACTIVE_STRING);
- State1Labels[1] = getString(STATE_ACTIVE_STRING);
- State1Labels[2] = NULL;
- }
-
-
-
- IMPORT struct MinList Actions1List;
-
- struct Node Actions1Nodes[NUM_HOTKEY_TYPES];
-
-
- VOID
- InitActionsList(void)
- {
- UBYTE i;
-
- for (i=0; i<NUM_HOTKEY_TYPES ;i++)
- {
- Actions1Nodes[i].ln_Name = getString(yhktypes[i].yhkt_nameID);
- }
-
- Actions1Nodes[0].ln_Succ = &Actions1Nodes[1];
- Actions1Nodes[0].ln_Pred = (struct Node *)&Actions1List.mlh_Head;
-
- for (i=1; i<NUM_HOTKEY_TYPES-1 ;i++)
- {
- Actions1Nodes[i].ln_Succ = &Actions1Nodes[i+1];
- Actions1Nodes[i].ln_Pred = &Actions1Nodes[i-1];
- }
-
- Actions1Nodes[NUM_HOTKEY_TYPES-1].ln_Succ = (struct Node *)&Actions1List.mlh_Tail;
- Actions1Nodes[NUM_HOTKEY_TYPES-1].ln_Pred = &Actions1Nodes[NUM_HOTKEY_TYPES-2];
-
- }
-
- struct MinList Actions1List = {
- (struct MinNode *)&Actions1Nodes[0],
- (struct MinNode *)NULL,
- (struct MinNode *)&Actions1Nodes[15] };
-
-
-
-
- UWORD HotKeyGTypes[] = {
- LISTVIEW_KIND,
- LISTVIEW_KIND,
- BUTTON_KIND,
- BUTTON_KIND,
- CYCLE_KIND,
- BUTTON_KIND,
- STRING_KIND,
- BUTTON_KIND,
- BUTTON_KIND
- };
-
- struct NewGadget HotKeyNGad[] = {
- 6, 15, 255, 96, NULL, NULL, GD_Actions, PLACETEXT_ABOVE|NG_HIGHLABEL, NULL, ACTIONS_STRING,
- 300, 15, 255, 64, NULL, NULL, GD_Hotkeys, PLACETEXT_ABOVE|NG_HIGHLABEL, NULL, HOTKEYS_STRING,
- 300, 93, 110, 13, NULL, NULL, GD_Add, PLACETEXT_IN, NULL, ADD_STRING,
- 445, 93, 110, 13, NULL, NULL, GD_Delete, PLACETEXT_IN, NULL, DELETE_STRING,
- 300, 135, 255, 13, NULL, NULL, GD_State, PLACETEXT_LEFT, NULL, STATE_STRING,
- 230, 159, 100, 13, NULL, NULL, GD_Return, PLACETEXT_IN, NULL, OK_STRING,
- 300, 77, 255, 14, NULL, NULL, GD_Name, 0, NULL, NULL,
- 300, 120, 124, 13, NULL, NULL, GD_Definition, PLACETEXT_IN, NULL, DEFINITION_STRING,
- 431, 120, 124, 13, NULL, NULL, GD_Options, PLACETEXT_IN, NULL, OPTIONS_STRING
- };
-
-
- ULONG HotKeyGTags[] = {
- (GTLV_Labels), (ULONG)&Actions1List, (GTLV_ShowSelected), NULL, (TAG_DONE),
- (GTLV_ShowSelected), NULL, (TAG_DONE),
- (TAG_DONE),
- (TAG_DONE),
- (GTCY_Labels), (ULONG)&State1Labels[ 0 ], (TAG_DONE),
- (TAG_DONE),
- (GTST_MaxChars), 512, (TAG_DONE),
- (TAG_DONE),
- (TAG_DONE)
- };
-
- VOID
- HotKeyRender(VOID)
- {
- UWORD Width, Height;
-
- ComputeFont(HotKeyWidth,HotKeyHeight);
-
- Width = ComputeX(HotKeyWidth);
- Height = ComputeY(156);
-
- DrawThinBevelBox(Scr, HotKeyWnd->RPort,OffX,
- OffY,
- Width,
- Height,
- FALSE);
-
- DrawThinBevelBox(Scr, HotKeyWnd->RPort,OffX,
- OffY + Height,
- Width,
- ComputeY(HotKeyHeight)-Height,
- FALSE);
- }
-
-
-
-
- int
- OpenHotKeyWindow(VOID)
- {
- struct NewGadget ng;
- struct Gadget *g;
- UWORD lc, tc;
- WORD wleft=WindowLeft, wtop=WindowTop;
- UWORD ww, wh;
-
- ComputeFont( HotKeyWidth, HotKeyHeight );
-
- ww = OffX + ComputeX( HotKeyWidth ) + Scr->WBorRight;
- wh = OffY + ComputeY( HotKeyHeight ) + Scr->WBorBottom;
-
- SetUpWindowCoordinates(ww, wh, &wleft, &wtop);
-
- if ( ! ( g = CreateContext( &HotKeyGList )))
- return( 1L );
-
- for( lc = 0, tc = 0; lc < HotKey_CNT; lc++ ) {
-
- CopyMem((char * )&HotKeyNGad[ lc ], (char * )&ng, (long)sizeof( struct NewGadget ));
-
- ng.ng_VisualInfo = VisualInfo;
- ng.ng_TextAttr = Font;
- ng.ng_LeftEdge = OffX + ComputeX( ng.ng_LeftEdge );
- ng.ng_TopEdge = OffY + ComputeY( ng.ng_TopEdge );
- ng.ng_Width = ComputeX( ng.ng_Width );
- ng.ng_Height = ComputeY( ng.ng_Height);
-
- HotKeyGadgets[ lc ] = g = CreateGadgetA((ULONG)HotKeyGTypes[ lc ], g, &ng, ( struct TagItem * )&HotKeyGTags[ tc ] );
-
- while ( HotKeyGTags[ tc ] )
- tc += 2;
-
- tc++;
-
- if ( NOT g )
- return( 2L );
- }
-
- if (! (HotKeyWnd = OpenWindowTags(NULL,
- WA_Left, wleft,
- WA_Top, wtop,
- WA_Width, ww,
- WA_Height, wh,
- WA_IDCMP, LISTVIEWIDCMP|STRINGIDCMP|CYCLEIDCMP|BUTTONIDCMP|IDCMP_VANILLAKEY|IDCMP_REFRESHWINDOW|IDCMP_RAWKEY,
- WA_Flags, WFLG_DRAGBAR|WFLG_DEPTHGADGET|WFLG_SMART_REFRESH,
- WA_Gadgets, HotKeyGList,
- WA_Title, HotKeyWdt,
- WA_ScreenTitle,getString(COPYRIGHT_STRING),
- WA_PubScreen, Scr,
- WA_PubScreenName,PubScreenName,
- TAG_DONE)))
- return(4L);
-
- HotKeyAppWin = AddAppWindowA(0, 0, HotKeyWnd, AppMsgPort, NULL);
-
- GT_RefreshWindow(HotKeyWnd,NULL);
-
- HotKeyRender();
-
- return(0L);
- }
-
-
-
-
- VOID
- CloseHotKeyWindow(VOID)
- {
- CloseOneWindow (HotKeyWnd,NULL,HotKeyGList,HotKeyAppWin);
- HotKeyWnd = NULL;
- }
-
-
- /*******************************************************************************
- * HOTKEY SPECIFIC DATA/ROUTINES
- * perhaps move to another file?
- *******************************************************************************/
-
- /* prototypes */
- static struct Node *GetNode(struct List *lh, UWORD n);
- static UWORD GetNodeNum(struct List *lh, struct Node *node);
-
- /* external data */
- YakHotKey *curhk=NULL;
- UWORD curtype=0;
-
- /* get number of node in list - node MUST be there! */
- static UWORD
- GetNodeNum(struct List *lh, struct Node *node)
- {
- struct Node *ln;
- UWORD i;
-
- for (i = 0, ln = GetHead(lh); ln != node; ln = GetSucc(ln), i++)
- ;
- return i;
- }
-
- /* get nth node in list - list MUST have >= n nodes!!! */
- static struct Node *
- GetNode(struct List *lh, UWORD n)
- {
- struct Node *ln;
-
- for (ln = GetHead(lh); n--; ln = GetSucc(ln))
- ;
- return ln;
- }
-
-
-
- /* initialise all gadgets of hotkey window */
- static void
- InitHotKeyGadgets(VOID)
- {
-
- InitWindowGadget(GDX_Hotkeys, GTLV_Labels, (LONG)keylist(curtype), HOTKEY_WINDOW);
- InitWindowGadget(GDX_Actions, GTLV_Selected, curtype, HOTKEY_WINDOW);
-
- InitWindowGadget(GDX_Delete, GA_Disabled, !curhk, HOTKEY_WINDOW);
- /* something selected */
- if (curhk)
- {
- UWORD n = GetNodeNum(keylist(curtype), (struct Node *)curhk);
-
- InitWindowGadget(GDX_Name, GA_Disabled, FALSE, HOTKEY_WINDOW);
- InitWindowGadget(GDX_Name, GTST_String, (LONG)curhk->yhk_Name, HOTKEY_WINDOW);
-
- InitWindowGadget(GDX_State, GA_Disabled, FALSE, HOTKEY_WINDOW);
- InitWindowGadget(GDX_State, GTCY_Active, (LONG)curhk->yhk_State, HOTKEY_WINDOW);
-
- InitWindowGadget(GDX_Actions, GTLV_Top, curtype, HOTKEY_WINDOW);
- InitWindowGadget(GDX_Hotkeys, GTLV_Top , n, HOTKEY_WINDOW);
- InitWindowGadget(GDX_Hotkeys, GTLV_Selected, n, HOTKEY_WINDOW);
-
- InitWindowGadget(GDX_Definition, GA_Disabled, FALSE, HOTKEY_WINDOW);
-
- if(YHK_Takes_Opt(curhk))
- InitWindowGadget(GDX_Options, GA_Disabled, FALSE, HOTKEY_WINDOW);
- else
- InitWindowGadget(GDX_Options, GA_Disabled, TRUE, HOTKEY_WINDOW);
- }
- else /* no current hotkey */
- {
- InitWindowGadget(GDX_Hotkeys, GTLV_Selected, -1, HOTKEY_WINDOW);
-
- InitWindowGadget(GDX_Name, GTST_String, (LONG)"", HOTKEY_WINDOW);
- InitWindowGadget(GDX_Name, GA_Disabled, TRUE, HOTKEY_WINDOW);
-
- InitWindowGadget(GDX_State, GTCY_Active, 0, HOTKEY_WINDOW);
- InitWindowGadget(GDX_State, GA_Disabled, TRUE, HOTKEY_WINDOW);
-
- InitWindowGadget(GDX_Definition, GA_Disabled, TRUE, HOTKEY_WINDOW);
- InitWindowGadget(GDX_Options, GA_Disabled, TRUE, HOTKEY_WINDOW);
- }
- }
-
-
- /* handle hotkey window events */
- LONG
- HandleHotKeyIDCMP(VOID)
- {
- struct IntuiMessage *msg;
- struct Gadget *gadget;
- ULONG class;
- UWORD code;
- BOOL close=FALSE;
- LONG ret=RET_OKAY;
-
- while (!close && (msg = GT_GetIMsg(HotKeyWnd->UserPort)))
- {
- class = msg->Class;
- code = msg->Code;
- gadget = (struct Gadget *)msg->IAddress;
- GT_ReplyIMsg(msg);
-
- switch (class)
- {
- case GADGETUP:
- case GADGETDOWN:
- switch (gadget->GadgetID)
- {
- case GD_Actions:
- if (code != curtype)
- {
- curtype = code;
- curhk = (YakHotKey *)GetHead(keylist(curtype));
- InitHotKeyGadgets();
- }
- break;
-
- case GD_Hotkeys:
- curhk = (YakHotKey *)GetNode(keylist(curtype), code);
- InitHotKeyGadgets();
- break;
-
- case GD_State:
- if (curhk)
- curhk->yhk_State = code;
- InitHotKeyGadgets();
- break;
-
- case GD_Add:
- if (curhk=NewYakHotKey(curtype))
- {
- DefaultOptions(curhk);
- InitHotKeyGadgets();
- ActivateGadget(HotKeyGadgets[GDX_Name], HotKeyWnd, NULL);
- }
- break;
-
- case GD_Delete:
- if (curhk)
- {
- DeleteYakHotKey(curhk);
- curhk = NULL;
- InitHotKeyGadgets();
- }
- break;
-
- case GD_Name:
- if (!ModifyYHKName(curhk, GetString(gadget)))
- ActivateGadget(HotKeyGadgets[GDX_Name], HotKeyWnd, NULL);
- InitHotKeyGadgets();
- break;
-
- case GD_Definition:
- if (curhk)
- {
- if (!SwitchToKeyDefWindow(HOTKEY_WINDOW,
- curhk,
- curhk->yhk_Name))
- {
- PostError(getString(Couldnt_open_other_window_ERR));
- ret= RET_QUIT;
- }
- close=TRUE;
- }
- break;
-
- case GD_Options:
- if (curhk)
- {
- if (!SwitchToOptionsWindow())
- {
- PostError(getString(Couldnt_open_other_window_ERR));
- ret = RET_QUIT;
- }
- close=TRUE;
- }
- break;
-
- case GD_Return:
- {
- APTR err=0L;
-
- for (curtype=0; (curtype < NUM_HOTKEY_TYPES) && !err; curtype++)
- for (curhk=(YakHotKey *)GetHead(keylist(curtype));
- curhk && !(err=ControlYakHotKey(curhk));
- curhk=(YakHotKey *)GetSucc(curhk))
- ;
-
- if (!err)
- {
- curtype = 0;
- CloseHotKeyWindow();
- if (!ShowWindowID(ROOT_WINDOW))
- ret = RET_QUIT;
- close=TRUE;
- }
- else
- {
- curtype--;
- InitHotKeyGadgets();
- PostError(getString(err));
- }
- }
- break;
-
- } /* switch (gadget->GadgetID) */
- break;
-
- case IDCMP_RAWKEY:
- /* Help key pressed */
- if (code == 95)
- {
- /* Display the node */
- ShowYakHelp(PrefsHelp, "Hotkeys");
- }
- break;
-
- case REFRESHWINDOW:
- GT_BeginRefresh(HotKeyWnd);
- GT_EndRefresh(HotKeyWnd, TRUE);
- break;
-
- } /* switch (class) */
-
- } /* while more messages */
-
- return ret;
- }
-
- /* show our hotkey window */
- BOOL
- ShowHotKeyWindow(VOID)
- {
- if (!HotKeyWdi)
- {
- HotKeyWdi = TRUE;
-
- HotKeyWdt = getString(EDIT_HOTKEYS_STRING);
- LocalizeNGadLabels (HotKey_CNT, HotKeyNGad);
- InitActionsList ();
- InitState1Labels ();
- }
-
- if (!OpenHotKeyWindow()) /* like the name says... */
- {
- if (curwinID == ROOT_WINDOW)
- {
- curhk = (YakHotKey *)GetNode(keylist(curtype), 0);
- }
-
- InitHotKeyGadgets();
- wndsigflag = 1 << HotKeyWnd->UserPort->mp_SigBit;
- curwin = HotKeyWnd;
- curwinID = HOTKEY_WINDOW;
- HandleIDCMP = HandleHotKeyIDCMP;
-
- return TRUE;
- }
-
- FreeGadgets(HotKeyGList);
- CloseDownScreen();
- curwin = NULL;
- wndsigflag = 0L;
- return FALSE;
- }
-
-