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 #ifndef _ubrickImpl_hpp_
00026 #define _ubrickImpl_hpp_
00027
00028
00029
00030
00031 class UGenLink {
00032 protected:
00033 friend class UGenChain;
00034 UGenLink *nextlink;
00035 UGenLink() {nextlink = null;}
00036 UGenLink* getNext() const {return nextlink;}
00037 };
00038
00039
00040
00041 class ULink : public UGenLink {
00042 public:
00043 ULink(class UBrick* _child);
00044
00045 class UBrick* getChild() const {return b;}
00046 class UBox* getBoxChild() const;
00047 class UWin* getWinChild() const;
00048
00049 class UGroup* getParent() const {return par;}
00050 void setParent(class UGroup* _parent) {par = _parent;}
00051
00052 class ULink* getNext() const {return (ULink*)nextlink;}
00053
00054 const class UCond* getCond() const {return cond;}
00055 void setCond(const class UCond& c) {cond = &c;}
00056 void setCond(const class ULink* l) {cond = l->cond;}
00057
00058 bool verifies(const class UContext *ctx, const class UCtrl *ctrl) const;
00059
00061 bool match(const class UCond& _cond) const {
00062 return (cond != null && cond == &_cond);
00063 }
00064
00065 protected:
00066 class UBrick *b;
00067 class UGroup *par;
00068 const class UCond *cond;
00069 };
00070
00071
00072
00073 class ULinkLink : public UGenLink {
00074 friend class ULLChain;
00075 ULink *lk;
00076 public:
00077 ULinkLink(ULink *l) : UGenLink() {lk = l;}
00078
00079 class UGroup* getParent() const {return lk->getParent();}
00080
00081 ULink* getLink() const {return lk;}
00082 ULink* link() const {return lk;}
00083
00084 ULinkLink* getNext() const {return (ULinkLink*)nextlink;}
00085 };
00086
00087
00088
00089
00090 class UGenChain {
00091 public:
00092 UGenChain() {firstlink = null, lastlink = null;};
00093
00095 void add(UGenLink *link);
00096
00098 void remove(UGenLink *link);
00099
00101 void append(UGenChain*);
00102
00106 void insertAfter(UGenLink *link, UGenLink *poslink);
00107
00114 class UGenLink* removeAfter(UGenLink *poslink);
00115
00120 class UGenLink *reset();
00121
00122 protected:
00123 UGenLink *firstlink, *lastlink;
00124 };
00125
00126
00127
00128 class UChain : public UGenChain {
00129 public:
00130 ULink *first() const {return (ULink*)firstlink;}
00131 ULink *last() const {return (ULink*)lastlink;}
00132
00133 ULink* removeAfter(ULink *poslink)
00134 {return (ULink*)UGenChain::removeAfter(poslink);}
00135
00140 ULink* search(const UBrick *brick, const ULink *fromlink = null);
00141 };
00142
00143
00144
00145 class ULLChain : public UGenChain {
00146 public:
00147 ULinkLink *first() const {return (ULinkLink*)firstlink;}
00148 ULinkLink *last() const {return (ULinkLink*)lastlink;}
00149
00150 ULinkLink* removeAfter(ULinkLink *poslink)
00151 {return (ULinkLink*)UGenChain::removeAfter(poslink);}
00152
00154 ULinkLink* removePointingTo(ULink *pointed);
00155
00156 void fireParents(class UEvent&, const UOn&) const;
00157 void updateParents(const class UUpdate&) const;
00158 void setModesOfParents(u_modes bmodes, u_modes cmodes, bool onoff) const;
00159 void setModesOfParentViews(int vmodes, bool on_off) const;
00160 };
00161
00162
00163
00164 class UArgsChain : public UChain {
00165 friend class UArgs;
00166 friend class UArgsImpl;
00167 int refcount;
00168 };
00169
00170 #endif
00171
00172