]> git.tdb.fi Git - r2c2.git/blobdiff - source/designer/tool.cpp
Don't crash if a train has no router
[r2c2.git] / source / designer / tool.cpp
index ffd6e6b6c5385201a1f5041eab1bbd27a71aafb5..249259ecae2bb6d5da9a0f80f774ef93bc2dcf15 100644 (file)
@@ -1,15 +1,21 @@
 #include <sigc++/bind.h>
+#include <msp/input/keys.h>
 #include "designer.h"
 #include "tool.h"
 
 using namespace Msp;
 
-Tool::Tool(Designer &d, Input::Mouse &mouse):
+Tool::Tool(Designer &d, Input::Keyboard &keyboard, Input::Mouse &mouse):
        designer(d),
+       shift_held(false),
+       ctrl_held(false),
        done(false),
        accepted(false)
 {
+       keyboard.signal_button_press.connect(sigc::bind_return(sigc::mem_fun(this, &Tool::key_press), false));
+       keyboard.signal_button_release.connect(sigc::bind_return(sigc::mem_fun(this, &Tool::key_release), false));
        mouse.signal_button_press.connect(sigc::bind_return(sigc::mem_fun(this, &Tool::button_press), false));
+       mouse.signal_button_release.connect(sigc::bind_return(sigc::mem_fun(this, &Tool::button_release), false));
        mouse.signal_axis_motion.connect(sigc::bind_return(sigc::mem_fun(this, &Tool::axis_motion), false));
 
        pointer.x = mouse.get_axis_value(0);
@@ -30,6 +36,24 @@ void Tool::set_done(bool a)
        signal_done.emit();
 }
 
+void Tool::key_press(unsigned key)
+{
+       if(key==Input::KEY_ESC)
+               set_done(false);
+       else if(key==Input::KEY_SHIFT_L || key==Input::KEY_SHIFT_R)
+               shift_held = true;
+       else if(key==Input::KEY_CTRL_L || key==Input::KEY_CTRL_R)
+               ctrl_held = true;
+}
+
+void Tool::key_release(unsigned key)
+{
+       if(key==Input::KEY_SHIFT_L || key==Input::KEY_SHIFT_R)
+               shift_held = false;
+       else if(key==Input::KEY_CTRL_L || key==Input::KEY_CTRL_R)
+               ctrl_held = false;
+}
+
 void Tool::button_press(unsigned btn)
 {
        if(btn==1)