void OptimiseBoolTree (bool_tree_node * parse_tree, TermList * tl, int type) { switch (type) { case 1: /* --- sorts for and of or-terms --- */ PermeateNots (parse_tree); TF_Idempotent (parse_tree); CollapseTree (parse_tree); DiffTree (parse_tree); MarkOrTerms (parse_tree, tl); AndOrSort (parse_tree, tl); break; case 2: /* --- put into DNF --- */ PermeateNots (parse_tree); TF_Idempotent (parse_tree); DNF_Distribute (parse_tree); CollapseTree (parse_tree); AndSortDNF (parse_tree, tl); DiffDNF (parse_tree); break; default: /* --- do nothing --- */ break; } /*switch */ } /*OptimiseBoolTree */
void CMultiSelTreeCtrl::OnItemExpanding(NMHDR* pNMHDR, LRESULT* pResult) { NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR; HTREEITEM parent=m_LastParent; while( 1 ) { // If expanding/collapsing node is a parent of selected items, // unselect all. // No need to check pNMTreeView->action, since no items will // be selected under parent if expanding, and all must be // cleared while deleting // if(pNMTreeView->itemNew.hItem == parent) { UnselectAll(); break; } if(parent == NULL || parent == TVI_ROOT) break; parent=GetParentItem(parent); } // whenever we expand a folder, we have to call both p4 dirs // and p4 fstat for that subdirectory. ExpandTree is a // virtual function in depotview that does this. // if ( pNMTreeView->action == TVE_EXPAND ) ExpandTree( pNMTreeView->itemNew.hItem ); else if ( pNMTreeView->action == TVE_COLLAPSE ) CollapseTree( pNMTreeView->itemNew.hItem ); // wait at least 20 secs before autopolling for updates MainFrame()->WaitAWhileToPoll(); *pResult = 0; }
static void CollapseTree (bool_tree_node * tree) { if (!tree) return; if ((BOOL_TAG (tree) == N_and) || (BOOL_TAG (tree) == N_or)) { bool_tree_node *child = BOOL_CHILD (tree); while (child) { while (BOOL_TAG (child) == BOOL_TAG (tree)) { ReplaceWithChildren (child); } CollapseTree (child); child = BOOL_SIBLING (child); } } /* assume "not"s permeated */ return; }