\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}.
\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}}
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.
#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
//-----------------------------------------------------------------------------
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)
};
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,
virtual ~wxDataViewCustomRenderer(void);
+ void RenderText( const wxString &text, int xoffset, wxRect cell, wxDC *dc, int state );
+
//
// methods handling render space
//
#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"
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
//-----------------------------------------------------------------------------
{
}
+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
// ---------------------------------------------------------
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;
}
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;
}
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;
}
#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"
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();
{
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;
}
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 )
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)