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 GetValue( 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; }

View File

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

View File

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

View File

@@ -452,28 +452,40 @@ struct _GtkWxCellRenderer
struct _GtkWxCellRendererClass
{
GtkCellRendererClass cell_parent_class;
};
static GtkCellRenderer *gtk_wx_cell_renderer_new (void);
static void gtk_wx_cell_renderer_init (GtkWxCellRenderer *cell);
static void gtk_wx_cell_renderer_class_init (GtkWxCellRendererClass *klass);
static void gtk_wx_cell_renderer_finalize (GObject *object);
static void gtk_wx_cell_renderer_get_size (GtkCellRenderer *cell,
static void gtk_wx_cell_renderer_init (
GtkWxCellRenderer *cell );
static void gtk_wx_cell_renderer_class_init(
GtkWxCellRendererClass *klass );
static void gtk_wx_cell_renderer_finalize (
GObject *object );
static void gtk_wx_cell_renderer_get_size (
GtkCellRenderer *cell,
GtkWidget *widget,
GdkRectangle *rectangle,
gint *x_offset,
gint *y_offset,
gint *width,
gint *height);
static void gtk_wx_cell_renderer_render (GtkCellRenderer *cell,
gint *height );
static void gtk_wx_cell_renderer_render (
GtkCellRenderer *cell,
GdkWindow *window,
GtkWidget *widget,
GdkRectangle *background_area,
GdkRectangle *cell_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;
@@ -499,9 +511,8 @@ gtk_wx_cell_renderer_get_type (void)
(GInstanceInitFunc) gtk_wx_cell_renderer_init,
};
cell_wx_type =
g_type_register_static (GTK_TYPE_CELL_RENDERER, "GtkWxCellRenderer",
&cell_wx_info, (GTypeFlags)0);
cell_wx_type = g_type_register_static( GTK_TYPE_CELL_RENDERER,
"GtkWxCellRenderer", &cell_wx_info, (GTypeFlags)0 );
}
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->render = gtk_wx_cell_renderer_render;
cell_class->activate = gtk_wx_cell_renderer_activate;
}
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
// ---------------------------------------------------------
@@ -863,13 +905,23 @@ wxDataViewToggleCell::wxDataViewToggleCell( const wxString &varianttype,
if (m_mode & wxDATAVIEW_CELL_EDITABLE)
{
g_signal_connect_after( m_renderer, "toggled", G_CALLBACK(wxGtkToggleRendererToggledCallback), this );
}
else
{
GValue gvalue = { 0, };
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_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;
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;
}