📄 gtktreeitem.c
字号:
GdkEventButton *event){ g_return_val_if_fail (widget != NULL, FALSE); g_return_val_if_fail (GTK_IS_TREE_ITEM (widget), FALSE); g_return_val_if_fail (event != NULL, FALSE); if (event->type == GDK_BUTTON_PRESS && GTK_WIDGET_IS_SENSITIVE(widget) && !GTK_WIDGET_HAS_FOCUS (widget)) gtk_widget_grab_focus (widget); return FALSE;}static gintgtk_tree_item_expose (GtkWidget *widget, GdkEventExpose *event){ GdkEventExpose child_event; GtkBin *bin; g_return_val_if_fail (widget != NULL, FALSE); g_return_val_if_fail (GTK_IS_TREE_ITEM (widget), FALSE); g_return_val_if_fail (event != NULL, FALSE); if (GTK_WIDGET_DRAWABLE (widget)) { bin = GTK_BIN (widget); gtk_tree_item_paint (widget, &event->area); child_event = *event; if (bin->child && GTK_WIDGET_NO_WINDOW (bin->child) && gtk_widget_intersect (bin->child, &event->area, &child_event.area)) gtk_widget_event (bin->child, (GdkEvent*) &child_event); } return FALSE;}static gintgtk_tree_item_focus_in (GtkWidget *widget, GdkEventFocus *event){ g_return_val_if_fail (widget != NULL, FALSE); g_return_val_if_fail (GTK_IS_TREE_ITEM (widget), FALSE); g_return_val_if_fail (event != NULL, FALSE); GTK_WIDGET_SET_FLAGS (widget, GTK_HAS_FOCUS); gtk_widget_draw_focus (widget); return FALSE;}static gintgtk_tree_item_focus_out (GtkWidget *widget, GdkEventFocus *event){ g_return_val_if_fail (widget != NULL, FALSE); g_return_val_if_fail (GTK_IS_TREE_ITEM (widget), FALSE); g_return_val_if_fail (event != NULL, FALSE); GTK_WIDGET_UNSET_FLAGS (widget, GTK_HAS_FOCUS); gtk_widget_draw_focus (widget); return FALSE;}static voidgtk_real_tree_item_select (GtkItem *item){ GtkTreeItem *tree_item; GtkWidget *widget; g_return_if_fail (item != NULL); g_return_if_fail (GTK_IS_TREE_ITEM (item)); tree_item = GTK_TREE_ITEM (item); widget = GTK_WIDGET (item); gtk_widget_set_state (GTK_WIDGET (item), GTK_STATE_SELECTED); if (!widget->parent || GTK_TREE (widget->parent)->view_mode == GTK_TREE_VIEW_LINE) gtk_widget_set_state (GTK_TREE_ITEM (item)->pixmaps_box, GTK_STATE_SELECTED);}static voidgtk_real_tree_item_deselect (GtkItem *item){ GtkTreeItem *tree_item; GtkWidget *widget; g_return_if_fail (item != NULL); g_return_if_fail (GTK_IS_TREE_ITEM (item)); tree_item = GTK_TREE_ITEM (item); widget = GTK_WIDGET (item); gtk_widget_set_state (widget, GTK_STATE_NORMAL); if (!widget->parent || GTK_TREE (widget->parent)->view_mode == GTK_TREE_VIEW_LINE) gtk_widget_set_state (tree_item->pixmaps_box, GTK_STATE_NORMAL);}static voidgtk_real_tree_item_toggle (GtkItem *item){ g_return_if_fail (item != NULL); g_return_if_fail (GTK_IS_TREE_ITEM (item)); if(!GTK_WIDGET_IS_SENSITIVE(item)) return; if (GTK_WIDGET (item)->parent && GTK_IS_TREE (GTK_WIDGET (item)->parent)) gtk_tree_select_child (GTK_TREE (GTK_WIDGET (item)->parent), GTK_WIDGET (item)); else { /* Should we really bother with this bit? A listitem not in a list? * -Johannes Keukelaar * yes, always be on the safe side! * -timj */ if (GTK_WIDGET (item)->state == GTK_STATE_SELECTED) gtk_widget_set_state (GTK_WIDGET (item), GTK_STATE_NORMAL); else gtk_widget_set_state (GTK_WIDGET (item), GTK_STATE_SELECTED); }}static voidgtk_real_tree_item_expand (GtkTreeItem *tree_item){ GtkTree* tree; g_return_if_fail (tree_item != NULL); g_return_if_fail (GTK_IS_TREE_ITEM (tree_item)); if (tree_item->subtree && !tree_item->expanded) { tree = GTK_TREE (GTK_WIDGET (tree_item)->parent); /* hide subtree widget */ gtk_widget_show (tree_item->subtree); /* hide button '+' and show button '-' */ if (tree_item->pixmaps_box) { gtk_container_remove (GTK_CONTAINER (tree_item->pixmaps_box), tree_item->plus_pix_widget); gtk_container_add (GTK_CONTAINER (tree_item->pixmaps_box), tree_item->minus_pix_widget); } if (tree->root_tree) gtk_widget_queue_resize (GTK_WIDGET (tree->root_tree)); tree_item->expanded = TRUE; }}static voidgtk_real_tree_item_collapse (GtkTreeItem *tree_item){ GtkTree* tree; g_return_if_fail (tree_item != NULL); g_return_if_fail (GTK_IS_TREE_ITEM (tree_item)); if (tree_item->subtree && tree_item->expanded) { tree = GTK_TREE (GTK_WIDGET (tree_item)->parent); /* hide subtree widget */ gtk_widget_hide (tree_item->subtree); /* hide button '-' and show button '+' */ if (tree_item->pixmaps_box) { gtk_container_remove (GTK_CONTAINER (tree_item->pixmaps_box), tree_item->minus_pix_widget); gtk_container_add (GTK_CONTAINER (tree_item->pixmaps_box), tree_item->plus_pix_widget); } if (tree->root_tree) gtk_widget_queue_resize (GTK_WIDGET (tree->root_tree)); tree_item->expanded = FALSE; }}static voidgtk_tree_item_destroy (GtkObject *object){ GtkTreeItem* item; GtkWidget* child; g_return_if_fail (object != NULL); g_return_if_fail (GTK_IS_TREE_ITEM (object));#ifdef TREE_DEBUG g_message("+ gtk_tree_item_destroy [object %#x]\n", (int)object);#endif /* TREE_DEBUG */ item = GTK_TREE_ITEM(object); /* free sub tree if it exist */ child = item->subtree; if (child) { gtk_widget_ref (child); gtk_widget_unparent (child); gtk_widget_destroy (child); gtk_widget_unref (child); item->subtree = NULL; } /* free pixmaps box */ child = item->pixmaps_box; if (child) { gtk_widget_ref (child); gtk_widget_unparent (child); gtk_widget_destroy (child); gtk_widget_unref (child); item->pixmaps_box = NULL; } /* destroy plus pixmap */ if (item->plus_pix_widget) { gtk_widget_destroy (item->plus_pix_widget); gtk_widget_unref (item->plus_pix_widget); item->plus_pix_widget = NULL; } /* destroy minus pixmap */ if (item->minus_pix_widget) { gtk_widget_destroy (item->minus_pix_widget); gtk_widget_unref (item->minus_pix_widget); item->minus_pix_widget = NULL; } /* By removing the pixmaps here, and not in unrealize, we depend on * the fact that a widget can never change colormap or visual. */ gtk_tree_item_remove_pixmaps (item); GTK_OBJECT_CLASS (parent_class)->destroy (object); #ifdef TREE_DEBUG g_message("- gtk_tree_item_destroy\n");#endif /* TREE_DEBUG */}voidgtk_tree_item_remove_subtree (GtkTreeItem* item) { g_return_if_fail (item != NULL); g_return_if_fail (GTK_IS_TREE_ITEM(item)); g_return_if_fail (item->subtree != NULL); if (GTK_TREE (item->subtree)->children) { /* The following call will remove the children and call * gtk_tree_item_remove_subtree() again. So we are done. */ gtk_tree_remove_items (GTK_TREE (item->subtree), GTK_TREE (item->subtree)->children); return; } if (GTK_WIDGET_MAPPED (item->subtree)) gtk_widget_unmap (item->subtree); gtk_widget_unparent (item->subtree); if (item->pixmaps_box) gtk_widget_hide (item->pixmaps_box); item->subtree = NULL; if (item->expanded) { item->expanded = FALSE; if (item->pixmaps_box) { gtk_container_remove (GTK_CONTAINER (item->pixmaps_box), item->minus_pix_widget); gtk_container_add (GTK_CONTAINER (item->pixmaps_box), item->plus_pix_widget); } }}static voidgtk_tree_item_map (GtkWidget *widget){ GtkBin *bin; GtkTreeItem* item; g_return_if_fail (widget != NULL); g_return_if_fail (GTK_IS_TREE_ITEM (widget)); bin = GTK_BIN (widget); item = GTK_TREE_ITEM(widget); GTK_WIDGET_SET_FLAGS (widget, GTK_MAPPED); if(item->pixmaps_box && GTK_WIDGET_VISIBLE (item->pixmaps_box) && !GTK_WIDGET_MAPPED (item->pixmaps_box)) gtk_widget_map (item->pixmaps_box); if (bin->child && GTK_WIDGET_VISIBLE (bin->child) && !GTK_WIDGET_MAPPED (bin->child)) gtk_widget_map (bin->child); gdk_window_show (widget->window);}static voidgtk_tree_item_unmap (GtkWidget *widget){ GtkBin *bin; GtkTreeItem* item; g_return_if_fail (widget != NULL); g_return_if_fail (GTK_IS_TREE_ITEM (widget)); GTK_WIDGET_UNSET_FLAGS (widget, GTK_MAPPED); bin = GTK_BIN (widget); item = GTK_TREE_ITEM(widget); gdk_window_hide (widget->window); if(item->pixmaps_box && GTK_WIDGET_VISIBLE (item->pixmaps_box) && GTK_WIDGET_MAPPED (item->pixmaps_box)) gtk_widget_unmap (bin->child); if (bin->child && GTK_WIDGET_VISIBLE (bin->child) && GTK_WIDGET_MAPPED (bin->child)) gtk_widget_unmap (bin->child);}static voidgtk_tree_item_forall (GtkContainer *container, gboolean include_internals, GtkCallback callback, gpointer callback_data){ GtkBin *bin; GtkTreeItem *tree_item; g_return_if_fail (container != NULL); g_return_if_fail (GTK_IS_TREE_ITEM (container)); g_return_if_fail (callback != NULL); bin = GTK_BIN (container); tree_item = GTK_TREE_ITEM (container); if (bin->child) (* callback) (bin->child, callback_data); if (include_internals && tree_item->subtree) (* callback) (tree_item->subtree, callback_data);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -