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