Restore named JS/input configs (overrides)
Thanks to jano for pointing out I'd broken this feature!
This commit is contained in:
parent
8050f39089
commit
ae6218ff10
4 changed files with 31 additions and 4 deletions
|
@ -40,8 +40,17 @@
|
||||||
using simgear::PropertyList;
|
using simgear::PropertyList;
|
||||||
using std::string;
|
using std::string;
|
||||||
|
|
||||||
FGDeviceConfigurationMap::FGDeviceConfigurationMap( const string& relative_path)
|
FGDeviceConfigurationMap::FGDeviceConfigurationMap( const string& relative_path,
|
||||||
|
SGPropertyNode* nodePath,
|
||||||
|
const std::string& nodeName)
|
||||||
{
|
{
|
||||||
|
// scan for over-ride configurations, loaded via joysticks.xml, etc
|
||||||
|
BOOST_FOREACH(SGPropertyNode_ptr preloaded, nodePath->getChildren(nodeName)) {
|
||||||
|
BOOST_FOREACH(SGPropertyNode* nameProp, preloaded->getChildren("name")) {
|
||||||
|
overrideDict[nameProp->getStringValue()] = preloaded;
|
||||||
|
} // of names iteration
|
||||||
|
} // of defined overrides iteration
|
||||||
|
|
||||||
scan_dir( SGPath(globals->get_fg_home(), relative_path));
|
scan_dir( SGPath(globals->get_fg_home(), relative_path));
|
||||||
scan_dir( SGPath(globals->get_fg_root(), relative_path));
|
scan_dir( SGPath(globals->get_fg_root(), relative_path));
|
||||||
}
|
}
|
||||||
|
@ -53,6 +62,12 @@ FGDeviceConfigurationMap::~FGDeviceConfigurationMap()
|
||||||
SGPropertyNode_ptr
|
SGPropertyNode_ptr
|
||||||
FGDeviceConfigurationMap::configurationForDeviceName(const std::string& name)
|
FGDeviceConfigurationMap::configurationForDeviceName(const std::string& name)
|
||||||
{
|
{
|
||||||
|
NameNodeMap::iterator j = overrideDict.find(name);
|
||||||
|
if (j != overrideDict.end()) {
|
||||||
|
return j->second;
|
||||||
|
}
|
||||||
|
|
||||||
|
// no override, check out list of config files
|
||||||
NamePathMap::iterator it = namePathMap.find(name);
|
NamePathMap::iterator it = namePathMap.find(name);
|
||||||
if (it == namePathMap.end()) {
|
if (it == namePathMap.end()) {
|
||||||
return SGPropertyNode_ptr();
|
return SGPropertyNode_ptr();
|
||||||
|
@ -71,6 +86,11 @@ FGDeviceConfigurationMap::configurationForDeviceName(const std::string& name)
|
||||||
|
|
||||||
bool FGDeviceConfigurationMap::hasConfiguration(const std::string& name) const
|
bool FGDeviceConfigurationMap::hasConfiguration(const std::string& name) const
|
||||||
{
|
{
|
||||||
|
NameNodeMap::const_iterator j = overrideDict.find(name);
|
||||||
|
if (j != overrideDict.end()) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
return namePathMap.find(name) != namePathMap.end();
|
return namePathMap.find(name) != namePathMap.end();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -37,7 +37,9 @@
|
||||||
class FGDeviceConfigurationMap
|
class FGDeviceConfigurationMap
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
FGDeviceConfigurationMap ( const std::string& relative_path);
|
FGDeviceConfigurationMap ( const std::string& relative_path,
|
||||||
|
SGPropertyNode* nodePath,
|
||||||
|
const std::string& nodeName);
|
||||||
virtual ~FGDeviceConfigurationMap();
|
virtual ~FGDeviceConfigurationMap();
|
||||||
|
|
||||||
SGPropertyNode_ptr configurationForDeviceName(const std::string& name);
|
SGPropertyNode_ptr configurationForDeviceName(const std::string& name);
|
||||||
|
@ -49,6 +51,11 @@ private:
|
||||||
void readCachedData(const SGPath& path);
|
void readCachedData(const SGPath& path);
|
||||||
void refreshCacheForFile(const SGPath& path);
|
void refreshCacheForFile(const SGPath& path);
|
||||||
|
|
||||||
|
typedef std::map<std::string, SGPropertyNode_ptr> NameNodeMap;
|
||||||
|
// dictionary of over-ridden configurations, where the config data
|
||||||
|
// was explicitly loaded and shoudl be picked over a file search
|
||||||
|
NameNodeMap overrideDict;
|
||||||
|
|
||||||
typedef std::map<std::string, SGPath> NamePathMap;
|
typedef std::map<std::string, SGPath> NamePathMap;
|
||||||
// mapping from joystick name to XML configuration file path
|
// mapping from joystick name to XML configuration file path
|
||||||
NamePathMap namePathMap;
|
NamePathMap namePathMap;
|
||||||
|
|
|
@ -294,7 +294,7 @@ void FGInputDevice::SetName( string name )
|
||||||
const char * FGEventInput::PROPERTY_ROOT = "/input/event";
|
const char * FGEventInput::PROPERTY_ROOT = "/input/event";
|
||||||
|
|
||||||
FGEventInput::FGEventInput() :
|
FGEventInput::FGEventInput() :
|
||||||
configMap( "Input/Event")
|
configMap( "Input/Event", fgGetNode(PROPERTY_ROOT, true), "device-named")
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -106,7 +106,7 @@ void FGJoystickInput::init()
|
||||||
SGPropertyNode_ptr js_nodes = fgGetNode("/input/joysticks", true);
|
SGPropertyNode_ptr js_nodes = fgGetNode("/input/joysticks", true);
|
||||||
status_node = fgGetNode("/devices/status/joysticks", true);
|
status_node = fgGetNode("/devices/status/joysticks", true);
|
||||||
|
|
||||||
FGDeviceConfigurationMap configMap("Input/Joysticks");
|
FGDeviceConfigurationMap configMap("Input/Joysticks",js_nodes, "js-named");
|
||||||
|
|
||||||
for (int i = 0; i < MAX_JOYSTICKS; i++) {
|
for (int i = 0; i < MAX_JOYSTICKS; i++) {
|
||||||
jsJoystick * js = new jsJoystick(i);
|
jsJoystick * js = new jsJoystick(i);
|
||||||
|
|
Loading…
Add table
Reference in a new issue