1 #pragma once
2 #include "core/tool.hpp"
3 #include "util/keep_slope_util.hpp"
4 #include <deque>
5 
6 namespace horizon {
7 
8 class ToolDragKeepSlope : public ToolBase {
9 public:
10     using ToolBase::ToolBase;
11     ToolResponse begin(const ToolArgs &args) override;
12     ToolResponse update(const ToolArgs &args) override;
13     bool can_begin() override;
is_specific()14     bool is_specific() override
15     {
16         return true;
17     }
get_actions() const18     std::set<InToolActionID> get_actions() const override
19     {
20         using I = InToolActionID;
21         return {
22                 I::LMB,
23                 I::CANCEL,
24                 I::RMB,
25         };
26     }
27 
28 private:
29     class TrackInfo : public KeepSlopeInfo {
30     public:
31         class Track &track; // the track itself
32 
33         TrackInfo(Track &tr, const Track &fr, const Track &to);
34         // TrackInfo(Track *a, Track *b, Track *c): track(a), track_from(b),
35         // track_to(c) {}
36     };
37     std::set<UUID> nets;
38 
39     std::deque<TrackInfo> track_info;
40     Coordi pos_orig;
41 };
42 } // namespace horizon
43