Use private and public instead of legacy LINK_
This commit is contained in:
		| @@ -12,7 +12,7 @@ implementation, that exposes the library to a user. | ||||
|  | ||||
| ```sh | ||||
| cmake -B build -G Ninja | ||||
| make -C build | ||||
| ninja -C build | ||||
| ``` | ||||
|  | ||||
| Pass `-DCMAKE_BUILD_TYPE=Debug` or `-DCMAKE_BUILD_TYPE=Release` to | ||||
|   | ||||
| @@ -18,14 +18,18 @@ FetchContent_Declare(toml11 | ||||
| ) | ||||
| FetchContent_MakeAvailable(toml11) | ||||
|  | ||||
| add_executable(katja-cli main.cpp component.hpp component.cpp) | ||||
| target_sources(katja-cli PUBLIC FILE_SET all_my_modules TYPE CXX_MODULES FILES page.cpp) | ||||
| set(FTXUI_BUILD_MODULES ON) | ||||
|  | ||||
| add_executable(katja-cli main.cpp) | ||||
| target_sources(katja-cli PUBLIC FILE_SET all_my_modules TYPE CXX_MODULES FILES | ||||
| 	component.cpp page.cpp | ||||
| ) | ||||
| target_include_directories(katja-cli PRIVATE ${Boost_INCLUDE_DIR}) | ||||
| target_link_libraries(katja-cli | ||||
| 	LINK_PUBLIC katja | ||||
| 	LINK_PRIVATE ftxui::screen | ||||
| 	LINK_PRIVATE ftxui::dom | ||||
| 	LINK_PRIVATE ftxui::component | ||||
| 	LINK_PRIVATE toml11::toml11 | ||||
| 	PUBLIC katja | ||||
| 	PRIVATE ftxui::screen | ||||
| 	PRIVATE ftxui::dom | ||||
| 	PRIVATE ftxui::component | ||||
| 	PRIVATE toml11::toml11 | ||||
| ) | ||||
| set_target_properties(katja-cli PROPERTIES RUNTIME_OUTPUT_NAME katja) | ||||
|   | ||||
| @@ -3,69 +3,86 @@ | ||||
|  * License, v. 2.0. If a copy of the MPL was not distributed with this | ||||
|  * file, You can obtain one at https://mozilla.org/MPL/2.0/. | ||||
|  */ | ||||
| #include "component.hpp" | ||||
| module; | ||||
|  | ||||
| #include <optional> | ||||
| #include <sstream> | ||||
|  | ||||
| namespace katja | ||||
| #include <ftxui/component/event.hpp> | ||||
| #include <ftxui/component/component.hpp> | ||||
| #include <ftxui/dom/elements.hpp> | ||||
|  | ||||
| #include "katja/repository.hpp" | ||||
|  | ||||
| export module component; | ||||
|  | ||||
| export namespace katja | ||||
| { | ||||
|     PackageListBase::PackageListBase(const std::string& title, const std::vector<package_identifier>& packages) | ||||
|         : title(title), packages(packages) | ||||
|     class PackageListBase : public ftxui::ComponentBase | ||||
|     { | ||||
|     } | ||||
|         std::string title; | ||||
|         const std::vector<package_identifier> packages; | ||||
|         std::optional<std::size_t> selected; | ||||
|  | ||||
|     ftxui::Element PackageListBase::OnRender() | ||||
|     { | ||||
|         std::vector<ftxui::Element> lines; | ||||
|  | ||||
|         for (const auto& package_identifier : this->packages) | ||||
|     public: | ||||
|         PackageListBase(const std::string& title, const std::vector<package_identifier>& packages = {}) | ||||
|             : title(title), packages(packages) | ||||
|         { | ||||
|             auto line = ftxui::text(package_identifier.to_string()) | color(ftxui::Color::SkyBlue2); | ||||
|             lines.push_back(line); | ||||
|         } | ||||
|         if (this->selected.has_value() && this->selected.value() < lines.size()) | ||||
|  | ||||
|         ftxui::Element OnRender() override | ||||
|         { | ||||
|             lines[this->selected.value()] |= ftxui::focus; | ||||
|             std::vector<ftxui::Element> lines; | ||||
|  | ||||
|             for (const auto& package_identifier : this->packages) | ||||
|             { | ||||
|                 auto line = ftxui::text(package_identifier.to_string()) | color(ftxui::Color::SkyBlue2); | ||||
|                 lines.push_back(line); | ||||
|             } | ||||
|             if (this->selected.has_value() && this->selected.value() < lines.size()) | ||||
|             { | ||||
|                 lines[this->selected.value()] |= ftxui::focus; | ||||
|             } | ||||
|             std::stringstream summary; | ||||
|  | ||||
|             summary << title << '(' << packages.size() << ')'; | ||||
|  | ||||
|             return ftxui::window(ftxui::text(summary.str()), ftxui::vbox(lines) | ftxui::yframe); | ||||
|         } | ||||
|         std::stringstream summary; | ||||
|  | ||||
|         summary << title << '(' << packages.size() << ')'; | ||||
|  | ||||
|         return ftxui::window(ftxui::text(summary.str()), ftxui::vbox(lines) | ftxui::yframe); | ||||
|     } | ||||
|  | ||||
|     bool PackageListBase::OnEvent(ftxui::Event event) | ||||
|     { | ||||
|         if (event == ftxui::Event::ArrowDown) | ||||
|         bool OnEvent(ftxui::Event event) override | ||||
|         { | ||||
|             if (!this->selected.has_value() && !this->packages.empty()) | ||||
|             if (event == ftxui::Event::ArrowDown) | ||||
|             { | ||||
|                 this->selected = std::make_optional<std::size_t>(0); | ||||
|                 if (!this->selected.has_value() && !this->packages.empty()) | ||||
|                 { | ||||
|                     this->selected = std::make_optional<std::size_t>(0); | ||||
|                 } | ||||
|                 else if (this->selected.has_value() && this->selected.value() + 1 < this->packages.size()) | ||||
|                 { | ||||
|                     this->selected = std::make_optional<std::size_t>(this->selected.value() + 1); | ||||
|                 } | ||||
|                 return true; | ||||
|             } | ||||
|             else if (this->selected.has_value() && this->selected.value() + 1 < this->packages.size()) | ||||
|             else if (event == ftxui::Event::ArrowUp) | ||||
|             { | ||||
|                 this->selected = std::make_optional<std::size_t>(this->selected.value() + 1); | ||||
|                 if (!this->selected.has_value() && !this->packages.empty()) | ||||
|                 { | ||||
|                     this->selected = std::make_optional<std::size_t>(0); | ||||
|                 } | ||||
|                 else if (this->selected.has_value() | ||||
|                         && this->selected.value() < this->packages.size() | ||||
|                         && this->selected.value() > 0) | ||||
|                 { | ||||
|                     this->selected = std::make_optional<std::size_t>(this->selected.value() - 1); | ||||
|                 } | ||||
|                 return true; | ||||
|             } | ||||
|             return true; | ||||
|             return false; | ||||
|         } | ||||
|         else if (event == ftxui::Event::ArrowUp) | ||||
|         { | ||||
|             if (!this->selected.has_value() && !this->packages.empty()) | ||||
|             { | ||||
|                 this->selected = std::make_optional<std::size_t>(0); | ||||
|             } | ||||
|             else if (this->selected.has_value() | ||||
|                     && this->selected.value() < this->packages.size() | ||||
|                     && this->selected.value() > 0) | ||||
|             { | ||||
|                 this->selected = std::make_optional<std::size_t>(this->selected.value() - 1); | ||||
|             } | ||||
|             return true; | ||||
|         } | ||||
|         return false; | ||||
|     } | ||||
|     }; | ||||
|  | ||||
|     ftxui::Component PackageList(const std::string& title, const std::vector<package_identifier>& packages) | ||||
|     ftxui::Component PackageList(const std::string& title, const std::vector<package_identifier>& packages = {}) | ||||
|     { | ||||
|         return ftxui::Make<PackageListBase>(title, packages); | ||||
|     } | ||||
|   | ||||
| @@ -1,33 +0,0 @@ | ||||
| /* | ||||
|  * 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 https://mozilla.org/MPL/2.0/. | ||||
|  */ | ||||
| #pragma once | ||||
|  | ||||
| #include <optional> | ||||
|  | ||||
| #include <ftxui/component/event.hpp> | ||||
| #include <ftxui/component/component.hpp> | ||||
| #include <ftxui/dom/elements.hpp> | ||||
|  | ||||
| #include "katja/repository.hpp" | ||||
|  | ||||
| namespace katja | ||||
| { | ||||
|     class PackageListBase : public ftxui::ComponentBase | ||||
|     { | ||||
|         std::string title; | ||||
|         const std::vector<package_identifier> packages; | ||||
|         std::optional<std::size_t> selected; | ||||
|  | ||||
|     public: | ||||
|         PackageListBase(const std::string& title, const std::vector<package_identifier>& packages = {}); | ||||
|  | ||||
|         ftxui::Element OnRender() override; | ||||
|         bool OnEvent(ftxui::Event event) override; | ||||
|     }; | ||||
|  | ||||
|     ftxui::Component PackageList(const std::string& title, const std::vector<package_identifier>& packages = {}); | ||||
|          | ||||
| } | ||||
| @@ -7,10 +7,14 @@ module; | ||||
|  | ||||
| #include <algorithm> | ||||
|  | ||||
| #include "component.hpp" | ||||
| #include <ftxui/component/component.hpp> | ||||
|  | ||||
| #include "katja/repository.hpp" | ||||
|  | ||||
| export module page; | ||||
|  | ||||
| import component; | ||||
|  | ||||
| export namespace katja | ||||
| { | ||||
|     class PageBase : public ftxui::ComponentBase | ||||
|   | ||||
| @@ -13,7 +13,7 @@ foreach(test_source ${KATJA_TEST_SOURCES}) | ||||
| 	add_executable(${tester} ${test_source}) | ||||
|  | ||||
| 	target_compile_definitions(${tester} PRIVATE "BOOST_TEST_DYN_LINK=1") | ||||
| 	target_link_libraries(${tester} LINK_PRIVATE katja Boost::unit_test_framework) | ||||
| 	target_link_libraries(${tester} PRIVATE katja Boost::unit_test_framework) | ||||
|  | ||||
| 	add_test(NAME ${test_name} COMMAND ${tester}) | ||||
| endforeach() | ||||
|   | ||||
		Reference in New Issue
	
	Block a user