Skip to content
Snippets Groups Projects
Unverified Commit 90dfceef authored by Arthur Sonzogni's avatar Arthur Sonzogni Committed by GitHub
Browse files
parent 5410329a
No related branches found
No related tags found
No related merge requests found
......@@ -227,6 +227,7 @@ class SliderWithLabel : public ComponentBase {
}
Element Render() override {
auto focus_management = Focused() ? focus : Active() ? select : nothing;
auto gauge_color = Focused() ? color(Color::White) : color(Color::GrayDark);
return hbox({
text(label_()) | dim | vcenter,
......@@ -236,7 +237,7 @@ class SliderWithLabel : public ComponentBase {
text("]"),
}) | xflex,
}) |
gauge_color | xflex | reflect(box_);
gauge_color | xflex | reflect(box_) | focus_management;
}
ConstStringRef label_;
......
#include <gtest/gtest.h> // for AssertionResult, Message, TestPartResult, Test, EXPECT_TRUE, EXPECT_EQ, SuiteApiResolver, TestInfo (ptr only), EXPECT_FALSE, TEST, TestFactoryImpl
#include <array> // for array
#include <ftxui/component/mouse.hpp> // for Mouse, Mouse::Left, Mouse::Pressed, Mouse::Released
#include <ftxui/dom/elements.hpp> // for GaugeDirection, GaugeDirection::Down, GaugeDirection::Left, GaugeDirection::Right, GaugeDirection::Up
#include <memory> // for __shared_ptr_access, shared_ptr, allocator
......@@ -129,6 +130,59 @@ TEST(SliderTest, Up) {
EXPECT_FALSE(slider->OnEvent(MousePressed(2, 5)));
}
TEST(SliderTest, Focus) {
static std::array<int, 10> values;
auto container = Container::Vertical({});
for(size_t i = 0; i<values.size(); ++i) {
container->Add(Slider(std::to_string(i), &values[i]));
}
container |= frame;
Screen screen(10, 3);
Render(screen, container->Render());
EXPECT_EQ(screen.at(0, 0), "0"); // Select 0
EXPECT_EQ(screen.at(0, 1), "1");
EXPECT_EQ(screen.at(0, 2), "2");
EXPECT_TRUE(container->OnEvent(Event::ArrowDown));
Render(screen, container->Render());
EXPECT_EQ(screen.at(0, 0), "0");
EXPECT_EQ(screen.at(0, 1), "1"); // Select 1
EXPECT_EQ(screen.at(0, 2), "2");
EXPECT_TRUE(container->OnEvent(Event::ArrowDown));
Render(screen, container->Render());
EXPECT_EQ(screen.at(0, 0), "1");
EXPECT_EQ(screen.at(0, 1), "2"); // Select 2
EXPECT_EQ(screen.at(0, 2), "3");
EXPECT_TRUE(container->OnEvent(Event::ArrowDown)); // Select 3
EXPECT_TRUE(container->OnEvent(Event::ArrowDown)); // Select 4
EXPECT_TRUE(container->OnEvent(Event::ArrowDown)); // Select 5
EXPECT_TRUE(container->OnEvent(Event::ArrowDown)); // Select 6
EXPECT_TRUE(container->OnEvent(Event::ArrowDown));
Render(screen, container->Render());
EXPECT_EQ(screen.at(0, 0), "6");
EXPECT_EQ(screen.at(0, 1), "7"); // Select 7
EXPECT_EQ(screen.at(0, 2), "8");
EXPECT_TRUE(container->OnEvent(Event::ArrowDown));
Render(screen, container->Render());
EXPECT_EQ(screen.at(0, 0), "7");
EXPECT_EQ(screen.at(0, 1), "8"); // Select 8
EXPECT_EQ(screen.at(0, 2), "9");
EXPECT_TRUE(container->OnEvent(Event::ArrowDown));
Render(screen, container->Render());
EXPECT_EQ(screen.at(0, 0), "7");
EXPECT_EQ(screen.at(0, 1), "8");
EXPECT_EQ(screen.at(0, 2), "9"); // Select 9
EXPECT_FALSE(container->OnEvent(Event::ArrowDown));
}
} // namespace ftxui
// Copyright 2022 Arthur Sonzogni. All rights reserved.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment