X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/5acb9127c51a79e792f6faeea6c70f32e622ee17..b0996c3da00677389854e5afbcef499e7aa1654b:/src/propgrid/propgridpagestate.cpp diff --git a/src/propgrid/propgridpagestate.cpp b/src/propgrid/propgridpagestate.cpp index 06adc31f07..aa5b0244f8 100644 --- a/src/propgrid/propgridpagestate.cpp +++ b/src/propgrid/propgridpagestate.cpp @@ -74,11 +74,10 @@ void wxPropertyGridIteratorBase::Init( wxPropertyGridPageState* state, int flags void wxPropertyGridIteratorBase::Init( wxPropertyGridPageState* state, int flags, int startPos, int dir ) { - wxPGProperty* property; + wxPGProperty* property = NULL; if ( startPos == wxTOP ) { - property = NULL; if ( dir == 0 ) dir = 1; } @@ -90,8 +89,7 @@ void wxPropertyGridIteratorBase::Init( wxPropertyGridPageState* state, int flags } else { - wxASSERT_MSG( false, wxT("Only supported stating positions are wxTOP and wxBOTTOM") ); - property = NULL; + wxFAIL_MSG("Only supported starting positions are wxTOP and wxBOTTOM"); } Init( state, flags, property, dir ); @@ -470,7 +468,7 @@ void wxPropertyGridPageState::DoSetPropertyName( wxPGProperty* p, // NB: Nowadays only needed for alphabetic/categoric mode switching. // ----------------------------------------------------------------------- -#define II_INVALID_I 0x00FFFFFF +//#define II_INVALID_I 0x00FFFFFF #define ITEM_ITERATION_VARIABLES \ wxPGProperty* parent; \ @@ -481,6 +479,7 @@ void wxPropertyGridPageState::DoSetPropertyName( wxPGProperty* p, parent = m_properties; \ i = 0; +#if 0 #define ITEM_ITERATION_INIT(startparent, startindex, state) \ parent = startparent; \ i = (unsigned int)startindex; \ @@ -489,6 +488,7 @@ void wxPropertyGridPageState::DoSetPropertyName( wxPGProperty* p, parent = state->m_properties; \ i = 0; \ } +#endif #define ITEM_ITERATION_LOOP_BEGIN \ do \ @@ -632,7 +632,7 @@ void wxPropertyGridPageState::SortChildren( wxPGProperty* p ) #endif // Fix indexes - pwc->FixIndecesOfChildren(); + pwc->FixIndicesOfChildren(); } @@ -697,7 +697,10 @@ int wxPropertyGridPageState::GetColumnFitWidth(wxClientDC& dc, wxPGProperty* p = pwc->Item(i); if ( !p->IsCategory() ) { - dc.GetTextExtent( p->GetColumnText(col), &w, &h ); + const wxPGCell* cell = NULL; + wxString text; + p->GetDisplayInfo(col, -1, 0, &text, &cell); + dc.GetTextExtent(text, &w, &h); if ( col == 0 ) w += ( ((int)p->m_depth-1) * pg->m_subgroup_extramargin ); @@ -892,8 +895,6 @@ void wxPropertyGridPageState::CheckColumnWidths( int widthChange ) int reduceCol = -1; int highestColWidth = 0; - bool minimizedCols = false; - #ifdef __WXDEBUG__ if ( debug ) wxLogDebug(wxT("ColumnWidthCheck (virtualWidth: %i, clientWidth: %i)"), width, clientWidth); @@ -907,7 +908,6 @@ void wxPropertyGridPageState::CheckColumnWidths( int widthChange ) if ( m_colWidths[i] <= min ) { m_colWidths[i] = min; - minimizedCols = true; } else { @@ -944,10 +944,10 @@ void wxPropertyGridPageState::CheckColumnWidths( int widthChange ) if ( colsWidth < width ) { // Increase column - #ifdef __WXDEBUG__ - if ( debug ) - wxLogDebug(wxT(" Adjust last column to %i"), m_colWidths[lastColumn] + widthHigher); - #endif +#ifdef __WXDEBUG__ + if ( debug ) + wxLogDebug(wxT(" Adjust last column to %i"), m_colWidths[lastColumn] + widthHigher); +#endif m_colWidths[lastColumn] = m_colWidths[lastColumn] + widthHigher; } else if ( colsWidth > width ) @@ -1100,7 +1100,7 @@ bool wxPropertyGridPageState::DoSetPropertyValueString( wxPGProperty* p, const w { if ( p ) { - int flags = wxPG_REPORT_ERROR|wxPG_FULL_VALUE; + int flags = wxPG_REPORT_ERROR|wxPG_FULL_VALUE|wxPG_PROGRAMMATIC_VALUE; wxVariant variant = p->GetValueRef(); bool res; @@ -1373,7 +1373,7 @@ void wxPropertyGridPageState::DoSetPropertyValues( const wxVariantList& list, wx // // Second pass for special entries - for ( node = list.begin(); node != list.end(); node++ ) + for ( node = list.begin(); node != list.end(); ++node ) { wxVariant *current = (wxVariant*)*node; @@ -1437,7 +1437,7 @@ void wxPropertyGridPageState::DoSetPropertyValues( const wxVariantList& list, wx if ( numSpecialEntries ) { - for ( node = list.begin(); node != list.end(); node++ ) + for ( node = list.begin(); node != list.end(); ++node ) { wxVariant *current = (wxVariant*)*node; @@ -1468,7 +1468,7 @@ void wxPropertyGridPageState::DoSetPropertyValues( const wxVariantList& list, wx wxVariantList& list2 = current->GetList(); wxVariantList::const_iterator node2; - for ( node2 = list2.begin(); node2 != list2.end(); node2++ ) + for ( node2 = list2.begin(); node2 != list2.end(); ++node2 ) { wxVariant *attr = (wxVariant*)*node2; foundProp->SetAttribute( attr->GetName(), *attr ); @@ -1508,8 +1508,8 @@ void wxPropertyGridPageState::DoSetPropertyValues( const wxVariantList& list, wx // wxPropertyGridPageState property adding and removal // ----------------------------------------------------------------------- -int wxPropertyGridPageState::PrepareToAddItem( wxPGProperty* property, - wxPGProperty* scheduledParent ) +bool wxPropertyGridPageState::PrepareToAddItem( wxPGProperty* property, + wxPGProperty* scheduledParent ) { wxPropertyGrid* propGrid = m_pPropGrid; @@ -1545,7 +1545,7 @@ int wxPropertyGridPageState::PrepareToAddItem( wxPGProperty* property, { delete property; m_currentCategory = pwc; - return 2; // Tells the caller what we did. + return false; } } } @@ -1562,123 +1562,29 @@ int wxPropertyGridPageState::PrepareToAddItem( wxPGProperty* property, #endif // Make sure nothing is selected. - if ( propGrid && propGrid->m_selected ) - { - bool selRes = propGrid->ClearSelection(); - wxPG_CHECK_MSG_DBG( selRes, - -1, - wxT("failed to deselect a property (editor probably had invalid value)") ); - } - - if ( scheduledParent ) - { - // Use parent's colours. - property->m_bgColIndex = scheduledParent->m_bgColIndex; - property->m_fgColIndex = scheduledParent->m_fgColIndex; - - // Fix no parent does not yet have parenting flag yet, set one now - if ( !scheduledParent->HasFlag(wxPG_PROP_PARENTAL_FLAGS) ) - scheduledParent->SetParentalType(wxPG_PROP_MISC_PARENT); - //scheduledParent->SetFlag(wxPG_PROP_MISC_PARENT); - } - - // If in hideable adding mode, or if assigned parent is hideable, then - // make this one hideable. - if ( - ( scheduledParent && (scheduledParent->m_flags & wxPG_PROP_HIDDEN) ) || - ( propGrid && (propGrid->m_iFlags & wxPG_FL_ADDING_HIDEABLES) ) - ) - property->SetFlag( wxPG_PROP_HIDDEN ); - - // Set custom image flag. - int custImgHeight = property->OnMeasureImage().y; - if ( custImgHeight < 0 /*|| custImgHeight > 1*/ ) - { - property->m_flags |= wxPG_PROP_CUSTOMIMAGE; - } - - if ( propGrid && (propGrid->GetWindowStyleFlag() & wxPG_LIMITED_EDITING) ) - property->m_flags |= wxPG_PROP_NOEDITOR; + if ( propGrid ) + propGrid->ClearSelection(false); - if ( !property->IsCategory() ) - { - // This is not a category. + // NULL parent == root parent + if ( !scheduledParent ) + scheduledParent = DoGetRoot(); - //wxASSERT_MSG( property->GetEditorClass(), wxT("Editor class not initialized!") ); + property->m_parent = scheduledParent; - // Depth. - // - unsigned char depth = 1; - if ( scheduledParent ) - { - depth = scheduledParent->m_depth; - if ( !scheduledParent->IsCategory() ) - depth++; - } - property->m_depth = depth; - unsigned char greyDepth = depth; - - if ( scheduledParent ) - { - wxPropertyCategory* pc; - - if ( scheduledParent->IsCategory() || scheduledParent->IsRoot() ) - pc = (wxPropertyCategory*)scheduledParent; - else - // This conditional compile is necessary to - // bypass some compiler bug. - pc = GetPropertyCategory(scheduledParent); + property->InitAfterAdded(this, propGrid); - if ( pc ) - greyDepth = pc->GetDepth(); - else - greyDepth = scheduledParent->m_depthBgCol; - } - - property->m_depthBgCol = greyDepth; - - // Prepare children pre-added children - if ( property->GetChildCount() ) - { - property->SetParentalType(wxPG_PROP_AGGREGATE); - - property->SetExpanded(false); // Properties with children are not expanded by default. - if ( propGrid && propGrid->GetWindowStyleFlag() & wxPG_HIDE_MARGIN ) - property->SetExpanded(true); // ...unless it cannot be expanded. - - property->PrepareSubProperties(); - - return -1; - } - - if ( propGrid && (propGrid->GetExtraStyle() & wxPG_EX_AUTO_UNSPECIFIED_VALUES) ) - property->SetFlagRecursively(wxPG_PROP_AUTO_UNSPECIFIED, true); - - return 0; - } - else + if ( property->IsCategory() ) { - // This is a category. - - // depth - unsigned char depth = 1; - if ( scheduledParent ) - { - depth = scheduledParent->m_depth + 1; - } - property->m_depth = depth; - property->m_depthBgCol = depth; - - m_currentCategory = (wxPropertyCategory*)property; + wxPropertyCategory* pc = wxStaticCast(property, wxPropertyCategory); - wxPropertyCategory* pc = (wxPropertyCategory*)property; + m_currentCategory = pc; - // Calculate text extent for caption item. + // Calculate text extent for category caption if ( propGrid ) pc->CalculateTextExtent(propGrid, propGrid->GetCaptionFont()); - - return 1; } + + return true; } // ----------------------------------------------------------------------- @@ -1703,11 +1609,11 @@ wxPGProperty* wxPropertyGridPageState::DoInsert( wxPGProperty* parent, int index wxNullProperty, wxT("when adding properties to fixed parents, use BeginAddChildren and EndAddChildren.") ); - int parenting = PrepareToAddItem( property, (wxPropertyCategory*)parent ); + bool res = PrepareToAddItem( property, (wxPropertyCategory*)parent ); - // This type of invalid parenting value indicates we should exit now, returning - // id of most recent category. - if ( parenting > 1 ) + // PrepareToAddItem() may just decide to use use current category + // instead of adding new one. + if ( !res ) return m_currentCategory; // Note that item must be added into current mode later. @@ -1736,7 +1642,7 @@ wxPGProperty* wxPropertyGridPageState::DoInsert( wxPGProperty* parent, int index // Categorized mode // Only add non-categories to m_abcArray. - if ( m_abcArray && parenting <= 0 ) + if ( m_abcArray && !property->IsCategory() ) m_abcArray->AddChild2( property, -1, false ); // Add to current mode. @@ -1755,7 +1661,7 @@ wxPGProperty* wxPropertyGridPageState::DoInsert( wxPGProperty* parent, int index m_regularArray.AddChild2( property, -1, false ); // Add to current mode (no categories). - if ( parenting <= 0 ) + if ( !property->IsCategory() ) m_abcArray->AddChild2( property, index ); } } @@ -1826,7 +1732,7 @@ void wxPropertyGridPageState::DoDelete( wxPGProperty* item ) } if ( IsInNonCatMode() ) - m_abcArray->FixIndecesOfChildren(); + m_abcArray->FixIndicesOfChildren(); } } @@ -1844,7 +1750,7 @@ void wxPropertyGridPageState::DoDelete( wxPGProperty* item ) // categorized mode - categorized array wxArrayPGProperty& parentsChildren = item->m_parent->m_children; parentsChildren.erase( parentsChildren.begin() + indinparent ); - item->m_parent->FixIndecesOfChildren(); + item->m_parent->FixIndicesOfChildren(); } else { @@ -1877,7 +1783,7 @@ void wxPropertyGridPageState::DoDelete( wxPGProperty* item ) wxASSERT( item->m_parent == m_abcArray ); wxArrayPGProperty& parentsChildren = item->m_parent->m_children; parentsChildren.erase(parentsChildren.begin() + indinparent); - item->m_parent->FixIndecesOfChildren(indinparent); + item->m_parent->FixIndicesOfChildren(indinparent); } }