void TreeCanvas::mousePressEvent(QMouseEvent* event) { if (mutex.tryLock()) { if (event->button() == Qt::LeftButton) { VisualNode* n = eventNode(event); if (compareNodes) { if (n != NULL && n->getStatus() != UNDETERMINED && currentNode != NULL && currentNode->getStatus() != UNDETERMINED) { Space* curSpace = NULL; Space* compareSpace = NULL; for (int i=0; i<comparators.size(); i++) { if (comparators[i].second) { if (curSpace == NULL) { curSpace = currentNode->getSpace(*na,curBest,c_d,a_d); if (!compareNodesBeforeFP || n->isRoot()) { compareSpace = n->getSpace(*na,curBest,c_d,a_d); } else { VisualNode* p = n->getParent(*na); compareSpace = p->getSpace(*na,curBest,c_d,a_d); switch (compareSpace->status()) { case SS_SOLVED: case SS_FAILED: break; case SS_BRANCH: compareSpace->commit(*p->getChoice(), n->getAlternative(*na)); break; default: GECODE_NEVER; } } } try { comparators[i].first->compare(*curSpace,*compareSpace); } catch (Exception& e) { qFatal("Exception in comparator %d: %s.\n Stopping.", i, e.what()); } } } } } else { setCurrentNode(n); } compareNodes = false; setCursor(QCursor(Qt::ArrowCursor)); if (n != NULL) { event->accept(); mutex.unlock(); return; } } mutex.unlock(); } event->ignore(); }
/// TODO void Gist::on_canvas_statusChanged(VisualNode* n, const Statistics& stats, bool finished) { nodeStatInspector->node(execution->getNA(),n,stats,finished); /// for single node stats if (!finished) { showNodeStats->setEnabled(false); // stop-> setEnabled(true); // reset->setEnabled(false); navNextSol->setEnabled(false); navPrevSol->setEnabled(false); // searchNext->setEnabled(false); // searchAll->setEnabled(false); toggleHidden->setEnabled(false); hideFailed->setEnabled(false); // hideSize->setEnabled(false); // labelBranches->setEnabled(false); // labelPath->setEnabled(false); // toggleStop->setEnabled(false); // unstopAll->setEnabled(false); center->setEnabled(false); /// ?? exportPDF->setEnabled(false); exportWholeTreePDF->setEnabled(false); print->setEnabled(false); // printSearchLog->setEnabled(false); bookmarkNode->setEnabled(false); bookmarksGroup->setEnabled(false); } else { // stop->setEnabled(false); // reset->setEnabled(true); if ( (n->isOpen() || n->hasOpenChildren()) && (!n->isHidden()) ) { // searchNext->setEnabled(true); // searchAll->setEnabled(true); } else { // searchNext->setEnabled(false); // searchAll->setEnabled(false); } if (n->getNumberOfChildren() > 0) { toggleHidden->setEnabled(true); hideFailed->setEnabled(true); // hideSize->setEnabled(true); // unstopAll->setEnabled(true); } else { toggleHidden->setEnabled(false); hideFailed->setEnabled(false); // hideSize->setEnabled(false); // unhideAll->setEnabled(false); // unstopAll->setEnabled(false); } toggleStop->setEnabled(n->getStatus() == STOP || n->getStatus() == UNSTOP); showNodeStats->setEnabled(true); labelPath->setEnabled(true); VisualNode* root = n; while (!root->isRoot()) { root = root->getParent(execution->getNA()); } NextSolCursor nsc(n, false, execution->getNA()); PreorderNodeVisitor<NextSolCursor> nsv(nsc); nsv.run(); navNextSol->setEnabled(nsv.getCursor().node() != root); NextSolCursor psc(n, true, execution->getNA()); PreorderNodeVisitor<NextSolCursor> psv(psc); psv.run(); navPrevSol->setEnabled(psv.getCursor().node() != root); center->setEnabled(true); exportPDF->setEnabled(true); exportWholeTreePDF->setEnabled(true); print->setEnabled(true); printSearchLog->setEnabled(true); bookmarkNode->setEnabled(true); bookmarksGroup->setEnabled(true); } emit statusChanged(stats,finished); }