Added ItemBoxContainer::tst_numSideBySide_recursive()

This commit is contained in:
Sergio Martins
2022-06-02 13:59:20 +01:00
parent 4727c9c7fc
commit f5622732ce
3 changed files with 65 additions and 0 deletions

View File

@@ -979,6 +979,32 @@ ItemBoxContainer::~ItemBoxContainer()
delete d; delete d;
} }
int ItemBoxContainer::numSideBySide_recursive(Qt::Orientation o) const
{
int num = 0;
if (d->m_orientation == o) {
// Example: Container is horizontal and we want to know how many layouted horizontally
for (Item *child : m_children) {
if (ItemBoxContainer *container = child->asBoxContainer()) {
num += container->numSideBySide_recursive(o);
} else {
num++;
}
}
} else {
// Example: Container is vertical and we want to know how many layouted horizontally
for (Item *child : m_children) {
if (ItemBoxContainer *container = child->asBoxContainer()) {
num = qMax(num, container->numSideBySide_recursive(o));
} else {
num = qMax(num, 1);
}
}
}
return num;
}
bool ItemBoxContainer::checkSanity() bool ItemBoxContainer::checkSanity()
{ {
d->m_checkSanityScheduled = false; d->m_checkSanityScheduled = false;

View File

@@ -475,6 +475,10 @@ public:
bool isHorizontal() const; bool isHorizontal() const;
int length() const; int length() const;
/// @brief Returns the number of items layed out horizontally or vertically
/// But honours nesting
int numSideBySide_recursive(Qt::Orientation) const;
private: private:
bool hasOrientation() const; bool hasOrientation() const;
int indexOfVisibleChild(const Item *) const; int indexOfVisibleChild(const Item *) const;

View File

@@ -195,6 +195,7 @@ private Q_SLOTS:
void tst_maxSizeHonouredWhenAnotherRemoved(); void tst_maxSizeHonouredWhenAnotherRemoved();
void tst_simplify(); void tst_simplify();
void tst_adjacentLayoutBorders(); void tst_adjacentLayoutBorders();
void tst_numSideBySide_recursive();
}; };
class MyHostWidget : public QWidget class MyHostWidget : public QWidget
@@ -1887,6 +1888,40 @@ void TestMultiSplitter::tst_adjacentLayoutBorders()
QCOMPARE(borders4, LayoutBorderLocation_South); QCOMPARE(borders4, LayoutBorderLocation_South);
} }
void TestMultiSplitter::tst_numSideBySide_recursive()
{
auto root = createRoot();
QVERIFY(root->isVertical());
QCOMPARE(root->numSideBySide_recursive(Qt::Vertical), 0);
QCOMPARE(root->numSideBySide_recursive(Qt::Horizontal), 0);
auto item1 = createItem();
root->insertItem(item1, Location_OnRight);
QCOMPARE(root->numSideBySide_recursive(Qt::Vertical), 1);
QCOMPARE(root->numSideBySide_recursive(Qt::Horizontal), 1);
auto item2 = createItem();
root->insertItem(item2, Location_OnTop);
QCOMPARE(root->numSideBySide_recursive(Qt::Vertical), 2);
QCOMPARE(root->numSideBySide_recursive(Qt::Horizontal), 1);
auto item3 = createItem();
root->insertItem(item3, Location_OnTop);
QCOMPARE(root->numSideBySide_recursive(Qt::Vertical), 3);
QCOMPARE(root->numSideBySide_recursive(Qt::Horizontal), 1);
auto item1Child = createItem();
ItemBoxContainer::insertItemRelativeTo(item1Child, item1, Location_OnLeft);
QCOMPARE(root->numSideBySide_recursive(Qt::Vertical), 3);
QCOMPARE(root->numSideBySide_recursive(Qt::Horizontal), 2);
auto item1Child1Child = createItem();
ItemBoxContainer::insertItemRelativeTo(item1Child1Child, item1Child, Location_OnBottom);
QCOMPARE(root->numSideBySide_recursive(Qt::Vertical), 4);
QCOMPARE(root->numSideBySide_recursive(Qt::Horizontal), 2);
}
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
bool qpaPassed = false; bool qpaPassed = false;