Skip to content
qwt_dyngrid_layout.h 2.29 KiB
Newer Older
pixhawk's avatar
pixhawk committed
/* -*- 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

Bryant's avatar
Bryant committed
#include "qwt_global.h"
pixhawk's avatar
pixhawk committed
#include <qlayout.h>
#include <qsize.h>
#include <qlist.h>

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

  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).
Bryant's avatar
Bryant committed
  It lays out as many number of columns as possible (limited by maxColumns()).
pixhawk's avatar
pixhawk committed
*/

class QWT_EXPORT QwtDynGridLayout : public QLayout
{
    Q_OBJECT
public:
Bryant's avatar
Bryant committed
    explicit QwtDynGridLayout( QWidget *, int margin = 0, int space = -1 );
    explicit QwtDynGridLayout( int space = -1 );
pixhawk's avatar
pixhawk committed

    virtual ~QwtDynGridLayout();

    virtual void invalidate();

Bryant's avatar
Bryant committed
    void setMaxColumns( uint maxCols );
    uint maxColumns() const;
pixhawk's avatar
pixhawk committed

    uint numRows () const;
Bryant's avatar
Bryant committed
    uint numColumns () const;
pixhawk's avatar
pixhawk committed

Bryant's avatar
Bryant committed
    virtual void addItem( QLayoutItem * );
pixhawk's avatar
pixhawk committed

    virtual QLayoutItem *itemAt( int index ) const;
    virtual QLayoutItem *takeAt( int index );
    virtual int count() const;

Bryant's avatar
Bryant committed
    void setExpandingDirections( Qt::Orientations );
pixhawk's avatar
pixhawk committed
    virtual Qt::Orientations expandingDirections() const;
Bryant's avatar
Bryant committed
    QList<QRect> layoutItems( const QRect &, uint numCols ) const;
pixhawk's avatar
pixhawk committed

    virtual int maxItemWidth() const;

Bryant's avatar
Bryant committed
    virtual void setGeometry( const QRect &rect );
pixhawk's avatar
pixhawk committed

    virtual bool hasHeightForWidth() const;
Bryant's avatar
Bryant committed
    virtual int heightForWidth( int ) const;
pixhawk's avatar
pixhawk committed

    virtual QSize sizeHint() const;

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

Bryant's avatar
Bryant committed
    virtual uint columnsForWidth( int width ) const;
pixhawk's avatar
pixhawk committed

protected:

Bryant's avatar
Bryant committed
    void layoutGrid( uint numCols,
        QVector<int>& rowHeight, QVector<int>& colWidth ) const;
    void stretchGrid( const QRect &rect, uint numCols,
        QVector<int>& rowHeight, QVector<int>& colWidth ) const;
pixhawk's avatar
pixhawk committed

private:
    void init();
Bryant's avatar
Bryant committed
    int maxRowWidth( int numCols ) const;
pixhawk's avatar
pixhawk committed

    class PrivateData;
pixhawk's avatar
pixhawk committed
    PrivateData *d_data;
};

#endif