This commit is contained in:
Sergio Martins
2020-04-27 22:30:39 +01:00
parent da35ac9f46
commit ad87e73928
2 changed files with 58 additions and 0 deletions

View File

@@ -83,6 +83,13 @@ QPoint Item::mapFromParent(QPoint p) const
return p - pos();
}
int Item::mapFromRoot(int p, Qt::Orientation o) const
{
if (o == Qt::Vertical)
return mapFromRoot(QPoint(0, p)).y();
return mapFromRoot(QPoint(p, 0)).x();
}
void Item::setFrame(GuestInterface *guest)
{
Q_ASSERT(!guest || !m_guest);
@@ -2237,6 +2244,49 @@ bool ItemContainer::isHorizontal() const
return m_orientation == Qt::Horizontal;
}
int ItemContainer::indexOf(Anchor *separator) const
{
return m_separators.indexOf(separator);
}
int ItemContainer::minPosForSeparator(Anchor *separator) const
{
const int globalMin = minPosForSeparator_global(separator);
return mapFromRoot(globalMin, m_orientation);
}
int ItemContainer::maxPosForSeparator(Anchor *separator) const
{
const int globalMax = maxPosForSeparator_global(separator);
return mapFromRoot(globalMax, m_orientation);
}
int ItemContainer::minPosForSeparator_global(Anchor *separator) const
{
const int separatorIndex = indexOf(separator);
Q_ASSERT(separatorIndex != -1);
const Item::List children = visibleChildren();
Q_ASSERT(separatorIndex + 1 < children.size());
Item *item = children.at(separatorIndex + 1);
const int available1 = availableOnSide(item, Side1);
return separator->position() - available1;
}
int ItemContainer::maxPosForSeparator_global(Anchor *separator) const
{
const int separatorIndex = indexOf(separator);
Q_ASSERT(separatorIndex != -1);
const Item::List children = visibleChildren();
Q_ASSERT(separatorIndex - 1 >= 0);
Item *item = children.at(separatorIndex - 1);
const int available2 = availableOnSide(item, Side2);
return separator->position() + available2;
}
QVector<Layouting::Anchor*> ItemContainer::separators_recursive() const
{
Layouting::Anchor::List separators = m_separators;

View File

@@ -337,6 +337,7 @@ public:
QPoint mapFromRoot(QPoint) const;
QRect mapFromRoot(QRect) const;
QPoint mapFromParent(QPoint) const;
int mapFromRoot(int p, Qt::Orientation) const;
QWidget *frame() const { return m_guest ? m_guest->asWidget() : nullptr; } // TODO: rename
GuestInterface *guest() const { return m_guest; }
@@ -499,6 +500,13 @@ public:
Qt::Orientation orientation() const;
bool isVertical() const;
bool isHorizontal() const;
int indexOf(Anchor *) const;
int minPosForSeparator(Anchor *) const;
int maxPosForSeparator(Anchor *) const;
int minPosForSeparator_global(Anchor *) const;
int maxPosForSeparator_global(Anchor *) const;
Q_SIGNALS:
void itemsChanged();
void numVisibleItemsChanged(int);