summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/auto/widgets/kernel/qboxlayout/tst_qboxlayout.cpp21
-rw-r--r--tests/auto/widgets/kernel/qformlayout/tst_qformlayout.cpp49
-rw-r--r--tests/auto/widgets/kernel/qgridlayout/tst_qgridlayout.cpp45
-rw-r--r--tests/auto/widgets/kernel/qstackedlayout/tst_qstackedlayout.cpp22
-rw-r--r--tests/manual/widgets/kernel/kernel.pro2
-rw-r--r--tests/manual/widgets/kernel/layoutreplace/main.cpp137
-rw-r--r--tests/manual/widgets/kernel/layoutreplace/main.pro2
7 files changed, 276 insertions, 2 deletions
diff --git a/tests/auto/widgets/kernel/qboxlayout/tst_qboxlayout.cpp b/tests/auto/widgets/kernel/qboxlayout/tst_qboxlayout.cpp
index bdc32ba197..850bedd9cc 100644
--- a/tests/auto/widgets/kernel/qboxlayout/tst_qboxlayout.cpp
+++ b/tests/auto/widgets/kernel/qboxlayout/tst_qboxlayout.cpp
@@ -79,6 +79,7 @@ private slots:
void taskQTBUG_7103_minMaxWidthNotRespected();
void taskQTBUG_27420_takeAtShouldUnparentLayout();
+ void replaceWidget();
};
class CustomLayoutStyle : public QProxyStyle
@@ -328,7 +329,6 @@ void tst_QBoxLayout::taskQTBUG_27420_takeAtShouldUnparentLayout()
QVERIFY(!inner.isNull());
}
-
struct Descr
{
Descr(int min, int sh, int max = -1, bool exp= false, int _stretch = 0, bool _empty = false)
@@ -507,5 +507,24 @@ void tst_QBoxLayout::testLayoutEngine()
}
}
+void tst_QBoxLayout::replaceWidget()
+{
+ QWidget w;
+ QBoxLayout *boxLayout = new QVBoxLayout(&w);
+
+ QLineEdit *replaceFrom = new QLineEdit;
+ QLineEdit *replaceTo = new QLineEdit;
+ boxLayout->addWidget(new QLineEdit());
+ boxLayout->addWidget(replaceFrom);
+ boxLayout->addWidget(new QLineEdit());
+
+ QCOMPARE(boxLayout->indexOf(replaceFrom), 1);
+ QCOMPARE(boxLayout->indexOf(replaceTo), -1);
+ boxLayout->replaceWidget(replaceFrom, replaceTo);
+
+ QCOMPARE(boxLayout->indexOf(replaceFrom), -1);
+ QCOMPARE(boxLayout->indexOf(replaceTo), 1);
+}
+
QTEST_MAIN(tst_QBoxLayout)
#include "tst_qboxlayout.moc"
diff --git a/tests/auto/widgets/kernel/qformlayout/tst_qformlayout.cpp b/tests/auto/widgets/kernel/qformlayout/tst_qformlayout.cpp
index b970de8e87..135605f185 100644
--- a/tests/auto/widgets/kernel/qformlayout/tst_qformlayout.cpp
+++ b/tests/auto/widgets/kernel/qformlayout/tst_qformlayout.cpp
@@ -122,6 +122,7 @@ private slots:
void itemAt();
void takeAt();
void layoutAlone();
+ void replaceWidget();
/*
void setGeometry(const QRect &rect);
QSize minimumSize() const;
@@ -934,6 +935,54 @@ void tst_QFormLayout::taskQTBUG_27420_takeAtShouldUnparentLayout()
QVERIFY(!inner.isNull());
}
+void tst_QFormLayout::replaceWidget()
+{
+ QWidget w;
+ QFormLayout *layout = new QFormLayout();
+ w.setLayout(layout);
+ QLineEdit *edit1 = new QLineEdit();
+ QLineEdit *edit2 = new QLineEdit();
+ QLineEdit *edit3 = new QLineEdit();
+ QLabel *label1 = new QLabel();
+ QLabel *label2 = new QLabel();
+
+ layout->addRow("Label", edit1);
+ layout->addRow(label1, edit2);
+
+ // Verify controls not in layout
+ QCOMPARE(layout->indexOf(edit3), -1);
+ QCOMPARE(layout->indexOf(label2), -1);
+
+ // Verify controls in layout
+ int editIndex = layout->indexOf(edit1);
+ int labelIndex = layout->indexOf(label1);
+ QVERIFY(editIndex > 0);
+ QVERIFY(labelIndex > 0);
+ int rownum;
+ QFormLayout::ItemRole role;
+
+ // replace editor
+ layout->replaceWidget(edit1, edit3);
+ edit1->hide(); // Not strictly needed for the test, but for normal usage it is.
+ QCOMPARE(layout->indexOf(edit1), -1);
+ QCOMPARE(layout->indexOf(edit3), editIndex);
+ QCOMPARE(layout->indexOf(label1), labelIndex);
+ rownum = -1;
+ role = QFormLayout::SpanningRole;
+ layout->getWidgetPosition(edit3, &rownum, &role);
+ QCOMPARE(rownum, 0);
+ QCOMPARE(role, QFormLayout::FieldRole);
+
+ layout->replaceWidget(label1, label2);
+ label1->hide();
+ QCOMPARE(layout->indexOf(label1), -1);
+ QCOMPARE(layout->indexOf(label2), labelIndex);
+ layout->getWidgetPosition(label2, &rownum, &role);
+ QCOMPARE(rownum, 1);
+ QCOMPARE(role, QFormLayout::LabelRole);
+
+}
+
QTEST_MAIN(tst_QFormLayout)
#include "tst_qformlayout.moc"
diff --git a/tests/auto/widgets/kernel/qgridlayout/tst_qgridlayout.cpp b/tests/auto/widgets/kernel/qgridlayout/tst_qgridlayout.cpp
index 10c759da5e..e067b071e7 100644
--- a/tests/auto/widgets/kernel/qgridlayout/tst_qgridlayout.cpp
+++ b/tests/auto/widgets/kernel/qgridlayout/tst_qgridlayout.cpp
@@ -101,6 +101,7 @@ private slots:
void distributeMultiCell();
void taskQTBUG_27420_takeAtShouldUnparentLayout();
+ void replaceWidget();
private:
QWidget *testWidget;
@@ -1656,5 +1657,49 @@ void tst_QGridLayout::taskQTBUG_27420_takeAtShouldUnparentLayout()
QVERIFY(!inner.isNull());
}
+void tst_QGridLayout::replaceWidget()
+{
+ QWidget wdg;
+ QGridLayout *l = new QGridLayout();
+ const int itemCount = 9;
+ QLabel *labels[itemCount];
+
+ // setup layout
+ for (int n = 0; n < itemCount; ++n) {
+ int x = n % 3;
+ int y = n / 3;
+ labels[n] = new QLabel(QString("label %1").arg(n));
+ Qt::Alignment align = (n % 3 ? Qt::AlignLeft : Qt::AlignRight);
+ l->addWidget(labels[n], x * 3, y * 3, (n % 2) + 1, (n + 1) % 2 + 1, align);
+ }
+ wdg.setLayout(l);
+
+ // iterate and replace
+ for (int n = 0; n < itemCount; n += 2) {
+ int i = l->indexOf(labels[n]);
+ int fromRow, fromCol, fromRowSpan, fromColSpan;
+ l->getItemPosition(i, &fromRow, &fromCol, &fromRowSpan, &fromColSpan);
+ Qt::Alignment fromAlign = l->itemAt(i)->alignment();
+ // do replace
+ QPushButton *pb = new QPushButton("replaced");
+ QLayoutItem *olditem = l->replaceWidget(labels[n], pb);
+ // verify
+ QCOMPARE(i, l->indexOf(pb));
+ QVERIFY(olditem != 0);
+ QCOMPARE(l->indexOf(labels[n]), -1);
+ int toRow, toCol, toRowSpan, toColSpan;
+ l->getItemPosition(i, &toRow, &toCol, &toRowSpan, &toColSpan);
+ QCOMPARE(fromRow, toRow);
+ QCOMPARE(fromCol, toCol);
+ QCOMPARE(fromRowSpan, toRowSpan);
+ QCOMPARE(fromColSpan, toColSpan);
+ Qt::Alignment toAlign = l->itemAt(i)->alignment();
+ QCOMPARE(fromAlign, toAlign);
+ // clean up
+ olditem->widget()->deleteLater();
+ delete olditem;
+ }
+}
+
QTEST_MAIN(tst_QGridLayout)
#include "tst_qgridlayout.moc"
diff --git a/tests/auto/widgets/kernel/qstackedlayout/tst_qstackedlayout.cpp b/tests/auto/widgets/kernel/qstackedlayout/tst_qstackedlayout.cpp
index 9ab7bb5305..1ff2e7867c 100644
--- a/tests/auto/widgets/kernel/qstackedlayout/tst_qstackedlayout.cpp
+++ b/tests/auto/widgets/kernel/qstackedlayout/tst_qstackedlayout.cpp
@@ -70,6 +70,7 @@ private slots:
void removeWidget();
void keepFocusAfterSetCurrent();
void heigthForWidth();
+ void replaceWidget();
private:
QWidget *testWidget;
@@ -393,6 +394,27 @@ void tst_QStackedLayout::heigthForWidth()
}
+void tst_QStackedLayout::replaceWidget()
+{
+ QWidget w;
+ QStackedLayout *stackLayout = new QStackedLayout(&w);
+
+ QLineEdit *replaceFrom = new QLineEdit;
+ QLineEdit *replaceTo = new QLineEdit;
+ stackLayout->addWidget(new QLineEdit());
+ stackLayout->addWidget(replaceFrom);
+ stackLayout->addWidget(new QLineEdit());
+ stackLayout->setCurrentWidget(replaceFrom);
+
+ QCOMPARE(stackLayout->indexOf(replaceFrom), 1);
+ QCOMPARE(stackLayout->indexOf(replaceTo), -1);
+ stackLayout->replaceWidget(replaceFrom, replaceTo);
+
+ QCOMPARE(stackLayout->indexOf(replaceFrom), -1);
+ QCOMPARE(stackLayout->indexOf(replaceTo), 1);
+ QCOMPARE(stackLayout->currentWidget(), replaceTo);
+}
+
QTEST_MAIN(tst_QStackedLayout)
#include "tst_qstackedlayout.moc"
diff --git a/tests/manual/widgets/kernel/kernel.pro b/tests/manual/widgets/kernel/kernel.pro
index 968d71724f..5dbd25f8bd 100644
--- a/tests/manual/widgets/kernel/kernel.pro
+++ b/tests/manual/widgets/kernel/kernel.pro
@@ -1,2 +1,2 @@
TEMPLATE = subdirs
-SUBDIRS = qtooltip sizeonhide
+SUBDIRS = qtooltip sizeonhide layoutreplace
diff --git a/tests/manual/widgets/kernel/layoutreplace/main.cpp b/tests/manual/widgets/kernel/layoutreplace/main.cpp
new file mode 100644
index 0000000000..8cbb2a1a12
--- /dev/null
+++ b/tests/manual/widgets/kernel/layoutreplace/main.cpp
@@ -0,0 +1,137 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Thorbjørn Martsum - tmartsum[at]gmail.com
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.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 the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QGridLayout>
+#include <QFormLayout>
+#include <QStackedLayout>
+#include <QPushButton>
+#include <QLabel>
+#include <QApplication>
+
+class ReplaceButton : public QPushButton
+{
+ Q_OBJECT
+public:
+ ReplaceButton(const QString &text = QString("click to replace")) : QPushButton(text)
+ {
+ static int v = 0;
+ ++v;
+ QString txt = QString("click to replace %1").arg(v);
+ setText(txt);
+ connect(this, SIGNAL(clicked()), this, SLOT(replace()));
+ }
+protected slots:
+ void replace()
+ {
+ if (!parentWidget())
+ return;
+ static int n = 0;
+ ++n;
+ if (parentWidget()->layout()->replaceWidget(this, new QLabel(QString("replaced(%1)").arg(n))))
+ deleteLater();
+ }
+};
+
+class StackButtonChange : public QPushButton
+{
+ Q_OBJECT
+public:
+ StackButtonChange(QStackedLayout *l) : QPushButton("stack wdg change")
+ {
+ sl = l;
+ connect(this, SIGNAL(clicked()), this, SLOT(changeWdg()));
+ }
+protected slots:
+ void changeWdg()
+ {
+ int index = sl->indexOf(sl->currentWidget());
+ ++index;
+ if (index >= sl->count())
+ index = 0;
+ sl->setCurrentWidget(sl->itemAt(index)->widget());
+ sl->parentWidget()->update();
+ }
+protected:
+ QStackedLayout *sl;
+};
+
+int main(int argc, char **argv) {
+ QApplication app(argc, argv);
+ QWidget wdg1;
+ QGridLayout *l1 = new QGridLayout();
+ l1->addWidget(new ReplaceButton(), 1, 1, 2, 2, Qt::AlignCenter);
+ l1->addWidget(new ReplaceButton(), 3, 1, 1, 1, Qt::AlignRight);
+ l1->addWidget(new ReplaceButton(), 1, 3, 1, 1, Qt::AlignLeft);
+ l1->addWidget(new ReplaceButton(), 2, 3, 1, 1, Qt::AlignLeft);
+ l1->addWidget(new ReplaceButton(), 3, 2, 1, 1, Qt::AlignRight);
+ wdg1.setLayout(l1);
+ wdg1.setWindowTitle("QGridLayout");
+ wdg1.setGeometry(100, 100, 100, 100);
+ wdg1.show();
+
+ QWidget wdg2;
+ QFormLayout *l2 = new QFormLayout();
+ l2->addRow(QString("Label1"), new ReplaceButton());
+ l2->addRow(QString("Label2"), new ReplaceButton());
+ l2->addRow(new ReplaceButton(), new ReplaceButton());
+ wdg2.setLayout(l2);
+ wdg2.setWindowTitle("QFormLayout");
+ wdg2.setGeometry(100 + wdg1.sizeHint().width() + 5, 100, 100, 100);
+ wdg2.show();
+
+ QWidget wdg3;
+ QBoxLayout *l3 = new QVBoxLayout(); // new QHBoxLayout()
+ QStackedLayout *sl = new QStackedLayout();
+ sl->addWidget(new ReplaceButton());
+ sl->addWidget(new ReplaceButton());
+ sl->addWidget(new ReplaceButton());
+ l3->addLayout(sl);
+ l3->addWidget(new StackButtonChange(sl));
+ l3->addWidget(new ReplaceButton());
+ l3->addWidget(new ReplaceButton());
+ wdg3.setLayout(l3);
+ wdg3.setWindowTitle("QStackedLayout + BoxLayout");
+ wdg3.setGeometry(100, 100 + wdg1.sizeHint().height() + 30, 100 , 100);
+ wdg3.show();
+
+ app.exec();
+}
+#include "main.moc"
diff --git a/tests/manual/widgets/kernel/layoutreplace/main.pro b/tests/manual/widgets/kernel/layoutreplace/main.pro
new file mode 100644
index 0000000000..54c6a4a9fc
--- /dev/null
+++ b/tests/manual/widgets/kernel/layoutreplace/main.pro
@@ -0,0 +1,2 @@
+SOURCES = main.cpp
+QT += widgets