]> git.saurik.com Git - wxWidgets.git/commitdiff
Added wxDataViewCustomRenderer::RenderText() for renderer simple text in platform...
authorRobert Roebling <robert@roebling.de>
Sat, 20 Oct 2007 20:09:10 +0000 (20:09 +0000)
committerRobert Roebling <robert@roebling.de>
Sat, 20 Oct 2007 20:09:10 +0000 (20:09 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@49272 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

docs/latex/wx/dataviewrenderer.tex
include/wx/dataview.h
include/wx/generic/dataview.h
include/wx/gtk/dataview.h
include/wx/mac/carbon/dataview.h
src/common/datavcmn.cpp
src/generic/datavgen.cpp
src/gtk/dataview.cpp
src/mac/carbon/dataview.cpp

index 8745505177b9153a3d183803b75d96dc61849be3..46a5b4f0d2af7794eb89917d6bc1cd0d1e31ce6a 100644 (file)
@@ -12,6 +12,7 @@ a number of ready-to-use renderers provided:
 \helpref{wxDataViewProgressRenderer}{wxdataviewprogressrenderer},
 \helpref{wxDataViewBitmapRenderer}{wxdataviewbitmaprenderer},
 \helpref{wxDataViewDateRenderer}{wxdataviewdaterenderer}.
+\helpref{wxDataViewSpinRenderer}{wxdataviewspinrenderer}.
 
 Additionally, the user can write own renderers by deriving from
 \helpref{wxDataViewCustomRenderer}{wxdataviewcustomrenderer}.
@@ -467,6 +468,15 @@ Override this to render the cell. Before this is called,
 \helpref{SetValue}{wxdataviewrenderersetvalue} was called
 so that this instance knows what to render.
 
+\membersection{wxDataViewCustomRenderer::RenderText}\label{wxdataviewcustomrendererrender}
+
+\func{bool}{RenderText}{\param{const wxString\& }{text}, \param{int }{xoffset}, \param{wxRect }{cell}, \param{wxDC* }{dc}, \param{int }{state}}
+
+This method should be called from within \helpref{Render}{wxdataviewcustomrendererrender}
+whenever you need to render simple text. This will ensure that the
+correct colour, font and vertical alignment will be chosen so the
+text will look the same as text drawn by native renderers.
+
 \membersection{wxDataViewCustomRenderer::RightClick}\label{wxdataviewcustomrendererrightclick}
 
 \func{virtual bool}{RightClick}{\param{wxPoint }{cursor}, \param{wxRect }{cell}, \param{wxDataViewModel* }{model}, \param{unsigned int }{col}, \param{unsigned int }{row}}
@@ -480,4 +490,29 @@ Overrride this to react to a right click.
 Overrride this to start a drag operation.
 
 
+\section{\class{wxDataViewSpinRenderer}}\label{wxdataviewspinrenderer}
+
+This is a specialized renderer for rendering integer values. It
+supports modifying the values in-place by using a wxSpinCtrl.
+The renderer only support variants of type {\it long}.
+
+\wxheading{Derived from}
+
+\helpref{wxDataViewCustomRenderer}{wxdataviewcustomrenderer}
+
+\wxheading{Include files}
+
+<dataview.h>
+
+\wxheading{Data structures}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+
+\membersection{wxDataViewSpinRenderer::wxDataViewSpinRenderer}\label{wxdataviewspinrendererwxdataviewspinrenderer}
+
+\func{}{wxDataViewSpinRenderer}{\param{int }{min}, \param{int }{max}, \param{wxDataViewCellMode }{mode = wxDATAVIEW\_CELL\_EDITABLE}, \param{int }{alignment = wxDVR\_DEFAULT\_ALIGNMENT}}
+
+Constructor. {\it min} and {\it max} indicate the minimum und
+maximum values of for the wxSpinCtrl.
 
index 7eeaee85338eea896b5ddd3605ed1f5ee150e5c3..32c4d2726db22820f0dcc4da854ba735fcc9baab 100644 (file)
@@ -713,6 +713,29 @@ typedef void (wxEvtHandler::*wxDataViewEventFunction)(wxDataViewEvent&);
     #include "wx/generic/dataview.h"
 #endif
 
+// -------------------------------------
+// wxDataViewSpinRenderer
+// -------------------------------------
+
+class wxDataViewSpinRenderer: public wxDataViewCustomRenderer
+{
+public:
+    wxDataViewSpinRenderer( int min, int max,
+                            wxDataViewCellMode mode = wxDATAVIEW_CELL_EDITABLE,
+                            int alignment = wxDVR_DEFAULT_ALIGNMENT );
+    virtual bool HasEditorCtrl() { return true; }
+    virtual wxControl* CreateEditorCtrl( wxWindow *parent, wxRect labelRect, const wxVariant &value );
+    virtual bool GetValueFromEditorCtrl( wxControl* editor, wxVariant &value );
+    virtual bool Render( wxRect rect, wxDC *dc, int state );
+    virtual wxSize GetSize() const;
+    virtual bool SetValue( const wxVariant &value );
+    virtual bool GetValue( wxVariant &value ) const;
+    
+private:
+    long    m_data;
+    long    m_min,m_max;
+};
+
 //-----------------------------------------------------------------------------
 // wxDataViewTreeStore
 //-----------------------------------------------------------------------------
index 3eac1231fe6205c2b8cbbf18ed8b92f5e9e3b5a7..3674ee73c12658e775b56bb5a609d96e9de9988b 100644 (file)
@@ -99,6 +99,8 @@ public:
                               wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
                               int align = wxDVR_DEFAULT_ALIGNMENT );
 
