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