bool ItemAdded( const wxDataViewItem &parent, const wxDataViewItem &item );
bool ItemDeleted( const wxDataViewItem &parent, const wxDataViewItem &item );
bool ItemChanged( const wxDataViewItem &item );
- bool ValueChanged( const wxDataViewItem &item, unsigned int col );
+ bool ValueChanged( const wxDataViewItem &item, unsigned int model_column );
bool Cleared();
bool BeforeReset();
bool AfterReset();
gint sort_column_id,
GtkTreeIterCompareFunc func,
gpointer data,
- GtkDestroyNotify destroy);
+ GDestroyNotify destroy);
static void wxgtk_tree_model_set_default_sort_func (GtkTreeSortable *sortable,
GtkTreeIterCompareFunc func,
gpointer data,
- GtkDestroyNotify destroy);
+ GDestroyNotify destroy);
static gboolean wxgtk_tree_model_has_default_sort_func (GtkTreeSortable *sortable);
/* drag'n'drop */
gint WXUNUSED(sort_column_id),
GtkTreeIterCompareFunc func,
gpointer WXUNUSED(data),
- GtkDestroyNotify WXUNUSED(destroy))
+ GDestroyNotify WXUNUSED(destroy))
{
g_return_if_fail (GTK_IS_WX_TREE_MODEL (sortable) );
g_return_if_fail (func != NULL);
wxgtk_tree_model_set_default_sort_func (GtkTreeSortable *sortable,
GtkTreeIterCompareFunc func,
gpointer WXUNUSED(data),
- GtkDestroyNotify WXUNUSED(destroy))
+ GDestroyNotify WXUNUSED(destroy))
{
g_return_if_fail (GTK_IS_WX_TREE_MODEL (sortable) );
g_return_if_fail (func != NULL);
wxSize size = cell->GetSize();
- gint calc_width = (gint) renderer->xpad * 2 + size.x;
- gint calc_height = (gint) renderer->ypad * 2 + size.y;
+ int xpad, ypad;
+ gtk_cell_renderer_get_padding(renderer, &xpad, &ypad);
+ int calc_width = xpad * 2 + size.x;
+ int calc_height = ypad * 2 + size.y;
if (x_offset)
*x_offset = 0;
if (cell_area && size.x > 0 && size.y > 0)
{
+ float xalign, yalign;
+ gtk_cell_renderer_get_alignment(renderer, &xalign, &yalign);
if (x_offset)
{
- *x_offset = (gint)((renderer->xalign *
- (cell_area->width - calc_width - 2 * renderer->xpad)));
- *x_offset = MAX (*x_offset, 0) + renderer->xpad;
+ *x_offset = int(xalign * (cell_area->width - calc_width - 2 * xpad));
+ *x_offset = MAX(*x_offset, 0) + xpad;
}
if (y_offset)
{
- *y_offset = (gint)((renderer->yalign *
- (cell_area->height - calc_height - 2 * renderer->ypad)));
- *y_offset = MAX (*y_offset, 0) + renderer->ypad;
+ *y_offset = int(yalign * (cell_area->height - calc_height - 2 * ypad));
+ *y_offset = MAX(*y_offset, 0) + ypad;
}
}
background_area, expose_area, flags);
wxRect rect(wxRectFromGDKRect(cell_area));
- rect = rect.Deflate(renderer->xpad, renderer->ypad);
+ int xpad, ypad;
+ gtk_cell_renderer_get_padding(renderer, &xpad, &ypad);
+ rect = rect.Deflate(xpad, ypad);
wxWindowDC* dc = (wxWindowDC*) cell->GetDC();
wxWindowDCImpl *impl = (wxWindowDCImpl *) dc->GetImpl();
rect.x += cell_area->x;
rect.y += cell_area->y;
- rect.width -= renderer->xpad * 2;
- rect.height -= renderer->ypad * 2;
+ int xpad, ypad;
+ gtk_cell_renderer_get_padding(renderer, &xpad, &ypad);
+ rect.width -= xpad * 2;
+ rect.height -= ypad * 2;
wxRect renderrect(wxRectFromGDKRect(&rect));
virtual bool ItemAdded( const wxDataViewItem &parent, const wxDataViewItem &item );
virtual bool ItemDeleted( const wxDataViewItem &parent, const wxDataViewItem &item );
virtual bool ItemChanged( const wxDataViewItem &item );
- virtual bool ValueChanged( const wxDataViewItem &item, unsigned int col );
+ virtual bool ValueChanged( const wxDataViewItem &item, unsigned int model_column );
virtual bool Cleared();
virtual void Resort();
virtual bool BeforeReset();
return true;
}
-bool wxGtkDataViewModelNotifier::ValueChanged( const wxDataViewItem &item, unsigned int model_col )
+bool wxGtkDataViewModelNotifier::ValueChanged( const wxDataViewItem &item, unsigned int model_column )
{
GtkWxTreeModel *wxgtk_model = m_internal->GetGtkModel();
wxDataViewCtrl *ctrl = m_internal->GetOwner();
for (index = 0; index < ctrl->GetColumnCount(); index++)
{
wxDataViewColumn *column = ctrl->GetColumn( index );
- if (column->GetModelColumn() == model_col)
+ if (column->GetModelColumn() == model_column)
{
GtkTreeView *widget = GTK_TREE_VIEW(ctrl->GtkGetTreeView());
GtkTreeViewColumn *gcolumn = GTK_TREE_VIEW_COLUMN(column->GetGtkHandle());
gtk_widget_queue_draw_area( GTK_WIDGET(widget),
cell_area.x - xdiff, ydiff + cell_area.y, cell_area.width, cell_area.height );
- m_internal->ValueChanged( item, model_col );
+ m_internal->ValueChanged( item, model_column );
return true;
}
wxDataViewRendererBase( varianttype, mode, align )
{
m_renderer = NULL;
+ m_mode = mode;
// we haven't changed them yet
m_usingDefaultAttrs = true;
return;
}
+ m_mode = mode;
+
// This value is most often ignored in GtkTreeView
GValue gvalue = { 0, };
g_value_init( &gvalue, gtk_cell_renderer_mode_get_type() );
m_context = window->GTKGetPangoDefaultContext();
m_layout = pango_layout_new( m_context );
- m_fontdesc = pango_font_description_copy( widget->style->font_desc );
+ m_fontdesc = pango_font_description_copy(gtk_widget_get_style(widget)->font_desc);
m_cmap = gtk_widget_get_colormap( widget ? widget : window->m_widget );
// we create it on demand so need to do it even from a const function
const_cast<wxDataViewCustomRenderer *>(this)->
m_text_renderer = GTK_CELL_RENDERER_TEXT(gtk_cell_renderer_text_new());
+ g_object_ref_sink(m_text_renderer);
}
return m_text_renderer;
delete m_dc;
if (m_text_renderer)
- gtk_object_sink( GTK_OBJECT(m_text_renderer) );
+ g_object_unref(m_text_renderer);
}
wxDC *wxDataViewCustomRenderer::GetDC()
return wxSize(x,y+d);
}
-bool wxDataViewDateRenderer::Activate( wxRect WXUNUSED(cell), wxDataViewModel *model,
+bool wxDataViewDateRenderer::Activate( const wxRect& WXUNUSED(cell), wxDataViewModel *model,
const wxDataViewItem &item, unsigned int col )
{
wxVariant variant;
cell->SetValue( value );
+ // deal with disabled items
+ bool enabled = wx_model->IsEnabled( item, cell->GetOwner()->GetModelColumn() );
+
+ // a) this sets the appearance to disabled grey
+ GValue gvalue = { 0, };
+ g_value_init( &gvalue, G_TYPE_BOOLEAN );
+ g_value_set_boolean( &gvalue, enabled );
+ g_object_set_property( G_OBJECT(renderer), "sensitive", &gvalue );
+ g_value_unset( &gvalue );
+
+ // b) this actually disables the control/renderer
+ if (enabled)
+ cell->SetMode( cell->GtkGetMode() );
+ else
+ cell->SetMode( wxDATAVIEW_CELL_INERT );
+
// deal with attributes: if the renderer doesn't support them at all, we
// don't even need to query the model for them
}
// else: no custom attributes specified and we're already using the default
// ones -- nothing to do
+
}
} // extern "C"
if (m_isConnected)
return;
- if (GTK_WIDGET_REALIZED(GetOwner()->m_treeview))
+ if (gtk_widget_get_realized(GetOwner()->m_treeview))
{
GtkTreeViewColumn *column = GTK_TREE_VIEW_COLUMN(m_column);
if (column->button)
gtk_tree_view_column_set_visible( GTK_TREE_VIEW_COLUMN(m_column), !hidden );
}
-void wxDataViewColumn::SetResizeable( bool resizeable )
+void wxDataViewColumn::SetResizeable( bool resizable )
{
- gtk_tree_view_column_set_resizable( GTK_TREE_VIEW_COLUMN(m_column), resizeable );
+ gtk_tree_view_column_set_resizable( GTK_TREE_VIEW_COLUMN(m_column), resizable );
}
void wxDataViewColumn::SetAlignment( wxAlignment align )
void wxDataViewColumn::SetWidth( int width )
{
- if (width < 0)
+ if ( width == wxCOL_WIDTH_AUTOSIZE )
{
-#if 1
- gtk_tree_view_column_set_sizing( GTK_TREE_VIEW_COLUMN(m_column), GTK_TREE_VIEW_COLUMN_FIXED );
-
- // TODO find a better calculation
- gtk_tree_view_column_set_fixed_width( GTK_TREE_VIEW_COLUMN(m_column), wxDVC_DEFAULT_WIDTH );
-#else
- // this is unpractical for large numbers of items and disables
- // user resizing, which is totally unexpected
+ // NB: this disables user resizing
gtk_tree_view_column_set_sizing( GTK_TREE_VIEW_COLUMN(m_column), GTK_TREE_VIEW_COLUMN_AUTOSIZE );
-#endif
}
else
{
- gtk_tree_view_column_set_sizing( GTK_TREE_VIEW_COLUMN(m_column), GTK_TREE_VIEW_COLUMN_FIXED );
+ if ( width == wxCOL_WIDTH_DEFAULT )
+ {
+ // TODO find a better calculation
+ width = wxDVC_DEFAULT_WIDTH;
+ }
+ gtk_tree_view_column_set_sizing( GTK_TREE_VIEW_COLUMN(m_column), GTK_TREE_VIEW_COLUMN_FIXED );
gtk_tree_view_column_set_fixed_width( GTK_TREE_VIEW_COLUMN(m_column), width );
}
}
if ( !item )
return FALSE;
- if (!m_dragDataObject->IsSupported( selection_data->target ))
+ GdkAtom target = gtk_selection_data_get_target(selection_data);
+ if (!m_dragDataObject->IsSupported(target))
return FALSE;
- size_t size = m_dragDataObject->GetDataSize( selection_data->target );
+ size_t size = m_dragDataObject->GetDataSize(target);
if (size == 0)
return FALSE;
void *buf = malloc( size );
gboolean res = FALSE;
- if (m_dragDataObject->GetDataHere( selection_data->target, buf ))
+ if (m_dragDataObject->GetDataHere(target, buf))
{
res = TRUE;
- gtk_selection_data_set( selection_data, selection_data->target,
+ gtk_selection_data_set(selection_data, target,
8, (const guchar*) buf, size );
}
event.SetEventObject( m_owner );
event.SetItem( item );
event.SetModel( m_wx_model );
- event.SetDataFormat( selection_data->target );
- event.SetDataSize( selection_data->length );
- event.SetDataBuffer( selection_data->data );
+ event.SetDataFormat(gtk_selection_data_get_target(selection_data));
+ event.SetDataSize(gtk_selection_data_get_length(selection_data));
+ event.SetDataBuffer(const_cast<guchar*>(gtk_selection_data_get_data(selection_data)));
if (!m_owner->HandleWindowEvent( event ))
return FALSE;
event.SetEventObject( m_owner );
event.SetItem( item );
event.SetModel( m_wx_model );
- event.SetDataFormat( selection_data->target );
+ event.SetDataFormat(gtk_selection_data_get_target(selection_data));
if (!m_owner->HandleWindowEvent( event ))
return FALSE;
return true;
}
-bool wxDataViewCtrlInternal::ValueChanged( const wxDataViewItem &item, unsigned int col )
+bool wxDataViewCtrlInternal::ValueChanged( const wxDataViewItem &item, unsigned int view_column )
{
wxDataViewEvent event( wxEVT_COMMAND_DATAVIEW_ITEM_VALUE_CHANGED, m_owner->GetId() );
event.SetEventObject( m_owner );
event.SetModel( m_owner->GetModel() );
- event.SetColumn( col );
- event.SetDataViewColumn( GetOwner()->GetColumn(col) );
+ event.SetColumn( view_column );
+ event.SetDataViewColumn( GetOwner()->GetColumn(view_column) );
event.SetItem( item );
m_owner->HandleWindowEvent( event );
static void
wxdataview_selection_changed_callback( GtkTreeSelection* WXUNUSED(selection), wxDataViewCtrl *dv )
{
- if (!GTK_WIDGET_REALIZED(dv->m_widget))
+ if (!gtk_widget_get_realized(dv->m_widget))
return;
wxDataViewEvent event( wxEVT_COMMAND_DATAVIEW_SELECTION_CHANGED, dv->GetId() );
GtkWidget* treeview = GtkGetTreeView();
// Insert widget in GtkTreeView
- if (GTK_WIDGET_REALIZED(treeview))
+ if (gtk_widget_get_realized(treeview))
gtk_widget_set_parent_window( child->m_widget,
gtk_tree_view_get_bin_window( GTK_TREE_VIEW(treeview) ) );
gtk_widget_set_parent( child->m_widget, treeview );