visualnode.hh
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034 #ifndef GECODE_GIST_VISUALNODE_HH
00035 #define GECODE_GIST_VISUALNODE_HH
00036
00037 #include <gecode/gist/spacenode.hh>
00038 #include <gecode/kernel.hh>
00039 #include <string>
00040
00041 namespace Gecode { namespace Gist {
00042
00044 class Layout {
00045 public:
00046 static const int dist_y = 38;
00047 static const int extent = 20;
00048 static const int minimalSeparation = 10;
00049 };
00050
00052 class BoundingBox {
00053 public:
00055 int left;
00057 int right;
00059 BoundingBox(void) {}
00060 };
00061
00063 class Extent {
00064 public:
00066 int l;
00068 int r;
00070 Extent(void);
00072 Extent(int l0, int r0);
00074 Extent(int width);
00075
00077 void extend(int deltaL, int deltaR);
00079 void move(int delta);
00080 };
00081
00083 class Shape {
00084 private:
00086 int _depth;
00088 BoundingBox bb;
00090 Extent shape[1];
00092 Shape(const Shape&);
00094 Shape& operator =(const Shape&);
00096 Shape(void);
00097 public:
00099 static Shape* allocate(int d);
00100
00101 static void deallocate(Shape*);
00102
00104 static Shape* leaf;
00106 static Shape* hidden;
00107
00109 int depth(void) const;
00111 void setDepth(int d);
00113 void computeBoundingBox(void);
00115 const Extent& operator [](int i) const;
00117 Extent& operator [](int i);
00119 bool getExtentAtDepth(int depth, Extent& extent);
00121 const BoundingBox& getBoundingBox(void) const;
00122 };
00123
00125 class VisualNode : public SpaceNode {
00126 protected:
00128 enum VisualNodeFlags {
00129 DIRTY = SpaceNode::LASTBIT+1,
00130 CHILDRENLAYOUTDONE,
00131 HIDDEN,
00132 MARKED,
00133 ONPATH,
00134 BOOKMARKED
00135 };
00136
00138 int offset;
00140 Shape* shape;
00141
00143 bool containsCoordinateAtDepth(int x, int depth);
00144 public:
00146 VisualNode(int p);
00148 VisualNode(Space* root);
00149
00151 bool isHidden(void);
00153 void setHidden(bool h);
00155 void setStop(bool h);
00157 void dirtyUp(const NodeAllocator& na);
00159 void layout(const NodeAllocator& na);
00161 int getOffset(void);
00163 void setOffset(int n);
00165 bool isDirty(void);
00167 void setDirty(bool d);
00169 bool childrenLayoutIsDone(void);
00171 void setChildrenLayoutDone(bool d);
00173 bool isMarked(void);
00175 void setMarked(bool m);
00177 bool isBookmarked(void);
00179 void setBookmarked(bool m);
00181 void pathUp(const NodeAllocator& na);
00183 void unPathUp(const NodeAllocator& na);
00185 bool isOnPath(void);
00187 int getPathAlternative(const NodeAllocator& na);
00189 void setOnPath(bool onPath0);
00190
00192 void toggleHidden(const NodeAllocator& na);
00194 void hideFailed(const NodeAllocator& na, bool onlyDirty=false);
00196 void unhideAll(const NodeAllocator& na);
00198 void toggleStop(const NodeAllocator& na);
00200 void unstopAll(const NodeAllocator& na);
00201
00203 Shape* getShape(void);
00205 void setShape(Shape* s);
00207 void computeShape(const NodeAllocator& na);
00209 BoundingBox getBoundingBox(void);
00211 void changedStatus(const NodeAllocator& na);
00213 VisualNode* findNode(const NodeAllocator& na, int x, int y);
00214
00216 void labelBranches(NodeAllocator& na,
00217 BestNode* curBest, int c_d, int a_d);
00219 void labelPath(NodeAllocator& na,
00220 BestNode* curBest, int c_d, int a_d);
00222 std::string getBranchLabel(NodeAllocator& na,
00223 VisualNode* p, const Choice* c,
00224 BestNode* curBest, int c_d, int a_d, int alt);
00225
00227 std::string toolTip(NodeAllocator& na, BestNode* curBest,
00228 int c_d, int a_d);
00229
00231 void dispose(void);
00232 };
00233
00234 }}
00235
00236 #include <gecode/gist/node.hpp>
00237 #include <gecode/gist/spacenode.hpp>
00238 #include <gecode/gist/visualnode.hpp>
00239
00240 #endif
00241
00242