]> git.tdb.fi Git - libs/gui.git/blobdiff - source/input/device.h
Remove destructor declarations from exception classes
[libs/gui.git] / source / input / device.h
index b42ed3fde4991feb8d87b05258831585db57efec..5ef63053ed8e9b59b5ad3442edce6d1f6c28b402 100644 (file)
@@ -5,6 +5,7 @@
 #include <vector>
 #include <stdexcept>
 #include <sigc++/signal.h>
+#include <msp/strings/lexicalcast.h>
 
 namespace Msp {
 namespace Input {
@@ -13,7 +14,16 @@ class device_not_available: public std::runtime_error
 {
 public:
        device_not_available(const std::string &w): std::runtime_error(w) { }
-       virtual ~device_not_available() throw() { }
+};
+
+
+enum DeviceType
+{
+       UNSPECIFIED,
+       KEYBOARD,
+       MOUSE,
+       TOUCH_SURFACE,
+       GAME_CONTROLLER
 };
 
 
@@ -47,15 +57,19 @@ public:
        sigc::signal<bool, unsigned, float, float>::accumulated<EventAccumulator> signal_axis_motion;
 
 protected:
+       DeviceType type;
        std::string name;
        std::vector<char> buttons;
        std::vector<float> axes;
 
-       Device();
+       Device(DeviceType);
 public:
        virtual ~Device();
 
+       DeviceType get_type() const { return type; }
        const std::string &get_name() const { return name; }
+       virtual Device *find_subdevice(DeviceType, unsigned = 0);
+       virtual Device *find_subdevice(const std::string &);
        bool get_button_state(unsigned) const;
        float get_axis_value(unsigned) const;
 
@@ -66,6 +80,10 @@ protected:
        void set_axis_value(unsigned, float, bool);
 };
 
+
+void operator>>(const LexicalConverter &, DeviceType &);
+void operator<<(LexicalConverter &, DeviceType);
+
 } // namespace Input
 } // namespace Msp