mirror of https://github.com/stella-emu/stella.git
Fixed bug in adding multiple joysticks with the same name, and
bumped version # for next beta test. git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@3114 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
This commit is contained in:
parent
2e7bf1dffa
commit
3b02c309c1
|
@ -22,7 +22,7 @@
|
||||||
|
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
|
|
||||||
#define STELLA_VERSION "4.5_beta1"
|
#define STELLA_VERSION "4.5_beta2"
|
||||||
#define STELLA_BUILD atoi("$Rev$" + 6)
|
#define STELLA_BUILD atoi("$Rev$" + 6)
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -135,8 +135,7 @@ void EventHandler::reset(State state)
|
||||||
void EventHandler::addJoystick(StellaJoystick* stick)
|
void EventHandler::addJoystick(StellaJoystick* stick)
|
||||||
{
|
{
|
||||||
#ifdef JOYSTICK_SUPPORT
|
#ifdef JOYSTICK_SUPPORT
|
||||||
int idx = myJoyHandler->add(stick);
|
if(!myJoyHandler->add(stick))
|
||||||
if(idx < 0)
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
setActionMappings(kEmulationMode);
|
setActionMappings(kEmulationMode);
|
||||||
|
@ -163,10 +162,10 @@ void EventHandler::addJoystick(StellaJoystick* stick)
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
void EventHandler::removeJoystick(int idx)
|
void EventHandler::removeJoystick(int id)
|
||||||
{
|
{
|
||||||
#ifdef JOYSTICK_SUPPORT
|
#ifdef JOYSTICK_SUPPORT
|
||||||
myJoyHandler->remove(idx);
|
myJoyHandler->remove(id);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -429,8 +429,8 @@ class EventHandler
|
||||||
JoystickHandler(OSystem& system);
|
JoystickHandler(OSystem& system);
|
||||||
~JoystickHandler();
|
~JoystickHandler();
|
||||||
|
|
||||||
int add(StellaJoystick* stick);
|
bool add(StellaJoystick* stick);
|
||||||
int remove(int id);
|
bool remove(int id);
|
||||||
void mapStelladaptors(const string& saport);
|
void mapStelladaptors(const string& saport);
|
||||||
void setDefaultMapping(Event::Type type, EventMode mode);
|
void setDefaultMapping(Event::Type type, EventMode mode);
|
||||||
void eraseMapping(Event::Type event, EventMode mode);
|
void eraseMapping(Event::Type event, EventMode mode);
|
||||||
|
|
|
@ -281,11 +281,11 @@ void EventHandler::JoystickHandler::printDatabase() const
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
int EventHandler::JoystickHandler::add(StellaJoystick* stick)
|
bool EventHandler::JoystickHandler::add(StellaJoystick* stick)
|
||||||
{
|
{
|
||||||
// Skip if we couldn't open it for any reason
|
// Skip if we couldn't open it for any reason
|
||||||
if(stick->ID < 0)
|
if(stick->ID < 0)
|
||||||
return stick->ID;
|
return false;
|
||||||
|
|
||||||
// Figure out what type of joystick this is
|
// Figure out what type of joystick this is
|
||||||
bool specialAdaptor = false;
|
bool specialAdaptor = false;
|
||||||
|
@ -313,15 +313,21 @@ int EventHandler::JoystickHandler::add(StellaJoystick* stick)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// We need unique names for mappable devices
|
// We need unique names for mappable devices
|
||||||
|
// For non-unique names that already have a database entry,
|
||||||
|
// we append ' #x', where 'x' increases consecutively
|
||||||
int count = 0;
|
int count = 0;
|
||||||
for(const auto& i: myDatabase)
|
for(const auto& i: myDatabase)
|
||||||
if(BSPF_startsWithIgnoreCase(i.first, stick->name))
|
{
|
||||||
|
if(BSPF_startsWithIgnoreCase(i.first, stick->name) && i.second.joy)
|
||||||
|
{
|
||||||
++count;
|
++count;
|
||||||
|
break;
|
||||||
if(count > 1)
|
}
|
||||||
|
}
|
||||||
|
if(count > 0)
|
||||||
{
|
{
|
||||||
ostringstream name;
|
ostringstream name;
|
||||||
name << stick->name << " " << count;
|
name << stick->name << " #" << count+1;
|
||||||
stick->name = name.str();
|
stick->name = name.str();
|
||||||
}
|
}
|
||||||
stick->type = StellaJoystick::JT_REGULAR;
|
stick->type = StellaJoystick::JT_REGULAR;
|
||||||
|
@ -348,11 +354,11 @@ int EventHandler::JoystickHandler::add(StellaJoystick* stick)
|
||||||
setStickDefaultMapping(stick->ID, Event::NoType, kMenuMode);
|
setStickDefaultMapping(stick->ID, Event::NoType, kMenuMode);
|
||||||
}
|
}
|
||||||
|
|
||||||
return stick->ID;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
int EventHandler::JoystickHandler::remove(int index)
|
bool EventHandler::JoystickHandler::remove(int id)
|
||||||
{
|
{
|
||||||
// When a joystick is removed, we delete the actual joystick object but
|
// When a joystick is removed, we delete the actual joystick object but
|
||||||
// remember its mapping, since it will eventually be saved to settings
|
// remember its mapping, since it will eventually be saved to settings
|
||||||
|
@ -361,29 +367,30 @@ int EventHandler::JoystickHandler::remove(int index)
|
||||||
// So we use the 'active' joystick list to access them
|
// So we use the 'active' joystick list to access them
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
StellaJoystick* stick = mySticks.at(index);
|
StellaJoystick* stick = mySticks.at(id);
|
||||||
|
|
||||||
auto it = myDatabase.find(stick->name);
|
auto it = myDatabase.find(stick->name);
|
||||||
if(it != myDatabase.end() && it->second.joy == stick)
|
if(it != myDatabase.end() && it->second.joy == stick)
|
||||||
{
|
{
|
||||||
ostringstream buf;
|
ostringstream buf;
|
||||||
buf << "Removed joystick " << mySticks[index]->ID << ":" << endl
|
buf << "Removed joystick " << mySticks[id]->ID << ":" << endl
|
||||||
<< " " << mySticks[index]->about() << endl;
|
<< " " << mySticks[id]->about() << endl;
|
||||||
myOSystem.logMessage(buf.str(), 1);
|
myOSystem.logMessage(buf.str(), 1);
|
||||||
|
|
||||||
// Remove joystick, but remember mapping
|
// Remove joystick, but remember mapping
|
||||||
it->second.mapping = stick->getMap();
|
it->second.mapping = stick->getMap();
|
||||||
delete it->second.joy; it->second.joy = nullptr;
|
delete it->second.joy; it->second.joy = nullptr;
|
||||||
mySticks.erase(index);
|
mySticks.erase(id);
|
||||||
|
|
||||||
return index;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch(std::out_of_range)
|
catch(std::out_of_range)
|
||||||
{
|
{
|
||||||
|
// fall through to indicate remove failed
|
||||||
}
|
}
|
||||||
|
|
||||||
return -1;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
|
Loading…
Reference in New Issue