mirror of
https://github.com/ArthurSonzogni/FTXUI.git
synced 2024-11-24 19:50:35 +08:00
Compare commits
2 Commits
d16359cf8b
...
c86bd1497c
Author | SHA1 | Date | |
---|---|---|---|
|
c86bd1497c | ||
|
4aa8592d7d |
@ -35,6 +35,10 @@ current (development)
|
|||||||
- Bugfix: Fix cursor position in when in the last column. See #831.
|
- Bugfix: Fix cursor position in when in the last column. See #831.
|
||||||
- Bugfix: Fix `ResizeableSplit` keyboard navigation. Fixed by #842.
|
- Bugfix: Fix `ResizeableSplit` keyboard navigation. Fixed by #842.
|
||||||
- Bugfix: Fix `Menu` focus. See #841
|
- Bugfix: Fix `Menu` focus. See #841
|
||||||
|
- Feature: Add `ComponentBase::Index()`. This allows to get the index of a
|
||||||
|
component in its parent. See #932
|
||||||
|
- Feature: Add `EntryState::index`. This allows to get the index of a menu entry.
|
||||||
|
See #932
|
||||||
|
|
||||||
### Dom
|
### Dom
|
||||||
- Feature: Add `hscroll_indicator`. It display an horizontal indicator
|
- Feature: Add `hscroll_indicator`. It display an horizontal indicator
|
||||||
|
@ -44,7 +44,7 @@ class ComponentBase {
|
|||||||
ComponentBase* Parent() const;
|
ComponentBase* Parent() const;
|
||||||
Component& ChildAt(size_t i);
|
Component& ChildAt(size_t i);
|
||||||
size_t ChildCount() const;
|
size_t ChildCount() const;
|
||||||
int IndexOf(ComponentBase* child) const;
|
int Index() const;
|
||||||
void Add(Component children);
|
void Add(Component children);
|
||||||
void Detach();
|
void Detach();
|
||||||
void DetachAllChildren();
|
void DetachAllChildren();
|
||||||
|
@ -48,12 +48,8 @@ class ButtonBase : public ComponentBase, public ButtonOption {
|
|||||||
}
|
}
|
||||||
|
|
||||||
auto focus_management = focused ? focus : active ? select : nothing;
|
auto focus_management = focused ? focus : active ? select : nothing;
|
||||||
const EntryState state = {
|
const EntryState state{
|
||||||
*label,
|
*label, false, active, focused_or_hover, Index(),
|
||||||
false,
|
|
||||||
active,
|
|
||||||
focused_or_hover,
|
|
||||||
-1,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
auto element = (transform ? transform : DefaultTransform) //
|
auto element = (transform ? transform : DefaultTransform) //
|
||||||
|
@ -28,11 +28,7 @@ class CheckboxBase : public ComponentBase, public CheckboxOption {
|
|||||||
const bool is_active = Active();
|
const bool is_active = Active();
|
||||||
auto focus_management = is_focused ? focus : is_active ? select : nothing;
|
auto focus_management = is_focused ? focus : is_active ? select : nothing;
|
||||||
auto entry_state = EntryState{
|
auto entry_state = EntryState{
|
||||||
*label,
|
*label, *checked, is_active, is_focused || hovered_, -1,
|
||||||
*checked,
|
|
||||||
is_active,
|
|
||||||
is_focused || hovered_,
|
|
||||||
-1,
|
|
||||||
};
|
};
|
||||||
auto element = (transform ? transform : CheckboxOption::Simple().transform)(
|
auto element = (transform ? transform : CheckboxOption::Simple().transform)(
|
||||||
entry_state);
|
entry_state);
|
||||||
|
@ -51,16 +51,20 @@ size_t ComponentBase::ChildCount() const {
|
|||||||
return children_.size();
|
return children_.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// @brief Return index of child or -1 if not found.
|
/// @brief Return index of the component in its parent. -1 if no parent.
|
||||||
/// @ingroup component
|
/// @ingroup component
|
||||||
int ComponentBase::IndexOf(ComponentBase* child) const {
|
int ComponentBase::Index() const {
|
||||||
|
if (parent_ == nullptr) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
int index = 0;
|
int index = 0;
|
||||||
for (Component c : children_) {
|
for (const Component& child : parent_->children_) {
|
||||||
if (&(*c) == child)
|
if (child.get() == this) {
|
||||||
return index;
|
return index;
|
||||||
|
}
|
||||||
index++;
|
index++;
|
||||||
}
|
}
|
||||||
return -1;
|
return -1; // Not reached.
|
||||||
}
|
}
|
||||||
|
|
||||||
/// @brief Add a child.
|
/// @brief Add a child.
|
||||||
|
@ -123,11 +123,7 @@ class MenuBase : public ComponentBase, public MenuOption {
|
|||||||
const bool is_selected = (selected() == i);
|
const bool is_selected = (selected() == i);
|
||||||
|
|
||||||
const EntryState state = {
|
const EntryState state = {
|
||||||
entries[i],
|
entries[i], false, is_selected, is_focused, i,
|
||||||
false,
|
|
||||||
is_selected,
|
|
||||||
is_focused,
|
|
||||||
i,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
auto focus_management = (selected_focus_ != i) ? nothing
|
auto focus_management = (selected_focus_ != i) ? nothing
|
||||||
@ -626,12 +622,8 @@ Component MenuEntry(MenuEntryOption option) {
|
|||||||
const bool focused = Focused();
|
const bool focused = Focused();
|
||||||
UpdateAnimationTarget();
|
UpdateAnimationTarget();
|
||||||
|
|
||||||
const EntryState state = {
|
const EntryState state{
|
||||||
label(),
|
label(), false, hovered_, focused, Index(),
|
||||||
false,
|
|
||||||
hovered_,
|
|
||||||
focused,
|
|
||||||
Parent()->IndexOf(this),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const Element element =
|
const Element element =
|
||||||
|
@ -266,10 +266,8 @@ TEST(MenuTest, MenuEntryIndex) {
|
|||||||
menu->OnEvent(Event::ArrowDown);
|
menu->OnEvent(Event::ArrowDown);
|
||||||
menu->OnEvent(Event::ArrowDown);
|
menu->OnEvent(Event::ArrowDown);
|
||||||
menu->OnEvent(Event::Return);
|
menu->OnEvent(Event::Return);
|
||||||
for(int idx = 0; idx < menu->ChildCount(); idx++)
|
for (int index = 0; index < menu->ChildCount(); index++) {
|
||||||
{
|
EXPECT_EQ(menu->ChildAt(index)->Index(), index);
|
||||||
auto child = menu->ChildAt(idx);
|
|
||||||
EXPECT_EQ(menu->IndexOf(&(*child)), idx);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -40,11 +40,7 @@ class RadioboxBase : public ComponentBase, public RadioboxOption {
|
|||||||
: is_menu_focused ? focus
|
: is_menu_focused ? focus
|
||||||
: select;
|
: select;
|
||||||
auto state = EntryState{
|
auto state = EntryState{
|
||||||
entries[i],
|
entries[i], selected() == i, is_selected, is_focused, i,
|
||||||
selected() == i,
|
|
||||||
is_selected,
|
|
||||||
is_focused,
|
|
||||||
i,
|
|
||||||
};
|
};
|
||||||
auto element =
|
auto element =
|
||||||
(transform ? transform : RadioboxOption::Simple().transform)(state);
|
(transform ? transform : RadioboxOption::Simple().transform)(state);
|
||||||
|
Loading…
Reference in New Issue
Block a user