Added mapping profile widgets. Still TODO, write code behind them.
This commit is contained in:
parent
b815fbfe47
commit
675b73cbed
|
@ -16,8 +16,10 @@ GamePadConfDialog_t::GamePadConfDialog_t(QWidget *parent)
|
||||||
QHBoxLayout *hbox1, *hbox2, *hbox3, *hbox4;
|
QHBoxLayout *hbox1, *hbox2, *hbox3, *hbox4;
|
||||||
QGridLayout *grid;
|
QGridLayout *grid;
|
||||||
QCheckBox *efs_chkbox, *udlr_chkbox;
|
QCheckBox *efs_chkbox, *udlr_chkbox;
|
||||||
QGroupBox *frame;
|
QGroupBox *frame1, *frame2;
|
||||||
QLabel *label;
|
QLabel *label;
|
||||||
|
QPushButton *newProfileButton;
|
||||||
|
QPushButton *applyProfileButton;
|
||||||
QPushButton *loadDefaultButton;
|
QPushButton *loadDefaultButton;
|
||||||
QPushButton *clearAllButton;
|
QPushButton *clearAllButton;
|
||||||
QPushButton *closebutton;
|
QPushButton *closebutton;
|
||||||
|
@ -77,6 +79,21 @@ GamePadConfDialog_t::GamePadConfDialog_t(QWidget *parent)
|
||||||
hbox3->addWidget( label );
|
hbox3->addWidget( label );
|
||||||
hbox3->addWidget( guidLbl );
|
hbox3->addWidget( guidLbl );
|
||||||
|
|
||||||
|
frame1 = new QGroupBox(tr("Mapping Profile:"));
|
||||||
|
grid = new QGridLayout();
|
||||||
|
|
||||||
|
frame1->setLayout( grid );
|
||||||
|
|
||||||
|
mapSel = new QComboBox();
|
||||||
|
applyProfileButton = new QPushButton( tr("Load") );
|
||||||
|
newProfileButton = new QPushButton( tr("New") );
|
||||||
|
|
||||||
|
grid->addWidget( mapSel , 0, 0, Qt::AlignCenter );
|
||||||
|
grid->addWidget( applyProfileButton, 0, 1, Qt::AlignCenter );
|
||||||
|
grid->addWidget( newProfileButton , 0, 2, Qt::AlignCenter );
|
||||||
|
|
||||||
|
mapSel->addItem( tr("Default"), 0 );
|
||||||
|
|
||||||
efs_chkbox = new QCheckBox( tr("Enable Four Score") );
|
efs_chkbox = new QCheckBox( tr("Enable Four Score") );
|
||||||
udlr_chkbox = new QCheckBox( tr("Allow Up+Down/Left+Right") );
|
udlr_chkbox = new QCheckBox( tr("Allow Up+Down/Left+Right") );
|
||||||
|
|
||||||
|
@ -88,13 +105,12 @@ GamePadConfDialog_t::GamePadConfDialog_t(QWidget *parent)
|
||||||
g_config->getOption("SDL.Input.EnableOppositeDirectionals", &opposite_dirs);
|
g_config->getOption("SDL.Input.EnableOppositeDirectionals", &opposite_dirs);
|
||||||
udlr_chkbox->setChecked( opposite_dirs );
|
udlr_chkbox->setChecked( opposite_dirs );
|
||||||
|
|
||||||
frame = new QGroupBox(tr("Buttons:"));
|
frame2 = new QGroupBox(tr("Current Active Button Mappings:"));
|
||||||
grid = new QGridLayout();
|
grid = new QGridLayout();
|
||||||
|
|
||||||
grid-> setHorizontalSpacing(50);
|
grid-> setHorizontalSpacing(50);
|
||||||
|
|
||||||
//frame->setFrameStyle( QFrame::Box );
|
frame2->setLayout( grid );
|
||||||
frame->setLayout( grid );
|
|
||||||
|
|
||||||
for (int i=0; i<GAMEPAD_NUM_BUTTONS; i++)
|
for (int i=0; i<GAMEPAD_NUM_BUTTONS; i++)
|
||||||
{
|
{
|
||||||
|
@ -167,9 +183,10 @@ GamePadConfDialog_t::GamePadConfDialog_t(QWidget *parent)
|
||||||
mainLayout->addLayout( hbox1 );
|
mainLayout->addLayout( hbox1 );
|
||||||
mainLayout->addLayout( hbox2 );
|
mainLayout->addLayout( hbox2 );
|
||||||
mainLayout->addLayout( hbox3 );
|
mainLayout->addLayout( hbox3 );
|
||||||
|
mainLayout->addWidget( frame1 );
|
||||||
mainLayout->addWidget( efs_chkbox );
|
mainLayout->addWidget( efs_chkbox );
|
||||||
mainLayout->addWidget( udlr_chkbox );
|
mainLayout->addWidget( udlr_chkbox );
|
||||||
mainLayout->addWidget( frame );
|
mainLayout->addWidget( frame2 );
|
||||||
mainLayout->addLayout( hbox4 );
|
mainLayout->addLayout( hbox4 );
|
||||||
|
|
||||||
setLayout( mainLayout );
|
setLayout( mainLayout );
|
||||||
|
|
|
@ -41,6 +41,7 @@ class GamePadConfDialog_t : public QDialog
|
||||||
QTimer *inputTimer;
|
QTimer *inputTimer;
|
||||||
QComboBox *portSel;
|
QComboBox *portSel;
|
||||||
QComboBox *devSel;
|
QComboBox *devSel;
|
||||||
|
QComboBox *mapSel;
|
||||||
QComboBox *profSel;
|
QComboBox *profSel;
|
||||||
QLabel *guidLbl;
|
QLabel *guidLbl;
|
||||||
QLabel *keyName[GAMEPAD_NUM_BUTTONS];
|
QLabel *keyName[GAMEPAD_NUM_BUTTONS];
|
||||||
|
|
|
@ -32,14 +32,24 @@
|
||||||
|
|
||||||
//#define MAX_JOYSTICKS 32
|
//#define MAX_JOYSTICKS 32
|
||||||
|
|
||||||
|
// Public Variables
|
||||||
GamePad_t GamePad[4];
|
GamePad_t GamePad[4];
|
||||||
|
|
||||||
|
// Static Functions
|
||||||
|
static int sdlButton2NesGpIdx( const char *id );
|
||||||
|
|
||||||
|
// Static Variables
|
||||||
|
static int s_jinited = 0;
|
||||||
|
|
||||||
|
//********************************************************************************
|
||||||
|
// Joystick Device
|
||||||
jsDev_t::jsDev_t(void)
|
jsDev_t::jsDev_t(void)
|
||||||
{
|
{
|
||||||
js = NULL;
|
js = NULL;
|
||||||
gc = NULL;
|
gc = NULL;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//********************************************************************************
|
||||||
int jsDev_t::close(void)
|
int jsDev_t::close(void)
|
||||||
{
|
{
|
||||||
if ( gc )
|
if ( gc )
|
||||||
|
@ -56,31 +66,37 @@ int jsDev_t::close(void)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//********************************************************************************
|
||||||
SDL_Joystick *jsDev_t::getJS(void)
|
SDL_Joystick *jsDev_t::getJS(void)
|
||||||
{
|
{
|
||||||
return js;
|
return js;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//********************************************************************************
|
||||||
const char *jsDev_t::getName(void)
|
const char *jsDev_t::getName(void)
|
||||||
{
|
{
|
||||||
return ( name.c_str() );
|
return ( name.c_str() );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//********************************************************************************
|
||||||
const char *jsDev_t::getGUID(void)
|
const char *jsDev_t::getGUID(void)
|
||||||
{
|
{
|
||||||
return ( guidStr.c_str() );
|
return ( guidStr.c_str() );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//********************************************************************************
|
||||||
bool jsDev_t::isGameController(void)
|
bool jsDev_t::isGameController(void)
|
||||||
{
|
{
|
||||||
return ( gc != NULL );
|
return ( gc != NULL );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//********************************************************************************
|
||||||
bool jsDev_t::inUse(void)
|
bool jsDev_t::inUse(void)
|
||||||
{
|
{
|
||||||
return ( (js != NULL) || (gc != NULL) );
|
return ( (js != NULL) || (gc != NULL) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//********************************************************************************
|
||||||
void jsDev_t::init( int idx )
|
void jsDev_t::init( int idx )
|
||||||
{
|
{
|
||||||
SDL_JoystickGUID guid;
|
SDL_JoystickGUID guid;
|
||||||
|
@ -132,6 +148,79 @@ void jsDev_t::print(void)
|
||||||
|
|
||||||
static jsDev_t jsDev[ MAX_JOYSTICKS ];
|
static jsDev_t jsDev[ MAX_JOYSTICKS ];
|
||||||
|
|
||||||
|
//********************************************************************************
|
||||||
|
nesGamePadMap_t::nesGamePadMap_t(void)
|
||||||
|
{
|
||||||
|
memset( guid, 0, sizeof(guid) );
|
||||||
|
memset( name, 0, sizeof(name) );
|
||||||
|
memset( os , 0, sizeof(os) );
|
||||||
|
memset( btn , 0, sizeof(btn) );
|
||||||
|
}
|
||||||
|
//********************************************************************************
|
||||||
|
nesGamePadMap_t::~nesGamePadMap_t(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
//********************************************************************************
|
||||||
|
int nesGamePadMap_t::parseMapping( const char *map )
|
||||||
|
{
|
||||||
|
int i,j,k,bIdx;
|
||||||
|
char id[32][64];
|
||||||
|
char val[32][64];
|
||||||
|
|
||||||
|
i=0; j=0; k=0;
|
||||||
|
|
||||||
|
while ( map[i] )
|
||||||
|
{
|
||||||
|
while ( isspace(map[i]) ) i++;
|
||||||
|
|
||||||
|
j=0;
|
||||||
|
while ( (map[i] != 0) && (map[i] != ',') && (map[i] != ':') )
|
||||||
|
{
|
||||||
|
id[k][j] = map[i]; i++; j++;
|
||||||
|
}
|
||||||
|
id[k][j] = 0;
|
||||||
|
val[k][0] = 0;
|
||||||
|
|
||||||
|
if ( map[i] == ':' )
|
||||||
|
{
|
||||||
|
i++; j=0;
|
||||||
|
|
||||||
|
while ( (map[i] != 0) && (map[i] != ',') )
|
||||||
|
{
|
||||||
|
val[k][j] = map[i]; i++; j++;
|
||||||
|
}
|
||||||
|
val[k][j] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( map[i] == ',' )
|
||||||
|
{
|
||||||
|
k++; i++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
strcpy( guid, id[0] ); // GUID is always 1st field
|
||||||
|
strcpy( name, id[1] ); // Name is always 2nd field
|
||||||
|
|
||||||
|
for (i=0; i<k; i++)
|
||||||
|
{
|
||||||
|
bIdx = sdlButton2NesGpIdx( id[i] );
|
||||||
|
|
||||||
|
//printf(" '%s' = '%s' %i \n", id[i], val[i], bIdx );
|
||||||
|
if ( bIdx >= 0 )
|
||||||
|
{
|
||||||
|
strcpy( btn[bIdx], val[i] );
|
||||||
|
}
|
||||||
|
else if ( strcmp( id[i], "platform" ) == 0 )
|
||||||
|
{
|
||||||
|
strcpy( os, val[i] );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
//********************************************************************************
|
//********************************************************************************
|
||||||
GamePad_t::GamePad_t(void)
|
GamePad_t::GamePad_t(void)
|
||||||
{
|
{
|
||||||
|
@ -186,104 +275,96 @@ static int sdlButton2NesGpIdx( const char *id )
|
||||||
{
|
{
|
||||||
idx = 7;
|
idx = 7;
|
||||||
}
|
}
|
||||||
|
else if ( strcmp( id, "turboA" ) == 0 )
|
||||||
|
{
|
||||||
|
idx = 8;
|
||||||
|
}
|
||||||
|
else if ( strcmp( id, "turboB" ) == 0 )
|
||||||
|
{
|
||||||
|
idx = 9;
|
||||||
|
}
|
||||||
|
|
||||||
return idx;
|
return idx;
|
||||||
}
|
}
|
||||||
//********************************************************************************
|
//********************************************************************************
|
||||||
int GamePad_t::setMapping( const char *map )
|
int GamePad_t::setMapping( nesGamePadMap_t *gpm )
|
||||||
{
|
{
|
||||||
int i,j,k,bIdx;
|
for (int i=0; i<GAMEPAD_NUM_BUTTONS; i++)
|
||||||
char id[32][64];
|
|
||||||
char val[32][64];
|
|
||||||
|
|
||||||
//char guidStr[64];
|
|
||||||
|
|
||||||
i=0; j=0; k=0;
|
|
||||||
|
|
||||||
while ( map[i] )
|
|
||||||
{
|
{
|
||||||
while ( isspace(map[i]) ) i++;
|
bmap[i].ButtType = BUTTC_KEYBOARD;
|
||||||
|
bmap[i].DeviceNum = -1;
|
||||||
|
bmap[i].ButtonNum = -1;
|
||||||
|
|
||||||
j=0;
|
if (gpm->btn[i][0] == 'k')
|
||||||
while ( (map[i] != 0) && (map[i] != ',') && (map[i] != ':') )
|
|
||||||
{
|
{
|
||||||
id[k][j] = map[i]; i++; j++;
|
bmap[i].ButtType = BUTTC_KEYBOARD;
|
||||||
|
bmap[i].DeviceNum = 0;
|
||||||
|
bmap[i].ButtonNum = 0; // FIXME
|
||||||
}
|
}
|
||||||
id[k][j] = 0;
|
else if ( (gpm->btn[i][0] == 'b') && isdigit( gpm->btn[i][1] ) )
|
||||||
val[k][0] = 0;
|
|
||||||
|
|
||||||
if ( map[i] == ':' )
|
|
||||||
{
|
{
|
||||||
i++; j=0;
|
bmap[i].ButtType = BUTTC_JOYSTICK;
|
||||||
|
bmap[i].DeviceNum = devIdx;
|
||||||
while ( (map[i] != 0) && (map[i] != ',') )
|
bmap[i].ButtonNum = atoi( &gpm->btn[i][1] );
|
||||||
{
|
|
||||||
val[k][j] = map[i]; i++; j++;
|
|
||||||
}
|
}
|
||||||
val[k][j] = 0;
|
else if ( (gpm->btn[i][0] == 'h') && isdigit( gpm->btn[i][1] ) &&
|
||||||
}
|
(gpm->btn[i][2] == '.') && isdigit( gpm->btn[i][3] ) )
|
||||||
|
|
||||||
if ( map[i] == ',' )
|
|
||||||
{
|
|
||||||
k++; i++;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i=0; i<k; i++)
|
|
||||||
{
|
|
||||||
bIdx = sdlButton2NesGpIdx( id[i] );
|
|
||||||
|
|
||||||
printf(" '%s' = '%s' %i \n", id[i], val[i], bIdx );
|
|
||||||
if ( bIdx >= 0 )
|
|
||||||
{
|
|
||||||
bmap[bIdx].ButtType = BUTTC_JOYSTICK;
|
|
||||||
bmap[bIdx].DeviceNum = devIdx;
|
|
||||||
|
|
||||||
if ( (val[i][0] == 'b') && isdigit( val[i][1] ) )
|
|
||||||
{
|
|
||||||
bmap[bIdx].ButtonNum = atoi( &val[i][1] );
|
|
||||||
}
|
|
||||||
else if ( (val[i][0] == 'h') && isdigit( val[i][1] ) &&
|
|
||||||
(val[i][2] == '.') && isdigit( val[i][3] ) )
|
|
||||||
{
|
{
|
||||||
int hatIdx, hatVal;
|
int hatIdx, hatVal;
|
||||||
|
|
||||||
hatIdx = val[i][1] - '0';
|
hatIdx = gpm->btn[i][1] - '0';
|
||||||
hatVal = atoi( &val[i][3] );
|
hatVal = atoi( &gpm->btn[i][3] );
|
||||||
|
|
||||||
bmap[bIdx].ButtonNum = 0x2000 | ( (hatIdx & 0x1F) << 8) | (hatVal & 0xFF);
|
bmap[i].ButtType = BUTTC_JOYSTICK;
|
||||||
|
bmap[i].DeviceNum = devIdx;
|
||||||
|
bmap[i].ButtonNum = 0x2000 | ( (hatIdx & 0x1F) << 8) | (hatVal & 0xFF);
|
||||||
}
|
}
|
||||||
else if ( (val[i][0] == 'a') || (val[i][1] == 'a') )
|
else if ( (gpm->btn[i][0] == 'a') || (gpm->btn[i][1] == 'a') )
|
||||||
{
|
{
|
||||||
int l, axisIdx, axisSign = 0;
|
int l=0, axisIdx=0, axisSign=0;
|
||||||
|
|
||||||
l=0;
|
l=0;
|
||||||
if ( val[i][l] == '-' )
|
if ( gpm->btn[i][l] == '-' )
|
||||||
{
|
{
|
||||||
axisSign = 1; l++;
|
axisSign = 1; l++;
|
||||||
}
|
}
|
||||||
else if ( val[i][l] == '+' )
|
else if ( gpm->btn[i][l] == '+' )
|
||||||
{
|
{
|
||||||
axisSign = 0; l++;
|
axisSign = 0; l++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( val[i][l] == 'a' )
|
if ( gpm->btn[i][l] == 'a' )
|
||||||
{
|
{
|
||||||
l++;
|
l++;
|
||||||
}
|
}
|
||||||
if ( isdigit( val[i][l] ) )
|
if ( isdigit( gpm->btn[i][l] ) )
|
||||||
{
|
{
|
||||||
axisIdx = atoi( &val[i][l] );
|
axisIdx = atoi( &gpm->btn[i][l] );
|
||||||
|
|
||||||
bmap[bIdx].ButtonNum = 0x8000 | (axisSign ? 0x4000 : 0) | (axisIdx & 0xFF);
|
while ( isdigit(gpm->btn[i][l]) ) l++;
|
||||||
}
|
}
|
||||||
|
if ( gpm->btn[i][l] == '-' )
|
||||||
|
{
|
||||||
|
axisSign = 1; l++;
|
||||||
|
}
|
||||||
|
else if ( gpm->btn[i][l] == '+' )
|
||||||
|
{
|
||||||
|
axisSign = 0; l++;
|
||||||
|
}
|
||||||
|
bmap[i].ButtType = BUTTC_JOYSTICK;
|
||||||
|
bmap[i].DeviceNum = devIdx;
|
||||||
|
bmap[i].ButtonNum = 0x8000 | (axisSign ? 0x4000 : 0) | (axisIdx & 0xFF);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
//********************************************************************************
|
||||||
|
int GamePad_t::setMapping( const char *map )
|
||||||
|
{
|
||||||
|
nesGamePadMap_t gpm;
|
||||||
|
|
||||||
|
gpm.parseMapping( map );
|
||||||
|
setMapping( &gpm );
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -306,9 +387,6 @@ int GamePad_t::loadDefaults(void)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
//********************************************************************************
|
//********************************************************************************
|
||||||
|
|
||||||
static int s_jinited = 0;
|
|
||||||
|
|
||||||
//********************************************************************************
|
//********************************************************************************
|
||||||
jsDev_t *getJoystickDevice( int devNum )
|
jsDev_t *getJoystickDevice( int devNum )
|
||||||
{
|
{
|
||||||
|
@ -383,6 +461,7 @@ DTestButtonJoy(ButtConfig *bc)
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
//********************************************************************************
|
||||||
|
|
||||||
|
|
||||||
//static void printJoystick( SDL_Joystick *js )
|
//static void printJoystick( SDL_Joystick *js )
|
||||||
|
@ -405,6 +484,7 @@ DTestButtonJoy(ButtConfig *bc)
|
||||||
//
|
//
|
||||||
//}
|
//}
|
||||||
|
|
||||||
|
//********************************************************************************
|
||||||
/**
|
/**
|
||||||
* Shutdown the SDL joystick subsystem.
|
* Shutdown the SDL joystick subsystem.
|
||||||
*/
|
*/
|
||||||
|
@ -425,6 +505,7 @@ KillJoysticks(void)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//********************************************************************************
|
||||||
int AddJoystick( int which )
|
int AddJoystick( int which )
|
||||||
{
|
{
|
||||||
if ( jsDev[ which ].inUse() )
|
if ( jsDev[ which ].inUse() )
|
||||||
|
@ -472,6 +553,7 @@ int AddJoystick( int which )
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//********************************************************************************
|
||||||
int RemoveJoystick( int which )
|
int RemoveJoystick( int which )
|
||||||
{
|
{
|
||||||
//printf("Remove Joystick: %i \n", which );
|
//printf("Remove Joystick: %i \n", which );
|
||||||
|
@ -491,6 +573,7 @@ int RemoveJoystick( int which )
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//********************************************************************************
|
||||||
/**
|
/**
|
||||||
* Initialize the SDL joystick subsystem.
|
* Initialize the SDL joystick subsystem.
|
||||||
*/
|
*/
|
||||||
|
@ -520,3 +603,4 @@ InitJoysticks(void)
|
||||||
s_jinited = 1;
|
s_jinited = 1;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
//********************************************************************************
|
||||||
|
|
|
@ -15,8 +15,13 @@ struct nesGamePadMap_t
|
||||||
{
|
{
|
||||||
char guid[64];
|
char guid[64];
|
||||||
char name[128];
|
char name[128];
|
||||||
char btn[GAMEPAD_NUM_BUTTONS];
|
char btn[GAMEPAD_NUM_BUTTONS][32];
|
||||||
char os[64];
|
char os[64];
|
||||||
|
|
||||||
|
nesGamePadMap_t(void);
|
||||||
|
~nesGamePadMap_t(void);
|
||||||
|
|
||||||
|
int parseMapping( const char *text );
|
||||||
};
|
};
|
||||||
|
|
||||||
struct jsDev_t
|
struct jsDev_t
|
||||||
|
@ -57,6 +62,7 @@ class GamePad_t
|
||||||
int loadDefaults(void);
|
int loadDefaults(void);
|
||||||
|
|
||||||
int setMapping( const char *map );
|
int setMapping( const char *map );
|
||||||
|
int setMapping( nesGamePadMap_t *map );
|
||||||
};
|
};
|
||||||
|
|
||||||
extern GamePad_t GamePad[4];
|
extern GamePad_t GamePad[4];
|
||||||
|
|
Loading…
Reference in New Issue