Makes custom cell activatable.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@37735 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robert Roebling
2006-02-26 01:51:28 +00:00
parent 1272e71b8a
commit 553f7d8f56
4 changed files with 110 additions and 45 deletions

View File

@@ -133,8 +133,6 @@ public:
virtual bool SetValue( const wxVariant &value ) { return true; } virtual bool SetValue( const wxVariant &value ) { return true; }
virtual bool GetValue( wxVariant &value ) { return true; } virtual bool GetValue( wxVariant &value ) { return true; }
virtual bool Validate( wxVariant &value ) { return true; } virtual bool Validate( wxVariant &value ) { return true; }
virtual bool BeginEdit() { return true; }
virtual bool EndEdit() { return true; }
wxString GetVariantType() { return m_variantType; } wxString GetVariantType() { return m_variantType; }

View File

@@ -90,6 +90,7 @@ public:
virtual bool Render( wxRect cell, wxDC *dc, int state ) = 0; virtual bool Render( wxRect cell, wxDC *dc, int state ) = 0;
virtual wxSize GetSize() = 0; virtual wxSize GetSize() = 0;
virtual bool Activate( wxRect cell ) { return false; };
// Create DC on request // Create DC on request
virtual wxDC *GetDC(); virtual wxDC *GetDC();

View File

