DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewTextCell)
};
+// ---------------------------------------------------------
+// wxDataViewBitmapCell
+// ---------------------------------------------------------
+
+class wxDataViewBitmapCell: public wxDataViewCell
+{
+public:
+ wxDataViewBitmapCell( const wxString &varianttype = wxT("wxBitmap"),
+ wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT );
+
+ bool SetValue( const wxVariant &value );
+ bool GetValue( wxVariant &value );
+
+protected:
+ DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewBitmapCell)
+};
+
// ---------------------------------------------------------
// wxDataViewToggleCell
// ---------------------------------------------------------
#include "../sample.xpm"
#endif
+#include "null.xpm"
+
#include "wx/dataview.h"
// -------------------------------------
m_list.Add( wxT("list") );
m_list.Add( wxT("of") );
m_list.Add( wxT("words.") );
+
+ m_bitmap = wxBitmap( null_xpm );
}
virtual size_t GetNumberOfRows() { return m_list.GetCount(); }
variant = m_list[row];
return;
}
+ if (col == 2)
+ {
+ variant = &m_bitmap;
+ return;
+ }
wxString tmp;
tmp.Printf( wxT("item(%d;%d)"), (int)row, (int)col );
variant = tmp;
}
wxArrayString m_list;
+ wxBitmap m_bitmap;
};
// -------------------------------------
wxDataViewColumn *column = new wxDataViewColumn( wxT("editable"), text_cell, 0 );
dataview_left->AppendColumn( column );
dataview_left->AppendTextColumn( wxT("second"), 1 );
+ dataview_left->AppendColumn( new wxDataViewColumn( wxT("icon"), new wxDataViewBitmapCell, 2 ) );
// Right wxDataViewCtrl using the sorting model
dataview_right = new wxDataViewCtrl( this, wxID_ANY );
left_sizer->Add( new wxButton( this, ID_APPEND_ROW_LEFT, wxT("Append") ), 0, wxALL, 5 );
left_sizer->Add( new wxButton( this, ID_PREPEND_ROW_LEFT, wxT("Prepend") ), 0, wxALL, 5 );
left_sizer->Add( new wxButton( this, ID_INSERT_ROW_LEFT, wxT("Insert") ), 0, wxALL, 5 );
- left_sizer->Add( new wxButton( this, ID_DELETE_ROW_LEFT, wxT("Delete") ), 0, wxALL, 5 );
+ left_sizer->Add( new wxButton( this, ID_DELETE_ROW_LEFT, wxT("Delete second") ), 0, wxALL, 5 );
left_sizer->Add( new wxButton( this, ID_EDIT_ROW_LEFT, wxT("Edit") ), 0, wxALL, 5 );
button_sizer->Add( left_sizer );
button_sizer->Add( 10, 10, 2 );
right_sizer->Add( new wxButton( this, ID_APPEND_ROW_RIGHT, wxT("Append") ), 0, wxALL, 5 );
right_sizer->Add( new wxButton( this, ID_PREPEND_ROW_RIGHT, wxT("Prepend") ), 0, wxALL, 5 );
right_sizer->Add( new wxButton( this, ID_INSERT_ROW_RIGHT, wxT("Insert") ), 0, wxALL, 5 );
- right_sizer->Add( new wxButton( this, ID_DELETE_ROW_RIGHT, wxT("Delete") ), 0, wxALL, 5 );
+ right_sizer->Add( new wxButton( this, ID_DELETE_ROW_RIGHT, wxT("Delete second") ), 0, wxALL, 5 );
right_sizer->Add( new wxButton( this, ID_EDIT_ROW_RIGHT, wxT("Edit") ), 0, wxALL, 5 );
button_sizer->Add( right_sizer );
button_sizer->Add( 10, 10, 1 );
void MySortingFrame::OnInsertRowLeft(wxCommandEvent& WXUNUSED(event))
{
- wxTextEntryDialog dialog( this, wxT("Enter text to insert at #2") );
+ wxTextEntryDialog dialog( this, wxT("Enter text to insert before second") );
if (dialog.ShowModal() == wxID_OK)
{
wxString value = dialog.GetValue();
model->ValueChanged( model_col, model_row );
}
-IMPLEMENT_ABSTRACT_CLASS(wxDataViewTextCell, wxDataViewCell)
+IMPLEMENT_CLASS(wxDataViewTextCell, wxDataViewCell)
wxDataViewTextCell::wxDataViewTextCell( const wxString &varianttype, wxDataViewCellMode mode ) :
wxDataViewCell( varianttype, mode )
return true;
}
+// ---------------------------------------------------------
+// wxDataViewBitmapCell
+// ---------------------------------------------------------
+
+IMPLEMENT_CLASS(wxDataViewBitmapCell, wxDataViewCell)
+
+wxDataViewBitmapCell::wxDataViewBitmapCell( const wxString &varianttype, wxDataViewCellMode mode ) :
+ wxDataViewCell( varianttype, mode )
+{
+ m_renderer = (void*) gtk_cell_renderer_pixbuf_new();
+}
+
+bool wxDataViewBitmapCell::SetValue( const wxVariant &value )
+{
+ if (value.GetType() == wxT("wxBitmap"))
+ {
+ // We could also use the type safe wxGetVariantCast here
+ const wxBitmap *bitmap = (const wxBitmap*) value.GetWxObjectPtr();
+ if (!bitmap)
+ return false;
+
+ // This may create a Pixbuf representation in the
+ // wxBitmap object (and it will stay there)
+ GdkPixbuf *pixbuf = bitmap->GetPixbuf();
+
+ GValue gvalue = { 0, };
+ g_value_init( &gvalue, G_TYPE_OBJECT );
+ g_value_set_object( &gvalue, pixbuf );
+ g_object_set_property( G_OBJECT(m_renderer), "pixbuf", &gvalue );
+ g_value_unset( &gvalue );
+
+ return true;
+ }
+
+ return false;
+}
+
+bool wxDataViewBitmapCell::GetValue( wxVariant &value )
+{
+ return false;
+}
+
// ---------------------------------------------------------
// wxDataViewToggleCell
// ---------------------------------------------------------
model->ValueChanged( model_col, model_row );
}
-IMPLEMENT_ABSTRACT_CLASS(wxDataViewToggleCell, wxDataViewCell)
+IMPLEMENT_CLASS(wxDataViewToggleCell, wxDataViewCell)
wxDataViewToggleCell::wxDataViewToggleCell( const wxString &varianttype,
wxDataViewCellMode mode ) :
// wxDataViewCustomCell
// ---------------------------------------------------------
-IMPLEMENT_ABSTRACT_CLASS(wxDataViewCustomCell, wxDataViewCell)
+IMPLEMENT_CLASS(wxDataViewCustomCell, wxDataViewCell)
wxDataViewCustomCell::wxDataViewCustomCell( const wxString &varianttype,
wxDataViewCellMode mode, bool no_init ) :
// wxDataViewProgressCell
// ---------------------------------------------------------
-IMPLEMENT_ABSTRACT_CLASS(wxDataViewProgressCell, wxDataViewCustomCell)
+IMPLEMENT_CLASS(wxDataViewProgressCell, wxDataViewCustomCell)
wxDataViewProgressCell::wxDataViewProgressCell( const wxString &label,
const wxString &varianttype, wxDataViewCellMode mode ) :
DismissAndNotify();
}
-IMPLEMENT_ABSTRACT_CLASS(wxDataViewDateCell, wxDataViewCustomCell)
+IMPLEMENT_CLASS(wxDataViewDateCell, wxDataViewCustomCell)
wxDataViewDateCell::wxDataViewDateCell( const wxString &varianttype,
wxDataViewCellMode mode ) :
list_store->model->GetValue( value, cell->GetOwner()->GetModelColumn(), model_row );
if (value.GetType() != cell->GetVariantType())
- wxLogError( wxT("Wrong type\n") );
+ wxLogError( wxT("Wrong type, required: %s but: %s"),
+ value.GetType().c_str(),
+ cell->GetVariantType().c_str() );
cell->SetValue( value );
}
-IMPLEMENT_ABSTRACT_CLASS(wxDataViewColumn, wxDataViewColumnBase)
+IMPLEMENT_CLASS(wxDataViewColumn, wxDataViewColumnBase)
wxDataViewColumn::wxDataViewColumn( const wxString &title, wxDataViewCell *cell, size_t model_column,
int fixed_width, wxDataViewColumnSizing sizing, int flags ) :