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:
@@ -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; }
|
||||
|
||||
|
@@ -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();
|
||||
|
@@ -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;
|
||||
|
@@ -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,
|
||||
static void gtk_wx_cell_renderer_render (
|
||||
GtkCellRenderer *cell,
|
||||
GdkWindow *window,
|
||||
GtkWidget *widget,
|
||||
GdkRectangle *background_area,
|
||||
GdkRectangle *cell_area,
|
||||
GdkRectangle *expose_area,
|
||||
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;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user