Go to the documentation of this file.
34 #include <QtGui/QPainter>
36 #include <QPrintDialog>
50 namespace Gecode {
namespace Gist {
55 , mutex(QMutex::Recursive)
56 , layoutMutex(QMutex::Recursive)
58 , compareNodes(false), compareNodesBeforeFP(false)
59 , autoHideFailed(true), autoZoom(false)
60 , refresh(500), refreshPause(0), smoothScrollAndZoom(false)
61 , moveDuringSearch(false)
63 , scrollTimeLine(1000), targetX(0), sourceX(0), targetY(0), sourceY(0)
64 , targetW(0), targetH(0), targetScale(0)
65 , layoutDoneTimerId(0) {
66 QMutexLocker locker(&
mutex);
76 int rootIdx =
na->allocate(rootSpace);
77 assert(rootIdx == 0); (void) rootIdx;
85 setAutoFillBackground(
true);
94 Qt::BlockingQueuedConnection);
96 this, SLOT(inspectSolution(
const Space*)));
100 Qt::BlockingQueuedConnection);
108 scaleBar =
new QSlider(Qt::Vertical,
this);
109 scaleBar->setObjectName(
"scaleBar");
113 connect(
scaleBar, SIGNAL(valueChanged(
int)),
123 qRegisterMetaType<Statistics>(
"Statistics");
183 QSize viewport_size =
size();
184 QAbstractScrollArea* sa =
185 static_cast<QAbstractScrollArea*>(parentWidget()->parentWidget());
188 zoomx = viewport_size.width()/2;
190 zoomy = viewport_size.height()/2;
192 int xoff = (sa->horizontalScrollBar()->value()+zoomx)/
scale;
193 int yoff = (sa->verticalScrollBar()->value()+zoomy)/
scale;
198 scale = (static_cast<double>(scale0)) / 100.0;
206 sa->horizontalScrollBar()->setRange(0,w-viewport_size.width());
207 sa->verticalScrollBar()->setRange(0,h-viewport_size.height());
208 sa->horizontalScrollBar()->setPageStep(viewport_size.width());
209 sa->verticalScrollBar()->setPageStep(viewport_size.height());
216 sa->horizontalScrollBar()->setValue(xoff-zoomx);
217 sa->verticalScrollBar()->setValue(yoff-zoomy);
225 QMutexLocker locker(&
mutex);
237 QSize viewport_size =
size();
238 QAbstractScrollArea* sa =
239 static_cast<QAbstractScrollArea*>(parentWidget()->parentWidget());
240 sa->horizontalScrollBar()->setRange(0,w-viewport_size.width());
241 sa->verticalScrollBar()->setRange(0,h-viewport_size.height());
242 sa->horizontalScrollBar()->setPageStep(viewport_size.width());
243 sa->verticalScrollBar()->setPageStep(viewport_size.height());
262 QSize viewport_size =
size();
263 QAbstractScrollArea* sa =
264 static_cast<QAbstractScrollArea*>(parentWidget()->parentWidget());
265 sa->horizontalScrollBar()->setRange(0,w-viewport_size.width());
266 sa->verticalScrollBar()->setRange(0,h-viewport_size.height());
295 SearcherThread::updateCanvas(
void) {
321 int scale0 = static_cast<int>(t->
scale*100);
323 QWidget*
p = t->parentWidget();
326 static_cast<double>(
p->width()) / (bb.right - bb.left +
329 static_cast<double>(
p->height()) /
332 scale0 = static_cast<int>(
std::min(newXScale, newYScale)*100);
337 double scale = (static_cast<double>(scale0)) / 100.0;
381 std::stack<SearchItem> stck;
385 static_cast<long unsigned int>(depth+stck.size()));
401 if (
si.i ==
si.noOfChildren) {
413 if (
n->getStatus() ==
SOLVED) {
414 assert(
n->hasCopy());
422 if (
n->getStatus() !=
STOP )
428 static_cast<long unsigned int>(depth+stck.size()));
450 QMutexLocker locker(&
mutex);
456 QMutexLocker locker(&
mutex);
462 QMutexLocker locker(&
mutex);
471 QMutexLocker locker(&
mutex);
480 QMutexLocker locker(&
mutex);
490 QMutexLocker locker(&
mutex);
499 QMutexLocker locker(&
mutex);
514 int zoomCurrent = static_cast<int>(
scale*100);
533 QWidget*
p = parentWidget();
536 static_cast<double>(
p->width()) / (bb.
right - bb.
left +
542 int scale0 = static_cast<int>(
std::min(newXScale, newYScale)*100);
552 int zoomCurrent = static_cast<int>(
scale*100);
553 int targetZoom = scale0;
565 QMutexLocker locker(&
mutex);
573 c =
c->getParent(*
na);
578 QAbstractScrollArea* sa =
579 static_cast<QAbstractScrollArea*>(parentWidget()->parentWidget());
581 x -= sa->viewport()->width() / 2;
582 y -= sa->viewport()->height() / 2;
584 sourceX = sa->horizontalScrollBar()->value();
588 sourceY = sa->verticalScrollBar()->value();
593 sa->horizontalScrollBar()->setValue(
targetX);
594 sa->verticalScrollBar()->setValue(
targetY);
608 QAbstractScrollArea* sa =
609 static_cast<QAbstractScrollArea*>(parentWidget()->parentWidget());
610 double p = static_cast<double>(
i)/100.0;
613 sa->horizontalScrollBar()->setValue(
sourceX+static_cast<int>(xdiff));
614 sa->verticalScrollBar()->setValue(
sourceY+static_cast<int>(ydiff));
619 QMutexLocker locker(&
mutex);
626 int failedInspectorType = -1;
627 int failedInspector = -1;
628 bool needCentering =
false;
639 needCentering =
true;
651 failedInspectorType = 0;
664 failedInspectorType = -1;
689 "Something went wrong - probably an incorrect brancher");
699 switch (curSpace->
status()) {
704 curSpace->
commit(*
p->getChoice(),
712 if (inspectorNo==-1) {
715 failedInspectorType = 1;
718 failedInspectorType = -1;
722 failedInspectorType = 1;
723 failedInspector = inspectorNo;
725 failedInspectorType = -1;
732 switch (failedInspectorType) {
734 qFatal(
"Exception in move inspector %d: %s.\n Stopping.",
735 failedInspector, e.
what());
738 qFatal(
"Exception in double click inspector %d: %s.\n Stopping.",
739 failedInspector, e.
what());
742 qFatal(
"Exception: %s.\n Stopping.", e.
what());
760 QMutexLocker locker(&
mutex);
768 QMutexLocker locker(&
mutex);
776 TreeCanvas::inspectSolution(
const Space* s) {
777 int failedInspectorType = -1;
778 int failedInspector = -1;
785 failedInspectorType = 1;
788 failedInspectorType = -1;
792 }
catch (Exception& e) {
793 switch (failedInspectorType) {
795 qFatal(
"Exception in move inspector %d: %s.\n Stopping.",
796 failedInspector, e.what());
799 qFatal(
"Exception in solution inspector %d: %s.\n Stopping.",
800 failedInspector, e.what());
803 qFatal(
"Exception: %s.\n Stopping.", e.what());
817 QMutexLocker locker(&
mutex);
831 int rootIdx =
na->allocate(rootSpace);
832 assert(rootIdx == 0); (void) rootIdx;
850 QMutexLocker locker(&
mutex);
854 QInputDialog::getText(
this,
"Add bookmark",
"Name:",
855 QLineEdit::Normal,
"",&ok);
860 text = QString(
"Node ")+QString().setNum(
bookmarks.size());
875 QMutexLocker locker(&
mutex);
889 QMutexLocker locker(&
mutex);
894 while (nextAlt >= 0) {
905 QMutexLocker locker(&
mutex);
908 setCursor(QCursor(Qt::CrossCursor));
913 QMutexLocker locker(&
mutex);
916 setCursor(QCursor(Qt::CrossCursor));
926 QMutexLocker locker(&
mutex);
939 QMutexLocker locker(&
mutex);
962 QMutexLocker locker(&
mutex);
976 QMutexLocker locker(&
mutex);
980 if (alt + 1 <
p->getNumberOfChildren()) {
990 QMutexLocker locker(&
mutex);
997 QMutexLocker locker(&
mutex);
1015 #if QT_VERSION >= 0x040400
1016 QString filename = QFileDialog::getSaveFileName(
this, tr(
"Export tree as pdf"),
"", tr(
"PDF (*.pdf)"));
1017 if (filename !=
"") {
1018 QPrinter printer(QPrinter::ScreenResolution);
1019 QMutexLocker locker(&
mutex);
1022 printer.setFullPage(
true);
1026 printer.setOutputFileName(filename);
1027 QPainter painter(&printer);
1029 painter.setRenderHint(QPainter::Antialiasing);
1031 QRect pageRect = printer.pageRect();
1033 static_cast<double>(pageRect.width()) / (bb.
right - bb.
left +
1036 static_cast<double>(pageRect.height()) /
1039 double printScale =
std::min(newXScale, newYScale);
1040 painter.scale(printScale,printScale);
1045 QRect clip(0,0,0,0);
1058 #if QT_VERSION >= 0x040400
1059 exportNodePDF(
root);
1065 #if QT_VERSION >= 0x040400
1073 if (QPrintDialog(&printer,
this).exec() == QDialog::Accepted) {
1074 QMutexLocker locker(&
mutex);
1077 QRect pageRect = printer.pageRect();
1079 static_cast<double>(pageRect.width()) / (bb.
right - bb.
left +
1082 static_cast<double>(pageRect.height()) /
1085 double printScale =
std::min(newXScale, newYScale)*100;
1088 if (printScale > 400.0)
1090 printScale = printScale / 100.0;
1092 QPainter painter(&printer);
1093 painter.setRenderHint(QPainter::Antialiasing);
1094 painter.scale(printScale,printScale);
1095 painter.translate(
xtrans, 0);
1096 QRect clip(0,0,0,0);
1106 switch (
event->type()) {
1107 case QEvent::ToolTip:
1109 QHelpEvent* he = static_cast<QHelpEvent*>(
event);
1114 case QEvent::MouseButtonDblClick:
1115 case QEvent::MouseButtonPress:
1116 case QEvent::MouseButtonRelease:
1117 case QEvent::MouseMove:
1119 QMouseEvent* me = static_cast<QMouseEvent*>(
event);
1124 case QEvent::ContextMenu:
1126 QContextMenuEvent* ce = static_cast<QContextMenuEvent*>(
event);
1134 QAbstractScrollArea* sa =
1135 static_cast<QAbstractScrollArea*>(parentWidget()->parentWidget());
1136 int xoff = sa->horizontalScrollBar()->value()/
scale;
1137 int yoff = sa->verticalScrollBar()->value()/
scale;
1142 if (w < sa->viewport()->width())
1143 xoff -= (sa->viewport()->width()-w)/2;
1148 static_cast<int>((
y-30)/
scale+yoff));
1154 if (
mutex.tryLock()) {
1155 if (
event->type() == QEvent::ToolTip) {
1158 QHelpEvent* he = static_cast<QHelpEvent*>(
event);
1159 QToolTip::showText(he->globalPos(),
1163 QToolTip::hideText();
1168 return QWidget::event(
event);
1180 QPainter painter(
this);
1181 painter.setRenderHint(QPainter::Antialiasing);
1183 QAbstractScrollArea* sa =
1184 static_cast<QAbstractScrollArea*>(parentWidget()->parentWidget());
1185 int xoff = sa->horizontalScrollBar()->value()/
scale;
1186 int yoff = sa->verticalScrollBar()->value()/
scale;
1191 if (w < sa->viewport()->width())
1192 xoff -= (sa->viewport()->width()-w)/2;
1194 QRect origClip =
event->rect();
1195 painter.translate(0, 30);
1197 painter.translate(
xtrans-xoff, -yoff);
1198 QRect clip(static_cast<int>(origClip.x()/
scale-
xtrans+xoff),
1199 static_cast<int>(origClip.y()/
scale+yoff),
1200 static_cast<int>(origClip.width()/
scale),
1201 static_cast<int>(origClip.height()/
scale));
1218 if (
mutex.tryLock()) {
1219 if(
event->button() == Qt::LeftButton) {
1235 if (
mutex.tryLock()) {
1251 QAbstractScrollArea* sa =
1252 static_cast<QAbstractScrollArea*>(parentWidget()->parentWidget());
1254 int w = sa->horizontalScrollBar()->maximum()+e->oldSize().width();
1255 int h = sa->verticalScrollBar()->maximum()+e->oldSize().height();
1257 sa->horizontalScrollBar()->setRange(0,w-e->size().width());
1258 sa->verticalScrollBar()->setRange(0,h-e->size().height());
1259 sa->horizontalScrollBar()->setPageStep(e->size().width());
1260 sa->verticalScrollBar()->setPageStep(e->size().height());
1265 if (
event->modifiers() & Qt::ShiftModifier) {
1269 event->x(),
event->y());
1298 Space* curSpace = NULL;
1301 if (curSpace == NULL)
1306 qFatal(
"Exception in move inspector %d: %s.\n Stopping.",
1319 setCursor(QCursor(Qt::ArrowCursor));
1329 if (
mutex.tryLock()) {
1330 if (
event->button() == Qt::LeftButton) {
1336 Space* curSpace = NULL;
1337 Space* compareSpace = NULL;
1340 if (curSpace == NULL) {
1348 switch (compareSpace->
status()) {
1353 compareSpace->
commit(*
p->getChoice(),
1354 n->getAlternative(*
na));
1362 comparators[
i].first->compare(*curSpace,*compareSpace);
1364 qFatal(
"Exception in comparator %d: %s.\n Stopping.",
1374 setCursor(QCursor(Qt::ArrowCursor));
int refreshPause
Time (in msec) to pause after each refresh.
struct Gecode::@602::NNF::@65::@66 b
For binary nodes (and, or, eqv)
Node that has not been explored yet.
const int maxAutoZoomScale
Maximum scale factor for automatic zoom.
A cursor that frees all memory.
const int minScale
Minimum scale factor.
int targetX
Target x coordinate after smooth scrolling.
Post propagator for SetVar x
VisualNode * findNode(const NodeAllocator &na, int x, int y)
Find a node in this subtree at coordinates x, y.
Post propagator for SetVar SetOpType SetVar y
A stack item for depth first search.
void navRight(void)
Move selection to the right sibling of the selected node.
void dirtyUp(const NodeAllocator &na)
Mark all nodes up the path to the parent as dirty.
void labelPath(void)
Label all branches on path to root node.
bool getMoveDuringSearch(void)
Return preference whether to move cursor during search.
Space is solved (no brancher left)
int maxDepth
Maximum depth of the tree.
void resizeEvent(QResizeEvent *event)
Handle resize event.
const int maxScale
Maximum scale factor.
void stopSearch(void)
Stop current search.
bool compareNodes
Whether node comparison action is running.
int right
Right coordinate.
Node representing stop point.
void search(VisualNode *n, bool all, TreeCanvas *ti)
void statusChanged(VisualNode *, const Statistics &, bool)
Status bar update.
void pathUp(const NodeAllocator &na)
Set all nodes from the node to the root to be on the path.
void addDoubleClickInspector(Inspector *i)
Add inspector i.
Abstract base class for comparators.
Node class that supports visual layout
void autoZoomChanged(bool)
The auto-zoom state was changed.
const Space * getWorkingSpace(void) const
Return working space (if present).
void navDown(void)
Move selection to the first child of the selected node.
VisualNode * root
The root node of the tree.
void setBookmarked(bool m)
Set bookmark of this node.
virtual const char * what(void) const
Return information.
T * dfs(T *s, const Search::Options &o)
Invoke depth-first search engine for subclass T of space s with options o.
QSlider * scaleBar
The scale bar.
void centerCurrentNode(void)
Center the view on the currently selected node.
void hideFailed(const NodeAllocator &na, bool onlyDirty=false)
Hide all failed subtrees of this node.
unsigned int size(I &i)
Size of all ranges of range iterator i.
NodeStatus getStatus(void) const
Return current status of the node.
bool getSmoothScrollAndZoom(void)
Return preference whether to use smooth scrolling and zooming.
int getPathAlternative(const NodeAllocator &na)
Return the alternative of the child that is on the path (-1 if none)
void navPrevSol(void)
Move selection to previous solution (in DFS order)
bool isBookmarked(void)
Return whether node is bookmarked.
int noOfChildren
The number of children.
Space * snapshot(Space *s, const Options &o)
Clone space s dependening on options o.
Space must be branched (at least one brancher left)
void navRoot(void)
Move selection to the root node.
void setPath(void)
Set the current node to be the head of the path.
void emitStatusChanged(void)
Re-emit status change information for current node.
void commit(const Choice &c, unsigned int a, CommitStatistics &stat=unused_commit)
Commit choice c for alternative a.
const FloatNum min
Smallest allowed float value.
QVector< QPair< Inspector *, bool > > solutionInspectors
The registered solution inspectors, and whether they are active.
double scale
Current scale factor.
Abstract base class for inspectors.
int a_d
The adaptive recomputation distance.
bool isOnPath(void)
Return whether node is on the path.
void exportPDF(void)
Export pdf of the current subtree.
bool finish(void)
Stop search and wait for it to finish.
void setRefreshPause(int i)
Set refresh pause in msec.
void navLeft(void)
Move selection to the left sibling of the selected node.
void purge(const NodeAllocator &na)
Clear working space and copy (if present and this is not the root).
void inspectPath(void)
Call the double click inspector for all nodes on the path from root to head of the path.
int targetW
Target width after layout.
bool isRoot(void) const
Check if this node is the root of a tree.
bool autoHideFailed
Whether to hide failed subtrees automatically.
Space * getSpace(NodeAllocator &na, BestNode *curBest, int c_d, int a_d)
Return working space. Receiver must delete the space.
bool getAutoHideFailed(void)
Return preference whether to automatically hide failed subtrees.
void setSmoothScrollAndZoom(bool b)
Set preference whether to use smooth scrolling and zooming.
void searchFinished(void)
Signals that Gist is finished.
~TreeCanvas(void)
Destructor.
bool showCopies
Whether to show copies in the tree.
void paintEvent(QPaintEvent *event)
Paint the tree.
Gecode toplevel namespace
VarImp * x
Pointer to variable implementation.
void hideFailed(void)
Hide failed subtrees of selected node.
Space * clone(CloneStatistics &stat=unused_clone) const
Clone space.
bool isOpen(void)
Return whether this node still has open children.
bool autoZoom
Whether to zoom automatically.
BestNode * curBest
The currently best solution (for branch-and-bound)
void setRefresh(int i)
Set refresh rate.
SearcherThread searcher
Search engine thread.
void addMoveInspector(Inspector *i)
Add inspector i.
VisualNode * pathHead
The head of the currently selected path.
A cursor that draws a tree on a QWidget.
void update(IntSet &y, Space &home, IntSet &py)
void navNextSol(bool back=false)
Move selection to next solution (in DFS order)
void navUp(void)
Move selection to the parent of the selected node.
bool moveDuringSearch
Whether to move cursor during search.
void activateComparator(int i, bool active)
Set active comparator.
int getAlternative(const NodeAllocator &na) const
Return alternative number of this node.
int targetScale
Target scale after layout.
void toggleStop(const NodeAllocator &na)
Do not stop at this node.
void setAutoZoom(bool b)
Set preference whether to automatically zoom to fit.
VisualNode * currentNode
The currently selected node.
void unhideAll(const NodeAllocator &na)
Unhide all nodes in the subtree of this node.
int sourceY
Target y coordinate after smooth scrolling.
QVector< QPair< Inspector *, bool > > doubleClickInspectors
The registered click inspectors, and whether they are active.
void layout(const NodeAllocator &na)
Compute layout for the subtree of this node.
void addSolutionInspector(Inspector *i)
Add inspector i.
void zoomToFit(void)
Zoom the canvas so that the whole tree fits.
int xtrans
Offset on the x axis so that the tree is centered.
void setMarked(bool m)
Set mark of this node.
NodeAllocatorBase< VisualNode > NodeAllocator
int getNumberOfChildNodes(NodeAllocator &na, BestNode *curBest, Statistics &stats, int c_d, int a_d)
Compute and return the number of children.
int targetH
Target height after layout.
void contextMenu(QContextMenuEvent *)
Context menu triggered.
Statistics stats
Statistics about the search tree.
void toggleHidden(const NodeAllocator &na)
Toggle whether this node is hidden.
Static reference to the currently best space.
void toggleStop(void)
Do not stop at selected stop node.
void mouseDoubleClickEvent(QMouseEvent *event)
Handle mouse double click event.
int getChild(int n) const
Return index of child no n.
void startCompareNodes(void)
Wait for click on node to compare with current node.
A cursor that finds the next solution.
A canvas that displays the search tree.
Cursor & getCursor(void)
Return the cursor.
void scaleChanged(int)
The scale factor has changed.
void unhideAll(void)
Unhide all nodes below selected node.
void addComparator(Comparator *c)
Add comparator c.
void scaleTree(int scale0, int zoomx=-1, int zoomy=-1)
Set scale factor to scale0.
QMutex layoutMutex
Mutex for synchronizing layout and drawing.
void setMoveDuringSearch(bool b)
Set preference whether to move cursor during search.
Node representing a branch.
virtual void timerEvent(QTimerEvent *e)
Timer invoked for smooth zooming and scrolling.
#define GECODE_NEVER
Assert that this command is never executed.
int getParent(void) const
Return the parent.
void run(void)
Execute visitor.
void abs(Home home, FloatVar x0, FloatVar x1)
Post propagator for .
SpaceStatus status(StatusStatistics &stat=unused_status)
Query space status.
void searchFinished(void)
int layoutDoneTimerId
Timer id for delaying the update.
void inspectBeforeFP(void)
Calls inspectCurrentNode(false)
void setAutoHideFailed(bool b)
Set preference whether to automatically hide failed subtrees.
void searchOne(void)
Find next solution below selected node.
void moveToNode(VisualNode *n, bool)
TreeCanvas(Space *rootSpace, bool bab, QWidget *parent, const Options &opt)
Constructor.
void searchAll(void)
Explore complete subtree of selected node.
BoundingBox getBoundingBox(void)
Return the bounding box.
void solution(const Space *)
bool isHidden(void)
Return if node is hidden.
void wheelEvent(QWheelEvent *event)
Handle mouse wheel events.
void labelBranches(NodeAllocator &na, BestNode *curBest, int c_d, int a_d)
Create or clear branch labels in subtree.
bool hasCopy(void)
Return whether the node has a copy.
void unstopAll(const NodeAllocator &na)
Do not stop at any stop node in the subtree of this node.
void scroll(void)
React to scroll events.
const int defScale
Default scale factor.
void removedBookmark(int idx)
Signals that a bookmark has been removed.
Statistics about the search tree
void exportWholeTreePDF(void)
Export pdf of the whole tree.
void startCompareNodesBeforeFP(void)
Wait for click on node to compare with current node before fixpoint.
void addedBookmark(const QString &id)
Signals that a bookmark has been added.
int targetY
Target y coordinate after smooth scrolling.
void labelPath(NodeAllocator &na, BestNode *curBest, int c_d, int a_d)
Create or clear branch labels on path to root.
void activateDoubleClickInspector(int i, bool active)
Set active inspector.
void resizeToOuter(void)
Resize to the outer widget size if auto zoom is enabled.
QVector< QPair< Comparator *, bool > > comparators
The registered comparators, and whether they are active.
void contextMenuEvent(QContextMenuEvent *event)
Handle context menu event.
int i
The currently explored child.
int bab(Space *root, const Gist::Options &opt)
Create a new stand-alone Gist for branch-and-bound search of root.
Run a cursor over a tree, processing nodes in pre-order.
void solution(const Space *)
Signals that a solution has been found.
void setCurrentNode(VisualNode *n, bool finished=true, bool update=true)
Set the selected node to n.
QMutex mutex
Mutex for synchronizing acccess to the tree.
void update(int w, int h, int scale0)
bool event(QEvent *event)
General event handler, used for displaying tool tips.
QTimeLine zoomTimeLine
Timer for smooth zooming.
bool smoothScrollAndZoom
Whether to use smooth scrolling and zooming.
void activateSolutionInspector(int i, bool active)
Set active inspector.
QTimeLine scrollTimeLine
Timer for smooth scrolling.
void update(void)
Update display.
Gecode::FloatVal c(-8, 8)
bool getShowCopies(void)
Return preference whether to show copies in the tree.
Node representing ignored stop point.
void layoutDone(int w, int h, int scale0)
Layout done.
bool stopSearchFlag
Flag signalling the search to stop.
QVector< QPair< Inspector *, bool > > moveInspectors
The registered move inspectors, and whether they are active.
bool finishedFlag
Flag signalling that Gist is ready to be closed.
int n
Number of negative literals for node type.
QVector< VisualNode * > bookmarks
The bookmarks map.
int sourceX
Source x coordinate after smooth scrolling.
void print(void)
Print the tree.
void unPathUp(const NodeAllocator &na)
Set all nodes from the node to the root not to be on the path.
Shape * getShape(void)
Return the shape of this node.
void activateMoveInspector(int i, bool active)
Set active inspector.
Node representing failure.
Gecode::IntArgs i({1, 2, 3, 4})
void unstopAll(void)
Do not stop at any stop node.
int depth(void) const
Return depth of the shape.
bool compareNodesBeforeFP
Whether node comparison action computes fixpoint.
void setShowCopies(bool b)
Set preference whether to show copies in the tree.
int p
Number of positive literals for node type.
void toggleHidden(void)
Toggle hidden state of selected node.
VisualNode * eventNode(QEvent *event)
Return the node corresponding to the event position.
void labelBranches(void)
Label all branches in subtree under current node.
const FloatNum max
Largest allowed float value.
bool getAutoZoom(void)
Return preference whether to automatically zoom to fit.
Node::NodeAllocator * na
Allocator for nodes.
SearchItem(VisualNode *n0, int noOfChildren0)
Constructor.
Node representing a solution.
void bookmarkNode(void)
Bookmark current node.
void setRecompDistances(int c_d, int a_d)
Set recomputation distances.
void mousePressEvent(QMouseEvent *event)
Handle mouse press event.
Exception: Base-class for exceptions
void inspectCurrentNode(bool fix=true, int inspectorNo=-1)
Call the double click inspector for the currently selected node.
int c_d
The recomputation distance.