Use private and public instead of legacy LINK_
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
Reference in New Issue
Block a user