/* selectable : Whether this node can be selected by the user. */ int clip_GTK_CTREENODESETSELECTABLE(ClipMachine * cm) { C_widget *cctree = _fetch_cw_arg(cm); C_object *cnode = _fetch_cobject(cm,_clip_spar(cm,2)); gboolean selectable = _clip_parl(cm,3); CHECKCWID(cctree,GTK_IS_CTREE); CHECKOPT2(2,MAP_t,NUMERIC_t); CHECKCOBJOPT(cnode,cnode->type==GTK_TYPE_CTREE_NODE); CHECKOPT(3,LOGICAL_t); if (_clip_parinfo(cm,3)==UNDEF_t) selectable = TRUE; gtk_ctree_node_set_selectable(GTK_CTREE(cctree->widget), GTK_CTREE_NODE(cnode->object), selectable); return 0; err: return 1; }
/* * Create a node that will contain all sampled symbol information. */ static void gdisp_createSymbolNode(Kernel_T *kernel, GtkWidget *parent, GtkWidget *tree, GtkCTreeNode *sampledSymbolNode, Symbol_T *symbol) { GtkCTreeNode *iNode = (GtkCTreeNode*)NULL; GList *iExtInfoItem = (GList*)NULL; Pixmap_T *pPixmap = (Pixmap_T*)NULL; gchar *iNames [GD_TREE_NB_COLUMNS] = { (gchar*)NULL, (gchar*)NULL }; gchar iInfo [128]; gchar iMin [128]; gchar iMax [128]; /* * The name of the node is the name of the symbol. */ iNames[0] = symbol->sInfo.name; iNames[1] = iInfo; if (symbol->sInfo.dimension == 1) { sprintf(iNames[1], "Type %s", gdisp_getTypeAsString(symbol)); } else { sprintf(iNames[1], "Type %s [%d]", gdisp_getTypeAsString(symbol), symbol->sInfo.dimension); } symbol->sNode = gtk_ctree_insert_node(GTK_CTREE(tree), sampledSymbolNode, (GtkCTreeNode*)NULL, /* no sibling */ iNames, GD_TREE_SPACING, (GdkPixmap*)NULL, (GdkBitmap*)NULL, (GdkPixmap*)NULL, (GdkBitmap*)NULL, FALSE, /* is a leave */ FALSE); /* is expanded */ gtk_ctree_node_set_row_data(GTK_CTREE(tree), symbol->sNode, (gpointer)symbol); /* * Insert information node : PERIOD. */ iNames[0] = "Period"; iNames[1] = iInfo; sprintf(iNames[1],"%d",symbol->sInfo.period); iNode = gtk_ctree_insert_node(GTK_CTREE(tree), symbol->sNode, /* symbol node is the parent */ (GtkCTreeNode*)NULL, /* no sibling node */ iNames, GD_TREE_SPACING, (GdkPixmap*)NULL, (GdkBitmap*)NULL, (GdkPixmap*)NULL, (GdkBitmap*)NULL, TRUE, /* is a leave */ FALSE); /* is expanded */ gtk_ctree_node_set_selectable(GTK_CTREE(tree), iNode, FALSE); /* not selectable */ /* * Insert information node : PHASE. */ iNames[0] = "Phase"; iNames[1] = iInfo; sprintf(iNames[1],"%d",symbol->sInfo.phase); iNode = gtk_ctree_insert_node(GTK_CTREE(tree), symbol->sNode, /* symbol node is the parent */ (GtkCTreeNode*)NULL, /* no sibling node */ iNames, GD_TREE_SPACING, (GdkPixmap*)NULL, (GdkBitmap*)NULL, (GdkPixmap*)NULL, (GdkBitmap*)NULL, TRUE, /* is a leave */ FALSE); /* is expanded */ gtk_ctree_node_set_selectable(GTK_CTREE(tree), iNode, FALSE); /* not selectable */ /* * Insert information node : RANGE. */ iNames[0] = "Range"; iNames[1] = iInfo; if (symbol->sMinimum > (- G_MAXDOUBLE)) { sprintf(iMin,"%f",symbol->sMinimum); } else { sprintf(iMin,"n/a"); } if (symbol->sMaximum < (+ G_MAXDOUBLE)) { sprintf(iMax,"%f",symbol->sMaximum); } else { sprintf(iMax,"n/a"); } sprintf(iNames[1],"[ %s .. %s ]",iMin,iMax); iNode = gtk_ctree_insert_node(GTK_CTREE(tree), symbol->sNode, /* symbol node is the parent */ (GtkCTreeNode*)NULL, /* no sibling node */ iNames, GD_TREE_SPACING, (GdkPixmap*)NULL, (GdkBitmap*)NULL, (GdkPixmap*)NULL, (GdkBitmap*)NULL, TRUE, /* is a leave */ FALSE); /* is expanded */ gtk_ctree_node_set_selectable(GTK_CTREE(tree), iNode, FALSE); /* not selectable */ /* * Insert information node : REFERENCE. */ iNames[0] = "Reference"; iNames[1] = iInfo; sprintf(iNames[1],"%d",symbol->sReference); iNode = gtk_ctree_insert_node(GTK_CTREE(tree), symbol->sNode, /* symbol node is the parent */ (GtkCTreeNode*)NULL, /* no sibling node */ iNames, GD_TREE_SPACING, (GdkPixmap*)NULL, (GdkBitmap*)NULL, (GdkPixmap*)NULL, (GdkBitmap*)NULL, TRUE, /* is a leave */ FALSE); /* is expanded */ gtk_ctree_node_set_selectable(GTK_CTREE(tree), iNode, FALSE); /* not selectable */ gtk_ctree_node_set_row_data(GTK_CTREE(tree), iNode, (gpointer)"sReference"); /* * Insert extended information. */ pPixmap = gdisp_getPixmapById(kernel, GD_PIX_info, parent); iExtInfoItem = g_list_first(symbol->sExtInfoList); while (iExtInfoItem != (GList*)NULL) { iNames[0] = ((gchar**)(iExtInfoItem->data))[0]; iNames[1] = ((gchar**)(iExtInfoItem->data))[1]; iNode = gtk_ctree_insert_node(GTK_CTREE(tree), symbol->sNode, /* the parent */ (GtkCTreeNode*)NULL, /* no sibling node */ iNames, GD_TREE_SPACING, pPixmap->pixmap, pPixmap->mask, pPixmap->pixmap, pPixmap->mask, TRUE, /* is a leave */ FALSE); /* is expanded */ gtk_ctree_node_set_selectable(GTK_CTREE(tree), iNode, FALSE); /* not selectable */ iExtInfoItem = g_list_next(iExtInfoItem); } }
/* * Create a node that will contain all provider information. */ static void gdisp_createProviderNode(Kernel_T *kernel, GtkWidget *parent, GtkWidget *tree, Provider_T *provider, GtkCTreeNode **providerNode, GtkCTreeNode **sampledSymbolNode) { gchar *pNames [GD_TREE_NB_COLUMNS] = { (gchar*)NULL, (gchar*)NULL }; GtkCTreeNode *iNode = (GtkCTreeNode*)NULL; GtkCTreeNode *sNode = (GtkCTreeNode*)NULL; Pixmap_T *pPixmap = (Pixmap_T*)NULL; /* * The name of the node is the URL of the provider. * Get back provider pixmap according to its identity. */ pNames[0] = provider->pUrl->str; pPixmap = gdisp_getProviderIdPixmap(kernel, parent, provider->pIdentity); provider->pNode = gtk_ctree_insert_node(GTK_CTREE(tree), (GtkCTreeNode*)NULL, /* parent */ (GtkCTreeNode*)NULL, /* sibling */ pNames, GD_TREE_SPACING, pPixmap->pixmap, pPixmap->mask, pPixmap->pixmap, pPixmap->mask, FALSE, /* is a leave */ TRUE); /* is expanded */ gtk_ctree_node_set_row_data(GTK_CTREE(tree), provider->pNode, (gpointer)provider); gtk_ctree_node_set_selectable(GTK_CTREE(tree), provider->pNode, FALSE); /* not selectable */ /* * Insert information node. */ pNames[0] = "Information"; pPixmap = gdisp_getPixmapById(kernel, GD_PIX_info, parent); iNode = gtk_ctree_insert_node(GTK_CTREE(tree), provider->pNode, /* provider is the parent */ (GtkCTreeNode*)NULL, /* no sibling node */ pNames, GD_TREE_SPACING, pPixmap->pixmap, pPixmap->mask, pPixmap->pixmap, pPixmap->mask, /* FIXME for the moment */ TRUE, /* is a leave */ FALSE); /* is expanded */ gtk_ctree_node_set_selectable(GTK_CTREE(tree), iNode, FALSE); /* not selectable */ /* * Insert sampled symbol node. */ pNames[0] = "Sampled Symbols"; sNode = gtk_ctree_insert_node(GTK_CTREE(tree), provider->pNode, /* provider is the parent */ (GtkCTreeNode*)NULL, /* no sibling node */ pNames, GD_TREE_SPACING, kernel->widgets.collapsedNodePixmap->pixmap, kernel->widgets.collapsedNodePixmap->mask, kernel->widgets.expandedNodePixmap->pixmap, kernel->widgets.expandedNodePixmap->mask, FALSE, /* is a leave */ FALSE); /* is expanded */ gtk_ctree_node_set_row_data(GTK_CTREE(tree), sNode, (gpointer)"sAnchor"); gtk_ctree_node_set_text(GTK_CTREE(tree), sNode, 0, /* column */ pNames[0]); gtk_ctree_node_set_selectable(GTK_CTREE(tree), sNode, FALSE); /* not selectable */ if (gdisp_getProviderNumber(kernel) == 1) { /* * Expand that node if there is only one provider. */ gtk_ctree_expand(GTK_CTREE(tree),sNode); } /* * Return. */ *providerNode = provider->pNode; *sampledSymbolNode = sNode; }