Main Page | Class Hierarchy | Alphabetical List | Class List | File List | Class Members

ubrickImpl.hpp

00001 /* ==================================================== ======== ======= * 00002 * 00003 * ubrickImpl.hpp [internal implementation] 00004 * Ubit Project [Elc][2003] 00005 * Author: Eric Lecolinet 00006 * 00007 * Part of the Ubit Toolkit: A Brick Construction Game Model for Creating GUIs 00008 * 00009 * (C) 1999-2003 Eric Lecolinet @ ENST Paris 00010 * WWW: http://www.enst.fr/~elc/ubit Email: elc@enst.fr (subject: ubit) 00011 * 00012 * *********************************************************************** 00013 * COPYRIGHT NOTICE : 00014 * THIS PROGRAM IS DISTRIBUTED WITHOUT ANY WARRANTY AND WITHOUT EVEN THE 00015 * IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. 00016 * YOU CAN REDISTRIBUTE IT AND/OR MODIFY IT UNDER THE TERMS OF THE GNU 00017 * GENERAL PUBLIC LICENSE AS PUBLISHED BY THE FREE SOFTWARE FOUNDATION; 00018 * EITHER VERSION 2 OF THE LICENSE, OR (AT YOUR OPTION) ANY LATER VERSION. 00019 * SEE FILES 'COPYRIGHT' AND 'COPYING' FOR MORE DETAILS. 00020 * *********************************************************************** 00021 * 00022 * ==================================================== [Elc:03] ======= * 00023 * ==================================================== ======== ======= */ 00024 00025 #ifndef _ubrickImpl_hpp_ 00026 #define _ubrickImpl_hpp_ 00027 //pragma ident "@(#)ubrickImpl.hpp ubit:03.04.05" 00028 00029 // ====[internal implementation]=========================== 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 { //a etendre pour UOn copies!!! 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 /* ==================================================== [Elc:03] ======= */ 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 /* ==================================================== [TheEnd] ======= */ 00172 /* ==================================================== [Elc:03] ======= */

Generated on Fri Aug 13 12:12:14 2004 for Ubit[Eric.Lecolinet@enst.fr] by doxygen 1.3.7