From 1d85e2254323e8e2dff0fedc5fb6c16f3430343f Mon Sep 17 00:00:00 2001 From: Artur Wieczorek <7330332+a-wi@users.noreply.github.com> Date: Sat, 3 Dec 2022 17:10:55 +0200 Subject: [PATCH] Implement new wxPGProperty::HasAnyChild() method There are many checks in the code whether wxPGProperty has any child. Doing so by checking if GetChildCount() is greater than zero doesn't seem to express intent simply and clearly. With dedicated method this could be done simpler and hopefully in a more optimal way. --- include/wx/propgrid/property.h | 8 +++++- include/wx/propgrid/propgridiface.h | 2 +- include/wx/propgrid/propgridpagestate.h | 2 +- interface/wx/propgrid/property.h | 7 +++++ samples/propgrid/propgrid.cpp | 10 +++---- samples/propgrid/sampleprops.cpp | 4 +-- samples/propgrid/tests.cpp | 4 +-- src/propgrid/editors.cpp | 2 +- src/propgrid/property.cpp | 36 ++++++++++++------------- src/propgrid/propgridiface.cpp | 8 +++--- src/propgrid/propgridpagestate.cpp | 36 ++++++++++++------------- src/propgrid/props.cpp | 6 ++--- 12 files changed, 69 insertions(+), 56 deletions(-) diff --git a/include/wx/propgrid/property.h b/include/wx/propgrid/property.h index 90cde59075..1336e8958c 100644 --- a/include/wx/propgrid/property.h +++ b/include/wx/propgrid/property.h @@ -1559,7 +1559,7 @@ public: // Returns true if property has visible children. bool IsExpanded() const - { return (!(m_flags & wxPG_PROP_COLLAPSED) && GetChildCount() > 0); } + { return (!(m_flags & wxPG_PROP_COLLAPSED) && HasAnyChild()); } // Returns true if all parents expanded. bool IsVisible() const; @@ -1838,6 +1838,12 @@ public: return (unsigned int) m_children.size(); } + // Checks if contains any child property. + bool HasAnyChild() const + { + return !m_children.empty(); + } + // Returns sub-property at index i. wxPGProperty* Item( unsigned int i ) const { return m_children[i]; } diff --git a/include/wx/propgrid/propgridiface.h b/include/wx/propgrid/propgridiface.h index a3f02cf8f2..7aeb6c2820 100644 --- a/include/wx/propgrid/propgridiface.h +++ b/include/wx/propgrid/propgridiface.h @@ -245,7 +245,7 @@ public: { wxPG_PROP_ARG_CALL_PROLOG_RETVAL(wxNullProperty) - if ( p->GetChildCount() == 0 || p->HasFlag(wxPG_PROP_AGGREGATE) ) + if ( !p->HasAnyChild() || p->HasFlag(wxPG_PROP_AGGREGATE) ) return wxNullProperty; return p->Item(0); diff --git a/include/wx/propgrid/propgridpagestate.h b/include/wx/propgrid/propgridpagestate.h index 8edfe1b9d0..e9fec20c4a 100644 --- a/include/wx/propgrid/propgridpagestate.h +++ b/include/wx/propgrid/propgridpagestate.h @@ -155,7 +155,7 @@ wxPG_ITERATE_DEFAULT = wxPG_ITERATE_NORMAL #define wxPG_ITERATOR_PARENTEXMASK_TEST(PWC, PARENTMASK) \ ( \ !PWC->HasFlag(PARENTMASK) && \ - PWC->GetChildCount() > 0 \ + PWC->HasAnyChild() \ ) diff --git a/interface/wx/propgrid/property.h b/interface/wx/propgrid/property.h index 261310db0a..6dc07f740b 100644 --- a/interface/wx/propgrid/property.h +++ b/interface/wx/propgrid/property.h @@ -1478,6 +1478,13 @@ public: */ unsigned int GetChildCount() const; + /** + Checks if there is any child property. + + @since 3.3.0 + */ + bool HasAnyChild() const; + /** Returns height of children, recursively, and by taking expanded/collapsed status into account. diff --git a/samples/propgrid/propgrid.cpp b/samples/propgrid/propgrid.cpp index c7d8c546de..2a9b8a0cda 100644 --- a/samples/propgrid/propgrid.cpp +++ b/samples/propgrid/propgrid.cpp @@ -221,7 +221,7 @@ wxVectorProperty::wxVectorProperty( const wxString& label, void wxVectorProperty::RefreshChildren() { - if ( !GetChildCount() ) return; + if ( !HasAnyChild() ) return; const wxVector3f& vector = wxVector3fRefFromVariant(m_value); Item(0)->SetValue( vector.x ); Item(1)->SetValue( vector.y ); @@ -270,7 +270,7 @@ wxTriangleProperty::wxTriangleProperty( const wxString& label, void wxTriangleProperty::RefreshChildren() { - if ( !GetChildCount() ) return; + if ( !HasAnyChild() ) return; const wxTriangle& triangle = wxTriangleRefFromVariant(m_value); Item(0)->SetValue( WXVARIANT(triangle.a) ); Item(1)->SetValue( WXVARIANT(triangle.b) ); @@ -2192,7 +2192,7 @@ void FormMain::OnInsertPropClick( wxCommandEvent& WXUNUSED(event) ) { wxString propLabel; - if ( !m_pPropGridManager->GetGrid()->GetRoot()->GetChildCount() ) + if ( !m_pPropGridManager->GetGrid()->GetRoot()->HasAnyChild() ) { wxMessageBox("No items to relate - first add some with Append."); return; @@ -2258,7 +2258,7 @@ void FormMain::OnInsertCatClick( wxCommandEvent& WXUNUSED(event) ) { wxString propLabel; - if ( !m_pPropGridManager->GetGrid()->GetRoot()->GetChildCount() ) + if ( !m_pPropGridManager->GetGrid()->GetRoot()->HasAnyChild() ) { wxMessageBox("No items to relate - first add some with Append."); return; @@ -2303,7 +2303,7 @@ void FormMain::OnDelPropRClick( wxCommandEvent& WXUNUSED(event) ) for (;;) { - if ( p->GetChildCount() == 0 ) + if ( !p->HasAnyChild() ) break; unsigned int n = static_cast(rand()) % p->GetChildCount(); diff --git a/samples/propgrid/sampleprops.cpp b/samples/propgrid/sampleprops.cpp index a31612e997..439867df5e 100644 --- a/samples/propgrid/sampleprops.cpp +++ b/samples/propgrid/sampleprops.cpp @@ -203,7 +203,7 @@ wxSizeProperty::wxSizeProperty( const wxString& label, const wxString& name, void wxSizeProperty::RefreshChildren() { - if ( !GetChildCount() ) return; + if ( !HasAnyChild() ) return; const wxSize& size = wxSizeRefFromVariant(m_value); Item(0)->SetValue( (long)size.x ); Item(1)->SetValue( (long)size.y ); @@ -241,7 +241,7 @@ wxPointProperty::wxPointProperty( const wxString& label, const wxString& name, void wxPointProperty::RefreshChildren() { - if ( !GetChildCount() ) return; + if ( !HasAnyChild() ) return; const wxPoint& point = wxPointRefFromVariant(m_value); Item(0)->SetValue( (long)point.x ); Item(1)->SetValue( (long)point.y ); diff --git a/samples/propgrid/tests.cpp b/samples/propgrid/tests.cpp index ed7ed747e9..ccfcd4a642 100644 --- a/samples/propgrid/tests.cpp +++ b/samples/propgrid/tests.cpp @@ -1357,7 +1357,7 @@ bool FormMain::RunTests( bool fullTest, bool interactive ) if ( pgman->GetPageCount() ) RT_FAILURE(); - if ( pgman->GetGrid()->GetRoot()->GetChildCount() ) + if ( pgman->GetGrid()->GetRoot()->HasAnyChild() ) RT_FAILURE(); // Recreate the original grid @@ -1368,7 +1368,7 @@ bool FormMain::RunTests( bool fullTest, bool interactive ) pgman->SelectProperty("Label"); pgman->GetGrid()->Clear(); - if ( pgman->GetGrid()->GetRoot()->GetChildCount() ) + if ( pgman->GetGrid()->GetRoot()->HasAnyChild() ) RT_FAILURE(); // Recreate the original grid diff --git a/src/propgrid/editors.cpp b/src/propgrid/editors.cpp index 0c5e925568..8bbda34d6f 100644 --- a/src/propgrid/editors.cpp +++ b/src/propgrid/editors.cpp @@ -293,7 +293,7 @@ wxPGWindowList wxPGTextCtrlEditor::CreateControls( wxPropertyGrid* propGrid, // // If has children, and limited editing is specified, then don't create. if ( property->HasFlag(wxPG_PROP_NOEDITOR) && - property->GetChildCount() > 0 ) + property->HasAnyChild() ) return nullptr; int argFlags = 0; diff --git a/src/propgrid/property.cpp b/src/propgrid/property.cpp index e4dd04e707..c5d4b0ec92 100644 --- a/src/propgrid/property.cpp +++ b/src/propgrid/property.cpp @@ -593,7 +593,7 @@ void wxPGProperty::InitAfterAdded( wxPropertyGridPageState* pageState, // // Has initial children - if ( GetChildCount() > 0 ) + if ( HasAnyChild() ) { // Check parental flags wxASSERT_MSG( ((m_flags & wxPG_PROP_PARENTAL_FLAGS) == @@ -945,14 +945,14 @@ void wxPGProperty::DoGenerateComposedValue( wxString& text, } } - if ( childResults && curChild->GetChildCount() > 0 ) + if ( childResults && curChild->HasAnyChild() ) (*childResults)[curChild->GetName()] = s; bool skip = false; if ( (argFlags & wxPG_UNEDITABLE_COMPOSITE_FRAGMENT) && s.empty() ) skip = true; - if ( curChild->GetChildCount() == 0 || skip ) + if ( !curChild->HasAnyChild() || skip ) text += s; else text += wxS("[") + s + wxS("]"); @@ -966,7 +966,7 @@ void wxPGProperty::DoGenerateComposedValue( wxString& text, if ( !skip ) { - if ( curChild->GetChildCount() == 0 ) + if ( !curChild->HasAnyChild() ) text += wxS("; "); else text += wxS(" "); @@ -988,7 +988,7 @@ void wxPGProperty::DoGenerateComposedValue( wxString& text, wxString wxPGProperty::ValueToString( wxVariant& WXUNUSED(value), int argFlags ) const { - wxCHECK_MSG( GetChildCount() > 0, + wxCHECK_MSG( HasAnyChild(), wxString(), wxS("If user property does not have any children, it must ") wxS("override GetValueAsString") ); @@ -1045,7 +1045,7 @@ bool wxPGProperty::IntToValue( wxVariant& variant, int number, int WXUNUSED(argF // Convert semicolon delimited tokens into child values. bool wxPGProperty::StringToValue( wxVariant& v, const wxString& text, int argFlags ) const { - if ( GetChildCount() == 0 ) + if ( !HasAnyChild() ) return false; unsigned int curChild = 0; @@ -1383,7 +1383,7 @@ void wxPGProperty::SetValue( wxVariant value, wxVariant* pList, int flags ) if ( pList && !pList->IsNull() ) { wxASSERT( pList->IsType(wxPG_VARIANT_TYPE_LIST) ); - wxASSERT( GetChildCount() > 0 ); + wxASSERT( HasAnyChild() ); wxASSERT( !IsCategory() ); wxVariantList& list = pList->GetList(); @@ -1708,7 +1708,7 @@ void wxPGProperty::SetBackgroundColour( const wxColour& colour, { while ( firstProp->IsCategory() ) { - if ( firstProp->GetChildCount() == 0 ) + if ( !firstProp->HasAnyChild() ) return; firstProp = firstProp->Item(0); } @@ -1744,7 +1744,7 @@ void wxPGProperty::SetTextColour( const wxColour& colour, { while ( firstProp->IsCategory() ) { - if ( firstProp->GetChildCount() == 0 ) + if ( !firstProp->HasAnyChild() ) return; firstProp = firstProp->Item(0); } @@ -1778,7 +1778,7 @@ void wxPGProperty::SetDefaultColours(int flags) { while ( firstProp->IsCategory() ) { - if ( firstProp->GetChildCount() == 0 ) + if ( !firstProp->HasAnyChild() ) return; firstProp = firstProp->Item(0); } @@ -2166,7 +2166,7 @@ const wxPGProperty* wxPGProperty::GetLastVisibleSubItem() const { // // Returns last visible sub-item, recursively. - if ( !IsExpanded() || GetChildCount() == 0 ) + if ( !IsExpanded() || !HasAnyChild() ) return this; return Last()->GetLastVisibleSubItem(); @@ -2318,7 +2318,7 @@ void wxPGProperty::SortChildren(int (*fCmp)(wxPGProperty**, wxPGProperty**)) void wxPGProperty::AdaptListToValue( wxVariant& list, wxVariant* value ) const { - wxASSERT( GetChildCount() > 0 ); + wxASSERT( HasAnyChild() ); wxASSERT( !IsCategory() ); *value = GetValue(); @@ -2395,7 +2395,7 @@ wxPGProperty* wxPGProperty::GetPropertyByName( const wxString& name ) const wxPGProperty* p = GetPropertyByName(name. substr(0,pos)); - if ( !p || p->GetChildCount() == 0 ) + if ( !p || !p->HasAnyChild() ) return nullptr; return p->GetPropertyByName(name.substr(pos+1,name.length()-pos-1)); @@ -2448,7 +2448,7 @@ int wxPGProperty::GetChildrenHeight( int lh, int iMax ) const if ( !pwc->HasFlag(wxPG_PROP_HIDDEN) ) { if ( !pwc->IsExpanded() || - pwc->GetChildCount() == 0 ) + !pwc->HasAnyChild() ) h += lh; else h += pwc->GetChildrenHeight(lh) + lh; @@ -2487,7 +2487,7 @@ wxPGProperty* wxPGProperty::GetItemAtY( unsigned int y, iy += lh; if ( pwc->IsExpanded() && - pwc->GetChildCount() > 0 ) + pwc->HasAnyChild() ) { result = pwc->GetItemAtY( y, lh, &iy ); if ( result ) @@ -2545,7 +2545,7 @@ void wxPGProperty::DeleteChildren() { wxPropertyGridPageState* state = m_parentState; - if ( GetChildCount() == 0 ) + if ( !HasAnyChild() ) return; // Because deletion is sometimes deferred, we have to use @@ -2623,7 +2623,7 @@ bool wxPGProperty::AreAllChildrenSpecified( const wxVariant* pendingList ) const return false; // Check recursively - if ( child->GetChildCount() > 0 ) + if ( child->HasAnyChild() ) { const wxVariant* childList = nullptr; @@ -2658,7 +2658,7 @@ bool wxPGProperty::IsTextEditable() const return false; if ( HasFlag(wxPG_PROP_NOEDITOR) && - (GetChildCount() > 0 || + (HasAnyChild() || wxString(GetEditorClass()->GetClassInfo()->GetClassName()).EndsWith(wxS("Button"))) ) return false; diff --git a/src/propgrid/propgridiface.cpp b/src/propgrid/propgridiface.cpp index 7d1f4ce7d9..222ae34ac2 100644 --- a/src/propgrid/propgridiface.cpp +++ b/src/propgrid/propgridiface.cpp @@ -125,7 +125,7 @@ wxPGProperty* wxPropertyGridInterface::RemoveProperty( wxPGPropArg id ) { wxPG_PROP_ARG_CALL_PROLOG_RETVAL(wxNullProperty) - wxCHECK( p->GetChildCount() == 0 || p->HasFlag(wxPG_PROP_AGGREGATE), + wxCHECK( !p->HasAnyChild() || p->HasFlag(wxPG_PROP_AGGREGATE), wxNullProperty); wxPropertyGridPageState* state = p->GetParentState(); @@ -286,7 +286,7 @@ bool wxPropertyGridInterface::ExpandAll( bool doExpand ) { wxPropertyGridPageState* state = m_pState; - if ( state->DoGetRoot()->GetChildCount() == 0 ) + if ( !state->DoGetRoot()->HasAnyChild() ) return true; wxPropertyGrid* pg = state->GetGrid(); @@ -302,7 +302,7 @@ bool wxPropertyGridInterface::ExpandAll( bool doExpand ) for ( it = GetVIterator( wxPG_ITERATE_ALL ); !it.AtEnd(); it.Next() ) { wxPGProperty* p = it.GetProperty(); - if ( p->GetChildCount() > 0 ) + if ( p->HasAnyChild() ) { if ( doExpand ) { @@ -504,7 +504,7 @@ wxPGProperty* wxPropertyGridInterface::GetPropertyByName( const wxString& name, const wxString& subname ) const { wxPGProperty* p = DoGetPropertyByName(name); - if ( !p || p->GetChildCount() == 0 ) + if ( !p || !p->HasAnyChild() ) return wxNullProperty; return p->GetPropertyByName(subname); diff --git a/src/propgrid/propgridpagestate.cpp b/src/propgrid/propgridpagestate.cpp index 47e24934fe..df1163ef83 100644 --- a/src/propgrid/propgridpagestate.cpp +++ b/src/propgrid/propgridpagestate.cpp @@ -43,7 +43,7 @@ void wxPropertyGridIteratorBase::Init( wxPropertyGridPageState* state, int flags m_state = state; m_baseParent = state->DoGetRoot(); - if ( !property && m_baseParent->GetChildCount() > 0 ) + if ( !property && m_baseParent->HasAnyChild() ) property = m_baseParent->Item(0); m_property = property; @@ -110,7 +110,7 @@ void wxPropertyGridIteratorBase::Prev() property = parent->Item(index); // Go to last children? - if ( property->GetChildCount() > 0 && + if ( property->HasAnyChild() && wxPG_ITERATOR_PARENTEXMASK_TEST(property, m_parentExMask) ) { // First child @@ -144,7 +144,7 @@ void wxPropertyGridIteratorBase::Next( bool iterateChildren ) if ( !property ) return; - if ( property->GetChildCount() > 0 && + if ( property->HasAnyChild() && wxPG_ITERATOR_PARENTEXMASK_TEST(property, m_parentExMask) && iterateChildren ) { @@ -234,7 +234,7 @@ void wxPropertyGridPageState::InitNonCatMode() // to run as expected. m_properties = &m_regularArray; - if ( m_properties->GetChildCount() > 0 ) + if ( m_properties->HasAnyChild() ) { // // Prepare m_abcArray @@ -372,7 +372,7 @@ void wxPropertyGridPageState::OnClientWidthChange( int newWidth, int widthChange // If too long, don't set splitter if ( timeSinceCreation < 250 ) { - if ( m_properties->GetChildCount() > 0 ) + if ( m_properties->HasAnyChild() ) { SetSplitterLeft( false ); } @@ -397,14 +397,14 @@ void wxPropertyGridPageState::OnClientWidthChange( int newWidth, int widthChange wxPGProperty* wxPropertyGridPageState::GetLastItem( int flags ) { - if ( m_properties->GetChildCount() == 0 ) + if ( !m_properties->HasAnyChild() ) return nullptr; wxPG_ITERATOR_CREATE_MASKS(flags, wxPGProperty::FlagType itemExMask, wxPGProperty::FlagType parentExMask) // First, get last child of last parent wxPGProperty* pwc = m_properties->Last(); - while ( pwc->GetChildCount() > 0 && + while ( pwc->HasAnyChild() && wxPG_ITERATOR_PARENTEXMASK_TEST(pwc, parentExMask) ) pwc = pwc->Last(); @@ -461,7 +461,7 @@ wxPGProperty* wxPropertyGridPageState::BaseGetPropertyByLabel if ( p->GetLabel() == label ) return p; // Check children recursively. - if ( p->GetChildCount() > 0 ) + if ( p->HasAnyChild() ) { p = BaseGetPropertyByLabel(label, p); if ( p ) @@ -560,7 +560,7 @@ bool wxPropertyGridPageState::EnableCategories( bool enable ) p->m_depth = parent->GetDepth() + 1; } - if ( p->GetChildCount() > 0 ) + if ( p->HasAnyChild() ) { i = 0; parent = p; @@ -629,7 +629,7 @@ void wxPropertyGridPageState::DoSortChildren( wxPGProperty* p, p = m_properties; // Can only sort items with children - if ( p->GetChildCount() == 0 ) + if ( !p->HasAnyChild() ) return; // Never sort children of aggregate properties @@ -744,7 +744,7 @@ int wxPropertyGridPageState::GetColumnFitWidth(const wxDC& dc, maxW = w; } - if ( p->GetChildCount() > 0 && + if ( p->HasAnyChild() && ( subProps || p->IsCategory() ) ) { w = GetColumnFitWidth(p, col, subProps ); @@ -786,7 +786,7 @@ int wxPropertyGridPageState::GetColumnFitWidth(const wxPGProperty* p, unsigned i maxW = w; } - if ( pc->GetChildCount() > 0 && (subProps || pc->IsCategory()) ) + if ( pc->HasAnyChild() && (subProps || pc->IsCategory()) ) { w = GetColumnFitWidth(pc, col, subProps); @@ -1346,7 +1346,7 @@ bool wxPropertyGridPageState::DoCollapse( wxPGProperty* p ) { wxCHECK_MSG( p, false, wxS("invalid property id") ); - if ( p->GetChildCount() == 0 ) return false; + if ( !p->HasAnyChild() ) return false; if ( !p->IsExpanded() ) return false; @@ -1363,7 +1363,7 @@ bool wxPropertyGridPageState::DoExpand( wxPGProperty* p ) { wxCHECK_MSG( p, false, wxS("invalid property id") ); - if ( p->GetChildCount() == 0 ) return false; + if ( !p->HasAnyChild() ) return false; if ( p->IsExpanded() ) return false; @@ -1414,7 +1414,7 @@ wxVariant wxPropertyGridPageState::DoGetPropertyValues( const wxString& listname wxVariantList tempList; wxVariant v( tempList, listname ); - if ( pwc->GetChildCount() > 0 ) + if ( pwc->HasAnyChild() ) { if ( flags & wxPG_KEEP_STRUCTURE ) { @@ -1423,7 +1423,7 @@ wxVariant wxPropertyGridPageState::DoGetPropertyValues( const wxString& listname for ( unsigned int i = 0; i < pwc->GetChildCount(); i++ ) { wxPGProperty* p = pwc->Item(i); - if ( p->GetChildCount() == 0 || p->HasFlag(wxPG_PROP_AGGREGATE) ) + if ( !p->HasAnyChild() || p->HasFlag(wxPG_PROP_AGGREGATE) ) { wxVariant variant = p->GetValue(); variant.SetName( p->GetBaseName() ); @@ -1447,7 +1447,7 @@ wxVariant wxPropertyGridPageState::DoGetPropertyValues( const wxString& listname const wxPGProperty* p = it.GetProperty(); // Use a trick to ignore wxParentProperty itself, but not its sub-properties. - if ( p->GetChildCount() == 0 || p->HasFlag(wxPG_PROP_AGGREGATE) ) + if ( !p->HasAnyChild() || p->HasFlag(wxPG_PROP_AGGREGATE) ) { wxVariant variant = p->GetValue(); variant.SetName( p->GetName() ); @@ -2010,7 +2010,7 @@ void wxPropertyGridPageState::DoDelete( wxPGProperty* item, bool doDelete ) unsigned int indinparent = item->GetIndexInParent(); // Delete children - if ( item->GetChildCount() > 0 && !item->HasFlag(wxPG_PROP_AGGREGATE) ) + if ( item->HasAnyChild() && !item->HasFlag(wxPG_PROP_AGGREGATE) ) { // deleting a category item->DeleteChildren(); diff --git a/src/propgrid/props.cpp b/src/propgrid/props.cpp index c160b27a5a..913cd7a9a0 100644 --- a/src/propgrid/props.cpp +++ b/src/propgrid/props.cpp @@ -69,7 +69,7 @@ wxString wxStringProperty::ValueToString( wxVariant& value, { wxString s = value.GetString(); - if ( GetChildCount() > 0 && HasFlag(wxPG_PROP_COMPOSED_VALUE) ) + if ( HasAnyChild() && HasFlag(wxPG_PROP_COMPOSED_VALUE) ) { // Value stored in m_value is non-editable, non-full value if ( (argFlags & wxPG_FULL_VALUE) || @@ -97,7 +97,7 @@ wxString wxStringProperty::ValueToString( wxVariant& value, bool wxStringProperty::StringToValue( wxVariant& variant, const wxString& text, int argFlags ) const { - if ( GetChildCount() > 0 && HasFlag(wxPG_PROP_COMPOSED_VALUE) ) + if ( HasAnyChild() && HasFlag(wxPG_PROP_COMPOSED_VALUE) ) return wxPGProperty::StringToValue(variant, text, argFlags); if ( variant != text ) @@ -1771,7 +1771,7 @@ long wxFlagsProperty::IdToBit( const wxString& id ) const void wxFlagsProperty::RefreshChildren() { - if ( !m_choices.IsOk() || GetChildCount() == 0 ) return; + if ( !m_choices.IsOk() || !HasAnyChild() ) return; int flags = m_value.GetLong();