faithcore/faith/layout.h

Go to the documentation of this file.
00001 #ifndef FAITH__LAYOUT_H
00002 #define FAITH__LAYOUT_H
00003 
00004 #include <faith/rect.h>
00005 #include <faith/core.h>
00006 
00007 namespace Faith
00008 {
00009 
00010 class Widget;
00011 class SizePolicy;
00012 
00017 class FAITH_CORE_EXPORT Layout
00018 {
00019         Faith::Widget *mWidget;
00020         int mMargin, mSpacing;
00021         Faith::Rect mGeometry;
00022         
00023         friend class Faith::Widget;
00024         
00025         Layout(const Layout&) { }
00026 
00027 protected:
00028         class FAITH_CORE_EXPORT LayoutItem
00029         {
00030         public:
00031                 LayoutItem();
00032                 virtual ~LayoutItem();
00033                 
00034                 virtual Widget *widget() { return 0; }
00035                 virtual Layout *layout() { return 0; }
00036                 
00037                 virtual Size minimumSize() const=0;
00038                 virtual Size maximumSize() const=0;
00039                 virtual Size sizeHint() const=0;
00040                 
00041                 virtual SizePolicy sizePolicy() const=0;
00042                 
00043                 virtual void setGeometry(const Rect &rect)=0;
00044         };
00045         
00046         class FAITH_CORE_EXPORT LayoutWidgetItem : public LayoutItem
00047         {
00048                 Widget *mWidget;
00049         public:
00050                 LayoutWidgetItem(Widget *widget)
00051                         : mWidget(widget)
00052                 { }
00053                 
00054                 Widget *widget() { return mWidget; }
00055         
00056                 virtual Size minimumSize() const;
00057                 virtual Size maximumSize() const;
00058                 virtual Size sizeHint() const;
00059                 
00060                 virtual SizePolicy sizePolicy() const;
00061                 virtual void setGeometry(const Rect &rect);
00062         };
00063         
00064         class FAITH_CORE_EXPORT LayoutLayoutItem : public LayoutItem
00065         {
00066                 Layout *mLayout;
00067         public:
00068                 LayoutLayoutItem(Layout *layout)
00069                         : mLayout(layout)
00070                 { }
00071                 
00072                 Layout *layout() { return mLayout; }
00073                 
00074                 virtual Size minimumSize() const;
00075                 virtual Size maximumSize() const;
00076                 virtual Size sizeHint() const;
00077                 
00078                 virtual SizePolicy sizePolicy() const;
00079                 virtual void setGeometry(const Rect &rect);
00080         };
00081         
00082 public:
00083         Layout(Faith::Widget *widget, int margin=0, int spacing=-1);
00084         virtual ~Layout();
00085         
00086         Faith::Widget *widget() { return mWidget; }
00087         const Faith::Widget *widget() const { return mWidget; }
00088         
00092         int spacing() const;
00093         
00098         int margin() const;
00099         
00103         Faith::Rect geometry() const { return mGeometry; }
00104         
00108         Faith::Size size() const { return mGeometry.size(); }
00109 
00110 protected:
00116         virtual void layout()=0;
00117         
00118         void invalidate();
00119         
00127         virtual void childAdded(Faith::Widget *w)=0;
00128         
00136         virtual void childRemoved(Faith::Widget *w)=0;
00137         
00138         virtual Faith::Size minimumSize() const=0;
00139         virtual Faith::Size maximumSize() const=0;
00140         Faith::Size sizeHint() const;
00141         
00148         void resizeChild(LayoutItem *child, const Faith::Rect &rect);
00149         
00150 private:
00151         void setLayoutGeometryInLayout(const Faith::Rect &rect);
00152 };
00153 
00154 
00155 }
00156 
00157 #endif

Generated on Fri Sep 1 00:23:07 2006 for Faith by  doxygen 1.4.7