00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #ifndef QWT_DYNGRID_LAYOUT_H
00011 #define QWT_DYNGRID_LAYOUT_H
00012
00013 #include <qlayout.h>
00014 #include <qsize.h>
00015 #include "qwt_array.h"
00016 #include <qvaluelist.h>
00017 #include "qwt_global.h"
00018
00019 class QwtDynGridLayoutPrivate;
00020
00030 class QWT_EXPORT QwtDynGridLayout : public QLayout
00031 {
00032 Q_OBJECT
00033 public:
00034 QwtDynGridLayout(QWidget *, int margin=0,
00035 int space=-1, const char *name = 0);
00036 QwtDynGridLayout(QLayout *, int space=-1, const char * name = 0 );
00037 QwtDynGridLayout(int space=-1, const char * name=0 );
00038
00039 virtual ~QwtDynGridLayout();
00040
00041 virtual void invalidate();
00042
00043 void setMaxCols(uint maxCols);
00044 uint maxCols() const;
00045
00046 uint numRows () const;
00047 uint numCols () const;
00048
00049 virtual void addItem(QLayoutItem *);
00050 virtual QLayoutIterator iterator();
00051
00052 virtual int maxItemWidth() const;
00053
00054 virtual void setGeometry(const QRect &rect);
00055
00056 virtual bool hasHeightForWidth() const;
00057 virtual int heightForWidth(int) const;
00058
00059 virtual QSize sizeHint() const;
00060
00061 void setExpanding(QSizePolicy::ExpandData);
00062 virtual QSizePolicy::ExpandData expanding() const;
00063
00064 virtual bool isEmpty() const;
00065 uint itemCount() const;
00066
00067 virtual uint columnsForWidth(int width) const;
00068
00069 QValueList<QRect> layoutItems(const QRect &, uint numCols) const;
00070
00071 protected:
00072
00073 void layoutGrid(uint numCols,
00074 QwtArray<int>& rowHeight, QwtArray<int>& colWidth) const;
00075 void stretchGrid(const QRect &rect, uint numCols,
00076 QwtArray<int>& rowHeight, QwtArray<int>& colWidth) const;
00077
00078
00079 private:
00080 void init();
00081 int maxRowWidth(int numCols) const;
00082 void updateLayoutCache();
00083
00084 uint d_maxCols;
00085 uint d_numRows;
00086 uint d_numCols;
00087
00088 QSizePolicy::ExpandData d_expanding;
00089 QwtDynGridLayoutPrivate *d_layoutData;
00090 };
00091
00092 #endif
00093
00094
00095
00096
00097
00098