]> git.tdb.fi Git - r2c2.git/blob - source/designer/tool.cpp
ffd6e6b6c5385201a1f5041eab1bbd27a71aafb5
[r2c2.git] / source / designer / tool.cpp
1 #include <sigc++/bind.h>
2 #include "designer.h"
3 #include "tool.h"
4
5 using namespace Msp;
6
7 Tool::Tool(Designer &d, Input::Mouse &mouse):
8         designer(d),
9         done(false),
10         accepted(false)
11 {
12         mouse.signal_button_press.connect(sigc::bind_return(sigc::mem_fun(this, &Tool::button_press), false));
13         mouse.signal_axis_motion.connect(sigc::bind_return(sigc::mem_fun(this, &Tool::axis_motion), false));
14
15         pointer.x = mouse.get_axis_value(0);
16         pointer.y = mouse.get_axis_value(1);
17         ground_pointer = designer.map_pointer_to_ground(pointer);
18 }
19
20 void Tool::set_status(const std::string &s)
21 {
22         status = s;
23         signal_status.emit(status);
24 }
25
26 void Tool::set_done(bool a)
27 {
28         accepted = a;
29         done = true;
30         signal_done.emit();
31 }
32
33 void Tool::button_press(unsigned btn)
34 {
35         if(btn==1)
36         {
37                 finish();
38                 set_done(true);
39         }
40         else if(btn==3)
41                 set_done(false);
42 }
43
44 void Tool::axis_motion(unsigned axis, float value, float)
45 {
46         if(axis==0)
47                 pointer.x = value;
48         else if(axis==1)
49                 pointer.y = value;
50         ground_pointer = designer.map_pointer_to_ground(pointer);
51
52         pointer_motion();
53 }