X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/e895ec451398f039d577e3e77b0b626531c901d9..b46e869676813430c8fbf0d5828005f1b898d985:/src/gtk/treectrl.cpp diff --git a/src/gtk/treectrl.cpp b/src/gtk/treectrl.cpp index 04066ad6f5..8768e4e867 100644 --- a/src/gtk/treectrl.cpp +++ b/src/gtk/treectrl.cpp @@ -32,8 +32,11 @@ //static void wxConvertToGtkTreeItem(wxTreeCtrl *owner, wxTreeItem& info, GtkTreeItem **gtkItem); //static void wxConvertFromGtkTreeItem(wxTreeItem& info, GtkTreeItem *gtkItem); + static void gtk_treectrl_count_callback (GtkWidget *widget, gpointer data); static void gtk_treectrl_first_selected_callback(GtkWidget *widget, gpointer data); +static void gtk_treectrl_first_visible_callback(GtkWidget *widget, gpointer data); + // static void gtk_treectrl_next_callback (GtkWidget *widget, gpointer data); // static void gtk_treectrl_next_visible_callback (GtkWidget *widget, gpointer data); // static void gtk_treectrl_next_selected_callback (GtkWidget *widget, gpointer data); @@ -124,13 +127,15 @@ printf("3\n"); printf("4\n"); gtk_container_add(GTK_CONTAINER(m_widget), GTK_WIDGET(m_tree)); printf("5\n"); -// gtk_widget_set_parent(GTK_WIDGET(m_tree), m_widget); -printf("6\n"); gtk_widget_show(GTK_WIDGET(m_tree)); SetName(name); SetValidator(validator); +printf("Robert's new insertion code :-)\n"); + m_parent->AddChild( this ); + (m_parent->m_insertCallback)( m_parent, this ); + printf("postcreate\n"); PostCreation(); @@ -250,8 +255,7 @@ void wxTreeCtrl::SetItemData(const wxTreeItemId& item, wxTreeItemData *data) { } bool wxTreeCtrl::IsVisible(const wxTreeItemId& item) const { -#warning "Need to implement IsVisible" - return FALSE; + return GTK_WIDGET_VISIBLE(GTK_TREE_ITEM((GtkTreeItem *)item)); } bool wxTreeCtrl::ItemHasChildren(const wxTreeItemId& item) const { @@ -370,18 +374,77 @@ wxTreeItemId wxTreeCtrl::GetPrevSibling(const wxTreeItemId& item) const { return GTK_TREE_ITEM(g_list_previous(g_list_find(GTK_TREE(parent)->children, p))->data); } +static void gtk_treectrl_first_visible_callback(GtkWidget *widget, gpointer data) { + GtkTreeItem *p = (*((GtkTreeItem **)data)); + + GtkTree *tree = GTK_TREE(GTK_TREE_ITEM(widget)->subtree); + + if (tree->children != NULL) { + guint len = g_list_length(tree->children); + for (guint i=0; ichildren, i)->data)))) { + p = GTK_TREE_ITEM((GtkTreeItem *)g_list_nth(tree->children, i)->data); + return; + } + } + } + + if (GTK_IS_CONTAINER(widget)) + gtk_container_foreach(GTK_CONTAINER(widget), gtk_treectrl_first_visible_callback, data); +} + wxTreeItemId wxTreeCtrl::GetFirstVisibleItem() const { -#warning "Need to implement GetFirstVisibleItem" - return NULL; + GtkTreeItem *p = NULL; + + if (m_anchor == NULL) + return NULL; + + gtk_treectrl_first_visible_callback(GTK_WIDGET(m_anchor), &p); + + return p; } wxTreeItemId wxTreeCtrl::GetNextVisible(const wxTreeItemId& item) const { -#warning "Need to implement GetNextVisible" + GtkTreeItem *p = (GtkTreeItem *)item; + GtkTree *parent = GTK_TREE(GTK_WIDGET(p)->parent); + GtkTreeItem *q; + + if (!GTK_IS_TREE(parent)) + return NULL; + + if (parent->children == NULL) + return NULL; + + q = GTK_TREE_ITEM(g_list_next(g_list_find(GTK_TREE(parent)->children, p))->data); + + while (q != p) { + q = GTK_TREE_ITEM(g_list_next(g_list_find(GTK_TREE(parent)->children, q))->data); + if (GTK_WIDGET_VISIBLE(GTK_WIDGET(q))) + return q; + } + return NULL; } wxTreeItemId wxTreeCtrl::GetPrevVisible(const wxTreeItemId& item) const { -#warning "Need to implement GetPrevVisible" + GtkTreeItem *p = (GtkTreeItem *)item; + GtkTree *parent = GTK_TREE(GTK_WIDGET(p)->parent); + GtkTreeItem *q; + + if (!GTK_IS_TREE(parent)) + return NULL; + + if (parent->children == NULL) + return NULL; + + q = GTK_TREE_ITEM(g_list_previous(g_list_find(GTK_TREE(parent)->children, p))->data); + + while (q != p) { + q = GTK_TREE_ITEM(g_list_previous(g_list_find(GTK_TREE(parent)->children, q))->data); + if (GTK_WIDGET_VISIBLE(GTK_WIDGET(q))) + return q; + } + return NULL; } @@ -532,8 +595,28 @@ void wxTreeCtrl::Toggle(const wxTreeItemId& item) { gtk_tree_item_expand(GTK_TREE_ITEM((GtkTreeItem *)item)); } +static void gtk_treectrl_unselect_callback(GtkWidget *widget, gpointer data) { + GtkTreeItem *p; + + GtkTree *tree = GTK_TREE(GTK_TREE_ITEM(widget)->subtree); + + if (tree->selection != NULL) { + guint len = g_list_length(tree->selection); + for (guint i=0; iselection, i)->data); + gtk_tree_unselect_child(tree, GTK_WIDGET(p)); + } + } + + if (GTK_IS_CONTAINER(widget)) + gtk_container_foreach(GTK_CONTAINER(widget), gtk_treectrl_unselect_callback, data); +} + void wxTreeCtrl::Unselect() { -#warning "Need to implement Unselect" + if (m_anchor == NULL) + return; + + gtk_treectrl_unselect_callback(GTK_WIDGET(m_anchor), NULL); } void wxTreeCtrl::SelectItem(const wxTreeItemId& item) { @@ -555,7 +638,23 @@ wxTextCtrl* wxTreeCtrl::EditLabel(const wxTreeItemId& item, wxClassInfo* textControlClass) { wxASSERT( textControlClass->IsKindOf(CLASSINFO(wxTextCtrl)) ); #warning "Need to implement EditLabel" - return m_textCtrl; +/* + char *s; + m_editItem = item; + + GtkLabel *m_label = (GtkLabel *)gtk_object_get_data(GTK_OBJECT((GtkTreeItem *)item), "w_label"); + gtk_label_get(m_label, &s); + + m_textCtrl = new wxTextCtrl(this, -1, s); +// m_textCtrl->SetValue(s); + + gtk_object_set_data(GTK_OBJECT((GtkTreeItem *)item), "w_edit", m_textCtrl->m_widget); + + gtk_container_remove(GTK_CONTAINER((GtkTreeItem *)item), GTK_WIDGET(m_label)); + gtk_container_add(GTK_CONTAINER((GtkTreeItem *)item), m_textCtrl->m_widget); + +*/ + return m_textCtrl; } wxTextCtrl* wxTreeCtrl::GetEditControl() const { @@ -564,6 +663,18 @@ wxTextCtrl* wxTreeCtrl::GetEditControl() const { void wxTreeCtrl::EndEditLabel(const wxTreeItemId& item, bool discardChanges) { #warning "Need to implement EndEditLabel" +/* + GtkLabel *m_label = (GtkLabel *)gtk_object_get_data(GTK_OBJECT((GtkTreeItem *)m_editItem), "w_label"); + gtk_label_set(m_label, m_textCtrl->GetValue()); + + gtk_object_remove_data(GTK_OBJECT((GtkTreeItem *)m_editItem), "w_edit"); + + gtk_container_remove(GTK_CONTAINER((GtkTreeItem *)m_editItem), m_textCtrl->m_widget); + gtk_container_add(GTK_CONTAINER((GtkTreeItem *)m_editItem), GTK_WIDGET(m_label)); + + delete m_textCtrl; + m_textCtrl = NULL; +*/ } void wxTreeCtrl::ExpandItem(const wxTreeItemId& item, int action) {