+#include "hub.h"
#include <stdexcept>
#include <sigc++/bind.h>
#include <sigc++/bind_return.h>
#include <msp/core/hash.h>
#include <msp/core/maputils.h>
-#include "hub.h"
using namespace std;
namespace Msp {
namespace Input {
-Hub::Hub()
+Hub::Hub():
+ Device(UNSPECIFIED)
{
name = "Hub";
}
dev.signal_axis_motion.connect(sigc::bind_return(sigc::bind(sigc::mem_fun(this, &Hub::axis_motion), index), false));
}
-std::string Hub::get_button_name(unsigned btn) const
+Device *Hub::find_subdevice(DeviceType t, unsigned n)
+{
+ for(Device *d: devices)
+ if(Device *dev = d->find_subdevice(t, 0))
+ {
+ if(!n)
+ return dev;
+ --n;
+ }
+ return nullptr;
+}
+
+Device *Hub::find_subdevice(const string &n)
+{
+ if(n==name)
+ return this;
+ for(Device *d: devices)
+ if(Device *dev = d->find_subdevice(n))
+ return dev;
+ return nullptr;
+}
+
+string Hub::get_button_name(unsigned btn) const
{
unsigned dev_index = btn>>8;
if(dev_index>=devices.size())
return dev.get_name()+": "+dev.get_button_name(btn&0xFF);
}
-std::string Hub::get_axis_name(unsigned axis) const
+string Hub::get_axis_name(unsigned axis) const
{
unsigned dev_index = axis>>8;
if(dev_index>=devices.size())