Move lots of methods from MultiSplitter to its base class
This commit is contained in:
@@ -138,3 +138,96 @@ void LayoutWidget::setLayoutSize(QSize size)
|
||||
resize(size);
|
||||
}
|
||||
}
|
||||
|
||||
const Layouting::Item::List LayoutWidget::items() const
|
||||
{
|
||||
return m_rootItem->items_recursive();
|
||||
}
|
||||
|
||||
bool LayoutWidget::containsItem(const Layouting::Item *item) const
|
||||
{
|
||||
return m_rootItem->contains_recursive(item);
|
||||
}
|
||||
|
||||
bool LayoutWidget::containsFrame(const Frame *frame) const
|
||||
{
|
||||
return itemForFrame(frame) != nullptr;
|
||||
}
|
||||
|
||||
int LayoutWidget::count() const
|
||||
{
|
||||
return m_rootItem->count_recursive();
|
||||
}
|
||||
|
||||
int LayoutWidget::visibleCount() const
|
||||
{
|
||||
return m_rootItem->visibleCount_recursive();
|
||||
}
|
||||
|
||||
int LayoutWidget::placeholderCount() const
|
||||
{
|
||||
return count() - visibleCount();
|
||||
}
|
||||
|
||||
Layouting::Item *LayoutWidget::itemForFrame(const Frame *frame) const
|
||||
{
|
||||
if (!frame)
|
||||
return nullptr;
|
||||
|
||||
return m_rootItem->itemForWidget(frame);
|
||||
}
|
||||
|
||||
DockWidgetBase::List LayoutWidget::dockWidgets() const
|
||||
{
|
||||
DockWidgetBase::List dockWidgets;
|
||||
const Frame::List frames = this->frames();
|
||||
for (Frame *frame : frames)
|
||||
dockWidgets << frame->dockWidgets();
|
||||
|
||||
return dockWidgets;
|
||||
}
|
||||
|
||||
Frame::List LayoutWidget::framesFrom(QWidgetOrQuick *frameOrMultiSplitter) const
|
||||
{
|
||||
if (auto frame = qobject_cast<Frame *>(frameOrMultiSplitter))
|
||||
return { frame };
|
||||
|
||||
if (auto msw = qobject_cast<MultiSplitter *>(frameOrMultiSplitter))
|
||||
return msw->frames();
|
||||
|
||||
return {};
|
||||
}
|
||||
|
||||
Frame::List LayoutWidget::frames() const
|
||||
{
|
||||
const Layouting::Item::List items = m_rootItem->items_recursive();
|
||||
|
||||
Frame::List result;
|
||||
result.reserve(items.size());
|
||||
|
||||
for (Layouting::Item *item : items) {
|
||||
if (auto f = static_cast<Frame *>(item->guestAsQObject()))
|
||||
result.push_back(f);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
void LayoutWidget::removeItem(Layouting::Item *item)
|
||||
{
|
||||
if (!item) {
|
||||
qWarning() << Q_FUNC_INFO << "nullptr item";
|
||||
return;
|
||||
}
|
||||
|
||||
item->parentContainer()->removeItem(item);
|
||||
}
|
||||
|
||||
void LayoutWidget::updateSizeConstraints()
|
||||
{
|
||||
const QSize newMinSize = m_rootItem->minSize();
|
||||
qCDebug(sizing) << Q_FUNC_INFO << "Updating size constraints from" << minimumSize() << "to"
|
||||
<< newMinSize;
|
||||
|
||||
setLayoutMinimumSize(newMinSize);
|
||||
}
|
||||
|
||||
@@ -120,6 +120,65 @@ public:
|
||||
/// @brief restores the dockwidget @p dw to its previous position
|
||||
void restorePlaceholder(DockWidgetBase *dw, Layouting::Item *, int tabIndex);
|
||||
|
||||
/**
|
||||
* @brief The list of items in this layout.
|
||||
*/
|
||||
const QVector<Layouting::Item *> items() const;
|
||||
|
||||
/**
|
||||
* @brief Returns true if this layout contains the specified item.
|
||||
*/
|
||||
bool containsItem(const Layouting::Item *) const;
|
||||
|
||||
/**
|
||||
* @brief Returns true if this layout contains the specified frame.
|
||||
*/
|
||||
bool containsFrame(const Frame *) const;
|
||||
|
||||
/**
|
||||
* @brief Returns the number of Item objects in this layout.
|
||||
* This includes non-visible (placeholder) Items too.
|
||||
* @sa visibleCount
|
||||
*/
|
||||
int count() const;
|
||||
|
||||
/**
|
||||
* @brief Returns the number of visible Items in this layout.
|
||||
* Which is @ref count minus @ref placeholderCount
|
||||
* @sa count
|
||||
*/
|
||||
int visibleCount() const;
|
||||
|
||||
/**
|
||||
* @brief Returns the number of placeholder items in this layout.
|
||||
* This is the same as @ref count minus @ref visibleCount
|
||||
* @sa count, visibleCount
|
||||
*/
|
||||
int placeholderCount() const;
|
||||
|
||||
/**
|
||||
* @brief returns the Item that holds @p frame in this layout
|
||||
*/
|
||||
Layouting::Item *itemForFrame(const Frame *frame) const;
|
||||
|
||||
/**
|
||||
* @brief Returns this list of Frame objects contained in this layout
|
||||
*/
|
||||
QList<Frame *> frames() const;
|
||||
|
||||
/// @brief Returns the list of dock widgets contained in this layout
|
||||
QVector<DockWidgetBase *> dockWidgets() const;
|
||||
|
||||
/**
|
||||
* @brief Removes an item from this MultiSplitter.
|
||||
*/
|
||||
void removeItem(Layouting::Item *item);
|
||||
|
||||
/**
|
||||
* @brief Updates the min size of this layout.
|
||||
*/
|
||||
void updateSizeConstraints();
|
||||
|
||||
protected:
|
||||
bool m_inResizeEvent = false;
|
||||
|
||||
@@ -141,6 +200,13 @@ protected:
|
||||
*/
|
||||
void unrefOldPlaceholders(const QList<Frame *> &framesBeingAdded) const;
|
||||
|
||||
/**
|
||||
* @brief returns the frames contained in @p frameOrMultiSplitter
|
||||
* If frameOrMultiSplitter is a Frame, it returns a list of 1 element, with that frame
|
||||
* If frameOrMultiSplitter is a MultiSplitter then it returns a list of all frames it contains
|
||||
*/
|
||||
QList<Frame *> framesFrom(QWidgetOrQuick *frameOrMultiSplitter) const;
|
||||
|
||||
Q_SIGNALS:
|
||||
void visibleWidgetCountChanged(int count);
|
||||
|
||||
|
||||
@@ -204,55 +204,11 @@ void MultiSplitter::addMultiSplitter(MultiSplitter *sourceMultiSplitter, Locatio
|
||||
addWidget(sourceMultiSplitter, location, relativeTo, option);
|
||||
}
|
||||
|
||||
void MultiSplitter::removeItem(Layouting::Item *item)
|
||||
{
|
||||
if (!item) {
|
||||
qWarning() << Q_FUNC_INFO << "nullptr item";
|
||||
return;
|
||||
}
|
||||
|
||||
item->parentContainer()->removeItem(item);
|
||||
}
|
||||
|
||||
bool MultiSplitter::containsItem(const Layouting::Item *item) const
|
||||
{
|
||||
return m_rootItem->contains_recursive(item);
|
||||
}
|
||||
|
||||
bool MultiSplitter::containsFrame(const Frame *frame) const
|
||||
{
|
||||
return itemForFrame(frame) != nullptr;
|
||||
}
|
||||
|
||||
int MultiSplitter::count() const
|
||||
{
|
||||
return m_rootItem->count_recursive();
|
||||
}
|
||||
|
||||
int MultiSplitter::visibleCount() const
|
||||
{
|
||||
return m_rootItem->visibleCount_recursive();
|
||||
}
|
||||
|
||||
int MultiSplitter::placeholderCount() const
|
||||
{
|
||||
return count() - visibleCount();
|
||||
}
|
||||
|
||||
QVector<Layouting::Separator*> MultiSplitter::separators() const
|
||||
{
|
||||
return m_rootItem->separators_recursive();
|
||||
}
|
||||
|
||||
void MultiSplitter::updateSizeConstraints()
|
||||
{
|
||||
const QSize newMinSize = m_rootItem->minSize();
|
||||
qCDebug(sizing) << Q_FUNC_INFO << "Updating size constraints from" << minimumSize()
|
||||
<< "to" << newMinSize;
|
||||
|
||||
setLayoutMinimumSize(newMinSize);
|
||||
}
|
||||
|
||||
int MultiSplitter::availableLengthForOrientation(Qt::Orientation orientation) const
|
||||
{
|
||||
if (orientation == Qt::Vertical)
|
||||
@@ -266,50 +222,6 @@ QSize MultiSplitter::availableSize() const
|
||||
return m_rootItem->availableSize();
|
||||
}
|
||||
|
||||
Layouting::Item *MultiSplitter::itemForFrame(const Frame *frame) const
|
||||
{
|
||||
if (!frame)
|
||||
return nullptr;
|
||||
|
||||
return m_rootItem->itemForWidget(frame);
|
||||
}
|
||||
|
||||
DockWidgetBase::List MultiSplitter::dockWidgets() const
|
||||
{
|
||||
DockWidgetBase::List dockWidgets;
|
||||
const Frame::List frames = this->frames();
|
||||
for (Frame *frame : frames)
|
||||
dockWidgets << frame->dockWidgets();
|
||||
|
||||
return dockWidgets;
|
||||
}
|
||||
|
||||
Frame::List MultiSplitter::framesFrom(QWidgetOrQuick *frameOrMultiSplitter) const
|
||||
{
|
||||
if (auto frame = qobject_cast<Frame*>(frameOrMultiSplitter))
|
||||
return { frame };
|
||||
|
||||
if (auto msw = qobject_cast<MultiSplitter*>(frameOrMultiSplitter))
|
||||
return msw->frames();
|
||||
|
||||
return {};
|
||||
}
|
||||
|
||||
Frame::List MultiSplitter::frames() const
|
||||
{
|
||||
const Layouting::Item::List items = m_rootItem->items_recursive();
|
||||
|
||||
Frame::List result;
|
||||
result.reserve(items.size());
|
||||
|
||||
for (Layouting::Item *item : items) {
|
||||
if (auto f = static_cast<Frame*>(item->guestAsQObject()))
|
||||
result.push_back(f);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
void MultiSplitter::layoutEqually()
|
||||
{
|
||||
layoutEqually(m_rootItem);
|
||||
@@ -330,11 +242,6 @@ void MultiSplitter::setRootItem(Layouting::ItemBoxContainer *root)
|
||||
m_rootItem = root;
|
||||
}
|
||||
|
||||
const Layouting::Item::List MultiSplitter::items() const
|
||||
{
|
||||
return m_rootItem->items_recursive();
|
||||
}
|
||||
|
||||
Layouting::ItemBoxContainer *MultiSplitter::rootItem() const
|
||||
{
|
||||
return m_rootItem;
|
||||
|
||||
@@ -69,48 +69,6 @@ public:
|
||||
Frame *relativeTo = nullptr,
|
||||
InitialOption option = DefaultSizeMode::Fair);
|
||||
|
||||
/**
|
||||
* @brief Removes an item from this MultiSplitter.
|
||||
*/
|
||||
void removeItem(Layouting::Item *item);
|
||||
|
||||
/**
|
||||
* @brief Returns true if this layout contains the specified item.
|
||||
*/
|
||||
bool containsItem(const Layouting::Item *) const;
|
||||
|
||||
/**
|
||||
* @brief Returns true if this layout contains the specified frame.
|
||||
*/
|
||||
bool containsFrame(const Frame *) const;
|
||||
|
||||
/**
|
||||
* @brief Returns the number of Item objects in this layout.
|
||||
* This includes non-visible (placeholder) Items too.
|
||||
* @sa visibleCount
|
||||
*/
|
||||
int count() const;
|
||||
|
||||
/**
|
||||
* @brief Returns the number of visible Items in this layout.
|
||||
* Which is @ref count minus @ref placeholderCount
|
||||
* @sa count
|
||||
*/
|
||||
int visibleCount() const;
|
||||
|
||||
/**
|
||||
* @brief Returns the number of placeholder items in this layout.
|
||||
* This is the same as @ref count minus @ref visibleCount
|
||||
* @sa count, visibleCount
|
||||
*/
|
||||
int placeholderCount() const;
|
||||
|
||||
/**
|
||||
* @brief The list of items in this layout.
|
||||
*/
|
||||
const QVector<Layouting::Item *> items() const;
|
||||
|
||||
|
||||
/**
|
||||
* Called by the indicators, so they draw the drop rubber band at the correct place.
|
||||
* The rect for the rubberband when dropping a widget at the specified location.
|
||||
@@ -126,24 +84,6 @@ public:
|
||||
///@brief returns the list of separators
|
||||
QVector<Layouting::Separator*> separators() const;
|
||||
|
||||
/**
|
||||
* @brief Updates the min size of this layout.
|
||||
*/
|
||||
void updateSizeConstraints();
|
||||
|
||||
/**
|
||||
* @brief returns the Item that holds @p frame in this layout
|
||||
*/
|
||||
Layouting::Item *itemForFrame(const Frame *frame) const;
|
||||
|
||||
/**
|
||||
* @brief Returns this list of Frame objects contained in this layout
|
||||
*/
|
||||
QList<Frame*> frames() const;
|
||||
|
||||
/// @brief Returns the list of dock widgets contained in this layout
|
||||
QVector<DockWidgetBase*> dockWidgets() const;
|
||||
|
||||
/// @brief See docs for MainWindowBase::layoutEqually()
|
||||
void layoutEqually();
|
||||
|
||||
@@ -156,13 +96,6 @@ protected:
|
||||
private:
|
||||
friend class ::TestDocks;
|
||||
|
||||
/**
|
||||
* @brief returns the frames contained in @p frameOrMultiSplitter
|
||||
* If frameOrMultiSplitter is a Frame, it returns a list of 1 element, with that frame
|
||||
* If frameOrMultiSplitter is a MultiSplitter then it returns a list of all frames it contains
|
||||
*/
|
||||
QList<Frame*> framesFrom(QWidgetOrQuick *frameOrMultiSplitter) const;
|
||||
|
||||
Layouting::ItemBoxContainer *rootItem() const;
|
||||
|
||||
// For debug/hardening
|
||||
|
||||
Reference in New Issue
Block a user