/////////////////////////////////////////////////////////////////////////////
-// Name: checklst.cpp
+// Name: src/gtk/checklst.cpp
// Purpose:
// Author: Robert Roebling
-// Modified by: Ryan Norton (Native GTK2.0+ checklist)
+// Modified by: Ryan Norton (Native GTK2.0+ checklist)
// Id: $Id$
// Copyright: (c) 1998 Robert Roebling
// Licence: wxWindows licence
// For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
-#include "wx/defs.h"
-
#if wxUSE_CHECKLISTBOX
#include "wx/checklst.h"
wxCHECK_RET( listbox->m_treeview != NULL, wxT("invalid listbox") );
GtkTreePath* path = gtk_tree_path_new_from_string(stringpath);
- wxCommandEvent new_event( wxEVT_COMMAND_CHECKLISTBOX_TOGGLED,
+ wxCommandEvent new_event( wxEVT_COMMAND_CHECKLISTBOX_TOGGLED,
listbox->GetId() );
new_event.SetEventObject( listbox );
new_event.SetInt( gtk_tree_path_get_indices(path)[0] );
gtk_tree_path_free(path);
listbox->Check( new_event.GetInt(), !listbox->IsChecked(new_event.GetInt()));
- listbox->GetEventHandler()->ProcessEvent( new_event );
+ listbox->GetEventHandler()->ProcessEvent( new_event );
}
}
#endif
wxCheckListBox::wxCheckListBox() : wxListBox()
{
- m_hasCheckBoxes = TRUE;
+ m_hasCheckBoxes = true;
}
wxCheckListBox::wxCheckListBox(wxWindow *parent, wxWindowID id,
const wxValidator& validator,
const wxString& name )
{
- m_hasCheckBoxes = TRUE;
+ m_hasCheckBoxes = true;
wxListBox::Create( parent, id, pos, size, nStrings, choices, style, validator, name );
}
const wxValidator& validator,
const wxString& name )
{
- m_hasCheckBoxes = TRUE;
+ m_hasCheckBoxes = true;
wxListBox::Create( parent, id, pos, size, choices,
style, validator, name );
}
void wxCheckListBox::DoCreateCheckList()
{
//Create the checklist in our treeview and set up events for it
- GtkCellRenderer* renderer =
+ GtkCellRenderer* renderer =
gtk_cell_renderer_toggle_new();
- GtkTreeViewColumn* column =
+ GtkTreeViewColumn* column =
gtk_tree_view_column_new_with_attributes( "", renderer,
"active", 0,
NULL );
gtk_tree_model_get_value(GTK_TREE_MODEL(m_liststore),
&iter,
0, //column
- &value);
+ &value);
return g_value_get_boolean(&value) == TRUE ? true : false;
}
gtk_list_store_set(m_liststore,
&iter,
0, //column
- check ? TRUE : FALSE, -1);
+ check ? TRUE : FALSE, -1);
}
int wxCheckListBox::GetItemHeight() const
bool wxCheckListBox::IsChecked( int index ) const
{
- wxCHECK_MSG( m_treeview != NULL, FALSE, wxT("invalid checklistbox") );
+ wxCHECK_MSG( m_treeview != NULL, false, wxT("invalid checklistbox") );
GtkTreeEntry* entry = GtkGetEntry(index);
if (entry)
}
wxFAIL_MSG(wxT("wrong checklistbox index"));
- return FALSE;
+ return false;
}
void wxCheckListBox::Check( int index, bool check )
// For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
-#include "wx/defs.h"
-
#if wxUSE_LISTBOX
#include "wx/listbox.h"
event.SetString(wxConvUTF8.cMB2WX(gtk_tree_entry_get_label(entry)));
if ( listbox->HasClientObjectData() )
- event.SetClientObject(
+ event.SetClientObject(
(wxClientData*) gtk_tree_entry_get_userdata(entry) );
else if ( listbox->HasClientUntypedData() )
event.SetClientData( gtk_tree_entry_get_userdata(entry) );
((listbox->GetWindowStyleFlag() & wxLB_EXTENDED) != 0)) )
{
//toggle the selection + send event
- listbox->GtkSetSelection(sel, !listbox->IsSelected( sel ), FALSE);
+ listbox->GtkSetSelection(sel, !listbox->IsSelected( sel ), false);
}
}
}
if ((listbox->m_hasCheckBoxes) && (gdk_event->x < 15) && (gdk_event->type != GDK_2BUTTON_PRESS))
{
GtkTreePath* path;
- gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(widget),
+ gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(widget),
(gint)gdk_event->x, (gint)gdk_event->y,
&path, NULL, NULL, NULL);
int sel = gtk_tree_path_get_indices(path)[0];
extern "C" {
static gint
-gtk_listbox_key_press_callback( GtkWidget *widget,
- GdkEventKey *gdk_event,
+gtk_listbox_key_press_callback( GtkWidget *widget,
+ GdkEventKey *gdk_event,
wxListBox *listbox )
{
if (g_isIdle) wxapp_install_idle_handler();
if (g_blockEventsOnDrag) return FALSE;
- bool ret = FALSE;
+ bool ret = false;
if ((gdk_event->keyval == GDK_Tab) || (gdk_event->keyval == GDK_ISO_Left_Tab))
{
if ((gdk_event->keyval == GDK_Return) && (!ret))
{
// eat return in all modes (RN:WHY?)
- ret = TRUE;
+ ret = true;
}
// Check or uncheck item with SPACE
//In the keyevent we don't know the index of the item
//and the activated event gets called anyway...
//
- //Also, activating with the space causes the treeview to
+ //Also, activating with the space causes the treeview to
//unselect all the items and then select the item in question
//wx's behaviour is to just toggle the item's selection state
//and leave the others alone
// assumes so and passes -1 to the dogetclientdata funcs if not
// OK, so basically we need to do a bit of a run-around here as
- // 1) is_selected says whether the item(s?) are CURRENTLY selected -
- // i.e. if is_selected is FALSE then the item is going to be
+ // 1) is_selected says whether the item(s?) are CURRENTLY selected -
+ // i.e. if is_selected is FALSE then the item is going to be
// selected right now!
- // 2) However, since it is not already selected and the user
+ // 2) However, since it is not already selected and the user
// will expect it to be we need to manually select it and
// return FALSE telling GTK we handled the selection
if (is_selected) return TRUE;
{
//Now, as mentioned above, we manually select the row that is/was going
//to be selected anyway by GTK
- listbox->m_blockEvent = TRUE; //if we don't block events we will lock the
+ listbox->m_blockEvent = true; //if we don't block events we will lock the
//app due to recursion!!
- GtkTreeSelection* selection =
+ GtkTreeSelection* selection =
gtk_tree_view_get_selection(listbox->m_treeview);
GtkTreeIter iter;
gtk_tree_model_get_iter(GTK_TREE_MODEL(listbox->m_liststore), &iter, path);
gtk_tree_selection_select_iter(selection, &iter);
- listbox->m_blockEvent = FALSE;
+ listbox->m_blockEvent = false;
//Finally, send the wx event
wxCommandEvent event(wxEVT_COMMAND_LISTBOX_SELECTED, listbox->GetId() );
event.SetString(wxConvUTF8.cMB2WX(gtk_tree_entry_get_label(entry)));
if ( listbox->HasClientObjectData() )
- event.SetClientObject(
- (wxClientData*) gtk_tree_entry_get_userdata(entry)
+ event.SetClientObject(
+ (wxClientData*) gtk_tree_entry_get_userdata(entry)
);
else if ( listbox->HasClientUntypedData() )
event.SetClientData( gtk_tree_entry_get_userdata(entry) );
//-----------------------------------------------------------------------------
extern "C" {
-static void gtk_tree_entry_destroy_cb(GtkTreeEntry* entry,
+static void gtk_tree_entry_destroy_cb(GtkTreeEntry* entry,
wxListBox* listbox)
{
if(listbox->HasClientObjectData())
gtk_tree_model_get(GTK_TREE_MODEL(listbox->m_liststore),
a,
- WXLISTBOX_DATACOLUMN_ARG(listbox),
+ WXLISTBOX_DATACOLUMN_ARG(listbox),
&entry, -1);
gtk_tree_model_get(GTK_TREE_MODEL(listbox->m_liststore),
b,
- WXLISTBOX_DATACOLUMN_ARG(listbox),
+ WXLISTBOX_DATACOLUMN_ARG(listbox),
&entry2, -1);
wxCHECK_MSG(entry, 0, wxT("Could not get entry"));
wxCHECK_MSG(entry2, 0, wxT("Could not get entry2"));
gtk_tree_model_get(GTK_TREE_MODEL(listbox->m_liststore),
iter,
- WXLISTBOX_DATACOLUMN_ARG(listbox),
+ WXLISTBOX_DATACOLUMN_ARG(listbox),
&entry, -1);
wxCHECK_MSG(entry, 0, wxT("Could not get entry"));
gchar* keycollatekey = g_utf8_collate_key(key, -1);
{
m_treeview = (GtkTreeView*) NULL;
#if wxUSE_CHECKLISTBOX
- m_hasCheckBoxes = FALSE;
+ m_hasCheckBoxes = false;
#endif // wxUSE_CHECKLISTBOX
m_spacePressed = false;
}
long style, const wxValidator& validator,
const wxString &name )
{
- m_needParent = TRUE;
- m_acceptsFocus = TRUE;
- m_blockEvent = FALSE;
+ m_needParent = true;
+ m_acceptsFocus = true;
+ m_blockEvent = false;
if (!PreCreation( parent, pos, size ) ||
!CreateBase( parent, id, pos, size, style, validator, name ))
{
wxFAIL_MSG( wxT("wxListBox creation failed") );
- return FALSE;
+ return false;
}
m_widget = gtk_scrolled_window_new( (GtkAdjustment*) NULL, (GtkAdjustment*) NULL );
#endif // wxUSE_CHECKLISTBOX && wxUSE_NATIVEGTKCHECKLIST
// Create the data column
- gtk_tree_view_insert_column_with_attributes(m_treeview, -1, "",
+ gtk_tree_view_insert_column_with_attributes(m_treeview, -1, "",
gtk_cell_renderer_text_new(),
- "text",
+ "text",
WXLISTBOX_DATACOLUMN, NULL);
// Now create+set the model (GtkListStore) - first argument # of columns
m_liststore = gtk_list_store_new(1, GTK_TYPE_TREE_ENTRY);
gtk_tree_view_set_model(m_treeview, GTK_TREE_MODEL(m_liststore));
-
+
g_object_unref(G_OBJECT(m_liststore)); //free on treeview destruction
-
+
// Disable the pop-up textctrl that enables searching - note that
// the docs specify that even if this disabled (which we are doing)
// the user can still have it through the start-interactive-search
// key binding...either way we want to provide a searchequal callback
- // NB: If this is enabled a doubleclick event (activate) gets sent
+ // NB: If this is enabled a doubleclick event (activate) gets sent
// on a successful search
gtk_tree_view_set_search_column(m_treeview, WXLISTBOX_DATACOLUMN);
- gtk_tree_view_set_search_equal_func(m_treeview,
+ gtk_tree_view_set_search_equal_func(m_treeview,
(GtkTreeViewSearchEqualFunc) gtk_listbox_searchequal_callback,
this,
NULL);
GtkTreeSelection* selection = gtk_tree_view_get_selection( m_treeview );
- gtk_tree_selection_set_select_function(selection,
+ gtk_tree_selection_set_select_function(selection,
(GtkTreeSelectionFunc)gtk_listitem_select_cb,
- this, NULL); //NULL == destroycb
+ this, NULL); //NULL == destroycb
GtkSelectionMode mode;
if (style & wxLB_MULTIPLE)
gtk_tree_selection_set_mode( selection, mode );
- //Handle sortable stuff
+ //Handle sortable stuff
if(style & wxLB_SORT)
{
//Setup sorting in ascending (wx) order
- gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(m_liststore),
- WXLISTBOX_DATACOLUMN,
+ gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(m_liststore),
+ WXLISTBOX_DATACOLUMN,
GTK_SORT_ASCENDING);
//Set the sort callback
gtk_container_add (GTK_CONTAINER (m_widget), GTK_WIDGET(m_treeview) );
-
+
gtk_widget_show( GTK_WIDGET(m_treeview) );
wxListBox::DoInsertItems(wxArrayString(n, choices), 0); // insert initial items
PostCreation(size);
SetBestSize(size); // need this too because this is a wxControlWithItems
- return TRUE;
+ return true;
}
wxListBox::~wxListBox()
{
- m_hasVMT = FALSE;
+ m_hasVMT = false;
Clear();
}
// adding items
// ----------------------------------------------------------------------------
-void wxListBox::GtkInsertItems(const wxArrayString& items,
+void wxListBox::GtkInsertItems(const wxArrayString& items,
void** clientData, int pos)
{
wxCHECK_RET( m_treeview != NULL, wxT("invalid listbox") );
if(!res)
{
wxLogSysError(wxT("internal wxListBox error in insertion"));
- return;
+ return;
}
pIter = &iter;
GtkTreeEntry* entry = gtk_tree_entry_new();
gtk_tree_entry_set_label(entry, wxConvUTF8.cWX2MB(label));
- gtk_tree_entry_set_destroy_func(entry,
+ gtk_tree_entry_set_destroy_func(entry,
(GtkTreeEntryDestroy)gtk_tree_entry_destroy_cb,
this);
#if wxUSE_CHECKLISTBOX && wxUSE_NATIVEGTKCHECKLIST
if (m_hasCheckBoxes)
{
- gtk_list_store_set(m_liststore, &itercur,
+ gtk_list_store_set(m_liststore, &itercur,
0, FALSE, //FALSE == not toggled
1, entry, -1);
}
else
#endif
- gtk_list_store_set(m_liststore, &itercur,
+ gtk_list_store_set(m_liststore, &itercur,
0, entry, -1);
g_object_unref(G_OBJECT(entry)); //liststore always refs :)
void* wxListBox::DoGetItemClientData( int n ) const
{
- wxCHECK_MSG( n >= 0 && n < wxListBox::GetCount(), NULL,
+ wxCHECK_MSG( n >= 0 && n < wxListBox::GetCount(), NULL,
wxT("Invalid index passed to GetItemClientData") );
GtkTreeEntry* entry = GtkGetEntry(n);
void wxListBox::DoSetItemClientData( int n, void* clientData )
{
- wxCHECK_RET( n >= 0 && n < wxListBox::GetCount(),
+ wxCHECK_RET( n >= 0 && n < wxListBox::GetCount(),
wxT("Invalid index passed to SetItemClientData") );
GtkTreeEntry* entry = GtkGetEntry(n);
label.Prepend(wxCHECKLBOX_STRING);
#endif // wxUSE_CHECKLISTBOX
- // RN: This may look wierd but the problem is that the TreeView
+ // RN: This may look wierd but the problem is that the TreeView
// doesn't resort or update when changed above and there is no real
// notification function...
void* userdata = gtk_tree_entry_get_userdata(entry);
aItems.Add(label);
GtkInsertItems(aItems, &userdata, n);
if (bWasSelected)
- wxListBox::GtkSetSelection(n, TRUE, TRUE);
+ wxListBox::GtkSetSelection(n, true, true);
}
wxString wxListBox::GetString( int n ) const
int wxListBox::GetSelection() const
{
wxCHECK_MSG( m_treeview != NULL, -1, wxT("invalid listbox"));
- wxCHECK_MSG( HasFlag(wxLB_SINGLE), -1,
+ wxCHECK_MSG( HasFlag(wxLB_SINGLE), -1,
wxT("must be single selection listbox"));
- GtkTreeIter iter;
+ GtkTreeIter iter;
GtkTreeSelection* selection = gtk_tree_view_get_selection(m_treeview);
- // only works on single-sel
+ // only works on single-sel
if (!gtk_tree_selection_get_selected(selection, NULL, &iter))
return -1;
aSelections.Empty();
int i = 0;
- GtkTreeIter iter;
+ GtkTreeIter iter;
GtkTreeSelection* selection = gtk_tree_view_get_selection(m_treeview);
if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(m_liststore), &iter))
bool wxListBox::IsSelected( int n ) const
{
- wxCHECK_MSG( m_treeview != NULL, FALSE, wxT("invalid listbox") );
+ wxCHECK_MSG( m_treeview != NULL, false, wxT("invalid listbox") );
GtkTreeSelection* selection = gtk_tree_view_get_selection(m_treeview);
GTK_TREE_MODEL(m_liststore),
&iter, NULL, //NULL = parent = get first
n );
-
- wxCHECK_MSG( res, FALSE, wxT("Invalid index") );
+
+ wxCHECK_MSG( res, false, wxT("Invalid index") );
return gtk_tree_selection_iter_is_selected(selection, &iter);
}
void wxListBox::DoSetSelection( int n, bool select )
{
- return GtkSetSelection(n, select, TRUE); //docs say no events here
+ return GtkSetSelection(n, select, true); //docs say no events here
}
void wxListBox::GtkSetSelection(int n, const bool select, const bool blockEvent)
else
gtk_tree_selection_unselect_iter(selection, &iter);
- m_blockEvent = FALSE;
+ m_blockEvent = false;
}
void wxListBox::DoSetFirstItem( int n )
{
// need to translate from master window since it is in client coords
gint binx, biny;
- gdk_window_get_geometry(gtk_tree_view_get_bin_window(m_treeview),
+ gdk_window_get_geometry(gtk_tree_view_get_bin_window(m_treeview),
&binx, &biny, NULL, NULL, NULL);
GtkTreePath* path;
if ( !gtk_tree_view_get_path_at_pos
(
- m_treeview,
+ m_treeview,
point.x - binx,
point.y - biny,
&path,
int lbWidth = 3 * cx;
int lbHeight = 10;
- // Get the visible area of the tree view (limit to the 10th item
+ // Get the visible area of the tree view (limit to the 10th item
// so that it isn't too big)
int count = GetCount();
if (count)
// make it too small neither
lbHeight = (cy+4) * wxMin(wxMax(count, 3), 10);
}
-
+
// Add room for the scrollbar
lbWidth += wxSystemSettings::GetMetric(wxSYS_VSCROLL_X);
// For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
-#include "wx/defs.h"
-
#if wxUSE_LISTBOX
#include "wx/listbox.h"
extern wxWindowGTK *g_focusWindow;
extern wxWindowGTK *g_focusWindowLast;
-static bool g_hasDoubleClicked = FALSE;
+static bool g_hasDoubleClicked = false;
//-----------------------------------------------------------------------------
// idle callback for SetFirstItem
if ( !win->m_hasFocus )
{
// not yet, notify it
- win->m_hasFocus = TRUE;
+ win->m_hasFocus = true;
wxChildFocusEvent eventChildFocus(win);
(void)win->GetEventHandler()->ProcessEvent(eventChildFocus);
// have focus already
if ( win->m_hasFocus )
{
- win->m_hasFocus = FALSE;
+ win->m_hasFocus = false;
wxFocusEvent event( wxEVT_KILL_FOCUS, win->GetId() );
event.SetEventObject( win );
(((listbox->GetWindowStyleFlag() & wxLB_MULTIPLE) != 0) ||
((listbox->GetWindowStyleFlag() & wxLB_EXTENDED) != 0)) )
{
- listbox->m_blockEvent = TRUE;
+ listbox->m_blockEvent = true;
int i;
for (i = 0; i < (int)listbox->GetCount(); i++)
if (i != sel)
gtk_list_unselect_item( GTK_LIST(listbox->m_list), i );
- listbox->m_blockEvent = FALSE;
+ listbox->m_blockEvent = false;
return false;
}
if (g_blockEventsOnDrag)
return FALSE;
- bool ret = FALSE;
+ bool ret = false;
if ((gdk_event->keyval == GDK_Tab) || (gdk_event->keyval == GDK_ISO_Left_Tab))
{
if ((gdk_event->keyval == GDK_Return) && (!ret))
{
// eat return in all modes
- ret = TRUE;
+ ret = true;
}
#if wxUSE_CHECKLISTBOX
if (sel != -1)
{
- ret = TRUE;
+ ret = true;
if (listbox->IsSelected( sel ))
gtk_list_unselect_item( listbox->m_list, sel );
{
m_list = (GtkList *) NULL;
#if wxUSE_CHECKLISTBOX
- m_hasCheckBoxes = FALSE;
+ m_hasCheckBoxes = false;
#endif // wxUSE_CHECKLISTBOX
}
long style, const wxValidator& validator,
const wxString &name )
{
- m_needParent = TRUE;
- m_acceptsFocus = TRUE;
+ m_needParent = true;
+ m_acceptsFocus = true;
m_prevSelection = 0; // or -1 ??
- m_blockEvent = FALSE;
+ m_blockEvent = false;
if (!PreCreation( parent, pos, size ) ||
!CreateBase( parent, id, pos, size, style, validator, name ))
{
wxFAIL_MSG( wxT("wxListBox creation failed") );
- return FALSE;
+ return false;
}
m_widget = gtk_scrolled_window_new( (GtkAdjustment*) NULL, (GtkAdjustment*) NULL );
PostCreation(size);
SetBestSize(size); // need this too because this is a wxControlWithItems
- return TRUE;
+ return true;
}
wxListBox::~wxListBox()
{
- m_hasVMT = FALSE;
+ m_hasVMT = false;
Clear();
{
// destroy the data (due to Robert's idea of using wxList<wxObject>
// and not wxList<wxClientData> we can't just say
- // m_clientList.DeleteContents(TRUE) - this would crash!
+ // m_clientList.DeleteContents(true) - this would crash!
wxList::compatibility_iterator node = m_clientList.GetFirst();
while ( node )
{
bool wxListBox::IsSelected( int n ) const
{
- wxCHECK_MSG( m_list != NULL, FALSE, wxT("invalid listbox") );
+ wxCHECK_MSG( m_list != NULL, false, wxT("invalid listbox") );
GList *target = g_list_nth( m_list->children, n );
- wxCHECK_MSG( target, FALSE, wxT("invalid listbox index") );
+ wxCHECK_MSG( target, false, wxT("invalid listbox index") );
return (GTK_WIDGET(target->data)->state == GTK_STATE_SELECTED) ;
}
{
wxCHECK_RET( m_list != NULL, wxT("invalid listbox") );
- m_blockEvent = TRUE;
+ m_blockEvent = true;
if (select)
{
else
gtk_list_unselect_item( m_list, n );
- m_blockEvent = FALSE;
+ m_blockEvent = false;
}
void wxListBox::DoSetFirstItem( int n )
bool wxListBox::IsOwnGtkWindow( GdkWindow *window )
{
- return TRUE;
+ return true;
#if 0
- if (m_widget->window == window) return TRUE;
+ if (m_widget->window == window) return true;
- if (GTK_WIDGET(m_list)->window == window) return TRUE;
+ if (GTK_WIDGET(m_list)->window == window) return true;
GList *child = m_list->children;
while (child)
{
GtkWidget *bin = GTK_WIDGET( child->data );
- if (bin->window == window) return TRUE;
+ if (bin->window == window) return true;
child = child->next;
}
- return FALSE;
+ return false;
#endif
}