gem-graph-client/tree (learning)/(mes notes)

135 lines
6.6 KiB
Plaintext

src/libide/tree/ide-tree.c (597) static void ide_tree_init (IdeTree *self) {.}
src/libide/tree/ide-tree-model.c (663) static void tree_model_iface_init (GtkTreeModelIface *iface) {.}
src/libide/tree/ide-tree-node.c (31) Since: 3.32
* The #IdeTreeNode class is used to represent an item that should be displayed in the tree of the Ide application.
* The #IdeTreeAddin plugins create and maintain these nodes during the lifetime of the program.
* Plugins that want to add items to the tree should implement the #IdeTreeAddin interface and register it during plugin initialization.
src/libide/tree/ide-tree-node.c (127) enum {
PROP_0,
PROP_CHILDREN_POSSIBLE,
PROP_DESTROY_ITEM,
PROP_DISPLAY_NAME,
PROP_EXPANDED_ICON,
PROP_EXPANDED_ICON_NAME,
PROP_HAS_ERROR,
PROP_ICON,
PROP_ICON_NAME,
PROP_IS_HEADER,
PROP_ITEM,
PROP_RESET_ON_COLLAPSE,
PROP_TAG,
PROP_USE_MARKUP,
N_PROPS
};
src/libide/tree/ide-tree-node.c (48) struct _IdeTreeNode
{
GObject parent_instance;
/* A pointer to the model, which is only set on the root node. */
IdeTreeModel *model;
/* The following are fields containing the values for various properties on the tree node.
* Usually, icon, display_name, and item will be set on all nodes. */
GIcon *icon;
GIcon *expanded_icon;
gchar *display_name;
GObject *item;
gchar *tag;
GList *emblems;
/* The following items are used to maintain a tree structure of nodes for which we can use O(1) operations.
* The link is inserted into the parents children queue. The parent pointer is unowned, and set by the parent (cleared upon removal).
* This also allows maintaining the tree structure with zero additional allocations beyond the nodes themselves.
*/
IdeTreeNode *parent;
GQueue children;
GList link;
/* Foreground and Background colors */
GdkRGBA background;
GdkRGBA foreground;
/* Flags for state cell renderer */
IdeTreeNodeFlags flags;
/* When did we start loading? This is used to avoid drawing "Loading..." when the tree loads really quickly. Otherwise, we risk looking janky when the loads are quite fast. */
gint64 started_loading_at;
/* If we're currently loading */
guint is_loading : 1;
/* If the node is a header (bold, etc) */
guint is_header : 1;
/* If this is a synthesized empty node */
guint is_empty : 1;
/* If there are errors associated with the node's item */
guint has_error : 1;
/* If the node maybe has children */
guint children_possible : 1;
/* If this node needs to have the children built */
guint needs_build_children : 1;
/* If true, we remove all children on collapse */
guint reset_on_collapse : 1;
/* If pango markup should be used */
guint use_markup : 1;
/* If true, we use ide_clear_and_destroy_object() */
guint destroy_item : 1;
/* If colors are set */
guint background_set : 1;
guint foreground_set : 1;
};
src/libide/tree/ide-tree-node.c (1763) /* If the node is not on screen, we need to animate until we get there. */
src/libide/tree/ide-tree-node.c (1776) /* FIXME: Time period comes from gtk animation duration. Not curently available in pubic API.
* We need to be greater than the max timeout it could take to move, since we must have it on screen by then.
* One alternative might be to check the result and if we are still not on screen, then just pin it to a row-height from the top or bottom.
/----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------/
src/libide/tree/ide-tree-addin.c (108) /* ide_tree_addin_build_children_async() Since: 3.32
* This function is called when building the children of a node.
* This happens when expanding an node that might have children, or building the root node.
* You may want to use ide_tree_node_holds() to determine if the node contains an item that you are interested in.
* This function will call the synchronous form of IdeTreeAddin.build_children() if no asynchronous form is available.
src/libide/tree/ide-tree-addin.c (143) /* ide_tree_addin_build_children_finish() Since: 3.32
* Completes an asynchronous request to ide_tree_addin_build_children_async().
* Returns: %TRUE if successful; otherwise %FALSE and @error is set.
src/libide/tree/ide-tree-addin.c (167) /* ide_tree_addin_build_node() Since: 3.32
* This function is called when preparing a node for display in the tree.
* Addins should adjust any state on the node that makes sense based on the addin.
* You may want to use ide_tree_node_holds() to determine if the node contains an item that you are interested in.
src/libide/tree/ide-tree-addin.c (194) /* ide_tree_addin_activated() Since: 3.32
* This function is called when a node has been activated in the tree and allows for the addin to perform any necessary operations in response to that.
* If the addin performs an action based on the activation request, then it should return %TRUE from this function so that no further addins may respond to the action.
* Returns: %TRUE if the activation was handled, otherwise %FALSE
/----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------/
src/libide/tree/ide-cell-renderer-status (29) #define CELL_HEIGHT 16, CELL_WIDTH 16, RPAD 8, LPAD 3
/----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------/
src/libide/gui/ide-cell-renderer-fancy.c (166)
HACK: @width is the min_width returned in our get_preferred_width() function. That results in pretty bad values here, so we will do this by assuming we are the only widget in the tree view.
* This makes this cell very much not usable for generic situations, but it does make it so we can do text wrapping without resorting to GtkListBox *for our exact usecase only*.
* The problem here is that we require the widget to already be realized and allocated and that we are the only renderer within the only column (and also, in a treeview) without exotic styling.
* If we get something absurdly small (like 50) that is because we are hitting our minimum size of (xpad * 2).
* So this works around the issue and tries to get something reasonable with wrapping at the 200px mark (our ~default width for panels).
* Furthermore, we need to queue a resize when the column size changes (as it will from resizing the widget). So the tree view must also call gtk_tree_view_column_queue_resize().