mirror of
https://github.com/MaSzyna-EU07/maszyna.git
synced 2026-11-07 00:22:56 +01:00
refactor(editor): the helpers repeated over the editor files are shared
The name of a node or "(no name)" was written out in twenty places and four local functions, a lower-case copy of a text in four files, the test for a number, the file name of a template made comparable and the heading of a direction in three and two, the green main button of a panel in five and the key=value parameters of a self-test command in five. Each of them is one helper now: name_of, tall_button_height and main_button with the panel helpers, numeric with format, normalized with the include helpers, heading_of with the plan geometry and selftest_values with the tools; lower gives way to ToLower.
This commit is contained in:
@@ -10,6 +10,7 @@ http://mozilla.org/MPL/2.0/.
|
||||
#pragma once
|
||||
|
||||
#include <cstdio>
|
||||
#include <cstdlib>
|
||||
#include <string>
|
||||
|
||||
// printf-style formatting into a string, for the messages and the data lines of the editor
|
||||
@@ -24,3 +25,10 @@ std::string format(char const *Format, Args... Arguments)
|
||||
text.resize(static_cast<std::size_t>(length));
|
||||
return text;
|
||||
}
|
||||
|
||||
inline bool numeric(std::string const &Text, double &Value)
|
||||
{
|
||||
char *end{nullptr};
|
||||
Value = std::strtod(Text.c_str(), &end);
|
||||
return false == Text.empty() && *end == '\0';
|
||||
}
|
||||
|
||||
@@ -38,6 +38,12 @@ inline double plan_distance(glm::dvec3 const &A, glm::dvec3 const &B)
|
||||
}
|
||||
|
||||
// z component of the 3d cross product; for a unit Direction it's the offset of the Point to its left
|
||||
inline double heading_of(glm::dvec2 const &Direction)
|
||||
{
|
||||
auto const degrees{glm::degrees(std::atan2(Direction.x, Direction.y))};
|
||||
return degrees < 0.0 ? degrees + 360.0 : degrees;
|
||||
}
|
||||
|
||||
inline double cross(glm::dvec2 const &Direction, glm::dvec2 const &Point)
|
||||
{
|
||||
return Direction.x * Point.y - Direction.y * Point.x;
|
||||
|
||||
@@ -590,6 +590,12 @@ bool complete(include_info const &Info, int const Parameters, std::string *Issue
|
||||
return issue.empty();
|
||||
}
|
||||
|
||||
std::string normalized(std::string File)
|
||||
{
|
||||
std::replace(File.begin(), File.end(), '\\', '/');
|
||||
return ToLower(File);
|
||||
}
|
||||
|
||||
std::string number(double const Value)
|
||||
{
|
||||
std::ostringstream converter;
|
||||
|
||||
@@ -89,6 +89,7 @@ bool parse_directive(std::string const &Directive, std::string &File, std::vecto
|
||||
std::string compose_directive(std::string const &File, std::vector<std::string> const &Values);
|
||||
// text of a number passed as a parameter value
|
||||
std::string number(double Value);
|
||||
std::string normalized(std::string File);
|
||||
// number of the parameter with specified role, 0 if the description has none
|
||||
int parameter_with_role(include_info const &Info, std::string const &Role);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user