qwt_dyngrid_layout.h 2.84 KB
Newer Older
pixhawk's avatar
pixhawk committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
 * Qwt Widget Library
 * Copyright (C) 1997   Josef Wilgen
 * Copyright (C) 2002   Uwe Rathmann
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the Qwt License, Version 1.0
 *****************************************************************************/

#ifndef QWT_DYNGRID_LAYOUT_H
#define QWT_DYNGRID_LAYOUT_H

#include <qlayout.h>
#include <qsize.h>
#if QT_VERSION >= 0x040000
#include <qlist.h>
#else
#include <qvaluelist.h>
#endif
#include "qwt_global.h"
#include "qwt_array.h"

/*!
  \brief The QwtDynGridLayout class lays out widgets in a grid,
         adjusting the number of columns and rows to the current size.
26 27 28

  QwtDynGridLayout takes the space it gets, divides it up into rows and
  columns, and puts each of the widgets it manages into the correct cell(s).
pixhawk's avatar
pixhawk committed
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
  It lays out as many number of columns as possible (limited by maxCols()).
*/

class QWT_EXPORT QwtDynGridLayout : public QLayout
{
    Q_OBJECT
public:
    explicit QwtDynGridLayout(QWidget *, int margin = 0, int space = -1);
#if QT_VERSION < 0x040000
    explicit QwtDynGridLayout(QLayout *, int space = -1);
#endif
    explicit QwtDynGridLayout(int space = -1);

    virtual ~QwtDynGridLayout();

    virtual void invalidate();

    void setMaxCols(uint maxCols);
    uint maxCols() const;

49
    uint numRows () const;
pixhawk's avatar
pixhawk committed
50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
    uint numCols () const;

    virtual void addItem(QLayoutItem *);

#if QT_VERSION >= 0x040000
    virtual QLayoutItem *itemAt( int index ) const;
    virtual QLayoutItem *takeAt( int index );
    virtual int count() const;

    void setExpandingDirections(Qt::Orientations);
    virtual Qt::Orientations expandingDirections() const;
    QList<QRect> layoutItems(const QRect &, uint numCols) const;
#else
    virtual QLayoutIterator iterator();

    void setExpanding(QSizePolicy::ExpandData);
    virtual QSizePolicy::ExpandData expanding() const;
    QValueList<QRect> layoutItems(const QRect &, uint numCols) const;
#endif

    virtual int maxItemWidth() const;

    virtual void setGeometry(const QRect &rect);

    virtual bool hasHeightForWidth() const;
    virtual int heightForWidth(int) const;

    virtual QSize sizeHint() const;

    virtual bool isEmpty() const;
    uint itemCount() const;

    virtual uint columnsForWidth(int width) const;

protected:

    void layoutGrid(uint numCols,
87 88 89
                    QwtArray<int>& rowHeight, QwtArray<int>& colWidth) const;
    void stretchGrid(const QRect &rect, uint numCols,
                     QwtArray<int>& rowHeight, QwtArray<int>& colWidth) const;
pixhawk's avatar
pixhawk committed
90 91 92 93 94 95 96 97 98 99 100


private:
    void init();
    int maxRowWidth(int numCols) const;
    void updateLayoutCache();

#if QT_VERSION < 0x040000
// xlC 5.1, the IBM/AIX C++ compiler, needs it to be public
public:
#endif
101
    class PrivateData;
pixhawk's avatar
pixhawk committed
102 103 104 105 106 107

private:
    PrivateData *d_data;
};

#endif