// If possible, use cell colours
if ( !(flags & DontUseCellBgCol) )
{
- dc.SetPen(cell.GetBgCol());
- dc.SetBrush(cell.GetBgCol());
+ const wxColour& bgCol = cell.GetBgCol();
+ dc.SetPen(bgCol);
+ dc.SetBrush(bgCol);
}
if ( !(flags & DontUseCellFgCol) )
// 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 )
{
// 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);
if ( text.length() == 0 )
{
- // Try to show inline help if no text
- wxVariant vInlineHelp = property->GetAttribute(wxPGGlobalVars->m_strInlineHelp);
- if ( !vInlineHelp.IsNull() )
+ text = property->GetHintText();
+ if ( text.length() > 0 )
{
- text = vInlineHelp.GetString();
- dc.SetTextForeground(propertyGrid->GetCellDisabledTextColour());
+ res = true;
+
+ const wxColour& hCol =
+ propertyGrid->GetCellDisabledTextColour();
+ dc.SetTextForeground(hCol);
// Must make the editor NULL to override it's own rendering
// code.
editor = NULL;
}
}
+ else
+ {
+ res = true;
+ }
}
int imageOffset = property->GetImageOffset(imageWidth);
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 )
{
}
PostDrawCell(dc, propertyGrid, *cell, preDrawFlags);
+
+ return res;
}
wxSize wxPGDefaultRenderer::GetImageSize( const wxPGProperty* property,
data->SetBitmap(srcCell.GetBitmap());
}
+void wxPGCell::SetEmptyData()
+{
+ AllocExclusive();
+}
+
+
// -----------------------------------------------------------------------
// wxPGProperty
// -----------------------------------------------------------------------
if ( !(flags & wxPGCellRenderer::ChoicePopup) )
{
- // Not painting listi of choice popups, so get text from property
- cell = &GetCell(column);
+ // Not painting list of choice popups, so get text from property
+ if ( column != 1 || !IsValueUnspecified() || IsCategory() )
+ {
+ cell = &GetCell(column);
+ }
+ else
+ {
+ // Use special unspecified value cell
+ cell = &GetGrid()->GetUnspecifiedValueAppearance();
+ }
+
if ( cell->HasText() )
{
*pString = cell->GetText();
// 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 )
{
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();
GetGrid()->ValueChangeInEvent(value);
}
-void wxPGProperty::SetFlagRecursively( FlagType flag, bool set )
+void wxPGProperty::SetFlagRecursively( wxPGPropertyFlags flag, bool set )
{
ChangeFlag(flag, set);
}
}
-bool wxPGProperty::SetChoices( wxPGChoices& choices )
+bool wxPGProperty::SetChoices( const 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);
{
return editor;
}
+bool wxPGProperty::Hide( bool hide, int flags )
+{
+ wxPropertyGrid* pg = GetGrid();
+ if ( pg )
+ return pg->HideProperty(this, hide, flags);
+
+ return DoHide( hide, flags );
+}
+
+bool wxPGProperty::DoHide( bool hide, int flags )
+{
+ if ( !hide )
+ ClearFlag( wxPG_PROP_HIDDEN );
+ else
+ SetFlag( wxPG_PROP_HIDDEN );
+
+ if ( flags & wxPG_RECURSE )
+ {
+ unsigned int i;
+ for ( i = 0; i < GetChildCount(); i++ )
+ Item(i)->DoHide(hide, flags | wxPG_RECURSE_STARTS);
+ }
+
+ return true;
+}
+
bool wxPGProperty::HasVisibleChildren() const
{
unsigned int i;
{
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);
}
}
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 )