]> git.tdb.fi Git - r2c2.git/blobdiff - source/designer/tool.h
Split the Manipulator class into several Tools
[r2c2.git] / source / designer / tool.h
diff --git a/source/designer/tool.h b/source/designer/tool.h
new file mode 100644 (file)
index 0000000..bfadfc0
--- /dev/null
@@ -0,0 +1,43 @@
+#ifndef TOOL_H_
+#define TOOL_H_
+
+#include <string>
+#include <sigc++/signal.h>
+#include <sigc++/trackable.h>
+#include <msp/input/mouse.h>
+#include "libr2c2/geometry.h"
+
+class Designer;
+class Selection;
+
+class Tool: public sigc::trackable
+{
+public:
+       sigc::signal<void> signal_done;
+       sigc::signal<void, const std::string &> signal_status;
+
+protected:
+       Designer &designer;
+       R2C2::Vector pointer;
+       R2C2::Vector ground_pointer;
+       std::string status;
+       bool done;
+
+       Tool(Designer &, Msp::Input::Mouse &);
+public:
+       virtual ~Tool() { }
+
+protected:
+       void set_status(const std::string &);
+       void set_done();
+public:
+       const std::string &get_status() const { return status; }
+       bool is_done() const { return done; }
+
+       virtual void button_press(unsigned) { }
+       virtual void axis_motion(unsigned, float, float);
+
+       virtual void update_selection(Selection &) const { }
+};
+
+#endif