51
// It is possible that this layout object is in the refresh list. Remove it here before it is deleted.
52
GetWindowThread()->RemoveObjectFromLayoutQueue(this);
51
// It is possible that this layout object is in the refresh list. Remove
52
// it here before it is deleted.
53
WindowThread* wt = GetWindowThread();
55
wt->RemoveObjectFromLayoutQueue(this);
54
57
std::list<Area *>::iterator it;
65
68
void Layout::RemoveChildObject (Area *bo)
67
bool was_focused = GetFocused ();
68
70
std::list<Area *>::iterator it;
69
71
it = std::find (_layout_element_list.begin(), _layout_element_list.end(), bo);
71
if ((*it)->GetFocused ())
73
// the child was focused, oh dear. lets handle that gracefully
74
if (_layout_element_list.size() > 1)
76
if (it == _layout_element_list.end ())
78
FocusPreviousChild ((*it));
82
FocusNextChild ((*it));
86
(*it)->SetFocused (false);
89
sigc::connection onchildfocuscon = _connection_map[bo];
90
onchildfocuscon.disconnect ();
92
73
if (it != _layout_element_list.end())
94
75
/* we need to emit the signal before the unparent, just in case
97
78
bo->UnParentObject();
98
79
_layout_element_list.erase (it);
101
if (IsEmpty () && was_focused)
103
// we are now empty, so we need to handle our focus state
104
Area *area = GetParentObject ();
109
if (area->IsLayout ())
111
Layout *parent = (Layout *)area;
112
parent->SetFocused (true);
117
83
bool Layout::FindWidget (Area *WidgetObject) const
192
#if defined(NUX_OS_WINDOWS) && !defined(NUX_VISUAL_STUDIO_2010)
193
std::list<Area *>::iterator pos = _layout_element_list.begin();
226
195
auto pos = _layout_element_list.begin();
228
198
while (pos != _layout_element_list.end() && idx > 0)
284
#if defined(NUX_OS_WINDOWS) && !defined(NUX_VISUAL_STUDIO_2010)
285
std::list<Area *>::iterator pos = _layout_element_list.begin();
314
287
auto pos = _layout_element_list.begin();
316
290
while (pos != _layout_element_list.end() && idx > 0)
778
long Layout::ProcessEvent (IEvent &ievent, long TraverseInfo, long ProcessEventInfo)
780
long ret = TraverseInfo;
781
std::list<Area *>::iterator it;
783
for (it = _layout_element_list.begin(); it != _layout_element_list.end(); it++)
785
if (!(*it)->IsVisible () || !(*it)->IsSensitive ())
790
View *ic = NUX_STATIC_CAST (View*, (*it));
791
ret = ic->ProcessEvent (ievent, ret, ProcessEventInfo);
793
else if ( (*it)->IsLayout() )
795
Layout *layout = NUX_STATIC_CAST (Layout*, (*it));
796
ret = layout->ProcessEvent (ievent, ret, ProcessEventInfo);
798
// InputArea should be tested last
799
else if ((*it)->IsInputArea())
801
InputArea *input_area = NUX_STATIC_CAST (InputArea*, (*it));
802
ret = input_area->OnEvent (ievent, ret, ProcessEventInfo);
806
/* must do focus processing after sending events to children */
807
if ((ievent.e_event == NUX_KEYDOWN) && HasFocusControl () && (_ignore_focus == false))
809
ret |= ProcessFocusEvent (ievent, ret, ProcessEventInfo);
813
_ignore_focus = false;
818
752
Area* Layout::FindAreaUnderMouse(const Point& mouse_position, NuxEventType event_type)
820
754
bool mouse_inside = TestMousePointerInclusionFilterMouseWheel(mouse_position, event_type);