int treeNodeCalcPos(Ihandle* h, int *x, int *y, int *text_x) { int err; TtreePtr tree=(TtreePtr)tree_data(h); Node node = (Node)tree_root(tree); float posy = IupGetFloat(h, IUP_POSY); float dy = IupGetFloat(h, IUP_DY); float posx = IupGetFloat(h, IUP_POSX); float dx = IupGetFloat(h, IUP_DX); CdActivate(tree,err); *y = (int)((1.0 + posy/dy)*(YmaxCanvas(tree)-TREE_TOP_MARGIN)); while(node != tree_selected(tree)) { if( node_visible(node) == YES ) *y -= NODE_Y; node = node_next(node); if (node == NULL) return 0; } *y -= NODE_Y; *x = (int)(TREE_LEFT_MARGIN - (XmaxCanvas(tree)-NODE_X)*posx/dx) + NODE_X * node_depth(node); /* if node has a text associated to it... */ *text_x = 0; if(node_name(node)) { /* Calculates its dimensions */ iupdrvStringSize(tree->self, node_name(node), text_x, NULL); } return 1; }
state_t pback_play_leaf(pback_t *pback, node_t *leaf, int8_t mode) { state_t state; if (lists.newleaf != NULL) info("pback_play_leaf(): lists.newleaf was set. Somewhere, a decoder will die.\n"); if (node_visible(leaf, TRAV_ALL)) { if ((state = pback_start_strands(pback, leaf, mode)) == OK) { /* success */ } else info("pback_play_leaf(): error in decoder or output. hopefully things should clean themselves up...\n"); } else { error("pback_play_leaf(): leaf was invisible.\n"); state = ERR_VIS; } return state; }