QTfrontend/ui/qaspectratiolayout.h
author dag10
Mon, 14 Jan 2013 11:19:59 +0100
changeset 8377 869f80966a77
parent 6616 f77bb02b669f
permissions -rw-r--r--
GCI2012: Improve Game Configuration Widget - Refactored mapmodel+datamanager to have two separate map models for static and mission maps, and then three static MapInfos in MapModel for the three special maps (random, maze, drawn). - Created theme selector dialog. - Created seed view/edit dialog. - Enlarged start icon on pagemultiplayer and pagenetgame, and added Start.png. - Moved "Settings" button on pagemultiplayer and pagenetgame from middle of page to page footer. - Added "load drawing" button to mapcontainer widget. - Map preview is no longer the randomize button; The randomize functionality is now in a button of its own. - Map preview no longer grays out (isn't disabled) when in slave mode. - Seed is now viewable and copyable when in slave mode -- but not editable. - You should now use the property master (isMaster() and setMaster()) on gamecfgwidget and mapcontainer instead of the enabled property. This is because some widgets (e.g. "view/edit seed" button and map preview) shouldn't be disabled, when all other widgets should be. - Added mission map descriptions w/ locale support in INI format in mapname/desc.txt if applicable. Use '|' for line break.

/*
 * Copyright (c) 2009 Nokia Corporation.
 */

#ifndef QASPECTRATIOLAYOUT_H_
#define QASPECTRATIOLAYOUT_H_

#include <QLayout>
#include <QPointer>
#include <QRect>
#include <QWidgetItem>
#include <QLayoutItem>


class QAspectRatioLayout : public QLayout
{
        Q_OBJECT

    public:
        QAspectRatioLayout(QWidget* parent, int spacing =-1);
        QAspectRatioLayout(int spacing = -1);
        ~QAspectRatioLayout();

        /* Convenience method */
        virtual void add(QLayoutItem* item);

        /* http://doc.trolltech.com/qlayout.html#addItem */
        virtual void addItem(QLayoutItem* item);
        /* http://doc.trolltech.com/qlayout.html#addWidget */
        virtual void addWidget(QWidget* widget);
        /* http://doc.trolltech.com/qlayout.html#takeAt */
        virtual QLayoutItem* takeAt(int index);
        /* http://doc.trolltech.com/qlayout.html#itemAt */
        virtual QLayoutItem* itemAt(int index) const;
        /* http://doc.trolltech.com/qlayout.html#count */
        virtual int count() const;

        /*
         * These are ours since we do have only one item.
         */
        virtual QLayoutItem* replaceItem(QLayoutItem* item);
        virtual QLayoutItem* take();
        virtual bool hasItem() const;

        /* http://doc.trolltech.com/qlayout.html#expandingDirections */
        virtual Qt::Orientations expandingDirections() const;

        /*
         * This method contains most of the juice of this article.
         * http://doc.trolltech.com/qlayoutitem.html#setGeometry
         */
        virtual void setGeometry(const QRect& rect);
        /* http://doc.trolltech.com/qlayoutitem.html#geometry */
        virtual QRect geometry();

        /* http://doc.trolltech.com/qlayoutitem.html#sizeHint */
        virtual QSize sizeHint() const;
        /* http://doc.trolltech.com/qlayout.html#minimumSize */
        virtual QSize minimumSize() const;
        /* http://doc.trolltech.com/qlayoutitem.html#hasHeightForWidth */
        virtual bool hasHeightForWidth() const;

    private:
        /* Saves the last received rect. */
        void setLastReceivedRect(const QRect& rect);
        /* Used to initialize the object. */
        void init(int spacing);
        /* Calculates the maximum size for the item from the assigned size. */
        QSize calculateProperSize(QSize from) const;
        /* Calculates the center location from the assigned size and
         * the items size. */
        QPoint calculateCenterLocation(QSize from, QSize itemSize) const;
        /* Check if two QRects are equal */
        bool areRectsEqual(const QRect& a, const QRect& b) const;
        /* Contains item reference */
        QLayoutItem* item;
        /*
         * Used for caching so we won't do calculations every time
         * setGeometry is called.
         */
        QRect* lastReceivedRect;
        /* Contains geometry */
        QRect* _geometry;

};

#endif /* QASPECTRATIOLAYOUT_H_ */