Mercurial > hg > easaier-soundaccess
view widgets/FlowLayout.cpp @ 264:5dac52cc75ef
remove CirclePlotter and resolve compilation problem for Static_Release
author | lbajardsilogic |
---|---|
date | Fri, 20 Jun 2008 14:11:27 +0000 |
parents | 0442224a9553 |
children |
line wrap: on
line source
/**************************************************************************** ** ** Copyright (C) 2004-2007 Trolltech ASA. All rights reserved. ** ** This file is part of the example classes of the Qt Toolkit. ** ** This file may be used under the terms of the GNU General Public ** License version 2.0 as published by the Free Software Foundation ** and appearing in the file LICENSE.GPL included in the packaging of ** this file. Please review the following information to ensure GNU ** General Public Licensing requirements will be met: ** http://www.trolltech.com/products/qt/opensource.html ** ** If you are unsure which license is appropriate for your use, please ** review the following information: ** http://www.trolltech.com/products/qt/licensing.html or contact the ** sales department at sales@trolltech.com. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ****************************************************************************/ #include <QtGui> #include "FlowLayout.h" FlowLayout::FlowLayout(QWidget *parent, int margin, int spacing) : QLayout(parent) { setMargin(margin); setSpacing(spacing); } FlowLayout::FlowLayout(int spacing) { setSpacing(spacing); } FlowLayout::~FlowLayout() { QLayoutItem *item; while ((item = takeAt(0))) delete item; } void FlowLayout::addItem(QLayoutItem *item) { m_itemList.append(item); } int FlowLayout::count() const { return m_itemList.size(); } QLayoutItem *FlowLayout::itemAt(int index) const { return m_itemList.value(index); } QLayoutItem *FlowLayout::takeAt(int index) { if (index >= 0 && index < m_itemList.size()) return m_itemList.takeAt(index); else return 0; } Qt::Orientations FlowLayout::expandingDirections() const { return 0; } bool FlowLayout::hasHeightForWidth() const { return true; } int FlowLayout::heightForWidth(int width) const { int height = doLayout(QRect(0, 0, width, 0), true); return height; } void FlowLayout::setGeometry(const QRect &rect) { QLayout::setGeometry(rect); doLayout(rect, false); } QSize FlowLayout::sizeHint() const { return minimumSize(); } QSize FlowLayout::minimumSize() const { QSize size; QLayoutItem *item; QLayoutItem *itemXMax = 0; QLayoutItem *itemYMax = 0; foreach (item, m_itemList) { //init itemXMax and itemYMax if ((itemXMax == 0) && (itemYMax == 0)) { itemXMax = item; itemYMax = item; } //find XMax if ( (itemXMax->geometry().x() < item->geometry().x()) || ( (itemXMax->geometry().x() == item->geometry().x()) && (itemXMax->geometry().width() < item->geometry().width()) ) ) { itemXMax = item; } //find YMax if ( (itemYMax->geometry().y() < item->geometry().y()) || ( (itemYMax->geometry().y() == item->geometry().y()) && (itemYMax->geometry().height() < item->geometry().height()) ) ) { itemYMax = item; } } if ((itemXMax != 0) && (itemYMax != 0)) size = QSize(itemXMax->geometry().x() + itemXMax->minimumSize().width(), itemYMax->geometry().y() + itemYMax->minimumSize().height()); size += QSize(2*margin(), 2*margin()); return size; } int FlowLayout::doLayout(const QRect &rect, bool testOnly) const { int x = rect.x(); int y = rect.y(); int lineHeight = 0; QLayoutItem *item; foreach (item, m_itemList) { int nextX = x + item->sizeHint().width() + spacing(); if (nextX - spacing() > rect.right() && lineHeight > 0) { x = rect.x(); y = y + lineHeight + spacing(); nextX = x + item->sizeHint().width() + spacing(); lineHeight = 0; } if (!testOnly) item->setGeometry(QRect(QPoint(x, y), item->sizeHint())); x = nextX; lineHeight = qMax(lineHeight, item->sizeHint().height()); } return y + lineHeight - rect.y(); }