Porytiles
Loading...
Searching...
No Matches
option.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <filesystem>
4
5#include "CLI/CLI.hpp"
6
7#include "validators.hpp"
8
9class Opt {
10 public:
11 virtual ~Opt() = default;
12
13 [[nodiscard]] virtual std::string NameShort() const = 0;
14
15 [[nodiscard]] virtual std::string NameLong() const = 0;
16
17 virtual void RegisterOpt(CLI::App &app) = 0;
18
19 void SetGroup(const std::string &group, CLI::App &app) const
20 {
21 app.get_option(NameLong())->group(group);
22 }
23
24 [[nodiscard]] std::string NameCombined() const
25 {
26 return NameShort() + "," + NameLong();
27 }
28};
29
30class OptProjectRoot final : public Opt {
31 std::string project_root_;
32
33 public:
34 OptProjectRoot() : project_root_{"."} {}
35
36 [[nodiscard]] std::string NameShort() const override
37 {
38 return "-C";
39 }
40
41 [[nodiscard]] std::string NameLong() const override
42 {
43 return "--project-root";
44 }
45
46 void RegisterOpt(CLI::App &app) override
47 {
48 app.add_option(
50 project_root_,
51 "Set the project root directory. Porytiles will look for "
52 "porytiles management directory, include/fieldmap.h, tilesets, "
53 "and other project files relative to this path.")
54 ->check(CLI::ExistingDirectory)
55 ->capture_default_str();
56 }
57
58 [[nodiscard]] std::filesystem::path project_root() const
59 {
60 return std::filesystem::path{project_root_};
61 }
62};
std::string NameShort() const override
Definition option.hpp:36
std::filesystem::path project_root() const
Definition option.hpp:58
void RegisterOpt(CLI::App &app) override
Definition option.hpp:46
std::string NameLong() const override
Definition option.hpp:41
Definition option.hpp:9
virtual std::string NameShort() const =0
virtual void RegisterOpt(CLI::App &app)=0
void SetGroup(const std::string &group, CLI::App &app) const
Definition option.hpp:19
std::string NameCombined() const
Definition option.hpp:24
virtual std::string NameLong() const =0
virtual ~Opt()=default