Rapicorn - Experimental UI Toolkit - Source Code 10.08.1
container.hh
Go to the documentation of this file.
00001 // Licensed GNU LGPL v3 or later: http://www.gnu.org/licenses/lgpl.html
00002 #ifndef __RAPICORN_CONTAINER_HH__
00003 #define __RAPICORN_CONTAINER_HH__
00004 
00005 #include <ui/item.hh>
00006 
00007 namespace Rapicorn {
00008 
00009 /* --- Container --- */
00010 struct ContainerImpl : public virtual ItemImpl, public virtual ContainerIface {
00011   friend              class ItemImpl;
00012   friend              class WindowImpl;
00013   void                uncross_descendant(ItemImpl          &descendant);
00014   void                item_cross_link   (ItemImpl           &owner,
00015                                          ItemImpl           &link,
00016                                          const ItemSlot &uncross);
00017   void                item_cross_unlink (ItemImpl           &owner,
00018                                          ItemImpl           &link,
00019                                          const ItemSlot &uncross);
00020   void                item_uncross_links(ItemImpl           &owner,
00021                                          ItemImpl           &link);
00022 protected:
00023   virtual            ~ContainerImpl     ();
00024   virtual void        add_child         (ItemImpl           &item) = 0;
00025   virtual void        repack_child      (ItemImpl           &item,
00026                                          const PackInfo &orig,
00027                                          const PackInfo &pnew);
00028   virtual void        remove_child      (ItemImpl           &item) = 0;
00029   virtual void        unparent_child    (ItemImpl           &item);
00030   virtual void        dispose_item      (ItemImpl           &item);
00031   virtual void        hierarchy_changed (ItemImpl           *old_toplevel);
00032   virtual bool        move_focus        (FocusDirType    fdir);
00033   void                expose_enclosure  (); /* expose without children */
00034   virtual void        set_focus_child   (ItemImpl           *item);
00035   virtual void        dump_test_data    (TestStream     &tstream);
00036 public:
00037   ItemImpl*               get_focus_child   () const;
00038   typedef Walker<ItemImpl>  ChildWalker;
00039   void                  child_container (ContainerImpl  *child_container);
00040   ContainerImpl&        child_container ();
00041   virtual ChildWalker   local_children  () const = 0;
00042   virtual bool          has_children    () = 0;
00043   void                  remove          (ItemImpl           &item);
00044   void                  remove          (ItemImpl           *item)  { RAPICORN_CHECK (item != NULL); remove (*item); }
00045   void                  add             (ItemImpl                   &item);
00046   void                  add             (ItemImpl                   *item);
00047   virtual Affine        child_affine    (const ItemImpl             &item); /* container => item affine */
00048   virtual
00049   const PropertyList&   list_properties (); /* essentially chaining to ItemImpl:: */
00050   const CommandList&    list_commands   (); /* essentially chaining to ItemImpl:: */
00051   virtual void          point_children  (Point                   p, /* item coordinates relative */
00052                                          std::vector<ItemImpl*>     &stack);
00053   void         viewp0rt_point_children  (Point                   p, /* viewp0rt coordinates relative */
00054                                          std::vector<ItemImpl*>     &stack);
00055   virtual void          render          (Display                &display);
00056   void                  debug_tree      (String indent = String());
00057   // ContainerIface
00058   virtual ItemIface*    create_child    (const std::string      &item_identifier,
00059                                          const StringListImpl   &args);
00060 };
00061 
00062 /* --- Single Child Container Impl --- */
00063 class SingleContainerImpl : public virtual ContainerImpl {
00064   ItemImpl             *child_item;
00065 protected:
00066   virtual void          size_request            (Requisition &requisition);
00067   virtual void          size_allocate           (Allocation area);
00068   ItemImpl&             get_child               () { RAPICORN_CHECK (child_item != NULL); return *child_item; }
00069   virtual void          pre_finalize            ();
00070   virtual              ~SingleContainerImpl     ();
00071   virtual ChildWalker   local_children          () const;
00072   virtual bool          has_children            () { return child_item != NULL; }
00073   bool                  has_visible_child       () { return child_item && child_item->visible(); }
00074   bool                  has_drawable_child      () { return child_item && child_item->drawable(); }
00075   bool                  has_allocatable_child   () { return child_item && child_item->allocatable(); }
00076   virtual void          add_child               (ItemImpl   &item);
00077   virtual void          remove_child            (ItemImpl   &item);
00078   Allocation            layout_child            (ItemImpl         &child,
00079                                                  const Allocation &carea);
00080   explicit              SingleContainerImpl     ();
00081 };
00082 
00083 /* --- Multi Child Container Impl --- */
00084 class MultiContainerImpl : public virtual ContainerImpl {
00085   std::vector<ItemImpl*>    items;
00086 protected:
00087   virtual void          pre_finalize            ();
00088   virtual              ~MultiContainerImpl      ();
00089   virtual ChildWalker   local_children          () const { return value_walker (items); }
00090   virtual bool          has_children            () { return items.size() > 0; }
00091   virtual void          add_child               (ItemImpl   &item);
00092   virtual void          remove_child            (ItemImpl   &item);
00093   void                  raise_child             (ItemImpl   &item);
00094   void                  lower_child             (ItemImpl   &item);
00095   void                  remove_all_children     ();
00096   explicit              MultiContainerImpl      ();
00097 };
00098 
00099 } // Rapicorn
00100 
00101 #endif  /* __RAPICORN_CONTAINER_HH__ */
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Defines