1
/****************************************************************************
3
** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
4
** Contact: http://www.qt-project.org/legal
6
** This file is part of the documentation of the Qt Toolkit.
8
** $QT_BEGIN_LICENSE:BSD$
9
** You may use this file under the terms of the BSD license as follows:
11
** "Redistribution and use in source and binary forms, with or without
12
** modification, are permitted provided that the following conditions are
14
** * Redistributions of source code must retain the above copyright
15
** notice, this list of conditions and the following disclaimer.
16
** * Redistributions in binary form must reproduce the above copyright
17
** notice, this list of conditions and the following disclaimer in
18
** the documentation and/or other materials provided with the
20
** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
21
** of its contributors may be used to endorse or promote products derived
22
** from this software without specific prior written permission.
25
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
29
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
31
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
39
****************************************************************************/
48
class CardLayout : public QLayout
51
CardLayout(QWidget *parent, int dist): QLayout(parent, 0, dist) {}
52
CardLayout(QLayout *parent, int dist): QLayout(parent, dist) {}
53
CardLayout(int dist): QLayout(dist) {}
56
void addItem(QLayoutItem *item);
57
QSize sizeHint() const;
58
QSize minimumSize() const;
60
QLayoutItem *itemAt(int) const;
61
QLayoutItem *takeAt(int);
62
void setGeometry(const QRect &rect);
65
QList<QLayoutItem*> list;
76
int CardLayout::count() const
78
// QList::size() returns the number of QLayoutItems in the list
84
QLayoutItem *CardLayout::itemAt(int idx) const
86
// QList::value() performs index checking, and returns 0 if we are
87
// outside the valid range
88
return list.value(idx);
91
QLayoutItem *CardLayout::takeAt(int idx)
93
// QList::take does not do index checking
94
return idx >= 0 && idx < list.size() ? list.takeAt(idx) : 0;
100
void CardLayout::addItem(QLayoutItem *item)
108
CardLayout::~CardLayout()
111
while ((item = takeAt(0)))
118
void CardLayout::setGeometry(const QRect &r)
120
QLayout::setGeometry(r);
122
if (list.size() == 0)
125
int w = r.width() - (list.count() - 1) * spacing();
126
int h = r.height() - (list.count() - 1) * spacing();
128
while (i < list.size()) {
129
QLayoutItem *o = list.at(i);
130
QRect geom(r.x() + i * spacing(), r.y() + i * spacing(), w, h);
131
o->setGeometry(geom);
139
QSize CardLayout::sizeHint() const
142
int n = list.count();
144
s = QSize(100,70); //start with a nice default size
147
QLayoutItem *o = list.at(i);
148
s = s.expandedTo(o->sizeHint());
151
return s + n*QSize(spacing(), spacing());
154
QSize CardLayout::minimumSize() const
157
int n = list.count();
160
QLayoutItem *o = list.at(i);
161
s = s.expandedTo(o->minimumSize());
164
return s + n*QSize(spacing(), spacing());