+    void RenderText( const wxString &text, int xoffset, wxRect cell, wxDC *dc, int state );
+
 protected:
     DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewCustomRenderer)
 };
index a079cba9c5e3cb2f97087ff7a3727aa4d26d95c5..0c29d984683d2ee877f773c01a60ff8a005acb22 100644 (file)
@@ -122,6 +122,9 @@ public:
 
 
     virtual bool Render( wxRect cell, wxDC *dc, int state ) = 0;
+    
+    void RenderText( const wxString &text, int xoffset,  wxRect cell, wxDC *dc, int state );
+    
     virtual wxSize GetSize() const = 0;
 
     virtual bool Activate( wxRect cell,
index b6b22b356f795583f5fb92c9949eec8422a2c92b..ac0ca36952e0bdf3f91d08c5b2a89d4127b56fd5 100644 (file)
@@ -118,6 +118,8 @@ public:
   
   virtual ~wxDataViewCustomRenderer(void);
 
+  void RenderText( const wxString &text, int xoffset, wxRect cell, wxDC *dc, int state );
+
 //
 // methods handling render space
 //
index 5bf1a590214ad34a81c790e7fd5fe5375ede59ed..b9e16750edddaddb63ba662b6eaaa12b6adc9e6a 100644 (file)
 
 #include "wx/dataview.h"
 
+#include "wx/spinctrl.h"
+#include "wx/dc.h"
+#include "wx/settings.h"
+
 #ifndef WX_PRECOMP
     #include "wx/log.h"
     #include "wx/icon.h"
@@ -971,6 +975,58 @@ DEFINE_EVENT_TYPE(wxEVT_COMMAND_DATAVIEW_COLUMN_HEADER_CLICK)
 DEFINE_EVENT_TYPE(wxEVT_COMMAND_DATAVIEW_COLUMN_HEADER_RIGHT_CLICK)
 DEFINE_EVENT_TYPE(wxEVT_COMMAND_DATAVIEW_COLUMN_SORTED)
 
+
+// -------------------------------------
+// wxDataViewSpinRenderer
+// -------------------------------------
+
+wxDataViewSpinRenderer::wxDataViewSpinRenderer( int min, int max, wxDataViewCellMode mode, int alignment ) :
+   wxDataViewCustomRenderer( "long", mode, alignment ) 
+{ 
+    m_min = min;
+    m_max = max;
+}
+    
+wxControl* wxDataViewSpinRenderer::CreateEditorCtrl( wxWindow *parent, wxRect labelRect, const wxVariant &value )
+{ 
+    long l = value;
+    return new wxSpinCtrl( parent, wxID_ANY, wxEmptyString, 
+               labelRect.GetTopLeft(), labelRect.GetSize(), wxSP_ARROW_KEYS, m_min, m_max, l );
+}
+        
+bool wxDataViewSpinRenderer::GetValueFromEditorCtrl( wxControl* editor, wxVariant &value )
+{ 
+    wxSpinCtrl *sc = (wxSpinCtrl*) editor;
+    long l = sc->GetValue();
+    value = l;
+    return true;
+}
+        
+bool wxDataViewSpinRenderer::Render( wxRect rect, wxDC *dc, int state )
+{
+    wxString str;
+    str.Printf( "%d", (int) m_data );
+    RenderText( str, 0, rect, dc, state );
+    return true;
+}
+    
+wxSize wxDataViewSpinRenderer::GetSize() const
+{
+    return wxSize(80,16);
+}
+    
+bool wxDataViewSpinRenderer::SetValue( const wxVariant &value )
+{
+    m_data = value.GetLong();
+    return true;
+}
+    
+bool wxDataViewSpinRenderer::GetValue( wxVariant &value ) const
+{
+    value = m_data;
+    return true;
+}
+
 //-----------------------------------------------------------------------------
 // wxDataViewTreeStore
 //-----------------------------------------------------------------------------
index 325e8807da92391dfe54609c7c0457421bc62d40..b2f85c972e98ccbd9412ffdc5b64d0bc9d2b91b2 100644 (file)
@@ -635,6 +635,16 @@ wxDataViewCustomRenderer::wxDataViewCustomRenderer( const wxString &varianttype,
 {
 }
 
+void wxDataViewCustomRenderer::RenderText( const wxString &text, int xoffset, wxRect cell, wxDC *dc, int state )
+{
+    wxDataViewCtrl *view = GetOwner()->GetOwner();
+    wxColour col = (state & wxDATAVIEW_CELL_SELECTED) ?
+                        wxSystemSettings::GetColour(wxSYS_COLOUR_HIGHLIGHTTEXT) :
+                        view->GetForegroundColour();
+    dc->SetTextForeground(col);
+    dc->DrawText( text, cell.x + xoffset, cell.y + ((cell.height - dc->GetCharHeight()) / 2));
+}
+
 // ---------------------------------------------------------
 // wxDataViewTextRenderer
 // ---------------------------------------------------------
@@ -681,15 +691,7 @@ bool wxDataViewTextRenderer::GetValueFromEditorCtrl( wxControl *editor, wxVarian
 
 bool wxDataViewTextRenderer::Render( wxRect cell, wxDC *dc, int state )
 {
-    wxDataViewCtrl *view = GetOwner()->GetOwner();
-    wxColour col = (state & wxDATAVIEW_CELL_SELECTED) ?
-                        wxSystemSettings::GetColour(wxSYS_COLOUR_HIGHLIGHTTEXT) :
-                        view->GetForegroundColour();
-
-    dc->SetTextForeground(col);
-    dc->DrawText( m_text, cell.x,  cell.y + ((cell.height - dc->GetCharHeight()) / 2));
-    // dc->DrawText( m_text, cell.x, cell.y );
-
+    RenderText( m_text, 0, cell, dc, state );
     return true;
 }
 
@@ -950,12 +952,10 @@ bool wxDataViewDateRenderer::GetValue( wxVariant &value ) const
     return true;
 }
 
-bool wxDataViewDateRenderer::Render( wxRect cell, wxDC *dc, int WXUNUSED(state) )
+bool wxDataViewDateRenderer::Render( wxRect cell, wxDC *dc, int state )
 {
-    dc->SetFont( GetOwner()->GetOwner()->GetFont() );
     wxString tmp = m_date.FormatDate();
-    dc->DrawText( tmp, cell.x, cell.y );
-
+    RenderText( tmp, 0, cell, dc, state );
     return true;
 }
 
@@ -1019,24 +1019,15 @@ bool wxDataViewIconTextRenderer::GetValue( wxVariant &value ) const
 
 bool wxDataViewIconTextRenderer::Render( wxRect cell, wxDC *dc, int state )
 {
-    wxDataViewCtrl *view = GetOwner()->GetOwner();
-    
-    dc->SetFont( view->GetFont() );
-
-    wxColour col = (state & wxDATAVIEW_CELL_SELECTED) ?
-                        wxSystemSettings::GetColour(wxSYS_COLOUR_HIGHLIGHTTEXT) :
-                        view->GetForegroundColour();
-
-    dc->SetTextForeground(col);
-
+    int xoffset = 0;
     const wxIcon &icon = m_value.GetIcon();
     if (icon.IsOk())
     {
         dc->DrawIcon( icon, cell.x, cell.y + ((cell.height - icon.GetHeight()) / 2)); 
-        cell.x += icon.GetWidth()+4;
+        xoffset =  icon.GetWidth()+4;
     }
-
-    dc->DrawText( m_value.GetText(), cell.x,  cell.y + ((cell.height - dc->GetCharHeight()) / 2));
+    
+    RenderText( m_value.GetText(), xoffset, cell, dc, state );
 
     return true;
 }
index cd82fc102cd7095c1470b6889c9b2cf3bbc0ea8f..06e9749535207056d517c9862f1bf239317afac4 100644 (file)
@@ -28,7 +28,7 @@
 #include "wx/icon.h"
 #include "wx/list.h"
 #include "wx/listimpl.cpp"
-
+#include "wx/settings.h"
 
 #include "wx/gtk/private.h"
 #include "wx/gtk/win_gtk.h"
@@ -1673,6 +1673,16 @@ wxDataViewCustomRenderer::wxDataViewCustomRenderer( const wxString &varianttype,
         Init(mode, align);
 }
 
+void wxDataViewCustomRenderer::RenderText( const wxString &text, int xoffset, wxRect cell, wxDC *dc, int state )
+{
+    wxDataViewCtrl *view = GetOwner()->GetOwner();
+    wxColour col = (state & wxDATAVIEW_CELL_SELECTED) ?
+                        wxSystemSettings::GetColour(wxSYS_COLOUR_HIGHLIGHTTEXT) :
+                        view->GetForegroundColour();
+    dc->SetTextForeground(col);
+    dc->DrawText( text, cell.x + xoffset, cell.y + ((cell.height - dc->GetCharHeight()) / 2));
+}
+
 bool wxDataViewCustomRenderer::Init(wxDataViewCellMode mode, int align)
 {
     GtkWxCellRenderer *renderer = (GtkWxCellRenderer *) gtk_wx_cell_renderer_new();
@@ -1874,8 +1884,7 @@ bool wxDataViewDateRenderer::Render( wxRect cell, wxDC *dc, int state )
 {
     dc->SetFont( GetOwner()->GetOwner()->GetFont() );
     wxString tmp = m_date.FormatDate();
-    dc->DrawText( tmp, cell.x, cell.y );
-
+    RenderText( tmp, 0, cell, dc, state );
     return true;
 }
 
@@ -1936,23 +1945,30 @@ bool wxDataViewIconTextRenderer::GetValue( wxVariant &value ) const
     
 bool wxDataViewIconTextRenderer::Render( wxRect cell, wxDC *dc, int state )
 {
-    dc->SetFont( GetOwner()->GetOwner()->GetFont() );
-    
     const wxIcon &icon = m_value.GetIcon();
+    int offset = 0;
     if (icon.IsOk())
     {
-        dc->DrawIcon( icon, cell.x, cell.y ); // TODO centre
-        cell.x += icon.GetWidth()+4;
+        int yoffset = wxMax( 0, (cell.height - icon.GetHeight()) / 2 );
+        dc->DrawIcon( icon, cell.x, cell.y + yoffset );
+        offset = icon.GetWidth() + 4;
     }
     
-    dc->DrawText( m_value.GetText(), cell.x, cell.y );
+    RenderText( m_value.GetText(), offset, cell, dc, state );
 
     return true;
 }
 
 wxSize wxDataViewIconTextRenderer::GetSize() const
 {
-    return wxSize(80,16);  // TODO
+    wxSize size;
+    if (m_value.GetIcon().IsOk())
+        size.x = 4 + m_value.GetIcon().GetWidth();
+    wxCoord x,y,d;
+    GetView()->GetTextExtent( m_value.GetText(), &x, &y, &d );
+    size.x += x;
+    size.y = y+d;
+    return size; 
 }
 
 wxControl* wxDataViewIconTextRenderer::CreateEditorCtrl( wxWindow *parent, wxRect labelRect, const wxVariant &value )
index 4e7156239800c844cdcc247f39e2df81242bfe88..dacaf01b96bd032a16185a31c57fa95b6ba20bd0 100644 (file)
@@ -379,6 +379,16 @@ wxDataViewCustomRenderer::~wxDataViewCustomRenderer(void)
     delete this->m_DCPtr;
 } /* wxDataViewCustomRenderer::~wxDataViewCustomRenderer(void) */
 
+void wxDataViewCustomRenderer::RenderText( const wxString &text, int xoffset, wxRect cell, wxDC *dc, int state )
+{
+    wxDataViewCtrl *view = GetOwner()->GetOwner();
+    wxColour col = (state & wxDATAVIEW_CELL_SELECTED) ?
+                        wxSystemSettings::GetColour(wxSYS_COLOUR_HIGHLIGHTTEXT) :
+                        view->GetForegroundColour();
+    dc->SetTextForeground(col);
+    dc->DrawText( text, cell.x + xoffset, cell.y + ((cell.height - dc->GetCharHeight()) / 2));
+}
+
 wxDC* wxDataViewCustomRenderer::GetDC(void)
 {
   if (this->m_DCPtr == NULL)