]> git.saurik.com Git - wxWidgets.git/commitdiff
Add support for bitmaps in headers.
authorRobert Roebling <robert@roebling.de>
Thu, 5 Oct 2006 19:06:21 +0000 (19:06 +0000)
committerRobert Roebling <robert@roebling.de>
Thu, 5 Oct 2006 19:06:21 +0000 (19:06 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@41639 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/dataview.h
include/wx/generic/dataview.h
include/wx/gtk/dataview.h
samples/dataview/dataview.cpp
src/common/datavcmn.cpp
src/generic/datavgen.cpp
src/gtk/dataview.cpp

index 2a25f409c098742696f2cc76fae60eb18b25d7f8..c266aaf8201a4e9e7f3ec0e1ce4f4be5d353536d 100644 (file)
@@ -24,7 +24,7 @@
 
 #if defined(__WXGTK20__)
     // for testing
-    // #define wxUSE_GENERICDATAVIEWCTRL 1
+    #define wxUSE_GENERICDATAVIEWCTRL 1
 #elif defined(__WXMAC__)
     #define wxUSE_GENERICDATAVIEWCTRL 1
 #else
@@ -258,11 +258,16 @@ class WXDLLIMPEXP_ADV wxDataViewColumnBase: public wxObject
 public:
     wxDataViewColumnBase( const wxString &title, wxDataViewRenderer *renderer, unsigned int model_column,
         int width = 80, int flags = wxDATAVIEW_COL_RESIZABLE );
+    wxDataViewColumnBase( const wxBitmap &bitmap, wxDataViewRenderer *renderer, unsigned int model_column,
+        int width = 80, int flags = wxDATAVIEW_COL_RESIZABLE );
     virtual ~wxDataViewColumnBase();
 
     virtual void SetTitle( const wxString &title );
     virtual wxString GetTitle();
 
+    virtual void SetBitmap( const wxBitmap &bitmap );
+    virtual const wxBitmap &GetBitmap();
+
     wxDataViewRenderer* GetRenderer()       { return m_renderer; }
 
     unsigned int GetModelColumn()           { return m_model_column; }
@@ -278,6 +283,7 @@ private:
     int                      m_model_column;
     int                      m_flags;
     wxString                 m_title;
+    wxBitmap                 m_bitmap;
     wxDataViewCtrl          *m_owner;
 
 protected:
@@ -300,10 +306,18 @@ public:
     virtual bool AssociateModel( wxDataViewListModel *model );
     wxDataViewListModel* GetModel();
 
+    // short cuts
     virtual bool AppendTextColumn( const wxString &label, unsigned int model_column );
     virtual bool AppendToggleColumn( const wxString &label, unsigned int model_column );
     virtual bool AppendProgressColumn( const wxString &label, unsigned int model_column );
     virtual bool AppendDateColumn( const wxString &label, unsigned int model_column );
+    virtual bool AppendBitmapColumn( const wxString &label, unsigned int model_column );
+    virtual bool AppendTextColumn( const wxBitmap &label, unsigned int model_column );
+    virtual bool AppendToggleColumn( const wxBitmap &label, unsigned int model_column );
+    virtual bool AppendProgressColumn( const wxBitmap &label, unsigned int model_column );
+    virtual bool AppendDateColumn( const wxBitmap &label, unsigned int model_column );
+    virtual bool AppendBitmapColumn( const wxBitmap &label, unsigned int model_column );
+    
     virtual bool AppendColumn( wxDataViewColumn *col );
     virtual unsigned int GetNumberOfColumns();
     virtual bool DeleteColumn( unsigned int pos );
index d227215da651ac89679eeb0aadb35a2cbf758eab..05d88f2539cb88c66f643a510ef14a0885e0fb76 100644 (file)
@@ -216,6 +216,8 @@ class WXDLLIMPEXP_ADV wxDataViewColumn: public wxDataViewColumnBase
 public:
     wxDataViewColumn( const wxString &title, wxDataViewRenderer *renderer, unsigned int model_column, 
         int width = 80, int flags = wxDATAVIEW_COL_RESIZABLE );
+    wxDataViewColumn( const wxBitmap &bitmap, wxDataViewRenderer *renderer, unsigned int model_column,
+        int width = 80, int flags = wxDATAVIEW_COL_RESIZABLE );
     virtual ~wxDataViewColumn();
 
     virtual void SetTitle( const wxString &title );
index 163cbbfb9b861c2c55232dd24ec606574b6e3a7d..2dac9cc212b145b720bcc565d059ccb64d97f1d8 100644 (file)
@@ -190,10 +190,13 @@ class WXDLLIMPEXP_CORE wxDataViewColumn: public wxDataViewColumnBase
 public:
     wxDataViewColumn( const wxString &title, wxDataViewRenderer *renderer, unsigned int model_column,
         int width = 80, int flags = wxDATAVIEW_COL_RESIZABLE );
+    wxDataViewColumn( const wxBitmap &bitmap, wxDataViewRenderer *renderer, unsigned int model_column,
+        int width = 80, int flags = wxDATAVIEW_COL_RESIZABLE );
     virtual ~wxDataViewColumn();
 
     virtual void SetTitle( const wxString &title );
-
+    virtual void SetBitmap( const wxBitmap &bitmap );
+    
     virtual int GetWidth();
     
     virtual void SetFixedWidth( int width );
index 55e5f7340ed2c12a5aca49335745ae0085c794de..cea6827c421b0deacd2bb96fd622f33866f9d225 100644 (file)
@@ -509,7 +509,7 @@ MySortingFrame::MySortingFrame(wxFrame *frame, wxChar *title, int x, int y, int
     wxDataViewColumn *column = new wxDataViewColumn( wxT("editable"), text_renderer, 0 );
     dataview_left->AppendColumn( column );
     dataview_left->AppendTextColumn( wxT("second"), 1 );
-    dataview_left->AppendColumn( new wxDataViewColumn( wxT("icon"), new wxDataViewBitmapRenderer, 2, 25 ) );
+    dataview_left->AppendColumn( new wxDataViewColumn( wxBitmap(null_xpm), new wxDataViewBitmapRenderer, 2, 25 ) );
     dataview_left->AppendColumn( new wxDataViewColumn( wxT("icon"), new wxDataViewBitmapRenderer, 3, 25 ) );
 
     // Right wxDataViewCtrl using the sorting model
index 2f7c9fe6a2dd1e9d520d23dbaaa6cc76c652d7b8..976723b2f4249a10144cb9956052af12d2c6bf49 100644 (file)
@@ -707,6 +707,20 @@ wxDataViewColumnBase::wxDataViewColumnBase(const wxString& title,
     m_renderer->SetOwner( (wxDataViewColumn*) this );
 }
 
+wxDataViewColumnBase::wxDataViewColumnBase(const wxBitmap& bitmap,
+                                           wxDataViewRenderer *renderer,
+                                           unsigned int model_column,
+                                           int WXUNUSED(width),
+                                           int flags ) 
+{
+    m_renderer = renderer;
+    m_model_column = model_column;
+    m_flags = flags;
+    m_bitmap = bitmap;
+    m_owner = NULL;
+    m_renderer->SetOwner( (wxDataViewColumn*) this );
+}
+
 wxDataViewColumnBase::~wxDataViewColumnBase()
 {
     if (m_renderer)
@@ -728,6 +742,16 @@ wxString wxDataViewColumnBase::GetTitle()
     return m_title;
 }
 
+void wxDataViewColumnBase::SetBitmap( const wxBitmap &bitmap )
+{
+    m_bitmap = bitmap;
+}
+
+const wxBitmap &wxDataViewColumnBase::GetBitmap()
+{
+    return m_bitmap;
+}
+
 // ---------------------------------------------------------
 // wxDataViewCtrlBase
 // ---------------------------------------------------------
@@ -776,6 +800,36 @@ bool wxDataViewCtrlBase::AppendDateColumn( const wxString &label, unsigned int m
     return AppendColumn( new wxDataViewColumn( label, new wxDataViewDateRenderer(), model_column ) );
 }
 
+bool wxDataViewCtrlBase::AppendBitmapColumn( const wxString &label, unsigned int model_column )
+{
+    return AppendColumn( new wxDataViewColumn( label, new wxDataViewBitmapRenderer(), model_column ) );
+}
+
+bool wxDataViewCtrlBase::AppendTextColumn( const wxBitmap &label, unsigned int model_column )
+{
+    return AppendColumn( new wxDataViewColumn( label, new wxDataViewTextRenderer(), model_column ) );
+}
+
+bool wxDataViewCtrlBase::AppendToggleColumn( const wxBitmap &label, unsigned int model_column )
+{
+    return AppendColumn( new wxDataViewColumn( label, new wxDataViewToggleRenderer(), model_column, 30 ) );
+}
+
+bool wxDataViewCtrlBase::AppendProgressColumn( const wxBitmap &label, unsigned int model_column )
+{
+    return AppendColumn( new wxDataViewColumn( label, new wxDataViewProgressRenderer(), model_column, 70 ) );
+}
+
+bool wxDataViewCtrlBase::AppendDateColumn( const wxBitmap &label, unsigned int model_column )
+{
+    return AppendColumn( new wxDataViewColumn( label, new wxDataViewDateRenderer(), model_column ) );
+}
+
+bool wxDataViewCtrlBase::AppendBitmapColumn( const wxBitmap &label, unsigned int model_column )
+{
+    return AppendColumn( new wxDataViewColumn( label, new wxDataViewBitmapRenderer(), model_column ) );
+}
+
 bool wxDataViewCtrlBase::AppendColumn( wxDataViewColumn *col )
 {
     m_cols.Append( (wxObject*) col );
index 934d621f5100f713ebcc1caf7111643feaf63934..20b847e4c7d38646a75a7870253a11650a28e503 100644 (file)
@@ -603,6 +603,15 @@ wxDataViewColumn::wxDataViewColumn( const wxString &title, wxDataViewRenderer *c
         m_width = 80;
 }
 
+wxDataViewColumn::wxDataViewColumn( const wxBitmap &bitmap, wxDataViewRenderer *cell, unsigned int model_column,
+        int width, int flags ) :
+    wxDataViewColumnBase( bitmap, cell, model_column, width, flags )
+{
+    m_width = width;
+    if (m_width < 0)
+        m_width = 30;
+}
+
 wxDataViewColumn::~wxDataViewColumn()
 {
 }
index eec47ab88b70d021b6f126acc9c524ccf01cb2f1..fd1e62bdcb8858a3b2b6771e039fd38849e77fe8 100644 (file)
@@ -1450,6 +1450,36 @@ wxDataViewColumn::wxDataViewColumn( const wxString &title, wxDataViewRenderer *c
     m_column = (void*) column;
 }
 
+wxDataViewColumn::wxDataViewColumn( const wxBitmap &bitmap, wxDataViewRenderer *cell, unsigned int model_column,
+    int width, int flags ) :
+    wxDataViewColumnBase( bitmap, cell, model_column, width, flags )
+{
+    GtkCellRenderer *renderer = (GtkCellRenderer *) cell->GetGtkHandle();
+
+    GtkTreeViewColumn *column = gtk_tree_view_column_new();
+    m_column = (void*) column;
+
+    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 );
+
+    if (width > 0)
+    {
+        gtk_tree_view_column_set_fixed_width( column, 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_set_cell_data_func( column, renderer,
+        wxGtkTreeCellDataFunc, (gpointer) cell, NULL );
+}
+
 wxDataViewColumn::~wxDataViewColumn()
 {
 }
@@ -1460,6 +1490,41 @@ void wxDataViewColumn::SetTitle( const wxString &title )
 
     GtkTreeViewColumn *column = (GtkTreeViewColumn *)m_column;
     gtk_tree_view_column_set_title( column, wxGTK_CONV(title) );
+    
+    gtk_tree_view_column_set_widget( column, NULL );
+}
+
+void wxDataViewColumn::SetBitmap( const wxBitmap &bitmap )
+{
+    wxDataViewColumnBase::SetBitmap( bitmap );
+
+    GtkTreeViewColumn *column = (GtkTreeViewColumn *)m_column;
+    if (bitmap.Ok())
+    {
+        GtkImage *gtk_image = GTK_IMAGE( gtk_image_new() );
+        
+        GdkBitmap *mask = (GdkBitmap *) NULL;
+        if (bitmap.GetMask())
+            mask = bitmap.GetMask()->GetBitmap();
+
+        if (bitmap.HasPixbuf())
+        {
+            gtk_image_set_from_pixbuf(GTK_IMAGE(gtk_image),
+                                      bitmap.GetPixbuf());
+        }
+        else
+        {
+            gtk_image_set_from_pixmap(GTK_IMAGE(gtk_image),
+                                      bitmap.GetPixmap(), mask);
+        }
+        gtk_widget_show( GTK_WIDGET(gtk_image) );
+        
+        gtk_tree_view_column_set_widget( column, GTK_WIDGET(gtk_image) );
+    }
+    else
+    {
+        gtk_tree_view_column_set_widget( column, NULL );
+    }
 }
 
 int wxDataViewColumn::GetWidth()