]> git.tdb.fi Git - r2c2.git/blob - source/designer/manipulator.h
Style fixes, including:
[r2c2.git] / source / designer / manipulator.h
1 #ifndef MANIPULATOR_H_
2 #define MANIPULATOR_H_
3
4 #include <sigc++/sigc++.h>
5 #include "3d/track.h"
6
7 class Designer;
8 class Selection;
9
10 class Manipulator
11 {
12 private:
13         enum Mode
14         {
15                 NONE,
16                 MOVE,
17                 ROTATE,
18                 ELEVATE
19         };
20
21         struct MTrack
22         {
23                 Marklin::Track *track;
24                 Marklin::Point pos;
25                 float rot;
26
27                 MTrack(Marklin::Track *);
28         };
29
30         struct TrackOrder
31         {
32                 Marklin::Track *track;
33                 bool rev;
34
35                 TrackOrder(Marklin::Track *t, bool r): track(t), rev(r) { }
36         };
37
38         struct TrackWrap
39         {
40                 Marklin::Point pos;
41                 float rot;
42                 float width;
43                 float height;
44         };
45
46         Designer   &designer;
47         Selection  *selection;
48         std::vector<MTrack> tracks;
49         Marklin::Point center;
50
51         std::list<TrackWrap> wrap;
52         Marklin::Point wrap_pos;
53         float wrap_rot;
54
55         Marklin::Point gpointer;
56         int            pointer_y;
57         Mode           mode;
58         Marklin::Point move_origin;
59         float          angle;
60         float          rot_origin;
61         int            elev_origin;
62         std::set<Marklin::Track *> neighbors;
63         sigc::connection selection_changed_conn;
64
65 public:
66         sigc::signal<void, const std::string &> signal_status;
67         sigc::signal<void, bool> signal_done;
68
69         Manipulator(Designer &);
70
71         void set_selection(Selection *);
72         void start_move();
73         void start_rotate();
74         void start_elevate();
75         void duplicate();
76         void flatten();
77         void even_slope(bool =false);
78         void cancel();
79         void button_press(int, int, float, float, unsigned);
80         void pointer_motion(int, int, float, float);
81         void render();
82 private:
83         void selection_changed();
84         void update_wrap();
85         void update_neighbors();
86         void set_slope(TrackOrder &, float, float);
87 };
88
89 #endif