/* Finds the very last branch of curr_root, resets vars */ void GLUI_TreePanel::descendBranch(GLUI_Panel *root) { if (root) resetToRoot(root); else resetToRoot(curr_root); if (curr_branch != NULL && curr_branch != ((GLUI_Panel *)this)) { if (dynamic_cast<GLUI_Tree*>(curr_root)) ((GLUI_Tree *)curr_root)->set_current(false); descendBranch(curr_branch); } }
/* Goes up one level, resets curr_root and curr_branch to parents*/ void GLUI_TreePanel::fb(GLUI_Tree *branch) { if (((GLUI_Panel *)branch) == ((GLUI_Panel *)this)) return; if (((GLUI_Panel *)curr_branch) == ((GLUI_Panel *)this)) { resetToRoot(); return; } if (((GLUI_Panel *)curr_root) == ((GLUI_Panel *)this)) { resetToRoot(); return; } if (branch != NULL) { if ( branch->dynamicCastGLUI_Tree() ) ((GLUI_Tree *)branch)->set_current(false); curr_branch = (GLUI_Tree *)branch->next(); curr_root = (GLUI_Panel *)branch->parent(); if (curr_branch == NULL && (curr_root->collapsed_node).first_child() != NULL) curr_branch = (GLUI_Tree *)(curr_root->collapsed_node).first_child(); if ( curr_root->dynamicCastGLUI_Tree() ) ((GLUI_Tree *)curr_root)->set_current(true); } else { if (curr_root != NULL) { /* up one parent */ if (curr_root->dynamicCastGLUI_Tree()) ((GLUI_Tree *)curr_root)->set_current(false); curr_branch = (GLUI_Tree *) curr_root->next(); curr_root = (GLUI_Panel *) curr_root->parent(); if (curr_branch == NULL && (curr_root->collapsed_node).first_child() != NULL) curr_branch = (GLUI_Tree *)(curr_root->collapsed_node).first_child(); if (curr_root->dynamicCastGLUI_Tree()) ((GLUI_Tree *)curr_root)->set_current(true); } } //refresh(); }
/* Deletes the curr_root */ void GLUI_TreePanel::db(GLUI_Tree *root) { GLUI_Tree *temp_branch; GLUI_Panel *temp_root; if (((GLUI_Control *)root) == ((GLUI_Control *)this)) return; if (root != NULL) { curr_root = (GLUI_Tree *)root; curr_branch = NULL; } if (curr_root == NULL || ((GLUI_Panel *)curr_root) == ((GLUI_Panel *)this)) { resetToRoot(); return; } temp_branch = (GLUI_Tree *)curr_root->next(); /* Next branch, if any */ temp_root = (GLUI_Panel *)curr_root->parent(); /* new root */ curr_root->unlink(); delete curr_root; curr_branch = (GLUI_Tree *) temp_branch; curr_root = (GLUI_Panel *) temp_root; if (dynamic_cast<GLUI_Tree*>(curr_root)) ((GLUI_Tree *)curr_root)->open(); if ((format & GLUI_TREEPANEL_DISABLE_DEEPEST_BAR) == GLUI_TREEPANEL_DISABLE_DEEPEST_BAR) { if (dynamic_cast<GLUI_Tree*>(curr_root) && ((GLUI_Tree *)curr_root->next()) == NULL) ((GLUI_Tree *)curr_root)->disable_bar(); } //refresh(); }
void GLUI_TreePanel::next() { if (curr_root == NULL) resetToRoot(this); if (curr_branch == NULL && (curr_root->collapsed_node).first_child() != NULL) curr_branch = (GLUI_Tree *)(curr_root->collapsed_node).first_child(); if (curr_branch != NULL && curr_branch != ((GLUI_Panel *)this)) { /* Descend into branch */ if (dynamic_cast<GLUI_Tree*>(curr_root)) ((GLUI_Tree *)curr_root)->set_current(false); resetToRoot(curr_branch); } else if (curr_branch == NULL) { fb(NULL); /* Backup and move on */ } }
void GLUI_TreePanel::expand_all() { GLUI_Panel *saved_root = curr_root; GLUI_Tree *saved_branch = curr_branch; resetToRoot(this); if (dynamic_cast<GLUI_Tree*>(curr_root)) ((GLUI_Tree*)curr_root)->open(); next(); while (curr_root != NULL && curr_branch != this->first_child()) { if (dynamic_cast<GLUI_Tree*>(curr_root)) ((GLUI_Tree*)curr_root)->open(); next(); } curr_root = saved_root; curr_branch = saved_branch; }
void GLUI_TreePanel::update_all() { printf("GLUI_TreePanel::update_all() doesn't work yet. - JVK\n"); return; GLUI_Panel *saved_root = curr_root; GLUI_Tree *saved_branch = curr_branch; root_children = 0; resetToRoot(this); if (curr_branch && dynamic_cast<GLUI_Tree*>(curr_branch)) formatNode((GLUI_Tree *)curr_branch); next(); while (curr_root && curr_branch != this->first_child()) { if (curr_branch && dynamic_cast<GLUI_Tree*>(curr_branch)) { formatNode((GLUI_Tree *)curr_branch); } next(); } curr_root = saved_root; curr_branch = saved_branch; }
/* Adds branch to curr_root */ GLUI_Tree *GLUI_TreePanel::ab(const char *name, GLUI_Tree *root) { GLUI_Tree *temp; if (root != NULL) { resetToRoot(root); } temp = new GLUI_Tree(curr_root, name); initNode(temp); formatNode(temp); curr_root = temp; curr_branch = NULL; /* Currently at leaf */ if (dynamic_cast<GLUI_Tree*>(temp)) ((GLUI_Tree *)temp)->set_current(true); //refresh(); // glui->deactivate_current_control(); //glui->activate_control( temp, GLUI_ACTIVATE_TAB ); return temp; }
void GLUI_TreePanel::collapse_all() { GLUI_Panel *saved_root = curr_root; GLUI_Tree *saved_branch = curr_branch; resetToRoot(this); next(); while (curr_root != NULL && curr_branch != this->first_child()) { if (dynamic_cast<GLUI_Tree*>(curr_root) && curr_branch == NULL) { /* we want to close everything leaf-first */ ((GLUI_Tree*)curr_root)->close(); /* Rather than simply next(), we need to manually move the curr_root because this node has been moved to the collapsed_node list */ curr_branch = (GLUI_Tree *)curr_root->next(); curr_root = (GLUI_Panel *)curr_root->parent(); } else next(); } curr_root = saved_root; curr_branch = saved_branch; }