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 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; }
|
||||||
|
|
||||||
|
@@ -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();
|
||||||
|
@@ -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;
|
||||||
@@ -231,7 +236,7 @@ MyFrame::MyFrame(wxFrame *frame, wxChar *title, int x, int y, int w, int h):
|
|||||||
|
|
||||||
dataview_left->AppendTextColumn( wxT("first"), 0 );
|
dataview_left->AppendTextColumn( wxT("first"), 0 );
|
||||||
dataview_left->AppendTextColumn( wxT("second"), 1 );
|
dataview_left->AppendTextColumn( wxT("second"), 1 );
|
||||||
|
|
||||||
wxDataViewTextCell *text_cell = new wxDataViewTextCell( wxT("string"), wxDATAVIEW_CELL_EDITABLE );
|
wxDataViewTextCell *text_cell = new wxDataViewTextCell( wxT("string"), wxDATAVIEW_CELL_EDITABLE );
|
||||||
wxDataViewColumn *column = new wxDataViewColumn( wxT("editable"), text_cell, 2 );
|
wxDataViewColumn *column = new wxDataViewColumn( wxT("editable"), text_cell, 2 );
|
||||||
dataview_left->AppendColumn( column );
|
dataview_left->AppendColumn( column );
|
||||||
@@ -247,7 +252,7 @@ MyFrame::MyFrame(wxFrame *frame, wxChar *title, int x, int y, int w, int h):
|
|||||||
// Right wxDataViewCtrl using the same model
|
// Right wxDataViewCtrl using the same model
|
||||||
dataview_right = new wxDataViewCtrl( this, -1 );
|
dataview_right = new wxDataViewCtrl( this, -1 );
|
||||||
dataview_right->AssociateModel( model );
|
dataview_right->AssociateModel( model );
|
||||||
|
|
||||||
text_cell = new wxDataViewTextCell( wxT("string"), wxDATAVIEW_CELL_EDITABLE );
|
text_cell = new wxDataViewTextCell( wxT("string"), wxDATAVIEW_CELL_EDITABLE );
|
||||||
column = new wxDataViewColumn( wxT("editable"), text_cell, 2 );
|
column = new wxDataViewColumn( wxT("editable"), text_cell, 2 );
|
||||||
dataview_right->AppendColumn( column );
|
dataview_right->AppendColumn( column );
|
||||||
@@ -256,7 +261,7 @@ MyFrame::MyFrame(wxFrame *frame, wxChar *title, int x, int y, int w, int h):
|
|||||||
wxDataViewToggleCell *toggle_cell = new wxDataViewToggleCell( wxT("bool"), wxDATAVIEW_CELL_EDITABLE );
|
wxDataViewToggleCell *toggle_cell = new wxDataViewToggleCell( wxT("bool"), wxDATAVIEW_CELL_EDITABLE );
|
||||||
column = new wxDataViewColumn( wxT("bool"), toggle_cell, 3 );
|
column = new wxDataViewColumn( wxT("bool"), toggle_cell, 3 );
|
||||||
dataview_right->AppendColumn( column );
|
dataview_right->AppendColumn( column );
|
||||||
|
|
||||||
wxBoxSizer *sizer = new wxBoxSizer( wxHORIZONTAL );
|
wxBoxSizer *sizer = new wxBoxSizer( wxHORIZONTAL );
|
||||||
sizer->Add( dataview_left, 1, wxGROW );
|
sizer->Add( dataview_left, 1, wxGROW );
|
||||||
sizer->Add(10,10);
|
sizer->Add(10,10);
|
||||||
|
@@ -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 );
|
||||||
GtkWidget *widget,
|
static void gtk_wx_cell_renderer_finalize (
|
||||||
GdkRectangle *rectangle,
|
GObject *object );
|
||||||
gint *x_offset,
|
static void gtk_wx_cell_renderer_get_size (
|
||||||
gint *y_offset,
|
GtkCellRenderer *cell,
|
||||||
gint *width,
|
GtkWidget *widget,
|
||||||
gint *height);
|
GdkRectangle *rectangle,
|
||||||
static void gtk_wx_cell_renderer_render (GtkCellRenderer *cell,
|
gint *x_offset,
|
||||||
GdkWindow *window,
|
gint *y_offset,
|
||||||
GtkWidget *widget,
|
gint *width,
|
||||||
GdkRectangle *background_area,
|
gint *height );
|
||||||
GdkRectangle *cell_area,
|
static void gtk_wx_cell_renderer_render (
|
||||||
GdkRectangle *expose_area,
|
GtkCellRenderer *cell,
|
||||||
GtkCellRendererState flags);
|
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;
|
static GObjectClass *cell_parent_class = NULL;
|
||||||
|
|
||||||
@@ -482,29 +494,28 @@ static GObjectClass *cell_parent_class = NULL;
|
|||||||
GType
|
GType
|
||||||
gtk_wx_cell_renderer_get_type (void)
|
gtk_wx_cell_renderer_get_type (void)
|
||||||
{
|
{
|
||||||
static GType cell_wx_type = 0;
|
static GType cell_wx_type = 0;
|
||||||
|
|
||||||
if (!cell_wx_type)
|
if (!cell_wx_type)
|
||||||
{
|
{
|
||||||
static const GTypeInfo cell_wx_info =
|
static const GTypeInfo cell_wx_info =
|
||||||
{
|
{
|
||||||
sizeof (GtkWxCellRendererClass),
|
sizeof (GtkWxCellRendererClass),
|
||||||
NULL, /* base_init */
|
NULL, /* base_init */
|
||||||
NULL, /* base_finalize */
|
NULL, /* base_finalize */
|
||||||
(GClassInitFunc) gtk_wx_cell_renderer_class_init,
|
(GClassInitFunc) gtk_wx_cell_renderer_class_init,
|
||||||
NULL, /* class_finalize */
|
NULL, /* class_finalize */
|
||||||
NULL, /* class_data */
|
NULL, /* class_data */
|
||||||
sizeof (GtkWxCellRenderer),
|
sizeof (GtkWxCellRenderer),
|
||||||
0, /* n_preallocs */
|
0, /* n_preallocs */
|
||||||
(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;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user