@@ -115,7 +115,7 @@ class MyCustomCell: public wxDataViewCustomCell
{ {
public: public:
MyCustomCell() : MyCustomCell() :
wxDataViewCustomCell( wxT("string"), wxDATAVIEW_CELL_INERT ) wxDataViewCustomCell( wxT("string"), wxDATAVIEW_CELL_ACTIVATABLE )
{ {
m_colour = wxT("black"); m_colour = wxT("black");
} }
@@ -140,6 +140,11 @@ public:
{ {
return wxSize(20,8); return wxSize(20,8);
} }
bool Activate( wxRect rect )
{
wxPrintf( wxT("activate\n") );
return false;
}
private: private:
wxString m_colour; wxString m_colour;

View File

@@ -452,28 +452,40 @@ struct _GtkWxCellRenderer
struct _GtkWxCellRendererClass struct _GtkWxCellRendererClass
{ {
GtkCellRendererClass cell_parent_class; GtkCellRendererClass cell_parent_class;
}; };
static GtkCellRenderer *gtk_wx_cell_renderer_new (void); static GtkCellRenderer *gtk_wx_cell_renderer_new (void);
static void gtk_wx_cell_renderer_init (GtkWxCellRenderer *cell); static void gtk_wx_cell_renderer_init (
static void gtk_wx_cell_renderer_class_init (GtkWxCellRendererClass *klass); GtkWxCellRenderer *cell );
static void gtk_wx_cell_renderer_finalize (GObject *object); static void gtk_wx_cell_renderer_class_init(
static void gtk_wx_cell_renderer_get_size (GtkCellRenderer *cell, GtkWxCellRendererClass *klass );
static void gtk_wx_cell_renderer_finalize (
GObject *object );
static void gtk_wx_cell_renderer_get_size (
GtkCellRenderer *cell,
GtkWidget *widget, GtkWidget *widget,
GdkRectangle *rectangle, GdkRectangle *rectangle,
gint *x_offset, gint *x_offset,
gint *y_offset, gint *y_offset,
gint *width, gint *width,
gint *height); gint *height );
static void gtk_wx_cell_renderer_render (GtkCellRenderer *cell, static void gtk_wx_cell_renderer_render (
GtkCellRenderer *cell,
GdkWindow *window, GdkWindow *window,
GtkWidget *widget, GtkWidget *widget,
GdkRectangle *background_area, GdkRectangle *background_area,
GdkRectangle *cell_area, GdkRectangle *cell_area,
GdkRectangle *expose_area, GdkRectangle *expose_area,
GtkCellRendererState flags); GtkCellRendererState flags );
static gboolean gtk_wx_cell_renderer_activate(
GtkCellRenderer *cell,
GdkEvent *event,
GtkWidget *widget,
const gchar *path,
GdkRectangle *background_area,
GdkRectangle *cell_area,
GtkCellRendererState flags );
static GObjectClass *cell_parent_class = NULL; static GObjectClass *cell_parent_class = NULL;
@@ -499,9 +511,8 @@ gtk_wx_cell_renderer_get_type (void)
(GInstanceInitFunc) gtk_wx_cell_renderer_init, (GInstanceInitFunc) gtk_wx_cell_renderer_init,
}; };
cell_wx_type = cell_wx_type = g_type_register_static( GTK_TYPE_CELL_RENDERER,
g_type_register_static (GTK_TYPE_CELL_RENDERER, "GtkWxCellRenderer", "GtkWxCellRenderer", &cell_wx_info, (GTypeFlags)0 );
&cell_wx_info, (GTypeFlags)0);
} }
return cell_wx_type; return cell_wx_type;
@@ -525,6 +536,7 @@ gtk_wx_cell_renderer_class_init (GtkWxCellRendererClass *klass)
cell_class->get_size = gtk_wx_cell_renderer_get_size; cell_class->get_size = gtk_wx_cell_renderer_get_size;
cell_class->render = gtk_wx_cell_renderer_render; cell_class->render = gtk_wx_cell_renderer_render;
cell_class->activate = gtk_wx_cell_renderer_activate;
} }
static void static void
@@ -632,6 +644,36 @@ gtk_wx_cell_renderer_render (GtkCellRenderer *renderer,
} }
} }
static gboolean
gtk_wx_cell_renderer_activate(
GtkCellRenderer *renderer,
GdkEvent *event,
GtkWidget *widget,
const gchar *path,
GdkRectangle *background_area,
GdkRectangle *cell_area,
GtkCellRendererState flags )
{
GtkWxCellRenderer *wxrenderer = (GtkWxCellRenderer *) renderer;
wxDataViewCustomCell *cell = wxrenderer->cell;
GdkRectangle rect;
gtk_wx_cell_renderer_get_size (renderer, widget, cell_area,
&rect.x,
&rect.y,
&rect.width,
&rect.height);
rect.x += cell_area->x;
rect.y += cell_area->y;
rect.width -= renderer->xpad * 2;
rect.height -= renderer->ypad * 2;
wxRect renderrect( rect.x, rect.y, rect.width, rect.height );
return cell->Activate( renderrect );
}
// --------------------------------------------------------- // ---------------------------------------------------------
// wxGtkDataViewListModelNotifier // wxGtkDataViewListModelNotifier
// --------------------------------------------------------- // ---------------------------------------------------------
@@ -863,13 +905,23 @@ wxDataViewToggleCell::wxDataViewToggleCell( const wxString &varianttype,
if (m_mode & wxDATAVIEW_CELL_EDITABLE) if (m_mode & wxDATAVIEW_CELL_EDITABLE)
{ {
g_signal_connect_after( m_renderer, "toggled", G_CALLBACK(wxGtkToggleRendererToggledCallback), this );
}
else
{
GValue gvalue = { 0, }; GValue gvalue = { 0, };
g_value_init( &gvalue, G_TYPE_BOOLEAN ); g_value_init( &gvalue, G_TYPE_BOOLEAN );
g_value_set_boolean( &gvalue, true ); g_value_set_boolean( &gvalue, false );
g_object_set_property( G_OBJECT(m_renderer), "activatable", &gvalue ); g_object_set_property( G_OBJECT(m_renderer), "activatable", &gvalue );
g_value_unset( &gvalue ); g_value_unset( &gvalue );
g_signal_connect_after( m_renderer, "toggled", G_CALLBACK(wxGtkToggleRendererToggledCallback), this ); GValue gvalue2 = { 0, };
g_value_init( &gvalue2, gtk_cell_renderer_mode_get_type() );
g_value_set_enum( &gvalue2, GTK_CELL_RENDERER_MODE_INERT );
g_object_set_property( G_OBJECT(m_renderer), "mode", &gvalue2 );
g_value_unset( &gvalue2 );
} }
} }
@@ -949,6 +1001,15 @@ bool wxDataViewCustomCell::Init()
m_renderer = (void*) renderer; m_renderer = (void*) renderer;
if (m_mode & wxDATAVIEW_CELL_ACTIVATABLE)
{
GValue gvalue = { 0, };
g_value_init( &gvalue, gtk_cell_renderer_mode_get_type() );
g_value_set_enum( &gvalue, GTK_CELL_RENDERER_MODE_ACTIVATABLE );
g_object_set_property( G_OBJECT(m_renderer), "mode", &gvalue );
g_value_unset( &gvalue );
}
return true; return true;
} }