]> git.tdb.fi Git - r2c2.git/blobdiff - source/designer/manipulator.h
Don't crash if a train has no router
[r2c2.git] / source / designer / manipulator.h
index 66b5d1ae67065e7ee1f275af69c095d8e820127a..7b3836649d5cfd5a1a6e7c15fea920bde2b6399c 100644 (file)
@@ -1,88 +1,40 @@
-/* $Id$
-
-This file is part of R²C²
-Copyright © 2006-2008 Mikkosoft Productions, Mikko Rasa
-Distributed under the GPL
-*/
-
 #ifndef MANIPULATOR_H_
 #define MANIPULATOR_H_
 
-#include <sigc++/sigc++.h>
+#include <set>
+#include <vector>
+#include "libr2c2/object.h"
+#include "tool.h"
 
-class Designer;
 class Selection;
 
-class Manipulator
+class Manipulator: public Tool
 {
-private:
-       enum Mode
-       {
-               NONE,
-               MOVE,
-               ROTATE,
-               ELEVATE,
-               EXTEND
-       };
-
-       struct MTrack
+protected:
+       struct MObject
        {
-               R2C2::Track *track;
-               R2C2::Point pos;
-               float rot;
+               R2C2::Object *object;
+               R2C2::Vector original_position;
+               R2C2::Angle original_rotation;
 
-               MTrack(R2C2::Track *);
-       };
-
-       struct TrackOrder
-       {
-               R2C2::Track *track;
-               bool rev;
-
-               TrackOrder(R2C2::Track *t, bool r): track(t), rev(r) { }
+               MObject(R2C2::Object *);
        };
 
 public:
-       sigc::signal<void, const std::string &> signal_status;
        sigc::signal<void, bool> signal_done;
 
-private:
-       Designer &designer;
-       Msp::Graphics::EventSource &event_source;
-       Selection &selection;
-       std::vector<MTrack> tracks;
-       R2C2::Point center;
+protected:
+       typedef std::vector<MObject> ObjectArray;
 
-       R2C2::Point gpointer;
-       int pointer_y;
-       Mode mode;
-       R2C2::Point move_origin;
-       float angle;
-       float rot_origin;
-       int elev_origin;
-       std::set<R2C2::Track *> neighbors;
-       std::vector<R2C2::Track *> extend_tracks;
+       ObjectArray objects;
+       R2C2::Vector center;
 
 public:
-       Manipulator(Designer &, Msp::Graphics::EventSource &, Selection &);
+       Manipulator(Designer &, Msp::Input::Keyboard &, Msp::Input::Mouse &, const std::set<R2C2::Object *> &);
+       virtual ~Manipulator();
 
-       void start_move();
-       void start_rotate();
-       void start_elevate();
-       void start_extend();
-       void duplicate();
-       void flatten();
-       void even_slope(bool =false);
-       void connect();
-       void cancel();
 private:
-       void button_press(int, int, unsigned, unsigned);
-       void pointer_motion(int, int);
-       void selection_changed();
-       void update_tracks();
-       void update_neighbors();
-       void set_slope(TrackOrder &, float, float);
-       std::vector<R2C2::Track *> create_straight(const R2C2::Point &, float, float, float);
+       virtual void finish();
 };
 
 #endif