mouse binds

git-svn-id: https://svn.eduke32.com/eduke32@826 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
terminx 2008-06-30 19:06:05 +00:00
parent 71292bb5f1
commit 95eed1cd2b
6 changed files with 79 additions and 12 deletions

View file

@ -854,6 +854,10 @@ void CONFIG_WriteBinds(void) // save binds and aliases to disk
if (boundkeys[i].key && *boundkeys[i].name) if (boundkeys[i].key && *boundkeys[i].name)
fprintf(fp,"bind %s%s \"%s\"\n",boundkeys[i].key,boundkeys[i].repeat?"":" norepeat",boundkeys[i].name); fprintf(fp,"bind %s%s \"%s\"\n",boundkeys[i].key,boundkeys[i].repeat?"":" norepeat",boundkeys[i].name);
for (i=0;i<MAXMOUSEBUTTONS;i++)
if (mousebind[i].key && *mousebind[i].name)
fprintf(fp,"bind %s%s \"%s\"\n",mousebind[i].key,mousebind[i].repeat?"":" norepeat",mousebind[i].name);
for (symb=symbols; symb!=NULL; symb=symb->next) for (symb=symbols; symb!=NULL; symb=symb->next)
if (symb->func == (void *)OSD_ALIAS) if (symb->func == (void *)OSD_ALIAS)
fprintf(fp,"alias %s \"%s\"\n", symb->name, symb->help); fprintf(fp,"alias %s \"%s\"\n", symb->name, symb->help);

View file

@ -1024,6 +1024,7 @@ typedef struct {
} keydef; } keydef;
extern keydef keynames[]; extern keydef keynames[];
extern char *mousenames[];
#ifdef __cplusplus #ifdef __cplusplus
} }

View file

