]> git.saurik.com Git - wxWidgets.git/blobdiff - src/generic/datavgen.cpp
Fix discrepancy between different ways of measuring text extents under Mac.
[wxWidgets.git] / src / generic / datavgen.cpp
index bdeadffd368cf888284931def78b3056723feea9..04924b89dd768188e34d234c48c71ee703d739e2 100644 (file)
@@ -612,6 +612,7 @@ wxDataViewRenderer::wxDataViewRenderer( const wxString &varianttype,
     m_dc = NULL;
     m_align = align;
     m_mode = mode;
+    m_ellipsizeMode = wxELLIPSIZE_MIDDLE;
 }
 
 wxDataViewRenderer::~wxDataViewRenderer()
@@ -726,11 +727,14 @@ wxDataViewCustomRenderer::RenderText(wxDC& dc,
                                      int state,
                                      int xoffset)
 {
+    // override custom foreground with the standard one for the selected items
+    // because we currently don't allow changing the selection background and
+    // custom colours may be unreadable on it
     wxColour col;
-    if ( attr && attr->HasColour() )
-        col = attr->GetColour();
-    else if ( state & wxDATAVIEW_CELL_SELECTED )
+    if ( state & wxDATAVIEW_CELL_SELECTED )
         col = wxSystemSettings::GetColour(wxSYS_COLOUR_HIGHLIGHTTEXT);
+    else if ( attr && attr->HasColour() )
+        col = attr->GetColour();
     else // use default foreground
         col = GetOwner()->GetOwner()->GetForegroundColour();
 
@@ -752,7 +756,22 @@ wxDataViewCustomRenderer::RenderText(wxDC& dc,
     rectText.x += xoffset;
     rectText.width -= xoffset;
 
-    dc.DrawLabel(text, rectText, align);
+    // check if we want to ellipsize the text if it doesn't fit
+    wxString ellipsizedText;
+    if ( GetEllipsizeMode() != wxELLIPSIZE_NONE )
+    {
+        ellipsizedText = wxControl::Ellipsize
+                                    (
+                                        text,
+                                        dc,
+                                        GetEllipsizeMode(),
+                                        rect.width,
+                                        wxELLIPSIZE_FLAGS_NONE
+                                    );
+    }
+
+    dc.DrawLabel(ellipsizedText.empty() ? text : ellipsizedText,
+                 rectText, align);
 }
 
 // ---------------------------------------------------------
@@ -917,10 +936,7 @@ bool wxDataViewToggleRenderer::Activate( wxRect WXUNUSED(cell),
                                         wxDataViewModel *model,
                                         const wxDataViewItem & item, unsigned int col)
 {
-    bool value = !m_toggle;
-    wxVariant variant = value;
-    model->SetValue( variant, item, col);
-    model->ValueChanged( item, col );
+    model->ChangeValue(!m_toggle, item, col);
     return true;
 }
 
@@ -1035,10 +1051,7 @@ END_EVENT_TABLE()
 
 void wxDataViewDateRendererPopupTransient::OnCalendar( wxCalendarEvent &event )
 {
-    wxDateTime date = event.GetDate();
-    wxVariant value = date;
-    m_model->SetValue( value, m_item, m_col );
-    m_model->ValueChanged( m_item, m_col );
+    m_model->ChangeValue( event.GetDate(), m_item, m_col );
     DismissAndNotify();
 }