X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/3e6d8c311868c2bce749c4d4922e2efb8e3f019a..509da835c597ef3359d569866819395f64c2b0a4:/src/propgrid/editors.cpp diff --git a/src/propgrid/editors.cpp b/src/propgrid/editors.cpp index 21262e302d..a0298fc790 100644 --- a/src/propgrid/editors.cpp +++ b/src/propgrid/editors.cpp @@ -482,7 +482,7 @@ void wxPGTextCtrlEditor_OnFocus( wxPGProperty* property, wxTextCtrl* tc ) { // Make sure there is correct text (instead of unspecified value - // indicator or inline help) + // indicator or hint text) int flags = property->HasFlag(wxPG_PROP_READONLY) ? 0 : wxPG_EDITABLE_VALUE; wxString correctText = property->GetValueAsString(flags); @@ -656,7 +656,17 @@ public: int flags ) const { wxPropertyGrid* pg = GetGrid(); - pg->OnComboItemPaint( this, item, &dc, (wxRect&)rect, flags ); + + // Handle hint text via super class + if ( (flags & wxODCB_PAINTING_CONTROL) && + ShouldUseHintText(flags) ) + { + wxOwnerDrawnComboBox::OnDrawItem(dc, rect, item, flags); + } + else + { + pg->OnComboItemPaint( this, item, &dc, (wxRect&)rect, flags ); + } } virtual wxCoord OnMeasureItem( size_t item ) const @@ -808,20 +818,44 @@ void wxPropertyGrid::OnComboItemPaint( const wxPGComboBox* pCb, rect.y + 1); int renderFlags = wxPGCellRenderer::DontUseCellColours; + bool useCustomPaintProcedure; + + // If custom image had some size, we will start from the assumption + // that custom paint procedure is required + if ( cis.x > 0 ) + useCustomPaintProcedure = true; + else + useCustomPaintProcedure = false; + + if ( flags & wxODCB_PAINTING_SELECTED ) + renderFlags |= wxPGCellRenderer::Selected; if ( flags & wxODCB_PAINTING_CONTROL ) + { renderFlags |= wxPGCellRenderer::Control; + + // If wxPG_PROP_CUSTOMIMAGE was set, then that means any custom + // image will not appear on the control row (it may be too + // large to fit, for instance). Also do not draw custom image + // if no choice was selected. + if ( !p->HasFlag(wxPG_PROP_CUSTOMIMAGE) || item < 0 ) + useCustomPaintProcedure = false; + } else + { renderFlags |= wxPGCellRenderer::ChoicePopup; + } - if ( flags & wxODCB_PAINTING_SELECTED ) - renderFlags |= wxPGCellRenderer::Selected; + // If not drawing a selected popup item, then give property's + // m_valueBitmap a chance. + if ( p->m_valueBitmap && item != pCb->GetSelection() ) + useCustomPaintProcedure = false; + // If current choice had a bitmap set by the application, then + // use it instead of any custom paint procedure. + else if ( itemBitmap ) + useCustomPaintProcedure = false; - if ( cis.x > 0 && (p->HasFlag(wxPG_PROP_CUSTOMIMAGE) || !(flags & wxODCB_PAINTING_CONTROL)) && - ( !p->m_valueBitmap || item == pCb->GetSelection() ) && - ( item >= 0 || (flags & wxODCB_PAINTING_CONTROL) ) && - !itemBitmap - ) + if ( useCustomPaintProcedure ) { pt.x += wxCC_CUSTOM_IMAGE_MARGIN1; wxRect r(pt.x,pt.y,cis.x,cis.y); @@ -1008,7 +1042,11 @@ wxWindow* wxPGChoiceEditor::CreateControlsBase( wxPropertyGrid* propGrid, cb->SetButtonPosition(si.y,0,wxRIGHT); cb->SetMargins(wxPG_XBEFORETEXT-1); - wxPGChoiceEditor_SetCustomPaintWidth( propGrid, cb, property->GetCommonValue() ); + // Set hint text + cb->SetHint(property->GetHintText()); + + wxPGChoiceEditor_SetCustomPaintWidth( propGrid, cb, + property->GetCommonValue() ); if ( index >= 0 && index < (int)cb->GetCount() ) { @@ -1874,6 +1912,9 @@ wxWindow* wxPropertyGrid::GenerateEditorTextCtrl( const wxPoint& pos, tc->AutoComplete(attrVal.GetArrayString()); } + // Set hint text + tc->SetHint(prop->GetHintText()); + return tc; }