@ -258,6 +258,8 @@ keydef keynames[]=
{0,0} {0,0}
}; };
char *mousenames[] = { "mouse1", "mouse2", "mouse3", "mouse4", "mouse5", "mouse6" };
enum enum
{ {
T_EOF = -2, T_EOF = -2,

View file

@ -57,6 +57,7 @@ static int32 CONTROL_DoubleClickSpeed;
int extinput[CONTROL_NUM_FLAGS]; int extinput[CONTROL_NUM_FLAGS];
keybind boundkeys[MAXBOUNDKEYS]; keybind boundkeys[MAXBOUNDKEYS];
keybind mousebind[MAXMOUSEBUTTONS];
void CONTROL_GetMouseDelta(void) void CONTROL_GetMouseDelta(void)
{ {
@ -732,13 +733,25 @@ void CONTROL_ButtonFunctionState(int32 *p1)
for (i=0; i<CONTROL_NumMouseButtons; i++) for (i=0; i<CONTROL_NumMouseButtons; i++)
{ {
j = CONTROL_MouseButtonMapping[i].doubleclicked; if (mousebind[i].name[0] && CONTROL_MouseButtonState[i])
if (j != KEYUNDEFINED) {
p1[j] |= CONTROL_MouseButtonClickedState[i]; if (mousebind[i].repeat || (mousebind[i].laststate == 0))
OSD_Dispatch(mousebind[i].name);
// if (!boundkeys[i].repeat)
// KB_ClearKeyDown(i);
}
mousebind[i].laststate = CONTROL_MouseButtonState[i];
j = CONTROL_MouseButtonMapping[i].singleclicked; if (!mousebind[i].name[0])
if (j != KEYUNDEFINED) {
p1[j] |= CONTROL_MouseButtonState[i]; j = CONTROL_MouseButtonMapping[i].doubleclicked;
if (j != KEYUNDEFINED)
p1[j] |= CONTROL_MouseButtonClickedState[i];
j = CONTROL_MouseButtonMapping[i].singleclicked;
if (j != KEYUNDEFINED)
p1[j] |= CONTROL_MouseButtonState[i];
}
} }
for (i=0; i<CONTROL_NumJoyButtons; i++) for (i=0; i<CONTROL_NumJoyButtons; i++)

View file

@ -223,6 +223,7 @@ typedef struct binding {
} keybind; } keybind;
extern keybind boundkeys[MAXBOUNDKEYS]; extern keybind boundkeys[MAXBOUNDKEYS];
extern keybind mousebind[6]; // FIXME
void CONTROL_ProcessBinds(void); void CONTROL_ProcessBinds(void);

View file

@ -932,21 +932,53 @@ static int osdcmd_bind(const osdfuncparm_t *parm)
if (parm->numparms==1&&!Bstrcasecmp(parm->parms[0],"showkeys")) if (parm->numparms==1&&!Bstrcasecmp(parm->parms[0],"showkeys"))
{ {
for (i=0;keynames[i].name;i++)OSD_Printf("%s\n",keynames[i].name); for (i=0;keynames[i].name;i++)OSD_Printf("%s\n",keynames[i].name);
for (i=0;i<MAXMOUSEBUTTONS;i++)OSD_Printf("%s\n",mousenames[i]);
return OSDCMD_OK; return OSDCMD_OK;
} }
if (parm->numparms==0) if (parm->numparms==0)
{ {
OSD_Printf("Keybindings:\n"); OSD_Printf("Keybindings:\n");
for (i=0;i<MAXBOUNDKEYS;i++)if (*boundkeys[i].name) for (i=0;i<MAXBOUNDKEYS;i++)
if (*boundkeys[i].name)
OSD_Printf("%-11s = %s\n",boundkeys[i].key,boundkeys[i].name); OSD_Printf("%-11s = %s\n",boundkeys[i].key,boundkeys[i].name);
for (i=0;i<MAXMOUSEBUTTONS;i++)
if (*mousebind[i].name)
OSD_Printf("%-11s = %s\n",mousebind[i].key,mousebind[i].name);
return OSDCMD_OK; return OSDCMD_OK;
} }
for (i=0;keynames[i].name;i++) for (i=0;keynames[i].name;i++)
if (!Bstrcasecmp(parm->parms[0],keynames[i].name)) if (!Bstrcasecmp(parm->parms[0],keynames[i].name))
break; break;
if (!keynames[i].name) return OSDCMD_SHOWHELP;
if (!keynames[i].name)
{
for (i=0;i<MAXMOUSEBUTTONS;i++)
if (!Bstrcasecmp(parm->parms[0],mousenames[i]))
break;
if (i >= MAXMOUSEBUTTONS)
return OSDCMD_SHOWHELP;
if (parm->numparms < 2)
{
OSD_Printf("%-11s = %s\n",mousenames[i], mousebind[i].name);
return OSDCMD_OK;
}
j = 1;
if (parm->numparms >= 2 && !Bstrcasecmp(parm->parms[j],"norepeat"))
{
mousebind[i].repeat = 0;
j++;
}
else mousebind[i].repeat = 1;
Bstrncpy(mousebind[i].name,parm->parms[j], MAXBINDSTRINGLENGTH-1);
mousebind[i].key=mousenames[i];
if (!osdexecscript)
OSD_Printf("%s\n",parm->raw);
return OSDCMD_OK;
}
if (parm->numparms < 2) if (parm->numparms < 2)
{ {
@ -974,8 +1006,12 @@ static int osdcmd_unbindall(const osdfuncparm_t *parm)
UNREFERENCED_PARAMETER(parm); UNREFERENCED_PARAMETER(parm);
for (i=0;i<MAXBOUNDKEYS;i++)if (*boundkeys[i].name) for (i=0;i<MAXBOUNDKEYS;i++)
boundkeys[i].name[0] = 0; if (*boundkeys[i].name)
boundkeys[i].name[0] = 0;
for (i=0;i<MAXMOUSEBUTTONS;i++)
if (*mousebind[i].name)
mousebind[i].name[0] = 0;
OSD_Printf("unbound all keys\n"); OSD_Printf("unbound all keys\n");
return OSDCMD_OK; return OSDCMD_OK;
} }
@ -988,8 +1024,18 @@ static int osdcmd_unbind(const osdfuncparm_t *parm)
for (i=0;keynames[i].name;i++) for (i=0;keynames[i].name;i++)
if (!Bstrcasecmp(parm->parms[0],keynames[i].name)) if (!Bstrcasecmp(parm->parms[0],keynames[i].name))
break; break;
if (!keynames[i].name) return OSDCMD_SHOWHELP; if (!keynames[i].name)
{
for (i=0;i<MAXMOUSEBUTTONS;i++)
if (!Bstrcasecmp(parm->parms[0],mousenames[i]))
break;
if (i >= MAXMOUSEBUTTONS)
return OSDCMD_SHOWHELP;
mousebind[i].repeat = 0;
mousebind[i].name[0] = 0;
OSD_Printf("unbound %s\n",mousebind[i].name);
return OSDCMD_OK;
}
boundkeys[keynames[i].id].repeat = 0; boundkeys[keynames[i].id].repeat = 0;
boundkeys[keynames[i].id].name[0] = 0; boundkeys[keynames[i].id].name[0] = 0;
OSD_Printf("unbound key %s\n",keynames[i].name); OSD_Printf("unbound key %s\n",keynames[i].name);