Added wxDataViewCustomRenderer::RenderText() for renderer simple text in platform dependent way, added wxDataViewSpinRenderer
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@49272 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -12,6 +12,7 @@ a number of ready-to-use renderers provided:
|
|||||||
\helpref{wxDataViewProgressRenderer}{wxdataviewprogressrenderer},
|
\helpref{wxDataViewProgressRenderer}{wxdataviewprogressrenderer},
|
||||||
\helpref{wxDataViewBitmapRenderer}{wxdataviewbitmaprenderer},
|
\helpref{wxDataViewBitmapRenderer}{wxdataviewbitmaprenderer},
|
||||||
\helpref{wxDataViewDateRenderer}{wxdataviewdaterenderer}.
|
\helpref{wxDataViewDateRenderer}{wxdataviewdaterenderer}.
|
||||||
|
\helpref{wxDataViewSpinRenderer}{wxdataviewspinrenderer}.
|
||||||
|
|
||||||
Additionally, the user can write own renderers by deriving from
|
Additionally, the user can write own renderers by deriving from
|
||||||
\helpref{wxDataViewCustomRenderer}{wxdataviewcustomrenderer}.
|
\helpref{wxDataViewCustomRenderer}{wxdataviewcustomrenderer}.
|
||||||
@@ -467,6 +468,15 @@ Override this to render the cell. Before this is called,
|
|||||||
\helpref{SetValue}{wxdataviewrenderersetvalue} was called
|
\helpref{SetValue}{wxdataviewrenderersetvalue} was called
|
||||||
so that this instance knows what to render.
|
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}
|
\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}}
|
\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.
|
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.
|
||||||
|
|
||||||
|
@@ -713,6 +713,29 @@ typedef void (wxEvtHandler::*wxDataViewEventFunction)(wxDataViewEvent&);
|
|||||||
#include "wx/generic/dataview.h"
|
#include "wx/generic/dataview.h"
|
||||||
#endif
|
#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
|
// wxDataViewTreeStore
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
@@ -99,6 +99,8 @@ public:
|
|||||||
wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
|
wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
|
||||||
int align = wxDVR_DEFAULT_ALIGNMENT );
|
int align = wxDVR_DEFAULT_ALIGNMENT );
|
||||||
|
|
||||||
|
void RenderText( const wxString &text, int xoffset, wxRect cell, wxDC *dc, int state );
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewCustomRenderer)
|
DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewCustomRenderer)
|
||||||
};
|
};
|
||||||
|
@@ -122,6 +122,9 @@ public:
|
|||||||
|
|
||||||
|
|
||||||
virtual bool Render( wxRect cell, wxDC *dc, int state ) = 0;
|
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 wxSize GetSize() const = 0;
|
||||||
|
|
||||||
virtual bool Activate( wxRect cell,
|
virtual bool Activate( wxRect cell,
|
||||||
|
@@ -118,6 +118,8 @@ public:
|
|||||||
|
|
||||||
virtual ~wxDataViewCustomRenderer(void);
|
virtual ~wxDataViewCustomRenderer(void);
|
||||||
|
|
||||||
|
void RenderText( const wxString &text, int xoffset, wxRect cell, wxDC *dc, int state );
|
||||||
|
|
||||||
//
|
//
|
||||||
// methods handling render space
|
// methods handling render space
|
||||||
//
|
//
|
||||||
|
@@ -19,6 +19,10 @@
|
|||||||
|
|
||||||
#include "wx/dataview.h"
|
#include "wx/dataview.h"
|
||||||
|
|
||||||
|
#include "wx/spinctrl.h"
|
||||||
|
#include "wx/dc.h"
|
||||||
|
#include "wx/settings.h"
|
||||||
|
|
||||||
#ifndef WX_PRECOMP
|
#ifndef WX_PRECOMP
|
||||||
#include "wx/log.h"
|
#include "wx/log.h"
|
||||||
#include "wx/icon.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_HEADER_RIGHT_CLICK)
|
||||||
DEFINE_EVENT_TYPE(wxEVT_COMMAND_DATAVIEW_COLUMN_SORTED)
|
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
|
// wxDataViewTreeStore
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
@@ -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
|
// wxDataViewTextRenderer
|
||||||
// ---------------------------------------------------------
|
// ---------------------------------------------------------
|
||||||
@@ -681,15 +691,7 @@ bool wxDataViewTextRenderer::GetValueFromEditorCtrl( wxControl *editor, wxVarian
|
|||||||
|
|
||||||
bool wxDataViewTextRenderer::Render( wxRect cell, wxDC *dc, int state )
|
bool wxDataViewTextRenderer::Render( wxRect cell, wxDC *dc, int state )
|
||||||
{
|
{
|
||||||
wxDataViewCtrl *view = GetOwner()->GetOwner();
|
RenderText( m_text, 0, cell, dc, state );
|
||||||
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 );
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -950,12 +952,10 @@ bool wxDataViewDateRenderer::GetValue( wxVariant &value ) const
|
|||||||
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();
|
wxString tmp = m_date.FormatDate();
|
||||||
dc->DrawText( tmp, cell.x, cell.y );
|
RenderText( tmp, 0, cell, dc, state );
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1019,24 +1019,15 @@ bool wxDataViewIconTextRenderer::GetValue( wxVariant &value ) const
|
|||||||
|
|
||||||
bool wxDataViewIconTextRenderer::Render( wxRect cell, wxDC *dc, int state )
|
bool wxDataViewIconTextRenderer::Render( wxRect cell, wxDC *dc, int state )
|
||||||
{
|
{
|
||||||
wxDataViewCtrl *view = GetOwner()->GetOwner();
|
int xoffset = 0;
|
||||||
|
|
||||||
dc->SetFont( view->GetFont() );
|
|
||||||
|
|
||||||
wxColour col = (state & wxDATAVIEW_CELL_SELECTED) ?
|
|
||||||
wxSystemSettings::GetColour(wxSYS_COLOUR_HIGHLIGHTTEXT) :
|
|
||||||
view->GetForegroundColour();
|
|
||||||
|
|
||||||
dc->SetTextForeground(col);
|
|
||||||
|
|
||||||
const wxIcon &icon = m_value.GetIcon();
|
const wxIcon &icon = m_value.GetIcon();
|
||||||
if (icon.IsOk())
|
if (icon.IsOk())
|
||||||
{
|
{
|
||||||
dc->DrawIcon( icon, cell.x, cell.y + ((cell.height - icon.GetHeight()) / 2));
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
|
@@ -28,7 +28,7 @@
|
|||||||
#include "wx/icon.h"
|
#include "wx/icon.h"
|
||||||
#include "wx/list.h"
|
#include "wx/list.h"
|
||||||
#include "wx/listimpl.cpp"
|
#include "wx/listimpl.cpp"
|
||||||
|
#include "wx/settings.h"
|
||||||
|
|
||||||
#include "wx/gtk/private.h"
|
#include "wx/gtk/private.h"
|
||||||
#include "wx/gtk/win_gtk.h"
|
#include "wx/gtk/win_gtk.h"
|
||||||
@@ -1673,6 +1673,16 @@ wxDataViewCustomRenderer::wxDataViewCustomRenderer( const wxString &varianttype,
|
|||||||
Init(mode, align);
|
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)
|
bool wxDataViewCustomRenderer::Init(wxDataViewCellMode mode, int align)
|
||||||
{
|
{
|
||||||
GtkWxCellRenderer *renderer = (GtkWxCellRenderer *) gtk_wx_cell_renderer_new();
|
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() );
|
dc->SetFont( GetOwner()->GetOwner()->GetFont() );
|
||||||
wxString tmp = m_date.FormatDate();
|
wxString tmp = m_date.FormatDate();
|
||||||
dc->DrawText( tmp, cell.x, cell.y );
|
RenderText( tmp, 0, cell, dc, state );
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1936,23 +1945,30 @@ bool wxDataViewIconTextRenderer::GetValue( wxVariant &value ) const
|
|||||||
|
|
||||||
bool wxDataViewIconTextRenderer::Render( wxRect cell, wxDC *dc, int state )
|
bool wxDataViewIconTextRenderer::Render( wxRect cell, wxDC *dc, int state )
|
||||||
{
|
{
|
||||||
dc->SetFont( GetOwner()->GetOwner()->GetFont() );
|
|
||||||
|
|
||||||
const wxIcon &icon = m_value.GetIcon();
|
const wxIcon &icon = m_value.GetIcon();
|
||||||
|
int offset = 0;
|
||||||
if (icon.IsOk())
|
if (icon.IsOk())
|
||||||
{
|
{
|
||||||
dc->DrawIcon( icon, cell.x, cell.y ); // TODO centre
|
int yoffset = wxMax( 0, (cell.height - icon.GetHeight()) / 2 );
|
||||||
cell.x += icon.GetWidth()+4;
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
wxSize wxDataViewIconTextRenderer::GetSize() const
|
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 )
|
wxControl* wxDataViewIconTextRenderer::CreateEditorCtrl( wxWindow *parent, wxRect labelRect, const wxVariant &value )
|
||||||
|
@@ -379,6 +379,16 @@ wxDataViewCustomRenderer::~wxDataViewCustomRenderer(void)
|
|||||||
delete this->m_DCPtr;
|
delete this->m_DCPtr;
|
||||||
} /* wxDataViewCustomRenderer::~wxDataViewCustomRenderer(void) */
|
} /* 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)
|
wxDC* wxDataViewCustomRenderer::GetDC(void)
|
||||||
{
|
{
|
||||||
if (this->m_DCPtr == NULL)
|
if (this->m_DCPtr == NULL)
|
||||||
|
Reference in New Issue
Block a user