X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/534090e354ebd5b4c42e6c27a6aa6073c0ef669e..9914bfbb77f48baf869b63aff58feb2b145ff4d3:/src/propgrid/property.cpp diff --git a/src/propgrid/property.cpp b/src/propgrid/property.cpp index 0d4046307e..44dd00af8f 100644 --- a/src/propgrid/property.cpp +++ b/src/propgrid/property.cpp @@ -186,10 +186,14 @@ void wxPGCellRenderer::PostDrawCell( wxDC& dc, // wxPGDefaultRenderer // ----------------------------------------------------------------------- -void wxPGDefaultRenderer::Render( wxDC& dc, const wxRect& rect, +bool wxPGDefaultRenderer::Render( wxDC& dc, const wxRect& rect, const wxPropertyGrid* propertyGrid, wxPGProperty* property, int column, int item, int flags ) const { + const wxPGEditor* editor = NULL; + const wxPGCell* cell = NULL; + + wxString text; bool isUnspecified = property->IsValueUnspecified(); if ( column == 1 && item == -1 ) @@ -199,17 +203,19 @@ void wxPGDefaultRenderer::Render( wxDC& dc, const wxRect& rect, { // Common Value if ( !isUnspecified ) - DrawText( dc, rect, 0, propertyGrid->GetCommonValueLabel(cmnVal) ); - return; + { + text = propertyGrid->GetCommonValueLabel(cmnVal); + DrawText( dc, rect, 0, text ); + if ( text.length() ) + return true; + } + return false; } } - const wxPGEditor* editor = NULL; - const wxPGCell* cell = NULL; - - wxString text; int imageWidth = 0; int preDrawFlags = flags; + bool res = false; property->GetDisplayInfo(column, item, flags, &text, &cell); @@ -262,6 +268,8 @@ void wxPGDefaultRenderer::Render( wxDC& dc, const wxRect& rect, text = property->GetHintText(); if ( text.length() > 0 ) { + res = true; + const wxColour& hCol = propertyGrid->GetCellDisabledTextColour(); dc.SetTextForeground(hCol); @@ -271,6 +279,10 @@ void wxPGDefaultRenderer::Render( wxDC& dc, const wxRect& rect, editor = NULL; } } + else + { + res = true; + } } int imageOffset = property->GetImageOffset(imageWidth); @@ -278,7 +290,7 @@ void wxPGDefaultRenderer::Render( wxDC& dc, const wxRect& rect, DrawEditorValue( dc, rect, imageOffset, text, property, editor ); // active caption gets nice dotted rectangle - if ( property->IsCategory() /*&& column == 0*/ ) + if ( property->IsCategory() && column == 0 ) { if ( flags & Selected ) { @@ -299,6 +311,8 @@ void wxPGDefaultRenderer::Render( wxDC& dc, const wxRect& rect, } PostDrawCell(dc, propertyGrid, *cell, preDrawFlags); + + return res; } wxSize wxPGDefaultRenderer::GetImageSize( const wxPGProperty* property, @@ -1053,7 +1067,8 @@ bool wxPGProperty::StringToValue( wxVariant& variant, const wxString& text, int // Add only if editable or setting programmatically if ( (argFlags & wxPG_PROGRAMMATIC_VALUE) || - !child->HasFlag(wxPG_PROP_DISABLED|wxPG_PROP_READONLY) ) + (!child->HasFlag(wxPG_PROP_DISABLED) && + !child->HasFlag(wxPG_PROP_READONLY)) ) { if ( len > 0 ) { @@ -1133,7 +1148,8 @@ bool wxPGProperty::StringToValue( wxVariant& variant, const wxString& text, int wxVariant variant(oldChildValue); if ( (argFlags & wxPG_PROGRAMMATIC_VALUE) || - !child->HasFlag(wxPG_PROP_DISABLED|wxPG_PROP_READONLY) ) + (!child->HasFlag(wxPG_PROP_DISABLED) && + !child->HasFlag(wxPG_PROP_READONLY)) ) { wxString childName = child->GetBaseName(); @@ -1413,7 +1429,7 @@ void wxPGProperty::SetValueInEvent( wxVariant value ) const GetGrid()->ValueChangeInEvent(value); } -void wxPGProperty::SetFlagRecursively( FlagType flag, bool set ) +void wxPGProperty::SetFlagRecursively( wxPGPropertyFlags flag, bool set ) { ChangeFlag(flag, set); @@ -1897,6 +1913,12 @@ void wxPGProperty::SetChoiceSelection( int newValue ) bool wxPGProperty::SetChoices( wxPGChoices& choices ) { + // Property must be de-selected first (otherwise choices in + // the control would be de-synced with true choices) + wxPropertyGrid* pg = GetGrid(); + if ( pg && pg->GetSelection() == this ) + pg->ClearSelection(); + m_choices.Assign(choices); { @@ -2435,10 +2457,16 @@ void wxPGProperty::DeleteChildren() { wxPropertyGridPageState* state = m_parentState; - while ( GetChildCount() ) + if ( !GetChildCount() ) + return; + + // Because deletion is sometimes deferred, we have to use + // this sort of code for enumerating the child properties. + unsigned int i = GetChildCount(); + while ( i > 0 ) { - wxPGProperty* child = Item(GetChildCount()-1); - state->DoDelete(child, true); + i--; + state->DoDelete(Item(i), true); } } @@ -2629,9 +2657,31 @@ wxPropertyCategory::~wxPropertyCategory() wxString wxPropertyCategory::ValueToString( wxVariant& WXUNUSED(value), int WXUNUSED(argFlags) ) const { + if ( m_value.GetType() == wxPG_VARIANT_TYPE_STRING ) + return m_value.GetString(); return wxEmptyString; } +wxString wxPropertyCategory::GetValueAsString( int argFlags ) const +{ +#if wxPG_COMPATIBILITY_1_4 + // This is backwards compatibility test + // That is, to make sure this function is not overridden + // (instead, ValueToString() should be). + if ( argFlags == 0xFFFF ) + { + // Do not override! (for backwards compliancy) + return g_invalidStringContent; + } +#endif + + // Unspecified value is always empty string + if ( IsValueUnspecified() ) + return wxEmptyString; + + return wxPGProperty::GetValueAsString(argFlags); +} + int wxPropertyCategory::GetTextExtent( const wxWindow* wnd, const wxFont& font ) const { if ( m_textExtent > 0 )