1 ///////////////////////////////////////////////////////////////////////////// 
   2 // Name:        src/gtk/checklst.cpp 
   4 // Author:      Robert Roebling 
   5 // Modified by: Ryan Norton (Native GTK2.0+ checklist) 
   7 // Copyright:   (c) 1998 Robert Roebling 
   8 // Licence:     wxWindows licence 
   9 ///////////////////////////////////////////////////////////////////////////// 
  11 // For compilers that support precompilation, includes "wx.h". 
  12 #include "wx/wxprec.h" 
  14 #if wxUSE_CHECKLISTBOX 
  16 #include "wx/checklst.h" 
  17 #include "wx/gtk/private.h" 
  18 #include "wx/gtk/treeentry_gtk.h" 
  23 //----------------------------------------------------------------------------- 
  25 //----------------------------------------------------------------------------- 
  27 static void gtk_checklist_toggled(GtkCellRendererToggle 
* WXUNUSED(renderer
), 
  29                                   wxCheckListBox        
*listbox
) 
  31     wxCHECK_RET( listbox
->m_treeview 
!= NULL
, wxT("invalid listbox") ); 
  33     GtkTreePath
* path 
= gtk_tree_path_new_from_string(stringpath
); 
  34     wxCommandEvent 
new_event( wxEVT_COMMAND_CHECKLISTBOX_TOGGLED
, 
  36     new_event
.SetEventObject( listbox 
); 
  37     new_event
.SetInt( gtk_tree_path_get_indices(path
)[0] ); 
  38     new_event
.SetString( listbox
->GetString( new_event
.GetInt() )); 
  39     gtk_tree_path_free(path
); 
  40     listbox
->Check( new_event
.GetInt(), !listbox
->IsChecked(new_event
.GetInt())); 
  41     listbox
->HandleWindowEvent( new_event 
); 
  45 //----------------------------------------------------------------------------- 
  47 //----------------------------------------------------------------------------- 
  49 IMPLEMENT_DYNAMIC_CLASS(wxCheckListBox
,wxListBox
) 
  51 wxCheckListBox::wxCheckListBox() : wxListBox() 
  53     m_hasCheckBoxes 
= true; 
  56 wxCheckListBox::wxCheckListBox(wxWindow 
*parent
, wxWindowID id
, 
  60                                const wxString 
*choices
, 
  62                                const wxValidator
& validator
, 
  63                                const wxString
& name 
) 
  65     m_hasCheckBoxes 
= true; 
  66     wxListBox::Create( parent
, id
, pos
, size
, nStrings
, choices
, style
, validator
, name 
); 
  69 wxCheckListBox::wxCheckListBox(wxWindow 
*parent
, wxWindowID id
, 
  72                                const wxArrayString
& choices
, 
  74                                const wxValidator
& validator
, 
  75                                const wxString
& name 
) 
  77     m_hasCheckBoxes 
= true; 
  78     wxListBox::Create( parent
, id
, pos
, size
, choices
, 
  79                        style
, validator
, name 
); 
  82 void wxCheckListBox::DoCreateCheckList() 
  84     //Create the checklist in our treeview and set up events for it 
  85     GtkCellRenderer
* renderer 
= 
  86         gtk_cell_renderer_toggle_new(); 
  87     GtkTreeViewColumn
* column 
= 
  88         gtk_tree_view_column_new_with_attributes( "", renderer
, 
  92     gtk_tree_view_column_set_fixed_width(column
, 40); 
  94     gtk_tree_view_column_set_fixed_width(column
, 22); 
  95 #endif // wxUSE_LIBHILDON2/!wxUSE_LIBHILDON2 
  97     gtk_tree_view_column_set_sizing(column
, GTK_TREE_VIEW_COLUMN_FIXED
); 
  98     gtk_tree_view_column_set_clickable(column
, TRUE
); 
 100     g_signal_connect (renderer
, "toggled", 
 101                       G_CALLBACK (gtk_checklist_toggled
), 
 104     gtk_tree_view_append_column(m_treeview
, column
); 
 107 bool wxCheckListBox::IsChecked(unsigned int index
) const 
 109     wxCHECK_MSG( m_treeview 
!= NULL
, false, wxT("invalid checklistbox") ); 
 112     gboolean res 
= gtk_tree_model_iter_nth_child( 
 113                         GTK_TREE_MODEL(m_liststore
), 
 114                         &iter
, NULL
, //NULL = parent = get first 
 120     GValue value 
= {0, }; 
 121     gtk_tree_model_get_value(GTK_TREE_MODEL(m_liststore
), 
 126     return g_value_get_boolean(&value
) == TRUE 
? true : false; 
 129 void wxCheckListBox::Check(unsigned int index
, bool check
) 
 131     wxCHECK_RET( m_treeview 
!= NULL
, wxT("invalid checklistbox") ); 
 134     gboolean res 
= gtk_tree_model_iter_nth_child( 
 135                         GTK_TREE_MODEL(m_liststore
), 
 136                         &iter
, NULL
, //NULL = parent = get first 
 142     gtk_list_store_set(m_liststore
, 
 145                        check 
? TRUE 
: FALSE
, -1); 
 148 int wxCheckListBox::GetItemHeight() const 
 150     wxCHECK_MSG( m_treeview 
!= NULL
, 0, wxT("invalid listbox")); 
 153     gtk_tree_view_column_cell_get_size( 
 154         gtk_tree_view_get_column(m_treeview
, 0), 
 155                                        NULL
, NULL
, NULL
, NULL
, 
 160 #endif //wxUSE_CHECKLISTBOX