/* This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #pragma once #include "application/editortool.h" #include "editor/editorSpeed.hpp" #include #include #include class speed_tool final : public editor_tool { public: speed_tool(editor_selection &Selection, editor_view &View, editor_history &History, editor_track_design &Design) : m_selection{Selection}, m_view{View}, m_history{History}, m_design{Design} {} void update() override; void draw_overlay() const override; void render_options() override; editor_selftest_result selftest(std::string const &Command, std::istringstream &Words) override; void set_open(bool const Open) { m_speed.open = Open; } void check_line(); private: editor_selection &m_selection; editor_view &m_view; editor_history &m_history; editor_track_design &m_design; // speed limits of the paths checked against what their geometry allows struct speed_state { bool open{false}; int scope{0}; // 0: the line through the selected path, 1: the whole scenery speed_check::options options; std::vector> queue; std::size_t next{0}; std::vector results; bool show_all{false}; int limits{0}; // 0: all the paths, 1: only those with a speed limit set, 2: only those without int selected{-1}; std::size_t history{0}; // size of the undo history at the check std::string status; }; speed_state m_speed; void speed_start(); void speed_focus(int const Index); // with Branches the limits of the switch branches count too, otherwise they're only warnings void speed_apply(std::vector const &Indices, bool const Branches); std::vector speed_listed() const; };