26 #if defined(_WIN32) && defined(HR_ENGINE_SHARED) 28 # define MR_DllDeclare __declspec( dllexport ) 30 # define MR_DllDeclare __declspec( dllimport ) 33 # define MR_DllDeclare 72 SIZE = SUPER::Props::NEXT_,
95 child(
std::move(child)), visible(true)
98 focusRequestedConn.reset(
99 new boost::signals2::scoped_connection(
100 this->child->GetFocusRequestedSignal().connect(
102 std::placeholders::_1))));
103 focusRelinquishedConn.reset(
104 new boost::signals2::scoped_connection(
105 this->child->GetFocusRelinquishedSignal().connect(
107 std::placeholders::_1, std::placeholders::_2))));
136 template<
class T,
class... Args>
137 typename std::enable_if<std::is_base_of<UiViewModel, T>::value,
138 std::shared_ptr<T>>::type
141 auto sharedChild = std::make_shared<T>(std::forward<Args>(args)...);
142 children.emplace_back(
new Child(*
this, sharedChild));
143 sharedChild->AttachView(display);
154 typename std::enable_if<std::is_base_of<UiViewModel, T>::value, std::shared_ptr<T>>::type
157 for (
auto iter = children.begin(); iter != children.end(); ++iter) {
158 if ((*iter)->child == child) {
159 children.erase(iter);
174 typename std::enable_if<std::is_base_of<UiViewModel, T>::value,
179 auto sz = children.size();
180 if (sz == 0)
return child;
186 for (
auto iter = children.begin(); iter != children.end(); ++iter) {
187 if ((*iter)->child == child) {
188 auto dest = children.begin();
189 std::advance(dest, idx);
191 std::rotate(dest, iter, iter + 1);
193 else if (dest > iter) {
194 std::rotate(iter, iter + 1, dest + 1);
226 children.reserve(capacity);
230 template<
typename P,
bool(UiViewModel::*F)(P)>
233 if (!visible || children.empty())
return false;
239 Vec2 oldOrigin(0, 0);
240 for (
auto iter = children.rbegin();
241 iter != children.rend(); ++iter)
243 auto &child = (*iter)->child;
244 if (!(*iter)->visible)
continue;
245 oldOrigin = display.AddUiOrigin(child->GetPos());
246 bool retv = (child.get()->*F)(param);
247 display.SetUiOrigin(oldOrigin);
248 if (retv)
return true;
255 bool OnMouseMoved(
const Vec2 &pos)
override;
273 const Control::Nav &nav) { HR_UNUSED(child); HR_UNUSED(nav); }
294 void SetClip(
bool clip);
301 void SetOpacity(
double opacity);
308 void SetVisible(
bool visible);
316 void SetChildOffset(
const Vec2 &offset);
323 bool IsEmpty()
const {
return children.empty(); }
332 for (
auto &child : children) {
344 for (
auto &child : children) {
345 if (child->visible) {
358 bool TestHit(
const Vec2 &pos);
First index for subclasses.
Definition: BaseContainer.h:77
bool IsEmpty() const
Check if this container is devoid of child widgets.
Definition: BaseContainer.h:323
std::enable_if< std::is_base_of< UiViewModel, T >::value, std::shared_ptr< T > >::type RemoveChild(const std::shared_ptr< T > &child)
Remove a child element.
Definition: BaseContainer.h:155
constexpr Vec3 Promote(double z=0) const noexcept
Definition: Vec.h:206
virtual void OnChildRequestedFocus(UiViewModel &child)
Called when a child widget requests input focus.
Definition: BaseContainer.h:265
Definition: BaseContainer.h:91
std::enable_if< MPL::HasSetSize< T >::value, void >::type SetSize(T &widget, double w, double h)
Definition: MPL.h:60
Base class for UI (2D) components.
Definition: UiViewModel.h:56
Definition: BaseContainer.h:76
virtual void Reserve(size_t capacity)
Increase the capacity of the of this container.
Definition: BaseContainer.h:224
Definition: BaseContainer.h:74
std::shared_ptr< UiViewModel > child
Definition: BaseContainer.h:116
Mouse click events.
Definition: Action.h:67
children_t children
Definition: BaseContainer.h:368
Display & display
Definition: BaseContainer.h:361
Definition: BaseContainer.h:75
Base class for widgets that contain other widgets.
Definition: BaseContainer.h:63
Definition: BaseContainer.h:73
Vec2 size
Definition: BaseContainer.h:363
void AttachView(Display &disp) override
Definition: BaseContainer.h:88
Vec3 Measure() override
Calculate the size of the component.
Definition: BaseContainer.h:355
void ForEachVisibleChild(Fn fn) const
Iterate over each visible child widget.
Definition: BaseContainer.h:342
std::unique_ptr< boost::signals2::scoped_connection > focusRelinquishedConn
Definition: BaseContainer.h:121
MR_UInt32 uiLayoutFlags_t
Definition: UiLayoutFlags.h:53
#define MR_DllDeclare
Definition: BaseContainer.h:33
double GetOpacity() const
Retrieve the opacity.
Definition: BaseContainer.h:300
virtual ~BaseContainer()
Definition: BaseContainer.h:85
Base class for display managers.
Definition: Display.h:73
bool visible
Used for filtering in subclasses.
Definition: BaseContainer.h:117
const Vec2 & GetSize() const
Retrieve the size of the container.
Definition: BaseContainer.h:283
void ForEachChild(Fn fn) const
Iterate over each child widget.
Definition: BaseContainer.h:330
const Vec2 & GetChildOffset() const
Retrieve the offset to the position of the child widgets.
Definition: BaseContainer.h:314
std::unique_ptr< boost::signals2::scoped_connection > focusRequestedConn
Definition: BaseContainer.h:120
virtual void OnChildRelinquishedFocus(UiViewModel &child, const Control::Nav &nav)
Called when a child widget passes input focus to another widget.
Definition: BaseContainer.h:272
children_t & GetChildren()
Definition: BaseContainer.h:352
bool IsClip() const
Check if child elements are clipped to the container bounds.
Definition: BaseContainer.h:293
virtual void Clear()
Remove all child elements.
Definition: BaseContainer.h:206
void SetSize(double w, double h)
Convenience function for SetSize(const Vec2&).
Definition: BaseContainer.h:286
bool IsVisible() const
Check if the children of this container are shown.
Definition: BaseContainer.h:307
A navigation direction.
Definition: Nav.h:45
int idx
Definition: SdlDisplay.cpp:254
std::vector< std::unique_ptr< Child >> children_t
Definition: BaseContainer.h:124
Vec2 childOffset
Definition: BaseContainer.h:367
bool visible
Definition: BaseContainer.h:366
static const Vec2 SIZE
Definition: ProfileEditScene.cpp:90
Definition: Announcement.h:24
double opacity
Definition: BaseContainer.h:365
std::enable_if< std::is_base_of< UiViewModel, T >::value, std::shared_ptr< T > >::type NewChild(Args &&...args)
Create and append a new child widget to the end of the list.
Definition: BaseContainer.h:139
bool clip
Definition: BaseContainer.h:364
Child(BaseContainer &bc, std::shared_ptr< UiViewModel > child)
Definition: BaseContainer.h:94
std::enable_if< std::is_base_of< UiViewModel, T >::value, std::shared_ptr< T > >::type ReorderChild(const std::shared_ptr< T > &child, size_t idx)
Move a widget to a different position in the list.
Definition: BaseContainer.h:177
Definition: BaseContainer.h:68
bool PropagateMouseEvent(P param)
Definition: BaseContainer.h:231