[ 1665996 ] Fixes/extensions to wxDataViewCtrl

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@44556 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robert Roebling
2007-02-23 07:57:46 +00:00
parent 4e1fd51de7
commit 9861f022c3
8 changed files with 1386 additions and 566 deletions

View File

@@ -235,7 +235,7 @@ wxgtk_list_store_get_n_columns (GtkTreeModel *tree_model)
GtkWxListStore *list_store = (GtkWxListStore *) tree_model;
g_return_val_if_fail (GTK_IS_WX_LIST_STORE (tree_model), 0);
return list_store->model->GetNumberOfCols();
return list_store->model->GetColumnCount();
}
static GType
@@ -247,7 +247,7 @@ wxgtk_list_store_get_column_type (GtkTreeModel *tree_model,
GType gtype = G_TYPE_INVALID;
wxString wxtype = list_store->model->GetColType( (unsigned int) index );
wxString wxtype = list_store->model->GetColumnType( (unsigned int) index );
if (wxtype == wxT("string"))
gtype = G_TYPE_STRING;
@@ -270,7 +270,7 @@ wxgtk_list_store_get_iter (GtkTreeModel *tree_model,
unsigned int i = (unsigned int)gtk_tree_path_get_indices (path)[0];
if (i >= list_store->model->GetNumberOfRows())
if (i >= list_store->model->GetRowCount())
return FALSE;
iter->stamp = list_store->stamp;
@@ -304,7 +304,7 @@ wxgtk_list_store_get_value (GtkTreeModel *tree_model,
g_return_if_fail (GTK_IS_WX_LIST_STORE (tree_model) );
wxDataViewListModel *model = list_store->model;
wxString mtype = model->GetColType( (unsigned int) column );
wxString mtype = model->GetColumnType( (unsigned int) column );
if (mtype == wxT("string"))
{
wxVariant variant;
@@ -336,7 +336,7 @@ wxgtk_list_store_iter_next (GtkTreeModel *tree_model,
if (n == -1)
return FALSE;
if (n >= (int) list_store->model->GetNumberOfRows()-1)
if (n >= (int) list_store->model->GetRowCount()-1)
return FALSE;
iter->user_data = (gpointer) ++n;
@@ -377,7 +377,7 @@ wxgtk_list_store_iter_n_children (GtkTreeModel *tree_model,
GtkWxListStore *list_store = (GtkWxListStore *) tree_model;
if (iter == NULL)
return (gint) list_store->model->GetNumberOfRows();
return (gint) list_store->model->GetRowCount();
g_return_val_if_fail (list_store->stamp == iter->stamp, -1);
@@ -399,7 +399,7 @@ wxgtk_list_store_iter_nth_child (GtkTreeModel *tree_model,
if (n < 0)
return FALSE;
if (n >= (gint) list_store->model->GetNumberOfRows())
if (n >= (gint) list_store->model->GetRowCount())
return FALSE;
iter->stamp = list_store->stamp;
@@ -727,11 +727,11 @@ public:
virtual bool Cleared();
virtual bool Freed()
{
m_wx_model = NULL;
m_gtk_store = NULL;
return wxDataViewListModelNotifier::Freed();
}
{
m_wx_model = NULL;
m_gtk_store = NULL;
return wxDataViewListModelNotifier::Freed();
}
GtkWxListStore *m_gtk_store;
wxDataViewListModel *m_wx_model;
@@ -750,7 +750,7 @@ wxGtkDataViewListModelNotifier::wxGtkDataViewListModelNotifier(
bool wxGtkDataViewListModelNotifier::RowAppended()
{
unsigned int pos = m_wx_model->GetNumberOfRows()-1;
unsigned int pos = m_wx_model->GetRowCount()-1;
GtkTreeIter iter;
iter.stamp = m_gtk_store->stamp;
@@ -879,12 +879,130 @@ bool wxGtkDataViewListModelNotifier::Cleared()
IMPLEMENT_ABSTRACT_CLASS(wxDataViewRenderer, wxDataViewRendererBase)
wxDataViewRenderer::wxDataViewRenderer( const wxString &varianttype, wxDataViewCellMode mode ) :
wxDataViewRendererBase( varianttype, mode )
wxDataViewRenderer::wxDataViewRenderer( const wxString &varianttype, wxDataViewCellMode mode,
int align ) :
wxDataViewRendererBase( varianttype, mode, align )
{
m_renderer = NULL;
// NOTE: SetMode() and SetAlignment() needs to be called in the renderer's ctor,
// after the m_renderer pointer has been initialized
}
void wxDataViewRenderer::SetMode( wxDataViewCellMode mode )
{
GtkCellRendererMode gtkMode;
switch (mode)
{
case wxDATAVIEW_CELL_INERT:
gtkMode = GTK_CELL_RENDERER_MODE_INERT;
break;
case wxDATAVIEW_CELL_ACTIVATABLE:
gtkMode = GTK_CELL_RENDERER_MODE_ACTIVATABLE;
break;
case wxDATAVIEW_CELL_EDITABLE:
gtkMode = GTK_CELL_RENDERER_MODE_EDITABLE;
break;
}
GValue gvalue = { 0, };
g_value_init( &gvalue, gtk_cell_renderer_mode_get_type() );
g_value_set_enum( &gvalue, gtkMode );
g_object_set_property( G_OBJECT(m_renderer), "mode", &gvalue );
g_value_unset( &gvalue );
}
wxDataViewCellMode wxDataViewRenderer::GetMode() const
{
wxDataViewCellMode ret;
GValue gvalue;
g_object_get( G_OBJECT(m_renderer), "mode", &gvalue, NULL);
switch (g_value_get_enum(&gvalue))
{
case GTK_CELL_RENDERER_MODE_INERT:
ret = wxDATAVIEW_CELL_INERT;
break;
case GTK_CELL_RENDERER_MODE_ACTIVATABLE:
ret = wxDATAVIEW_CELL_ACTIVATABLE;
break;
case GTK_CELL_RENDERER_MODE_EDITABLE:
ret = wxDATAVIEW_CELL_EDITABLE;
break;
}
g_value_unset( &gvalue );
return ret;
}
void wxDataViewRenderer::SetAlignment( int align )
{
// horizontal alignment:
gfloat xalign = 0.0;
if (align & wxALIGN_RIGHT)
xalign = 1.0;
else if (align & wxALIGN_CENTER_HORIZONTAL)
xalign = 0.5;
GValue gvalue = { 0, };
g_value_init( &gvalue, G_TYPE_FLOAT );
g_value_set_float( &gvalue, xalign );
g_object_set_property( G_OBJECT(m_renderer), "xalign", &gvalue );
g_value_unset( &gvalue );
// vertical alignment:
gfloat yalign = 0.0;
if (align & wxALIGN_BOTTOM)
yalign = 1.0;
else if (align & wxALIGN_CENTER_VERTICAL)
yalign = 0.5;
GValue gvalue2 = { 0, };
g_value_init( &gvalue2, G_TYPE_FLOAT );
g_value_set_float( &gvalue2, yalign );
g_object_set_property( G_OBJECT(m_renderer), "yalign", &gvalue2 );
g_value_unset( &gvalue2 );
}
int wxDataViewRenderer::GetAlignment() const
{
int ret = 0;
GValue gvalue;
// horizontal alignment:
g_object_get( G_OBJECT(m_renderer), "xalign", &gvalue, NULL );
float xalign = g_value_get_float( &gvalue );
if (xalign < 0.5)
ret |= wxALIGN_LEFT;
else if (xalign == 0.5)
ret |= wxALIGN_CENTER_HORIZONTAL;
else
ret |= wxALIGN_RIGHT;
g_value_unset( &gvalue );
// vertical alignment:
g_object_get( G_OBJECT(m_renderer), "yalign", &gvalue, NULL );
float yalign = g_value_get_float( &gvalue );
if (yalign < 0.5)
ret |= wxALIGN_TOP;
else if (yalign == 0.5)
ret |= wxALIGN_CENTER_VERTICAL;
else
ret |= wxALIGN_BOTTOM;
g_value_unset( &gvalue );
return ret;
}
// ---------------------------------------------------------
// wxDataViewTextRenderer
// ---------------------------------------------------------
@@ -918,12 +1036,13 @@ static void wxGtkTextRendererEditedCallback( GtkCellRendererText *renderer,
IMPLEMENT_CLASS(wxDataViewTextRenderer, wxDataViewRenderer)
wxDataViewTextRenderer::wxDataViewTextRenderer( const wxString &varianttype, wxDataViewCellMode mode ) :
wxDataViewRenderer( varianttype, mode )
wxDataViewTextRenderer::wxDataViewTextRenderer( const wxString &varianttype, wxDataViewCellMode mode,
int align ) :
wxDataViewRenderer( varianttype, mode, align )
{
m_renderer = (void*) gtk_cell_renderer_text_new();
m_renderer = (GtkWidget*) gtk_cell_renderer_text_new();
if (m_mode & wxDATAVIEW_CELL_EDITABLE)
if (mode & wxDATAVIEW_CELL_EDITABLE)
{
GValue gvalue = { 0, };
g_value_init( &gvalue, G_TYPE_BOOLEAN );
@@ -933,6 +1052,9 @@ wxDataViewTextRenderer::wxDataViewTextRenderer( const wxString &varianttype, wxD
g_signal_connect_after( m_renderer, "edited", G_CALLBACK(wxGtkTextRendererEditedCallback), this );
}
SetMode(mode);
SetAlignment(align);
}
bool wxDataViewTextRenderer::SetValue( const wxVariant &value )
@@ -948,7 +1070,7 @@ bool wxDataViewTextRenderer::SetValue( const wxVariant &value )
return true;
}
bool wxDataViewTextRenderer::GetValue( wxVariant &value )
bool wxDataViewTextRenderer::GetValue( wxVariant &value ) const
{
GValue gvalue = { 0, };
g_value_init( &gvalue, G_TYPE_STRING );
@@ -961,16 +1083,39 @@ bool wxDataViewTextRenderer::GetValue( wxVariant &value )
return true;
}
void wxDataViewTextRenderer::SetAlignment( int align )
{
wxDataViewRenderer::SetAlignment(align);
// horizontal alignment:
PangoAlignment pangoAlign = PANGO_ALIGN_LEFT;
if (align & wxALIGN_RIGHT)
pangoAlign = PANGO_ALIGN_RIGHT;
else if (align & wxALIGN_CENTER_HORIZONTAL)
pangoAlign = PANGO_ALIGN_CENTER;
GValue gvalue = { 0, };
g_value_init( &gvalue, gtk_cell_renderer_mode_get_type() );
g_value_set_enum( &gvalue, pangoAlign );
g_object_set_property( G_OBJECT(m_renderer), "alignment", &gvalue );
g_value_unset( &gvalue );
}
// ---------------------------------------------------------
// wxDataViewBitmapRenderer
// ---------------------------------------------------------
IMPLEMENT_CLASS(wxDataViewBitmapRenderer, wxDataViewRenderer)
wxDataViewBitmapRenderer::wxDataViewBitmapRenderer( const wxString &varianttype, wxDataViewCellMode mode ) :
wxDataViewRenderer( varianttype, mode )
wxDataViewBitmapRenderer::wxDataViewBitmapRenderer( const wxString &varianttype, wxDataViewCellMode mode,
int align ) :
wxDataViewRenderer( varianttype, mode, align )
{
m_renderer = (void*) gtk_cell_renderer_pixbuf_new();
m_renderer = (GtkWidget*) gtk_cell_renderer_pixbuf_new();
SetMode(mode);
SetAlignment(align);
}
bool wxDataViewBitmapRenderer::SetValue( const wxVariant &value )
@@ -1014,7 +1159,7 @@ bool wxDataViewBitmapRenderer::SetValue( const wxVariant &value )
return false;
}
bool wxDataViewBitmapRenderer::GetValue( wxVariant &value )
bool wxDataViewBitmapRenderer::GetValue( wxVariant &value ) const
{
return false;
}
@@ -1061,31 +1206,27 @@ static void wxGtkToggleRendererToggledCallback( GtkCellRendererToggle *renderer,
IMPLEMENT_CLASS(wxDataViewToggleRenderer, wxDataViewRenderer)
wxDataViewToggleRenderer::wxDataViewToggleRenderer( const wxString &varianttype,
wxDataViewCellMode mode ) :
wxDataViewRenderer( varianttype, mode )
wxDataViewCellMode mode, int align ) :
wxDataViewRenderer( varianttype, mode, align )
{
m_renderer = (void*) gtk_cell_renderer_toggle_new();
m_renderer = (GtkWidget*) gtk_cell_renderer_toggle_new();
if (m_mode & wxDATAVIEW_CELL_ACTIVATABLE)
if (mode & wxDATAVIEW_CELL_ACTIVATABLE)
{
g_signal_connect_after( m_renderer, "toggled", G_CALLBACK(wxGtkToggleRendererToggledCallback), this );
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, false );
g_object_set_property( G_OBJECT(m_renderer), "activatable", &gvalue );
g_value_unset( &gvalue );
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 );
}
SetMode(mode);
SetAlignment(align);
}
bool wxDataViewToggleRenderer::SetValue( const wxVariant &value )
@@ -1101,7 +1242,7 @@ bool wxDataViewToggleRenderer::SetValue( const wxVariant &value )
return true;
}
bool wxDataViewToggleRenderer::GetValue( wxVariant &value )
bool wxDataViewToggleRenderer::GetValue( wxVariant &value ) const
{
GValue gvalue = { 0, };
g_value_init( &gvalue, G_TYPE_BOOLEAN );
@@ -1146,32 +1287,27 @@ public:
IMPLEMENT_CLASS(wxDataViewCustomRenderer, wxDataViewRenderer)
wxDataViewCustomRenderer::wxDataViewCustomRenderer( const wxString &varianttype,
wxDataViewCellMode mode, bool no_init ) :
wxDataViewRenderer( varianttype, mode )
wxDataViewCellMode mode, int align,
bool no_init ) :
wxDataViewRenderer( varianttype, mode, align )
{
m_dc = NULL;
if (no_init)
m_renderer = NULL;
else
Init();
Init(mode, align);
}
bool wxDataViewCustomRenderer::Init()
bool wxDataViewCustomRenderer::Init(wxDataViewCellMode mode, int align)
{
GtkWxCellRenderer *renderer = (GtkWxCellRenderer *) gtk_wx_cell_renderer_new();
renderer->cell = this;
m_renderer = (void*) renderer;
m_renderer = (GtkWidget*) 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 );
}
SetMode(mode);
SetAlignment(align);
return true;
}
@@ -1203,8 +1339,8 @@ wxDC *wxDataViewCustomRenderer::GetDC()
IMPLEMENT_CLASS(wxDataViewProgressRenderer, wxDataViewCustomRenderer)
wxDataViewProgressRenderer::wxDataViewProgressRenderer( const wxString &label,
const wxString &varianttype, wxDataViewCellMode mode ) :
wxDataViewCustomRenderer( varianttype, mode, true )
const wxString &varianttype, wxDataViewCellMode mode, int align ) :
wxDataViewCustomRenderer( varianttype, mode, align, true )
{
m_label = label;
m_value = 0;
@@ -1212,7 +1348,7 @@ wxDataViewProgressRenderer::wxDataViewProgressRenderer( const wxString &label,
#ifdef __WXGTK26__
if (!gtk_check_version(2,6,0))
{
m_renderer = (void*) gtk_cell_renderer_progress_new();
m_renderer = (GtkWidget*) gtk_cell_renderer_progress_new();
GValue gvalue = { 0, };
g_value_init( &gvalue, G_TYPE_STRING );
@@ -1221,12 +1357,15 @@ wxDataViewProgressRenderer::wxDataViewProgressRenderer( const wxString &label,
g_value_set_string( &gvalue, wxGTK_CONV_SYS(m_label) );
g_object_set_property( G_OBJECT(m_renderer), "text", &gvalue );
g_value_unset( &gvalue );
SetMode(mode);
SetAlignment(align);
}
else
#endif
{
// Use custom cell code
wxDataViewCustomRenderer::Init();
wxDataViewCustomRenderer::Init(mode, align);
}
}
@@ -1258,6 +1397,11 @@ bool wxDataViewProgressRenderer::SetValue( const wxVariant &value )
return true;
}
bool wxDataViewProgressRenderer::GetValue( wxVariant &value ) const
{
return false;
}
bool wxDataViewProgressRenderer::Render( wxRect cell, wxDC *dc, int state )
{
double pct = (double)m_value / 100.0;
@@ -1274,7 +1418,7 @@ bool wxDataViewProgressRenderer::Render( wxRect cell, wxDC *dc, int state )
return true;
}
wxSize wxDataViewProgressRenderer::GetSize()
wxSize wxDataViewProgressRenderer::GetSize() const
{
return wxSize(40,12);
}
@@ -1331,9 +1475,11 @@ void wxDataViewDateRendererPopupTransient::OnCalendar( wxCalendarEvent &event )
IMPLEMENT_CLASS(wxDataViewDateRenderer, wxDataViewCustomRenderer)
wxDataViewDateRenderer::wxDataViewDateRenderer( const wxString &varianttype,
wxDataViewCellMode mode ) :
wxDataViewCustomRenderer( varianttype, mode )
wxDataViewCellMode mode, int align ) :
wxDataViewCustomRenderer( varianttype, mode, align )
{
SetMode(mode);
SetAlignment(align);
}
bool wxDataViewDateRenderer::SetValue( const wxVariant &value )
@@ -1343,6 +1489,11 @@ bool wxDataViewDateRenderer::SetValue( const wxVariant &value )
return true;
}
bool wxDataViewDateRenderer::GetValue( wxVariant &value ) const
{
return false;
}
bool wxDataViewDateRenderer::Render( wxRect cell, wxDC *dc, int state )
{
dc->SetFont( GetOwner()->GetOwner()->GetFont() );
@@ -1352,16 +1503,16 @@ bool wxDataViewDateRenderer::Render( wxRect cell, wxDC *dc, int state )
return true;
}
wxSize wxDataViewDateRenderer::GetSize()
wxSize wxDataViewDateRenderer::GetSize() const
{
wxDataViewCtrl* view = GetOwner()->GetOwner();
wxString tmp = m_date.FormatDate();
wxCoord x,y,d;
view->GetTextExtent( tmp, &x, &y, &d );
GetView()->GetTextExtent( tmp, &x, &y, &d );
return wxSize(x,y+d);
}
bool wxDataViewDateRenderer::Activate( wxRect cell, wxDataViewListModel *model, unsigned int col, unsigned int row )
bool wxDataViewDateRenderer::Activate( wxRect cell, wxDataViewListModel *model,
unsigned int col, unsigned int row )
{
wxVariant variant;
model->GetValue( variant, col, row );
@@ -1442,37 +1593,10 @@ wxDataViewColumn::wxDataViewColumn( const wxString &title, wxDataViewRenderer *c
wxAlignment align, int flags ) :
wxDataViewColumnBase( title, cell, model_column, width, align, flags )
{
m_isConnected = false;
Init( align, flags, width );
GtkCellRenderer *renderer = (GtkCellRenderer *) cell->GetGtkHandle();
GtkTreeViewColumn *column = gtk_tree_view_column_new();
m_column = (void*) column;
gtk_tree_view_column_set_clickable( column, true );
gtk_tree_view_column_set_clickable( GTK_TREE_VIEW_COLUMN(m_column), TRUE );
SetTitle( title );
if (flags & wxDATAVIEW_COL_RESIZABLE)
gtk_tree_view_column_set_resizable( column, true );
if (flags & wxDATAVIEW_COL_HIDDEN)
gtk_tree_view_column_set_visible( column, false );
if (flags & wxDATAVIEW_COL_SORTABLE)
gtk_tree_view_column_set_sort_indicator( column, true );
if (width > 0)
gtk_tree_view_column_set_fixed_width( column, width );
else
gtk_tree_view_column_set_fixed_width( column, 70 ); // FIXME
gtk_tree_view_column_set_sizing( column, GTK_TREE_VIEW_COLUMN_FIXED );
gtk_tree_view_column_pack_end( column, renderer, FALSE );
gtk_tree_view_column_set_cell_data_func( column, renderer,
wxGtkTreeCellDataFunc, (gpointer) cell, NULL );
SetAlignment(align);
}
wxDataViewColumn::wxDataViewColumn( const wxBitmap &bitmap, wxDataViewRenderer *cell,
@@ -1480,35 +1604,35 @@ wxDataViewColumn::wxDataViewColumn( const wxBitmap &bitmap, wxDataViewRenderer *
wxAlignment align, int flags ) :
wxDataViewColumnBase( bitmap, cell, model_column, width, align, flags )
{
m_isConnected = false;
GtkCellRenderer *renderer = (GtkCellRenderer *) cell->GetGtkHandle();
GtkTreeViewColumn *column = gtk_tree_view_column_new();
m_column = (void*) column;
Init( align, flags, width );
SetBitmap( bitmap );
}
if (flags & wxDATAVIEW_COL_RESIZABLE)
gtk_tree_view_column_set_resizable( column, true );
if (flags & wxDATAVIEW_COL_HIDDEN)
gtk_tree_view_column_set_visible( column, false );
if (flags & wxDATAVIEW_COL_SORTABLE)
gtk_tree_view_column_set_sort_indicator( column, true );
void wxDataViewColumn::Init(wxAlignment align, int flags, int width)
{
m_isConnected = false;
if (width > 0)
gtk_tree_view_column_set_fixed_width( column, width );
else
gtk_tree_view_column_set_fixed_width( column, 70 ); // FIXME
GtkCellRenderer *renderer = (GtkCellRenderer *) GetRenderer()->GetGtkHandle();
GtkTreeViewColumn *column = gtk_tree_view_column_new();
m_column = (GtkWidget*) column;
SetFlags( flags );
SetAlignment( align );
// NOTE: we prefer not to call SetMinWidth(wxDVC_DEFAULT_MINWIDTH);
// as GTK+ is smart and unless explicitely told, will set the minimal
// width to the title's lenght, which is a better default
// the GTK_TREE_VIEW_COLUMN_FIXED is required by the "fixed height" mode
// that we use for the wxDataViewCtrl
gtk_tree_view_column_set_fixed_width( column, width < 0 ? wxDVC_DEFAULT_WIDTH : width );
gtk_tree_view_column_set_sizing( column, GTK_TREE_VIEW_COLUMN_FIXED );
gtk_tree_view_column_pack_end( column, renderer, FALSE );
gtk_tree_view_column_pack_end( column, renderer, TRUE );
gtk_tree_view_column_set_cell_data_func( column, renderer,
wxGtkTreeCellDataFunc, (gpointer) cell, NULL );
SetAlignment(align);
wxGtkTreeCellDataFunc, (gpointer) GetRenderer(), NULL );
}
wxDataViewColumn::~wxDataViewColumn()
@@ -1522,7 +1646,7 @@ void wxDataViewColumn::OnInternalIdle()
if (GTK_WIDGET_REALIZED(GetOwner()->m_treeview))
{
GtkTreeViewColumn *column = (GtkTreeViewColumn *)m_column;
GtkTreeViewColumn *column = GTK_TREE_VIEW_COLUMN(m_column);
if (column->button)
{
g_signal_connect(column->button, "button_press_event",
@@ -1537,22 +1661,20 @@ void wxDataViewColumn::SetOwner( wxDataViewCtrl *owner )
{
wxDataViewColumnBase::SetOwner( owner );
GtkTreeViewColumn *column = (GtkTreeViewColumn *)m_column;
GtkTreeViewColumn *column = GTK_TREE_VIEW_COLUMN(m_column);
gtk_tree_view_column_set_title( column, wxGTK_CONV_FONT(GetTitle(), GetOwner()->GetFont() ) );
}
void wxDataViewColumn::SetTitle( const wxString &title )
{
wxDataViewColumnBase::SetTitle( title );
GtkTreeViewColumn *column = (GtkTreeViewColumn *)m_column;
GtkTreeViewColumn *column = GTK_TREE_VIEW_COLUMN(m_column);
if (m_isConnected)
{
// disconnect before column->button gets recreated
g_signal_handlers_disconnect_by_func( column->button,
(void*) gtk_dataview_header_button_press_callback, this);
(GtkWidget*) gtk_dataview_header_button_press_callback, this);
m_isConnected = false;
}
@@ -1565,11 +1687,17 @@ void wxDataViewColumn::SetTitle( const wxString &title )
gtk_tree_view_column_set_widget( column, NULL );
}
wxString wxDataViewColumn::GetTitle() const
{
const gchar *str = gtk_tree_view_column_get_title( GTK_TREE_VIEW_COLUMN(m_column) );
return wxConvFileName->cMB2WX(str);
}
void wxDataViewColumn::SetBitmap( const wxBitmap &bitmap )
{
wxDataViewColumnBase::SetBitmap( bitmap );
GtkTreeViewColumn *column = (GtkTreeViewColumn *)m_column;
GtkTreeViewColumn *column = GTK_TREE_VIEW_COLUMN(m_column);
if (bitmap.Ok())
{
GtkImage *gtk_image = GTK_IMAGE( gtk_image_new() );
@@ -1598,34 +1726,69 @@ void wxDataViewColumn::SetBitmap( const wxBitmap &bitmap )
}
}
void wxDataViewColumn::SetHidden( bool hidden )
{
gtk_tree_view_column_set_visible( GTK_TREE_VIEW_COLUMN(m_column), !hidden );
}
void wxDataViewColumn::SetResizeable( bool resizeable )
{
gtk_tree_view_column_set_resizable( GTK_TREE_VIEW_COLUMN(m_column), resizeable );
}
void wxDataViewColumn::SetAlignment( wxAlignment align )
{
GtkTreeViewColumn *column = (GtkTreeViewColumn *)m_column;
GtkTreeViewColumn *column = GTK_TREE_VIEW_COLUMN(m_column);
gfloat xalign = 0.0;
if (align == wxALIGN_RIGHT)
xalign = 1.0;
if (align == wxALIGN_CENTER)
if (align == wxALIGN_CENTER_HORIZONTAL ||
align == wxALIGN_CENTER)
xalign = 0.5;
gtk_tree_view_column_set_alignment( column, xalign );
gtk_tree_view_column_set_alignment( column, xalign );
}
wxAlignment wxDataViewColumn::GetAlignment() const
{
gfloat xalign = gtk_tree_view_column_get_alignment( GTK_TREE_VIEW_COLUMN(m_column) );
if (xalign == 1.0)
return wxALIGN_RIGHT;
if (xalign == 0.5)
return wxALIGN_CENTER_HORIZONTAL;
return wxALIGN_LEFT;
}
void wxDataViewColumn::SetSortable( bool sortable )
{
GtkTreeViewColumn *column = (GtkTreeViewColumn *)m_column;
GtkTreeViewColumn *column = GTK_TREE_VIEW_COLUMN(m_column);
gtk_tree_view_column_set_sort_indicator( column, sortable );
}
bool wxDataViewColumn::IsSortable() const
{
GtkTreeViewColumn *column = (GtkTreeViewColumn *)m_column;
GtkTreeViewColumn *column = GTK_TREE_VIEW_COLUMN(m_column);
return gtk_tree_view_column_get_sort_indicator( column );
}
bool wxDataViewColumn::IsResizeable() const
{
GtkTreeViewColumn *column = GTK_TREE_VIEW_COLUMN(m_column);
return gtk_tree_view_column_get_resizable( column );
}
bool wxDataViewColumn::IsHidden() const
{
GtkTreeViewColumn *column = GTK_TREE_VIEW_COLUMN(m_column);
return !gtk_tree_view_column_get_visible( column );
}
void wxDataViewColumn::SetSortOrder( bool ascending )
{
GtkTreeViewColumn *column = (GtkTreeViewColumn *)m_column;
GtkTreeViewColumn *column = GTK_TREE_VIEW_COLUMN(m_column);
if (ascending)
gtk_tree_view_column_set_sort_order( column, GTK_SORT_ASCENDING );
@@ -1635,25 +1798,31 @@ void wxDataViewColumn::SetSortOrder( bool ascending )
bool wxDataViewColumn::IsSortOrderAscending() const
{
GtkTreeViewColumn *column = (GtkTreeViewColumn *)m_column;
GtkTreeViewColumn *column = GTK_TREE_VIEW_COLUMN(m_column);
return (gtk_tree_view_column_get_sort_order( column ) != GTK_SORT_DESCENDING);
}
void wxDataViewColumn::SetMinWidth( int width )
{
gtk_tree_view_column_set_min_width( GTK_TREE_VIEW_COLUMN(m_column), width );
}
int wxDataViewColumn::GetMinWidth() const
{
return gtk_tree_view_column_get_min_width( GTK_TREE_VIEW_COLUMN(m_column) );
}
int wxDataViewColumn::GetWidth() const
{
return gtk_tree_view_column_get_width( (GtkTreeViewColumn *)m_column );
return gtk_tree_view_column_get_width( GTK_TREE_VIEW_COLUMN(m_column) );
}
void wxDataViewColumn::SetFixedWidth( int width )
void wxDataViewColumn::SetWidth( int width )
{
gtk_tree_view_column_set_fixed_width( (GtkTreeViewColumn *)m_column, width );
gtk_tree_view_column_set_fixed_width( GTK_TREE_VIEW_COLUMN(m_column), width );
}
int wxDataViewColumn::GetFixedWidth() const
{
return gtk_tree_view_column_get_fixed_width( (GtkTreeViewColumn *)m_column );
}
//-----------------------------------------------------------------------------
// wxDataViewCtrl signal callbacks
@@ -1737,6 +1906,27 @@ bool wxDataViewCtrl::Create(wxWindow *parent, wxWindowID id,
gtk_tree_selection_set_mode( selection, GTK_SELECTION_MULTIPLE );
}
gtk_tree_view_set_headers_visible( GTK_TREE_VIEW(m_treeview), (style & wxDV_NO_HEADER) == 0 );
#ifdef __WXGTK210__
if (!gtk_check_version(2,10,0))
{
GtkTreeViewGridLines grid = GTK_TREE_VIEW_GRID_LINES_NONE;
if ((style & wxDV_HORIZ_RULES) != 0 &&
(style & wxDV_VERT_RULES) != 0)
grid = GTK_TREE_VIEW_GRID_LINES_BOTH;
else if (style & wxDV_VERT_RULES)
grid = GTK_TREE_VIEW_GRID_LINES_VERTICAL;
else if (style & wxDV_HORIZ_RULES)
grid = GTK_TREE_VIEW_GRID_LINES_HORIZONTAL;
gtk_tree_view_set_grid_lines( GTK_TREE_VIEW(m_treeview), grid );
}
else
#endif
gtk_tree_view_set_rules_hint( GTK_TREE_VIEW(m_treeview), (style & wxDV_HORIZ_RULES) != 0 );
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (m_widget),
GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS);
gtk_widget_show (m_treeview);
@@ -1758,7 +1948,7 @@ void wxDataViewCtrl::OnInternalIdle()
{
wxWindow::OnInternalIdle();
unsigned int cols = GetNumberOfColumns();
unsigned int cols = GetColumnCount();
unsigned int i;
for (i = 0; i < cols; i++)
{