X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fdesigner%2Fmanipulator.h;h=55d2425ad8bfdb98596bd33877da65eaa25e18a8;hb=8e3009751ee81e0e5312cae53ee844bdd9e49628;hp=3a8882e8f97f686405651774aa478c7b1289a237;hpb=6c61179fe09af2f5366d50f10aadbf5f83438087;p=r2c2.git diff --git a/source/designer/manipulator.h b/source/designer/manipulator.h index 3a8882e..55d2425 100644 --- a/source/designer/manipulator.h +++ b/source/designer/manipulator.h @@ -1,37 +1,28 @@ +/* $Id$ + +This file is part of the MSP Märklin suite +Copyright © 2006-2008 Mikkosoft Productions, Mikko Rasa +Distributed under the GPL +*/ + #ifndef MANIPULATOR_H_ #define MANIPULATOR_H_ #include -#include "3d/track.h" class Designer; class Selection; class Manipulator { -public: - sigc::signal signal_status; - sigc::signal signal_done; - - Manipulator(Designer &); - void set_selection(Selection *); - void start_move(); - void start_rotate(); - void start_elevate(); - void duplicate(); - void flatten(); - void even_slope(bool =false); - void cancel(); - void button_press(int, int, float, float, unsigned); - void pointer_motion(int, int, float, float); - void render(); private: enum Mode { NONE, MOVE, ROTATE, - ELEVATE + ELEVATE, + EXTEND }; struct MTrack @@ -42,7 +33,6 @@ private: MTrack(Marklin::Track *); }; - typedef std::list MTrackSeq; struct TrackOrder { @@ -51,39 +41,48 @@ private: TrackOrder(Marklin::Track *t, bool r): track(t), rev(r) { } }; - typedef std::list TrackOrderSeq; - struct TrackWrap - { - Marklin::Point pos; - float rot; - float width; - float height; - }; +public: + sigc::signal signal_status; + sigc::signal signal_done; - Designer &designer; - Selection *selection; - MTrackSeq tracks; +private: + Designer &designer; + Msp::Graphics::EventSource &event_source; + Selection &selection; + std::vector tracks; Marklin::Point center; - std::list wrap; - Marklin::Point wrap_pos; - float wrap_rot; - Marklin::Point gpointer; - int pointer_y; - Mode mode; + int pointer_y; + Mode mode; Marklin::Point move_origin; - float angle; - float rot_origin; - int elev_origin; - Marklin::TrackSeq neighbors; - sigc::connection selection_changed_conn; + float angle; + float rot_origin; + int elev_origin; + std::set neighbors; + std::vector extend_tracks; + +public: + Manipulator(Designer &, Msp::Graphics::EventSource &, Selection &); + 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_wrap(); + void update_tracks(); void update_neighbors(); void set_slope(TrackOrder &, float, float); + std::vector create_straight(const Marklin::Point &, float, float, float); }; #endif