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 Thu Mar 3 04:56:50 2005 for Ubit[Eric.Lecolinet@enst.fr] by  doxygen 1.4.1