void CDasherModel::HandleOutput(Dasher::VECTOR_SYMBOL_PROB* pAdded, int* pNumDeleted) { CDasherNode *pNewNode = Get_node_under_crosshair(); DASHER_ASSERT(pNewNode != NULL); // std::cout << "HandleOutput: " << m_pLastOutput << " => " << pNewNode << std::endl; CDasherNode *pLastSeen = pNewNode; while (pLastSeen && !pLastSeen->GetFlag(NF_SEEN)) pLastSeen = pLastSeen->Parent(); while (m_pLastOutput != pLastSeen) { m_pLastOutput->Undo(); m_pLastOutput->Leave(); //Should we? I think so, but the old code didn't...? m_pLastOutput->SetFlag(NF_SEEN, false); // TODO: Is this the right place to trap output? if(pNumDeleted != NULL) (*pNumDeleted) += m_pLastOutput->m_iNumSymbols; m_pLastOutput = m_pLastOutput->Parent(); if (m_pLastOutput) m_pLastOutput->Enter(); } if(!pNewNode->GetFlag(NF_SEEN)) { RecursiveOutput(pNewNode, pAdded); } }
bool CDasherModel::CheckForNewRoot(CDasherView *pView) { DASHER_ASSERT(m_Root != NULL); // TODO: pView is redundant here #ifdef DEBUG CDasherNode *pOldNode = Get_node_under_crosshair(); #endif CDasherNode *root(m_Root); if(!(m_Root->GetFlag(NF_SUPER))) { Reparent_root(root->Lbnd(), root->Hbnd()); return(m_Root != root); } CDasherNode *pNewRoot = NULL; for (CDasherNode::ChildMap::const_iterator it = m_Root->GetChildren().begin(); it != m_Root->GetChildren().end(); it++) { if ((*it)->GetFlag(NF_SUPER)) { //at most one child should have NF_SUPER set... DASHER_ASSERT(pNewRoot == NULL); pNewRoot = *it; #ifndef DEBUG break; #endif } } ////GAME MODE TEMP - only change the root if it is on the game path///////// if (pNewRoot && (!m_bGameMode || pNewRoot->GetFlag(NF_GAME))) { m_Root->DeleteNephews(pNewRoot); RecursiveMakeRoot(pNewRoot); } DASHER_ASSERT(Get_node_under_crosshair() == pOldNode); return false; }