]> git.tdb.fi Git - r2c2.git/blob - source/designer/tool.h
Split the Manipulator class into several Tools
[r2c2.git] / source / designer / tool.h
1 #ifndef TOOL_H_
2 #define TOOL_H_
3
4 #include <string>
5 #include <sigc++/signal.h>
6 #include <sigc++/trackable.h>
7 #include <msp/input/mouse.h>
8 #include "libr2c2/geometry.h"
9
10 class Designer;
11 class Selection;
12
13 class Tool: public sigc::trackable
14 {
15 public:
16         sigc::signal<void> signal_done;
17         sigc::signal<void, const std::string &> signal_status;
18
19 protected:
20         Designer &designer;
21         R2C2::Vector pointer;
22         R2C2::Vector ground_pointer;
23         std::string status;
24         bool done;
25
26         Tool(Designer &, Msp::Input::Mouse &);
27 public:
28         virtual ~Tool() { }
29
30 protected:
31         void set_status(const std::string &);
32         void set_done();
33 public:
34         const std::string &get_status() const { return status; }
35         bool is_done() const { return done; }
36
37         virtual void button_press(unsigned) { }
38         virtual void axis_motion(unsigned, float, float);
39
40         virtual void update_selection(Selection &) const { }
41 };
42
43 #endif