From bd6169a60e89c4058e420ac7faaec5ac056437d0 Mon Sep 17 00:00:00 2001 From: Robert Roebling Date: Sun, 8 Jan 2006 16:23:03 +0000 Subject: [PATCH] Added sample for wxDataViewCtrl git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@36780 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- samples/dataview/dataview.bkl | 13 ++ samples/dataview/dataview.cpp | 346 ++++++++++++++++++++++++++++++++++ samples/dataview/mondrian.ico | Bin 0 -> 766 bytes samples/dataview/mondrian.xpm | 44 +++++ 4 files changed, 403 insertions(+) create mode 100644 samples/dataview/dataview.bkl create mode 100644 samples/dataview/dataview.cpp create mode 100644 samples/dataview/mondrian.ico create mode 100644 samples/dataview/mondrian.xpm diff --git a/samples/dataview/dataview.bkl b/samples/dataview/dataview.bkl new file mode 100644 index 0000000000..8b89add6ae --- /dev/null +++ b/samples/dataview/dataview.bkl @@ -0,0 +1,13 @@ + + + + + + + dataview.cpp + core + base + dataview.rc + + + diff --git a/samples/dataview/dataview.cpp b/samples/dataview/dataview.cpp new file mode 100644 index 0000000000..22538962f9 --- /dev/null +++ b/samples/dataview/dataview.cpp @@ -0,0 +1,346 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: dataview.cpp +// Purpose: DataVewCtrl wxWidgets sample +// Author: Robert Roebling +// Modified by: +// Created: 06/01/06 +// RCS-ID: $Id$ +// Copyright: (c) Robert Roebling +// Licence: wxWindows license +///////////////////////////////////////////////////////////////////////////// + +// For compilers that support precompilation, includes "wx/wx.h". +#include "wx/wxprec.h" + +#ifdef __BORLANDC__ +#pragma hdrstop +#endif + +#ifndef WX_PRECOMP +#include "wx/wx.h" +#endif + +#ifndef __WXMSW__ +#include "mondrian.xpm" +#endif + +// -------------------- wxDataViewControl -------------------- + +// wxDataViewStore + +class wxDataViewStore +{ +public: + wxDataViewStore() { } + virtual ~wxDataViewStore() { } + +protected: + DECLARE_NO_COPY_CLASS(wxDataViewStore) +}; + + +// wxDataViewListStoreBase + +class wxDataViewListStoreBase: public wxDataViewStore +{ +public: + wxDataViewListStoreBase() { } + + virtual bool AppendRow() = 0; + +protected: + DECLARE_NO_COPY_CLASS(wxDataViewListStoreBase) +}; + + +// wxDataViewCtrlBase + +class wxDataViewCtrlBase: public wxControl +{ +public: + wxDataViewCtrlBase(); + + // Define public API here + + virtual bool AppendStringColumn( const wxString &label, int index ) = 0; + + virtual bool AssociateStore( wxDataViewStore *store ); + wxDataViewStore* GetStore(); + +private: + wxDataViewStore *m_store; + +protected: + DECLARE_NO_COPY_CLASS(wxDataViewCtrlBase) +}; + + +// -------------------- GTK2 header -------------------- + +#ifdef __WXGTK20__ + +#include "wx/gtk/private.h" + +class wxDataViewListStore: public wxDataViewListStoreBase +{ +public: + wxDataViewListStore(); + + // interface + virtual bool AppendRow(); + + // implementation + GtkListStore* GetGtkListStore() { return m_store; } + +private: + GtkListStore *m_store; + +protected: + DECLARE_NO_COPY_CLASS(wxDataViewListStore) +}; + +class wxDataViewCtrl: public wxDataViewCtrlBase +{ +public: + wxDataViewCtrl() + { + Init(); + } + + wxDataViewCtrl( wxWindow *parent, wxWindowID id, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, long style = 0, + const wxValidator& validator = wxDefaultValidator ) + { + Create(parent, id, pos, size, style, validator ); + } + + virtual ~wxDataViewCtrl(); + + void Init(); + + bool Create(wxWindow *parent, wxWindowID id, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, long style = 0, + const wxValidator& validator = wxDefaultValidator ); + + virtual bool AppendStringColumn( const wxString &label, int index ); + + virtual bool AssociateStore( wxDataViewStore *store ); + + +private: + DECLARE_DYNAMIC_CLASS(wxDataViewCtrl) + DECLARE_NO_COPY_CLASS(wxDataViewCtrl) +}; + +#endif + +// -------------------- wxDataViewControl -------------------- + +wxDataViewCtrlBase::wxDataViewCtrlBase() +{ + m_store = NULL; +} + +bool wxDataViewCtrlBase::AssociateStore( wxDataViewStore *store ) +{ + m_store = store; + + return true; +} + +wxDataViewStore* wxDataViewCtrlBase::GetStore() +{ + return m_store; +} + +IMPLEMENT_DYNAMIC_CLASS(wxDataViewCtrl,wxControl) + +// -------------------- GTK2 implementaion -------------------- + +#ifdef __WXGTK20__ + +// wxDataViewListStore + +wxDataViewListStore::wxDataViewListStore() +{ + m_store = gtk_list_store_new( 3, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING ); +} + +bool wxDataViewListStore::AppendRow() +{ + GtkTreeIter iter; + gtk_list_store_append( m_store, &iter ); + + return true; +} + + +// wxDataViewCtrl + +wxDataViewCtrl::~wxDataViewCtrl() +{ +} + +void wxDataViewCtrl::Init() +{ +} + +bool wxDataViewCtrl::Create(wxWindow *parent, wxWindowID id, + const wxPoint& pos, const wxSize& size, + long style, const wxValidator& validator ) +{ + Init(); + + m_needParent = TRUE; + m_acceptsFocus = TRUE; + + if (!PreCreation( parent, pos, size ) || + !CreateBase( parent, id, pos, size, style, validator )) + { + wxFAIL_MSG( wxT("wxDataViewCtrl creation failed") ); + return FALSE; + } + + m_widget = gtk_tree_view_new(); + + m_parent->DoAddChild( this ); + + PostCreation(size); + + return true; +} + +bool wxDataViewCtrl::AppendStringColumn( const wxString &label, int index ) +{ + GtkCellRenderer *renderer + = gtk_cell_renderer_text_new(); + + GtkTreeViewColumn *column + = gtk_tree_view_column_new_with_attributes( wxGTK_CONV(label), renderer, "text", index, NULL ); + + gtk_tree_view_append_column( GTK_TREE_VIEW(m_widget), column ); + + return true; +} + +bool wxDataViewCtrl::AssociateStore( wxDataViewStore *store ) +{ + wxDataViewCtrlBase::AssociateStore( store ); + + // Right now we only have the GTK+ port's + // list store variant, so cast to that... + + wxDataViewListStore *liststore = (wxDataViewListStore*) store; + + gtk_tree_view_set_model( GTK_TREE_VIEW(m_widget), GTK_TREE_MODEL(liststore->GetGtkListStore()) ); + + return true; +} + +#endif + +// -------------------- wxDataViewControl -------------------- + +class MyApp: public wxApp +{ +public: + bool OnInit(void); +}; + +class MyFrame: public wxFrame +{ +public: + MyFrame(wxFrame *frame, wxChar *title, int x, int y, int w, int h); + +public: + void OnQuit(wxCommandEvent& event); + void OnAbout(wxCommandEvent& event); + +private: + wxDataViewCtrl* dataview; +}; + +// ID for the menu commands +#define DYNAMIC_QUIT wxID_EXIT +#define DYNAMIC_ABOUT wxID_ABOUT + +// Create a new application object +IMPLEMENT_APP (MyApp) + +// `Main program' equivalent, creating windows and returning main app frame +bool MyApp::OnInit(void) +{ + // Create the main frame window + MyFrame *frame = new MyFrame(NULL, _T("Dynamic wxWidgets App"), 50, 50, 450, 340); + + // Show the frame + frame->Show(true); + + SetTopWindow(frame); + + return true; +} + +// ------------------------------------- +// MyFrame +// ------------------------------------- + +// My frame constructor +MyFrame::MyFrame(wxFrame *frame, wxChar *title, int x, int y, int w, int h): + wxFrame(frame, wxID_ANY, title, wxPoint(x, y), wxSize(w, h)) +{ + // Give it an icon +#ifdef __WXMSW__ + SetIcon(wxIcon(_T("mondrian"))); +#else + SetIcon(wxIcon(mondrian_xpm)); +#endif + + // Make a menubar + wxMenu *file_menu = new wxMenu; + + file_menu->Append(DYNAMIC_ABOUT, _T("&About")); + file_menu->Append(DYNAMIC_QUIT, _T("E&xit")); + wxMenuBar *menu_bar = new wxMenuBar; + menu_bar->Append(file_menu, _T("&File")); + SetMenuBar(menu_bar); + + // You used to have to do some casting for param 4, but now there are type-safe handlers + Connect( DYNAMIC_QUIT, wxID_ANY, + wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(MyFrame::OnQuit) ); + Connect( DYNAMIC_ABOUT, wxID_ANY, + wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(MyFrame::OnAbout) ); + + CreateStatusBar(); + + + dataview = new wxDataViewCtrl( this, -1 ); + dataview->AppendStringColumn( wxT("first"), 0 ); + dataview->AppendStringColumn( wxT("second"), 1 ); + dataview->AppendStringColumn( wxT("third"), 2 ); + + wxDataViewListStore *store = new wxDataViewListStore; + store->AppendRow(); + store->AppendRow(); + store->AppendRow(); + store->AppendRow(); + + dataview->AssociateStore( store ); +} + +void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event) ) +{ + Close(true); +} + +void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event) ) +{ + wxMessageDialog dialog(this, _T("This demonstrates the dataview control handling"), + _T("About DataView"), wxOK); + + dialog.ShowModal(); +} + + diff --git a/samples/dataview/mondrian.ico b/samples/dataview/mondrian.ico new file mode 100644 index 0000000000000000000000000000000000000000..2310c5d275a87af295d5ea8dc79ea417a5e74c53 GIT binary patch literal 766 zcmZQzU<5)11px*Sc)`TLAO@s0fLH;D9e|jTfdxnc0Z