diff --git a/examples/basic/main.cpp b/examples/basic/main.cpp index 3a1d2527..d1a614a5 100644 --- a/examples/basic/main.cpp +++ b/examples/basic/main.cpp @@ -20,8 +20,8 @@ #include "MainWindow.h" #include "ExampleDockableWidget.h" -#include "DockWidget.h" #include "LayoutSaver.h" +#include "widgets/DockWidget.h" #include #include @@ -34,7 +34,7 @@ using namespace KDDockWidgets; -DockWidget::Options s_dockWidgetOptions = DockWidget::Option_None; // DockWidget::Option_NotClosable; +DockWidgetBase::Options s_dockWidgetOptions = DockWidgetBase::Option_None; // DockWidget::Option_NotClosable; static MyWidget *newMyWidget() { diff --git a/examples/custom_titlebar/main.cpp b/examples/custom_titlebar/main.cpp index 471ce76d..4c1c8f8f 100644 --- a/examples/custom_titlebar/main.cpp +++ b/examples/custom_titlebar/main.cpp @@ -19,9 +19,9 @@ */ #include "MainWindow.h" -#include "DockWidget.h" #include "Config.h" #include "TitleBar_p.h" +#include "widgets/DockWidget.h" #include #include @@ -76,7 +76,7 @@ public: } }; -DockWidget *createDockWidget(const QString &name) +DockWidgetBase *createDockWidget(const QString &name) { auto dock = new DockWidget(name); dock->setWidget(new QTextEdit()); @@ -102,7 +102,7 @@ int main(int argc, char **argv) mainWindow.resize(1000, 800); mainWindow.show(); - DockWidget *dock1 = createDockWidget(QStringLiteral("one")); + DockWidgetBase *dock1 = createDockWidget(QStringLiteral("one")); createDockWidget(QStringLiteral("two")); createDockWidget(QStringLiteral("three")); mainWindow.addDockWidget(dock1, Location_OnTop); diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index c2a54d76..c3cb2e87 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -17,7 +17,7 @@ add_definitions(-DQT_NO_CAST_TO_ASCII set(DOCKSLIBS_SRCS Config.cpp Config.h - DockWidget.cpp + DockWidgetBase.cpp DragController.cpp Draggable.cpp DropArea.cpp @@ -51,6 +51,7 @@ set(DOCKSLIBS_SRCS FrameworkWidgetFactory.cpp + widgets/DockWidget.cpp widgets/FloatingWindowWidget.cpp widgets/FrameWidget.cpp widgets/SeparatorWidget.cpp @@ -66,7 +67,7 @@ else() set(IS_CLANG_BUILD FALSE) endif() -set (DOCKS_INSTALLABLE_INCLUDES docks_export.h DockWidget.h MainWindow.h LayoutSaver.h Draggable_p.h KDDockWidgets.h Config.h) +set (DOCKS_INSTALLABLE_INCLUDES docks_export.h MainWindow.h LayoutSaver.h Draggable_p.h KDDockWidgets.h Config.h) qt5_add_resources(RESOURCES ${CMAKE_CURRENT_SOURCE_DIR}/resources.qrc) diff --git a/src/Config.h b/src/Config.h index ac61919f..0307e9db 100644 --- a/src/Config.h +++ b/src/Config.h @@ -33,8 +33,8 @@ namespace KDDockWidgets { -class DockWidget; -typedef KDDockWidgets::DockWidget* (*DockWidgetFactoryFunc)(const QString &name); +class DockWidgetBase; +typedef KDDockWidgets::DockWidgetBase* (*DockWidgetFactoryFunc)(const QString &name); /** * @brief Singleton to allow to choose certain behaviours of the framework. diff --git a/src/DockRegistry.cpp b/src/DockRegistry.cpp index 1408f1a9..1d198f72 100644 --- a/src/DockRegistry.cpp +++ b/src/DockRegistry.cpp @@ -19,7 +19,7 @@ */ #include "DockRegistry_p.h" -#include "DockWidget.h" +#include "DockWidgetBase.h" #include "Logging_p.h" #include "DebugWindow_p.h" #include "LastPosition_p.h" @@ -65,7 +65,7 @@ DockRegistry *DockRegistry::self() return s_dockRegistry; } -void DockRegistry::registerDockWidget(DockWidget *dock) +void DockRegistry::registerDockWidget(DockWidgetBase *dock) { if (dock->name().isEmpty()) { qWarning() << Q_FUNC_INFO << "DockWidget" << dock << " doesn't have an ID"; @@ -76,7 +76,7 @@ void DockRegistry::registerDockWidget(DockWidget *dock) m_dockWidgets << dock; } -void DockRegistry::unregisterDockWidget(DockWidget *dock) +void DockRegistry::unregisterDockWidget(DockWidgetBase *dock) { m_dockWidgets.removeOne(dock); maybeDelete(); @@ -130,7 +130,7 @@ void DockRegistry::unregisterFrame(Frame *frame) m_frames.removeOne(frame); } -DockWidget *DockRegistry::dockByName(const QString &name) const +DockWidgetBase *DockRegistry::dockByName(const QString &name) const { for (auto dock : qAsConst(m_dockWidgets)) { if (dock->name() == name) @@ -183,17 +183,17 @@ bool DockRegistry::isSane() const return true; } -const DockWidget::List DockRegistry::dockwidgets() const +const DockWidgetBase::List DockRegistry::dockwidgets() const { return m_dockWidgets; } -const DockWidget::List DockRegistry::closedDockwidgets() const +const DockWidgetBase::List DockRegistry::closedDockwidgets() const { - DockWidget::List result; + DockWidgetBase::List result; result.reserve(m_dockWidgets.size()); - for (DockWidget *dw : m_dockWidgets) { + for (DockWidgetBase *dw : m_dockWidgets) { if (dw->parent() == nullptr && !dw->isVisible()) result.push_back(dw); } @@ -245,7 +245,7 @@ void DockRegistry::clear(bool deleteStaticAnchors) void DockRegistry::ensureAllFloatingWidgetsAreMorphed() { - for (DockWidget *dw : qAsConst(m_dockWidgets)) { + for (DockWidgetBase *dw : qAsConst(m_dockWidgets)) { if (dw->window() == dw && dw->isVisible()) dw->morphIntoFloatingWindow(); } diff --git a/src/DockRegistry_p.h b/src/DockRegistry_p.h index 867db778..60962f1f 100644 --- a/src/DockRegistry_p.h +++ b/src/DockRegistry_p.h @@ -21,7 +21,7 @@ #ifndef KD_DOCKREGISTRY_P_H #define KD_DOCKREGISTRY_P_H -#include "DockWidget.h" +#include "DockWidgetBase.h" #include "MainWindow.h" #include "FloatingWindow_p.h" @@ -42,8 +42,8 @@ class DOCKS_EXPORT DockRegistry : public QObject public: static DockRegistry *self(); ~DockRegistry(); - void registerDockWidget(DockWidget *); - void unregisterDockWidget(DockWidget *); + void registerDockWidget(DockWidgetBase *); + void unregisterDockWidget(DockWidgetBase *); void registerMainWindow(MainWindow *); void unregisterMainWindow(MainWindow *); @@ -57,15 +57,15 @@ public: void registerFrame(Frame *); void unregisterFrame(Frame *); - DockWidget *dockByName(const QString &) const; + DockWidgetBase *dockByName(const QString &) const; MainWindow *mainWindowByName(const QString &) const; bool isSane() const; ///@brief returns all DockWidget instances - const DockWidget::List dockwidgets() const; + const DockWidgetBase::List dockwidgets() const; ///@brief returns all closed DockWidget instances - const DockWidget::List closedDockwidgets() const; + const DockWidgetBase::List closedDockwidgets() const; ///@brief returns all MainWindow instances const MainWindow::List mainwindows() const; @@ -102,7 +102,7 @@ public: private: explicit DockRegistry(QObject *parent = nullptr); void maybeDelete(); - DockWidget::List m_dockWidgets; + DockWidgetBase::List m_dockWidgets; MainWindow::List m_mainWindows; Frame::List m_frames; QVector m_nestedWindows; diff --git a/src/DockWidget.cpp b/src/DockWidgetBase.cpp similarity index 81% rename from src/DockWidget.cpp rename to src/DockWidgetBase.cpp index 1e728e54..edb382d3 100644 --- a/src/DockWidget.cpp +++ b/src/DockWidgetBase.cpp @@ -18,7 +18,7 @@ along with this program. If not, see . */ -#include "DockWidget.h" +#include "DockWidgetBase.h" #include "DragController_p.h" #include "Frame_p.h" #include "FloatingWindow_p.h" @@ -49,10 +49,10 @@ using namespace KDDockWidgets; -class DockWidget::Private +class DockWidgetBase::Private { public: - Private(const QString &dockName, DockWidget::Options options_, DockWidget *qq) + Private(const QString &dockName, DockWidgetBase::Options options_, DockWidgetBase *qq) : name(dockName) , title(dockName) , q(qq) @@ -60,8 +60,8 @@ public: , layout(new QVBoxLayout(q)) , toggleAction(new QAction(q)) { - q->connect(q, &DockWidget::shown, q, [this] { onDockWidgetShown(); } ); - q->connect(q, &DockWidget::hidden, q, [this] { onDockWidgetHidden(); } ); + q->connect(q, &DockWidgetBase::shown, q, [this] { onDockWidgetShown(); } ); + q->connect(q, &DockWidgetBase::hidden, q, [this] { onDockWidgetHidden(); } ); q->connect(toggleAction, &QAction::toggled, q, [this] (bool enabled) { toggle(enabled); @@ -101,14 +101,14 @@ public: QString title; QIcon icon; QWidget *widget = nullptr; - DockWidget *const q; - const DockWidget::Options options; + DockWidgetBase *const q; + const DockWidgetBase::Options options; QVBoxLayout *const layout; QAction *const toggleAction; LastPosition m_lastPosition; }; -DockWidget::DockWidget(const QString &name, Options options, QWidget *parent, Qt::WindowFlags flags) +DockWidgetBase::DockWidgetBase(const QString &name, Options options, QWidget *parent, Qt::WindowFlags flags) : QWidget(parent, flags | Qt::Tool) , d(new Private(name, options, this)) { @@ -121,14 +121,14 @@ DockWidget::DockWidget(const QString &name, Options options, QWidget *parent, Qt qWarning() << Q_FUNC_INFO << "Name can't be null"; } -DockWidget::~DockWidget() +DockWidgetBase::~DockWidgetBase() { DockRegistry::self()->unregisterDockWidget(this); qCDebug(creation) << "~DockWidget" << this; delete d; } -void DockWidget::addDockWidgetAsTab(DockWidget *other) +void DockWidgetBase::addDockWidgetAsTab(DockWidgetBase *other) { qCDebug(addwidget) << Q_FUNC_INFO << other; if (other == this) { @@ -160,7 +160,7 @@ void DockWidget::addDockWidgetAsTab(DockWidget *other) frame->addWidget(other); } -void DockWidget::addDockWidgetToContainingWindow(DockWidget *other, Location location, DockWidget *relativeTo) +void DockWidgetBase::addDockWidgetToContainingWindow(DockWidgetBase *other, Location location, DockWidgetBase *relativeTo) { qCDebug(addwidget) << Q_FUNC_INFO << other << location << relativeTo; if (qobject_cast(window())) { @@ -178,7 +178,7 @@ void DockWidget::addDockWidgetToContainingWindow(DockWidget *other, Location loc } } -void DockWidget::setWidget(QWidget *w) +void DockWidgetBase::setWidget(QWidget *w) { Q_ASSERT(w && !d->widget); qCDebug(addwidget) << Q_FUNC_INFO << w; @@ -188,12 +188,12 @@ void DockWidget::setWidget(QWidget *w) setWindowTitle(name()); } -QWidget *DockWidget::widget() const +QWidget *DockWidgetBase::widget() const { return d->widget; } -bool DockWidget::isFloating() const +bool DockWidgetBase::isFloating() const { if (isWindow()) return true; @@ -202,7 +202,7 @@ bool DockWidget::isFloating() const return fw && fw->hasSingleDockWidget(); } -void DockWidget::setFloating(bool floats) +void DockWidgetBase::setFloating(bool floats) { const bool alreadyFloating = isFloating(); @@ -236,22 +236,22 @@ void DockWidget::setFloating(bool floats) } } -QAction *DockWidget::toggleAction() const +QAction *DockWidgetBase::toggleAction() const { return d->toggleAction; } -QString DockWidget::name() const +QString DockWidgetBase::name() const { return d->name; } -QString DockWidget::title() const +QString DockWidgetBase::title() const { return d->title; } -void DockWidget::setTitle(const QString &title) +void DockWidgetBase::setTitle(const QString &title) { if (title != d->title) { d->title = title; @@ -260,12 +260,12 @@ void DockWidget::setTitle(const QString &title) } } -DockWidget::Options DockWidget::options() const +DockWidgetBase::Options DockWidgetBase::options() const { return d->options; } -bool DockWidget::isTabbed() const +bool DockWidgetBase::isTabbed() const { if (TabWidget* tabWidget = d->parentTabWidget()) { return frame()->alwaysShowsTabs() || tabWidget->count() > 1; @@ -276,45 +276,45 @@ bool DockWidget::isTabbed() const } } -bool DockWidget::isCurrentTab() const +bool DockWidgetBase::isCurrentTab() const { if (TabWidget* tabWidget = d->parentTabWidget()) { - return tabWidget->currentIndex() == tabWidget->indexOf(const_cast(this)); + return tabWidget->currentIndex() == tabWidget->indexOf(const_cast(this)); } else { return true; } } -void DockWidget::setAsCurrentTab() +void DockWidgetBase::setAsCurrentTab() { if (TabWidget* tabWidget = d->parentTabWidget()) tabWidget->setCurrentWidget(this); } -void DockWidget::setIcon(const QIcon &icon) +void DockWidgetBase::setIcon(const QIcon &icon) { d->icon = icon; d->updateIcon(); Q_EMIT iconChanged(); } -QIcon DockWidget::icon() const +QIcon DockWidgetBase::icon() const { return d->icon; } -void DockWidget::forceClose() +void DockWidgetBase::forceClose() { d->close(); } -QTabWidget *DockWidget::tabWidget() const +QTabWidget *DockWidgetBase::tabWidget() const { return frame() ? frame()->tabWidget() : nullptr; } -bool DockWidget::event(QEvent *e) +bool DockWidgetBase::event(QEvent *e) { if (e->type() == QEvent::ParentChange) { Q_EMIT parentChanged(); @@ -332,7 +332,7 @@ bool DockWidget::event(QEvent *e) d->maybeRestoreToPreviousPosition(); // Transform into a FloatingWindow if this will be a regular floating dock widget. - QTimer::singleShot(0, this, &DockWidget::maybeMorphIntoFloatingWindow); + QTimer::singleShot(0, this, &DockWidgetBase::maybeMorphIntoFloatingWindow); } else if (e->type() == QEvent::Hide) { Q_EMIT hidden(); @@ -346,7 +346,7 @@ bool DockWidget::event(QEvent *e) return QWidget::event(e); } -void DockWidget::closeEvent(QCloseEvent *e) +void DockWidgetBase::closeEvent(QCloseEvent *e) { e->accept(); // By default we accept, means DockWidget closes if (d->widget) @@ -356,7 +356,7 @@ void DockWidget::closeEvent(QCloseEvent *e) d->close(); } -FloatingWindow *DockWidget::morphIntoFloatingWindow() +FloatingWindow *DockWidgetBase::morphIntoFloatingWindow() { qCDebug(creation) << "DockWidget::morphIntoFloatingWindow() this=" << this << "; visible=" << isVisible(); @@ -381,13 +381,13 @@ FloatingWindow *DockWidget::morphIntoFloatingWindow() } } -void DockWidget::maybeMorphIntoFloatingWindow() +void DockWidgetBase::maybeMorphIntoFloatingWindow() { if (isWindow() && isVisible()) morphIntoFloatingWindow(); } -Frame *DockWidget::frame() const +Frame *DockWidgetBase::frame() const { QWidget *p = parentWidget(); while (p) { @@ -398,24 +398,24 @@ Frame *DockWidget::frame() const return nullptr; } -FloatingWindow *DockWidget::floatingWindow() const +FloatingWindow *DockWidgetBase::floatingWindow() const { return qobject_cast(window()); } -void DockWidget::addPlaceholderItem(Item *item) +void DockWidgetBase::addPlaceholderItem(Item *item) { qCDebug(placeholder) << Q_FUNC_INFO << this << item; Q_ASSERT(item); d->m_lastPosition.addPlaceholderItem(item); } -LastPosition *DockWidget::lastPosition() const +LastPosition *DockWidgetBase::lastPosition() const { return &d->m_lastPosition; } -void DockWidget::Private::updateTitle() +void DockWidgetBase::Private::updateTitle() { if (q->isFloating()) q->window()->setWindowTitle(title); @@ -424,12 +424,12 @@ void DockWidget::Private::updateTitle() toggleAction->setText(title); } -void DockWidget::Private::updateIcon() +void DockWidgetBase::Private::updateIcon() { } -void DockWidget::Private::toggle(bool enabled) +void DockWidgetBase::Private::toggle(bool enabled) { if (enabled) { show(); @@ -438,7 +438,7 @@ void DockWidget::Private::toggle(bool enabled) } } -void DockWidget::Private::updateToggleAction() +void DockWidgetBase::Private::updateToggleAction() { QSignalBlocker blocker(toggleAction); if ((q->isVisible() || parentTabWidget()) && !toggleAction->isChecked()) { @@ -448,19 +448,19 @@ void DockWidget::Private::updateToggleAction() } } -void DockWidget::Private::onDockWidgetShown() +void DockWidgetBase::Private::onDockWidgetShown() { updateToggleAction(); qCDebug(hiding) << Q_FUNC_INFO << "parent=" << q->parentWidget(); } -void DockWidget::Private::onDockWidgetHidden() +void DockWidgetBase::Private::onDockWidgetHidden() { updateToggleAction(); qCDebug(hiding) << Q_FUNC_INFO << "parent=" << q->parentWidget(); } -TabWidget *DockWidget::Private::parentTabWidget() const +TabWidget *DockWidgetBase::Private::parentTabWidget() const { QWidget *p= q->parentWidget(); if (p && p->objectName() == QLatin1String("qt_tabwidget_stackedwidget")) { @@ -471,7 +471,7 @@ TabWidget *DockWidget::Private::parentTabWidget() const return nullptr; } -void DockWidget::Private::close() +void DockWidgetBase::Private::close() { if (q->isFloating()) m_lastPosition.setLastFloatingGeometry(q->window()->geometry()); @@ -486,13 +486,13 @@ void DockWidget::Private::close() } } -void DockWidget::Private::updateLayoutMargin() +void DockWidgetBase::Private::updateLayoutMargin() { const int margin = !q->isWindow() ? 0 : 4; layout->setContentsMargins(margin, margin, margin, margin); } -void DockWidget::Private::restoreToPreviousPosition() +void DockWidgetBase::Private::restoreToPreviousPosition() { if (!m_lastPosition.isValid()) { qWarning() << Q_FUNC_INFO << "Only restoring to MainWindow supported for now"; @@ -502,7 +502,7 @@ void DockWidget::Private::restoreToPreviousPosition() m_lastPosition.layoutItem()->restorePlaceholder(q, m_lastPosition.m_tabIndex); } -void DockWidget::Private::maybeRestoreToPreviousPosition() +void DockWidgetBase::Private::maybeRestoreToPreviousPosition() { // This is called when we get a QEvent::Show. Let's see if we have to restore it to a previous position. Item *layoutItem = m_lastPosition.layoutItem(); @@ -534,31 +534,31 @@ void DockWidget::Private::maybeRestoreToPreviousPosition() restoreToPreviousPosition(); } -int DockWidget::Private::currentTabIndex() const +int DockWidgetBase::Private::currentTabIndex() const { TabWidget *tabWidget = parentTabWidget(); return tabWidget ? tabWidget->indexOf(q) : 0; } -void DockWidget::Private::saveTabIndex() +void DockWidgetBase::Private::saveTabIndex() { m_lastPosition.m_tabIndex = currentTabIndex(); m_lastPosition.m_wasFloating = q->isFloating(); } -void DockWidget::Private::show() +void DockWidgetBase::Private::show() { // Only show for now q->show(); } -DockWidget *DockWidget::createFromDataStream(QDataStream &ds) +DockWidgetBase *DockWidgetBase::createFromDataStream(QDataStream &ds) { QString name; ds >> name; - DockWidget *dw = DockRegistry::self()->dockByName(name); + DockWidgetBase *dw = DockRegistry::self()->dockByName(name); if (!dw) { if (auto factoryFunc = Config::self().dockWidgetFactoryFunc()) { // DockWidget doesn't exist, ask to create it @@ -576,7 +576,7 @@ DockWidget *DockWidget::createFromDataStream(QDataStream &ds) return dw; } -QDataStream &KDDockWidgets::operator<<(QDataStream &ds, DockWidget *dw) +QDataStream &KDDockWidgets::operator<<(QDataStream &ds, DockWidgetBase *dw) { ds << dw->name(); return ds; diff --git a/src/DockWidget.h b/src/DockWidgetBase.h similarity index 91% rename from src/DockWidget.h rename to src/DockWidgetBase.h index a221d5a3..ea1fd0d8 100644 --- a/src/DockWidget.h +++ b/src/DockWidgetBase.h @@ -25,8 +25,8 @@ * @author Sérgio Martins \ */ -#ifndef KD_DOCKWIDGET_H -#define KD_DOCKWIDGET_H +#ifndef KD_DOCKWIDGET_BASE_H +#define KD_DOCKWIDGET_BASE_H #include "docks_export.h" #include "KDDockWidgets.h" @@ -52,11 +52,11 @@ class TitleBar; /** * @brief Represents a dock widget. */ -class DOCKS_EXPORT DockWidget : public QWidget +class DOCKS_EXPORT DockWidgetBase : public QWidget { Q_OBJECT public: - typedef QVector List; + typedef QVector List; enum Option { Option_None = 0, @@ -71,19 +71,19 @@ public: * @param parent optional QWidget parent, for ownership purposes * @param flags optional Qt::WindowFlags to apply to the window */ - explicit DockWidget(const QString &name, Options options = {}, + explicit DockWidgetBase(const QString &name, Options options = {}, QWidget *parent = nullptr, Qt::WindowFlags flags = {}); ///@brief destructor - ~DockWidget() override; + ~DockWidgetBase() override; - static DockWidget *createFromDataStream(QDataStream &ds); + static DockWidgetBase *createFromDataStream(QDataStream &ds); /** * @brief docks @p other widget into this one. Tabs will be shown. * @param other The other dock widget to dock into this one. */ - void addDockWidgetAsTab(DockWidget *other); + void addDockWidgetAsTab(DockWidgetBase *other); /** * @brief docks @p other widget into the window that contains this one. @@ -91,8 +91,8 @@ public: * @param location The location to dock. * @param relativeTo The dock widget that the @p location is relative to. If null then the window is considered. */ - void addDockWidgetToContainingWindow(DockWidget *other, KDDockWidgets::Location location, - DockWidget *relativeTo = nullptr); + void addDockWidgetToContainingWindow(DockWidgetBase *other, KDDockWidgets::Location location, + DockWidgetBase *relativeTo = nullptr); /** * @brief sets the widget which this dock widget contains @@ -240,7 +240,7 @@ public: #else private: #endif - Q_DISABLE_COPY(DockWidget) + Q_DISABLE_COPY(DockWidgetBase) friend class MultiSplitterLayout; friend class Frame; friend class DropArea; @@ -253,7 +253,7 @@ private: friend class KDDockWidgets::DockRegistry; friend class KDDockWidgets::LayoutSaver; - friend QDataStream &operator<<(QDataStream &ds, DockWidget *); + friend QDataStream &operator<<(QDataStream &ds, DockWidgetBase *); /** * @brief the Frame which contains this dock widgets. @@ -283,7 +283,7 @@ private: Private *const d; }; -QDataStream &operator<<(QDataStream &ds, DockWidget *); +QDataStream &operator<<(QDataStream &ds, DockWidgetBase *); } diff --git a/src/DragController.cpp b/src/DragController.cpp index b4a30ab6..6d7f0983 100644 --- a/src/DragController.cpp +++ b/src/DragController.cpp @@ -467,7 +467,7 @@ DropArea *DragController::dropAreaUnderCursor() const Q_ASSERT(false); } - if (auto dock = qobject_cast(topLevel)) { + if (auto dock = qobject_cast(topLevel)) { FloatingWindow *fw = dock->morphIntoFloatingWindow(); m_windowBeingDragged->window()->raise(); return fw->dropArea(); diff --git a/src/DropArea.cpp b/src/DropArea.cpp index c631b758..a1f57946 100644 --- a/src/DropArea.cpp +++ b/src/DropArea.cpp @@ -20,7 +20,7 @@ #include "DropArea_p.h" #include "Logging_p.h" -#include "DockWidget.h" +#include "DockWidgetBase.h" #include "Draggable_p.h" #include "MainWindow.h" #include "FloatingWindow_p.h" @@ -123,7 +123,7 @@ Item *DropArea::centralFrame() const return nullptr; } -void DropArea::addDockWidget(DockWidget *dw, Location location, DockWidget *relativeTo, AddingOption option) +void DropArea::addDockWidget(DockWidgetBase *dw, Location location, DockWidgetBase *relativeTo, AddingOption option) { if (!dw || dw == relativeTo || location == Location_None) { qWarning() << Q_FUNC_INFO << "Invalid parameters" << dw << relativeTo << location; @@ -193,7 +193,7 @@ QWidget *DropArea::window() const return nullptr; } -bool DropArea::contains(DockWidget *dw) const +bool DropArea::contains(DockWidgetBase *dw) const { return dw->frame() && m_layout->contains(dw->frame()); } @@ -283,7 +283,7 @@ bool DropArea::drop(QWidget *droppedWindow, KDDockWidgets::Location location, Fr { qCDebug(docking) << "DropArea::addFrame"; - if (auto dock = qobject_cast(droppedWindow)) { + if (auto dock = qobject_cast(droppedWindow)) { auto frame = Config::self().frameWorkWidgetFactory()->createFrame(); frame->addWidget(dock); m_layout->addWidget(frame, location, relativeTo); diff --git a/src/DropArea_p.h b/src/DropArea_p.h index 78fec121..901c56ef 100644 --- a/src/DropArea_p.h +++ b/src/DropArea_p.h @@ -66,7 +66,7 @@ public: Frame *frameContainingPos(QPoint globalPos) const; Item *centralFrame() const; DropIndicatorOverlayInterface *dropIndicatorOverlay() const { return m_dropIndicatorOverlay; } - void addDockWidget(DockWidget *, KDDockWidgets::Location location, DockWidget *relativeTo, AddingOption option = {}); + void addDockWidget(DockWidgetBase *, KDDockWidgets::Location location, DockWidgetBase *relativeTo, AddingOption option = {}); bool isInFloatingWindow() const; @@ -74,7 +74,7 @@ public: bool checkSanity(MultiSplitterLayout::AnchorSanityOption o = MultiSplitterLayout::AnchorSanity_All); QWidget *window() const; - bool contains(DockWidget *) const; + bool contains(DockWidgetBase *) const; private: Q_DISABLE_COPY(DropArea) friend class Frame; diff --git a/src/Frame.cpp b/src/Frame.cpp index 629fd245..7583d6bf 100644 --- a/src/Frame.cpp +++ b/src/Frame.cpp @@ -91,7 +91,7 @@ Frame::~Frame() void Frame::updateTitleAndIcon() { - if (DockWidget *dw = currentDockWidget()) { + if (DockWidgetBase *dw = currentDockWidget()) { m_titleBar->setTitle(dw->title()); m_titleBar->setIcon(dw->icon()); @@ -107,7 +107,7 @@ void Frame::updateTitleAndIcon() } -void Frame::addWidget(DockWidget *dockWidget) +void Frame::addWidget(DockWidgetBase *dockWidget) { insertWidget(dockWidget, m_tabWidget->count()); // append } @@ -120,7 +120,7 @@ void Frame::addWidget(Frame *frame) } const auto &docks = frame->dockWidgets(); - for (DockWidget *dockWidget : docks) + for (DockWidgetBase *dockWidget : docks) addWidget(dockWidget); } @@ -131,7 +131,7 @@ void Frame::addWidget(FloatingWindow *floatingWindow) addWidget(f); } -void Frame::insertWidget(DockWidget *dockWidget, int index) +void Frame::insertWidget(DockWidgetBase *dockWidget, int index) { qCDebug(addwidget()) << Q_FUNC_INFO << ((void*)this) << "; dockWidget=" << dockWidget << "; oldFrame=" << dockWidget->frame(); @@ -150,14 +150,14 @@ void Frame::insertWidget(DockWidget *dockWidget, int index) Q_EMIT currentDockWidgetChanged(dockWidget); } - connect(dockWidget, &DockWidget::titleChanged, this, &Frame::updateTitleAndIcon); - connect(dockWidget, &DockWidget::iconChanged, this, &Frame::updateTitleAndIcon); + connect(dockWidget, &DockWidgetBase::titleChanged, this, &Frame::updateTitleAndIcon); + connect(dockWidget, &DockWidgetBase::iconChanged, this, &Frame::updateTitleAndIcon); } -void Frame::removeWidget(DockWidget *dw) +void Frame::removeWidget(DockWidgetBase *dw) { - disconnect(dw, &DockWidget::titleChanged, this, &Frame::updateTitleAndIcon); - disconnect(dw, &DockWidget::iconChanged, this, &Frame::updateTitleAndIcon); + disconnect(dw, &DockWidgetBase::titleChanged, this, &Frame::updateTitleAndIcon); + disconnect(dw, &DockWidgetBase::iconChanged, this, &Frame::updateTitleAndIcon); m_tabWidget->removeDockWidget(dw); } @@ -209,9 +209,9 @@ QIcon Frame::icon() const return m_titleBar->icon(); } -const DockWidget::List Frame::dockWidgets() const +const DockWidgetBase::List Frame::dockWidgets() const { - DockWidget::List dockWidgets; + DockWidgetBase::List dockWidgets; const int count = dockWidgetCount(); dockWidgets.reserve(count); for (int i = 0, e = count; i != e; ++i) { @@ -221,7 +221,7 @@ const DockWidget::List Frame::dockWidgets() const return dockWidgets; } -bool Frame::contains(DockWidget *dockWidget) const +bool Frame::contains(DockWidgetBase *dockWidget) const { const int count = dockWidgetCount(); for (int i = 0, e = count; i != e; ++i) { @@ -272,8 +272,8 @@ void Frame::closeEvent(QCloseEvent *e) { qCDebug(closing) << "Frame::closeEvent"; e->accept(); // Accepted by default (will close unless ignored) - DockWidget::List docks = dockWidgets(); - for (DockWidget *dock : docks) { + DockWidgetBase::List docks = dockWidgets(); + for (DockWidgetBase *dock : docks) { qApp->sendEvent(dock, e); if (!e->isAccepted()) break; // Stop when the first dockwidget prevents closing @@ -290,22 +290,22 @@ void Frame::setCurrentTabIndex(int index) m_tabWidget->setCurrentIndex(index); } -DockWidget *Frame::currentDockWidget() const +DockWidgetBase *Frame::currentDockWidget() const { - return qobject_cast(m_tabWidget->currentWidget()); + return qobject_cast(m_tabWidget->currentWidget()); } bool Frame::anyNonClosable() const { for (auto dw : dockWidgets()) { - if (dw->options() & DockWidget::Option_NotClosable) + if (dw->options() & DockWidgetBase::Option_NotClosable) return true; } return false; } -void Frame::onDockWidgetShown(DockWidget *w) +void Frame::onDockWidgetShown(DockWidgetBase *w) { if (hasSingleDockWidget() && contains(w)) { // We have to call contains because it might be being in process of being reparented if (!isVisible()) { @@ -315,7 +315,7 @@ void Frame::onDockWidgetShown(DockWidget *w) } } -void Frame::onDockWidgetHidden(DockWidget *w) +void Frame::onDockWidgetHidden(DockWidgetBase *w) { if (hasSingleDockWidget() && contains(w)) { // We have to call contains because it might be being in process of being reparented if (isVisible()) { @@ -340,10 +340,10 @@ void Frame::setLayoutItem(Item *item) m_layoutItem = item; if (item) { - for (DockWidget *dw : dockWidgets()) + for (DockWidgetBase *dw : dockWidgets()) dw->addPlaceholderItem(item); } else { - for (DockWidget *dw : dockWidgets()) + for (DockWidgetBase *dw : dockWidgets()) dw->lastPosition()->removePlaceholders(); } } @@ -378,9 +378,9 @@ TabWidget *Frame::tabWidget() const return m_tabWidget; } -DockWidget *Frame::dockWidgetAt(int index) const +DockWidgetBase *Frame::dockWidgetAt(int index) const { - return qobject_cast(m_tabWidget->widget(index)); + return qobject_cast(m_tabWidget->widget(index)); } void Frame::setDropArea(DropArea *dt) @@ -463,7 +463,7 @@ Frame *Frame::createFromDataStream(QDataStream &ds) frame->setObjectName(objectName); for (int i = 0; i < numDocks; ++i) { - if (DockWidget *dw = DockWidget::createFromDataStream(ds)) { + if (DockWidgetBase *dw = DockWidgetBase::createFromDataStream(ds)) { frame->addWidget(dw); } } @@ -476,7 +476,7 @@ Frame *Frame::createFromDataStream(QDataStream &ds) QDataStream &KDDockWidgets::operator<<(QDataStream &ds, Frame *frame) { - const DockWidget::List docks = frame->dockWidgets(); + const DockWidgetBase::List docks = frame->dockWidgets(); ds << frame->objectName(); ds << frame->geometry(); @@ -484,7 +484,7 @@ QDataStream &KDDockWidgets::operator<<(QDataStream &ds, Frame *frame) ds << frame->currentTabIndex(); ds << docks.size(); - for (DockWidget *dock : docks) { + for (DockWidgetBase *dock : docks) { ds << dock; } diff --git a/src/Frame_p.h b/src/Frame_p.h index 09b83066..c69de9f7 100644 --- a/src/Frame_p.h +++ b/src/Frame_p.h @@ -40,7 +40,7 @@ namespace KDDockWidgets { class TitleBar; class TabWidget; class DropArea; -class DockWidget; +class DockWidgetBase; class Item; class FloatingWindow; @@ -73,17 +73,17 @@ public: static Frame *createFromDataStream(QDataStream &ds); ///@brief Adds a widget into the Frame's TabWidget - void addWidget(DockWidget *); + void addWidget(DockWidgetBase *); ///@overload void addWidget(Frame *); ///@overload void addWidget(FloatingWindow *floatingWindow); ///@brief Inserts a widget into the Frame's TabWidget at @p index - void insertWidget(DockWidget *, int index); + void insertWidget(DockWidgetBase *, int index); ///@brief removes a dockwidget from the frame - void removeWidget(DockWidget *); + void removeWidget(DockWidgetBase *); void updateTitleAndIcon(); void updateTitleBarVisibility(); @@ -91,8 +91,8 @@ public: TitleBar *titleBar() const; QString title() const; QIcon icon() const; - const QVector dockWidgets() const; - DockWidget *dockWidgetAt(int index) const; + const QVector dockWidgets() const; + DockWidgetBase *dockWidgetAt(int index) const; void setDropArea(DropArea *); bool isTheOnlyFrame() const; @@ -141,7 +141,7 @@ public: int dockWidgetCount() const; /// @brief returns whether the dockwidget @p w is inside this frame - bool contains(DockWidget *w) const; + bool contains(DockWidgetBase *w) const; ///@brief returns the FloatingWindow this frame is in, if any @@ -161,7 +161,7 @@ public: int currentTabIndex() const; void setCurrentTabIndex(int); - DockWidget *currentDockWidget() const; + DockWidgetBase *currentDockWidget() const; Options options() const { return m_options; } bool anyNonClosable() const; @@ -174,10 +174,10 @@ public: bool hasSingleDockWidget() const { return dockWidgetCount() == 1; } ///@brief Called when a dock widget child @p w is shown - void onDockWidgetShown(DockWidget *w); + void onDockWidgetShown(DockWidgetBase *w); ///@brief Called when a dock widget child @p w is hidden - void onDockWidgetHidden(DockWidget *w); + void onDockWidgetHidden(DockWidgetBase *w); ///@brief sets the layout item that either contains this Frame in the layout or is a placeholder void setLayoutItem(Item *item); @@ -200,7 +200,7 @@ public: TabWidget *tabWidget() const; Q_SIGNALS: - void currentDockWidgetChanged(KDDockWidgets::DockWidget *); + void currentDockWidgetChanged(KDDockWidgets::DockWidgetBase *); void numDockWidgetsChanged(); private: diff --git a/src/LastPosition_p.h b/src/LastPosition_p.h index b33bfeea..cd3cc497 100644 --- a/src/LastPosition_p.h +++ b/src/LastPosition_p.h @@ -64,7 +64,7 @@ private: }; -class DockWidget; +class DockWidgetBase; class Frame; /** * @internal diff --git a/src/LayoutSaver.cpp b/src/LayoutSaver.cpp index 32daf153..c382d719 100644 --- a/src/LayoutSaver.cpp +++ b/src/LayoutSaver.cpp @@ -28,7 +28,7 @@ #include "LayoutSaver.h" #include "Config.h" #include "DockRegistry_p.h" -#include "DockWidget.h" +#include "DockWidgetBase.h" #include "DropArea_p.h" #include "Logging_p.h" #include "Frame_p.h" @@ -148,18 +148,18 @@ QByteArray LayoutSaver::serializeLayout() const } // Closed dock widgets also have interesting things to save, like geometry and placeholder info - const DockWidget::List closedDockWidgets = d->m_dockRegistry->closedDockwidgets(); + const DockWidgetBase::List closedDockWidgets = d->m_dockRegistry->closedDockwidgets(); ds << closedDockWidgets.size(); - for (DockWidget *dockWidget : closedDockWidgets) { + for (DockWidgetBase *dockWidget : closedDockWidgets) { ds << dockWidget; } // Save the placeholder info. We do it last, as we also restore it last, since we need all items to be created // before restoring the placeholders - const DockWidget::List dockWidgets = d->m_dockRegistry->dockwidgets(); + const DockWidgetBase::List dockWidgets = d->m_dockRegistry->dockwidgets(); ds << dockWidgets.size(); - for (DockWidget *dw : dockWidgets) { + for (DockWidgetBase *dw : dockWidgets) { ds << dw->name(); ds << dw->lastPosition(); } @@ -243,7 +243,7 @@ bool LayoutSaver::restoreLayout(const QByteArray &data) int numClosedDockWidgets; ds >> numClosedDockWidgets; for (int i = 0; i < numClosedDockWidgets; ++i) { - DockWidget::createFromDataStream(ds); + DockWidgetBase::createFromDataStream(ds); } // 4. Restore the placeholder info, now that the Items have been created @@ -253,7 +253,7 @@ bool LayoutSaver::restoreLayout(const QByteArray &data) QString name; ds >> name; - if (DockWidget *dw = d->m_dockRegistry->dockByName(name)) { + if (DockWidgetBase *dw = d->m_dockRegistry->dockByName(name)) { dw->lastPosition()->fillFromDataStream(ds); } else { qWarning() << Q_FUNC_INFO << "Couldn't find dock widget" << name; diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index 61e7e9da..45998979 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -108,7 +108,7 @@ MainWindow::~MainWindow() delete d; } -void MainWindow::addDockWidgetAsTab(DockWidget *widget) +void MainWindow::addDockWidgetAsTab(DockWidgetBase *widget) { Q_ASSERT(widget); qCDebug(addwidget) << Q_FUNC_INFO << widget; @@ -120,7 +120,7 @@ void MainWindow::addDockWidgetAsTab(DockWidget *widget) } } -void MainWindow::addDockWidget(DockWidget *dw, Location location, DockWidget *relativeTo, AddingOption option) +void MainWindow::addDockWidget(DockWidgetBase *dw, Location location, DockWidgetBase *relativeTo, AddingOption option) { d->m_dropArea->addDockWidget(dw, location, relativeTo, option); } diff --git a/src/MainWindow.h b/src/MainWindow.h index 0be496d8..d2a083f7 100644 --- a/src/MainWindow.h +++ b/src/MainWindow.h @@ -38,7 +38,7 @@ class QDataStream; namespace KDDockWidgets { -class DockWidget; +class DockWidgetBase; class Frame; class DropArea; class MultiSplitterLayout; @@ -51,8 +51,8 @@ public: explicit MainWindow(const QString &name, MainWindowOptions options = MainWindowOption_HasCentralFrame, QWidget *parent = nullptr, Qt::WindowFlags flags = {}); ~MainWindow() override; - void addDockWidgetAsTab(DockWidget *); - void addDockWidget(DockWidget *, KDDockWidgets::Location, DockWidget *relativeTo = nullptr, AddingOption = {}); + void addDockWidgetAsTab(DockWidgetBase *); + void addDockWidget(DockWidgetBase *, KDDockWidgets::Location, DockWidgetBase *relativeTo = nullptr, AddingOption = {}); QString name() const; MainWindowOptions options() const; diff --git a/src/TabWidget.cpp b/src/TabWidget.cpp index 9c0b3bbd..99d8e92d 100644 --- a/src/TabWidget.cpp +++ b/src/TabWidget.cpp @@ -49,15 +49,15 @@ TabBar::TabBar(TabWidget *parent) setMinimumWidth(30); } -DockWidget *TabBar::dockWidgetAt(int index) const +DockWidgetBase *TabBar::dockWidgetAt(int index) const { if (index < 0 || index >= count()) return nullptr; - return qobject_cast(m_tabWidget->widget(index)); + return qobject_cast(m_tabWidget->widget(index)); } -DockWidget *TabBar::dockWidgetAt(QPoint localPos) const +DockWidgetBase *TabBar::dockWidgetAt(QPoint localPos) const { return dockWidgetAt(tabAt(localPos)); } @@ -78,7 +78,7 @@ std::unique_ptr TabBar::makeWindow() return std::unique_ptr(new WindowBeingDragged(floatingWindow, draggable)); } -FloatingWindow * TabBar::detachTab(DockWidget *dockWidget) +FloatingWindow * TabBar::detachTab(DockWidgetBase *dockWidget) { QRect r = dockWidget->geometry(); m_tabWidget->removeDockWidget(dockWidget); @@ -111,12 +111,12 @@ TabWidget::TabWidget(QWidget *parent) setTabBar(m_tabBar); } -void TabWidget::addDockWidget(DockWidget *dock) +void TabWidget::addDockWidget(DockWidgetBase *dock) { insertDockWidget(dock, count()); } -void TabWidget::insertDockWidget(DockWidget *dock, int index) +void TabWidget::insertDockWidget(DockWidgetBase *dock, int index) { Q_ASSERT(dock); qCDebug(addwidget) << Q_FUNC_INFO << dock << "; count before=" << count(); @@ -148,17 +148,17 @@ void TabWidget::insertDockWidget(DockWidget *dock, int index) } } -void TabWidget::removeDockWidget(DockWidget *w) +void TabWidget::removeDockWidget(DockWidgetBase *w) { removeTab(indexOf(w)); } -void TabWidget::detachTab(DockWidget *dockWidget) +void TabWidget::detachTab(DockWidgetBase *dockWidget) { m_tabBar->detachTab(dockWidget); } -bool TabWidget::contains(DockWidget *dw) const +bool TabWidget::contains(DockWidgetBase *dw) const { return indexOf(dw) != -1; } diff --git a/src/TabWidget_p.h b/src/TabWidget_p.h index 7e7717b6..43a0a181 100644 --- a/src/TabWidget_p.h +++ b/src/TabWidget_p.h @@ -32,7 +32,7 @@ #include "docks_export.h" #include "Draggable_p.h" #include "Frame_p.h" -#include "DockWidget.h" +#include "DockWidgetBase.h" #include #include @@ -42,7 +42,7 @@ namespace KDDockWidgets { -class DockWidget; +class DockWidgetBase; class TabWidget; ///@brief a QTabBar derived class to be used by KDDockWidgets::TabWidget @@ -64,10 +64,10 @@ public: * @param index the tab number from which we want the dock widget * @return the dock widget at tab number @p index */ - DockWidget *dockWidgetAt(int index) const; + DockWidgetBase *dockWidgetAt(int index) const; ///@overload - DockWidget *dockWidgetAt(QPoint localPos) const; + DockWidgetBase *dockWidgetAt(QPoint localPos) const; // Draggable std::unique_ptr makeWindow() override; @@ -78,13 +78,13 @@ public: * @param dockWidget the dock widget to detach * @returns the created FloatingWindow */ - FloatingWindow *detachTab(DockWidget *dockWidget); + FloatingWindow *detachTab(DockWidgetBase *dockWidget); void onMousePress(QPoint localPos); private: TabWidget *const m_tabWidget; - QPointer m_lastPressedDockWidget = nullptr; + QPointer m_lastPressedDockWidget = nullptr; }; class DOCKS_EXPORT_FOR_UNIT_TESTS TabWidget : public QTabWidget, public Draggable @@ -95,28 +95,28 @@ public: ///@brief appends a dock widget into this TabWidget - void addDockWidget(DockWidget *); + void addDockWidget(DockWidgetBase *); /** * @brief inserts @p dockwidget into the TabWidget, at @p index * @param dockwidget the dockwidget to insert * @param index The index to where to put it */ - void insertDockWidget(DockWidget *dockwidget, int index); + void insertDockWidget(DockWidgetBase *dockwidget, int index); - void removeDockWidget(DockWidget *); + void removeDockWidget(DockWidgetBase *); /** * @brief detaches a dock widget and shows it as a floating dock widget * @param dockWidget the dock widget to detach */ - void detachTab(DockWidget *dockWidget); + void detachTab(DockWidgetBase *dockWidget); /** * @brief Returns whether dockwidget @p dw is contained in this tab widget * Equivalent to indexOf(dw) != -1 */ - bool contains(DockWidget *dw) const; + bool contains(DockWidgetBase *dw) const; // Draggable interface std::unique_ptr makeWindow() override; diff --git a/src/TitleBar.cpp b/src/TitleBar.cpp index 462b5fa0..1f2f62d4 100644 --- a/src/TitleBar.cpp +++ b/src/TitleBar.cpp @@ -179,10 +179,10 @@ bool TitleBar::isFloating() const return false; } -DockWidget::List TitleBar::dockWidgets() const +DockWidgetBase::List TitleBar::dockWidgets() const { if (m_floatingWindow) { - DockWidget::List result; + DockWidgetBase::List result; for (Frame *f : m_floatingWindow->frames()) { result << f->dockWidgets(); } @@ -199,7 +199,7 @@ DockWidget::List TitleBar::dockWidgets() const void TitleBar::onFloatClicked() { if (isFloating()) { - DockWidget::List dockWidgets = this->dockWidgets(); + DockWidgetBase::List dockWidgets = this->dockWidgets(); if (dockWidgets.isEmpty()) { qWarning() << "TitleBar::onFloatClicked: empty list. Shouldn't happen"; return; diff --git a/src/TitleBar_p.h b/src/TitleBar_p.h index f1450de6..bf1734fd 100644 --- a/src/TitleBar_p.h +++ b/src/TitleBar_p.h @@ -24,7 +24,7 @@ #include "docks_export.h" #include "Draggable_p.h" #include "Frame_p.h" -#include "DockWidget.h" +#include "DockWidgetBase.h" #include #include @@ -35,7 +35,7 @@ class QLabel; namespace KDDockWidgets { -class DockWidget; +class DockWidgetBase; class Frame; class Button; @@ -62,7 +62,7 @@ public: ///@brief the list of dockwidgets under this TitleBar. /// There should always be at least 1. If more than 1 then they are tabbed. - DockWidget::List dockWidgets() const; + DockWidgetBase::List dockWidgets() const; ///@brief returns whether this title bar supports a floating/unfloating button bool supportsFloatingButton() const; diff --git a/src/multisplitter/Item.cpp b/src/multisplitter/Item.cpp index 7b96b457..8df93f58 100644 --- a/src/multisplitter/Item.cpp +++ b/src/multisplitter/Item.cpp @@ -25,7 +25,7 @@ #include "AnchorGroup_p.h" #include "Frame_p.h" #include "MainWindow.h" -#include "DockWidget.h" +#include "DockWidgetBase.h" #include "Config.h" #include @@ -361,7 +361,7 @@ bool Item::isInMainWindow() const return false; } -void Item::restorePlaceholder(DockWidget *dockWidget, int tabIndex) +void Item::restorePlaceholder(DockWidgetBase *dockWidget, int tabIndex) { qCDebug(placeholder) << Q_FUNC_INFO << "Restoring to window=" << window(); if (d->m_isPlaceholder) { diff --git a/src/multisplitter/Item_p.h b/src/multisplitter/Item_p.h index 5f53bb9c..af7e5b5b 100644 --- a/src/multisplitter/Item_p.h +++ b/src/multisplitter/Item_p.h @@ -36,7 +36,7 @@ namespace KDDockWidgets { struct AnchorGroup; class MultiSplitterLayout; class Frame; -class DockWidget; +class DockWidgetBase; class TestDocks; struct GeometryDiff @@ -157,7 +157,7 @@ public: bool isInMainWindow() const; ///@brief turns the placeholder into a normal Item again showing @p dockWidget - void restorePlaceholder(DockWidget *dockWidget, int tabIndex); + void restorePlaceholder(DockWidgetBase *dockWidget, int tabIndex); ///@brief turns the placeholder into a normal item again /// This overload is called when the Frame has more than 1 tab, otherwise we just use the DockWidget overload diff --git a/src/multisplitter/MultiSplitterLayout.cpp b/src/multisplitter/MultiSplitterLayout.cpp index ef8b5cd5..c4127000 100644 --- a/src/multisplitter/MultiSplitterLayout.cpp +++ b/src/multisplitter/MultiSplitterLayout.cpp @@ -23,7 +23,7 @@ #include "MultiSplitterWidget_p.h" #include "Frame_p.h" #include "FloatingWindow_p.h" -#include "DockWidget.h" +#include "DockWidgetBase.h" #include "LastPosition_p.h" #include "DockRegistry_p.h" #include "Config.h" @@ -126,7 +126,7 @@ bool MultiSplitterLayout::validateInputs(QWidget *widget, return false; } - const bool isDockWidget = qobject_cast(widget); + const bool isDockWidget = qobject_cast(widget); const bool isStartHidden = option & AddingOption_StartHidden; if (!qobject_cast(widget) && !qobject_cast(widget) && !isDockWidget) { @@ -198,7 +198,7 @@ void MultiSplitterLayout::addWidget(QWidget *w, Location location, Frame *relati Item *relativeToItem = itemForFrame(relativeToWidget); if (option & AddingOption_StartHidden) { - addAsPlaceholder(qobject_cast(w), location, relativeToItem); + addAsPlaceholder(qobject_cast(w), location, relativeToItem); return; } @@ -364,7 +364,7 @@ void MultiSplitterLayout::addItems_internal(const ItemList &items, bool updateCo Q_EMIT widgetCountChanged(m_items.size()); } -void MultiSplitterLayout::addAsPlaceholder(DockWidget *dockWidget, Location location, Item *relativeTo) +void MultiSplitterLayout::addAsPlaceholder(DockWidgetBase *dockWidget, Location location, Item *relativeTo) { if (!dockWidget) { qWarning() << Q_FUNC_INFO << "null dockwidget"; @@ -1219,9 +1219,9 @@ Frame::List MultiSplitterLayout::frames() const return result; } -QVector MultiSplitterLayout::dockWidgets() const +QVector MultiSplitterLayout::dockWidgets() const { - DockWidget::List result; + DockWidgetBase::List result; const Frame::List frames = this->frames(); for (Frame *frame : frames) @@ -1582,7 +1582,7 @@ void MultiSplitterLayout::restorePlaceholder(Item *item) void MultiSplitterLayout::unrefOldPlaceholders(const Frame::List &framesBeingAdded) const { for (Frame *frame : framesBeingAdded) { - for (DockWidget *dw : frame->dockWidgets()) { + for (DockWidgetBase *dw : frame->dockWidgets()) { if (Item *existingItem = dw->lastPosition()->layoutItem()) { if (contains(existingItem)) { // We're only interested in placeholders from this layout dw->lastPosition()->removePlaceholders(this); diff --git a/src/multisplitter/MultiSplitterLayout_p.h b/src/multisplitter/MultiSplitterLayout_p.h index 0b4f5ee1..386f40d9 100644 --- a/src/multisplitter/MultiSplitterLayout_p.h +++ b/src/multisplitter/MultiSplitterLayout_p.h @@ -147,7 +147,7 @@ public: /** * @brief Adds the dockwidget but it stays hidden until an explicit show() */ - void addAsPlaceholder(DockWidget *dw, KDDockWidgets::Location location, Item *relativeTo = nullptr); + void addAsPlaceholder(DockWidgetBase *dw, KDDockWidgets::Location location, Item *relativeTo = nullptr); /** * @brief Removes an item from this MultiSplitter. @@ -352,7 +352,7 @@ public: /** * @brief Returns a list of DockWidget objects contained in this layout */ - QVector dockWidgets() const; + QVector dockWidgets() const; /** * @brief Creates an AnchorGroup suited for adding a dockwidget to @location relative to @relativeToItem diff --git a/src/widgets/DockWidget.cpp b/src/widgets/DockWidget.cpp new file mode 100644 index 00000000..fb4cffaa --- /dev/null +++ b/src/widgets/DockWidget.cpp @@ -0,0 +1,50 @@ +/* + This file is part of KDDockWidgets. + + Copyright (C) 2018-2019 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com + Author: Sérgio Martins + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#include "DockWidget.h" + +/** + * @file + * @brief Represents a dock widget. + * + * @author Sérgio Martins \ + */ + +using namespace KDDockWidgets; + +class DockWidget::Private +{ +public: + Private() + { + } + +}; + +DockWidget::DockWidget(const QString &name, Options options, QWidget *parent, Qt::WindowFlags flags) + : DockWidgetBase(name, options, parent, flags) + , d(new Private()) +{ +} + +DockWidget::~DockWidget() +{ + delete d; +} diff --git a/src/widgets/DockWidget.h b/src/widgets/DockWidget.h new file mode 100644 index 00000000..f4e4cb7f --- /dev/null +++ b/src/widgets/DockWidget.h @@ -0,0 +1,64 @@ +/* + This file is part of KDDockWidgets. + + Copyright (C) 2018-2019 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com + Author: Sérgio Martins + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +/** + * @file + * @brief Represents a dock widget. + * + * @author Sérgio Martins \ + */ + +#ifndef KD_DOCKWIDGET_H +#define KD_DOCKWIDGET_H + +#include "DockWidgetBase.h" + +namespace KDDockWidgets { + +/** + * @brief Represents a dock widget. + */ +class DOCKS_EXPORT DockWidget : public DockWidgetBase +{ + Q_OBJECT +public: + + /** + * @brief constructs a new DockWidgets + * @param name the name of the dockwidget, should be unique. Use title for user visible text. + * @param options optional options controlling behaviour + * @param parent optional QWidget parent, for ownership purposes + * @param flags optional Qt::WindowFlags to apply to the window + */ + explicit DockWidget(const QString &name, Options options = {}, + QWidget *parent = nullptr, Qt::WindowFlags flags = {}); + + ///@brief destructor + ~DockWidget() override; + +protected: + + class Private; + Private *const d; +}; + +} + +#endif diff --git a/tests/fuzzer.cpp b/tests/fuzzer.cpp index 9bba8fb8..e924d05d 100644 --- a/tests/fuzzer.cpp +++ b/tests/fuzzer.cpp @@ -19,7 +19,7 @@ along with this program. If not, see . */ -#include "DockWidget.h" +#include "DockWidgetBase.h" #include "MainWindow.h" #include "DropArea_p.h" #include "utils.h" diff --git a/tests/tst_docks.cpp b/tests/tst_docks.cpp index 4d6faf45..4941fbdb 100644 --- a/tests/tst_docks.cpp +++ b/tests/tst_docks.cpp @@ -21,7 +21,7 @@ // We don't care about performance related checks in the tests // clazy:excludeall=ctor-missing-parent-argument,missing-qobject-macro,range-loop,missing-typeinfo,detaching-member,function-args-by-ref,non-pod-global-static,reserve-candidates,qstring-allocations -#include "DockWidget.h" +#include "DockWidgetBase.h" #include "MainWindow.h" #include "FloatingWindow_p.h" #include "DockRegistry_p.h" @@ -272,7 +272,7 @@ public Q_SLOTS: s_original = qInstallMessageHandler(fatalWarningsMessageHandler); } public: - static void nestDockWidget(DockWidget *dock, DropArea *dropArea, Frame *relativeTo, KDDockWidgets::Location location); + static void nestDockWidget(DockWidgetBase *dock, DropArea *dropArea, Frame *relativeTo, KDDockWidgets::Location location); private Q_SLOTS: void tst_simple1(); @@ -539,7 +539,7 @@ static void drag(QWidget *sourceWidget, QPoint globalDest, ButtonActions buttonA Q_ASSERT(sourceWidget && sourceWidget->isVisible()); TitleBar *titleBar = nullptr; - if (auto dock = qobject_cast(sourceWidget)) { + if (auto dock = qobject_cast(sourceWidget)) { if (auto frame = dock->frame()) { titleBar = frame->titleBar(); } @@ -611,7 +611,7 @@ void TestDocks::tst_createFloatingWindow() QVERIFY(!window); } -void TestDocks::nestDockWidget(DockWidget *dock, DropArea *dropArea, Frame *relativeTo, KDDockWidgets::Location location) +void TestDocks::nestDockWidget(DockWidgetBase *dock, DropArea *dropArea, Frame *relativeTo, KDDockWidgets::Location location) { auto frame = new Frame(); frame->addWidget(dock); @@ -626,7 +626,7 @@ void TestDocks::nestDockWidget(DockWidget *dock, DropArea *dropArea, Frame *rela qDebug() << "Size after adding: " << frame->size(); } -DockWidget *createAndNestDockWidget(DropArea *dropArea, Frame *relativeTo, KDDockWidgets::Location location) +DockWidgetBase *createAndNestDockWidget(DropArea *dropArea, Frame *relativeTo, KDDockWidgets::Location location) { static int count = 0; count++; @@ -638,7 +638,7 @@ DockWidget *createAndNestDockWidget(DropArea *dropArea, Frame *relativeTo, KDDoc return dock; } -std::unique_ptr createSimpleNestedMainWindow(DockWidget * *centralDock, DockWidget * *leftDock, DockWidget * *rightDock) +std::unique_ptr createSimpleNestedMainWindow(DockWidgetBase * *centralDock, DockWidgetBase * *leftDock, DockWidgetBase * *rightDock) { auto window = createMainWindow({900, 500}); *centralDock = createDockWidget("centralDock", Qt::green); @@ -819,9 +819,9 @@ void TestDocks::tst_close() // TODO: 1.7 Test Frame with two tabs // 1.8 Check if space is reclaimed after closing left dock - DockWidget *centralDock; - DockWidget *leftDock; - DockWidget *rightDock; + DockWidgetBase *centralDock; + DockWidgetBase *leftDock; + DockWidgetBase *rightDock; auto mainwindow = createSimpleNestedMainWindow(¢ralDock, &leftDock, &rightDock); auto da = mainwindow->dropArea(); @@ -945,9 +945,9 @@ void TestDocks::tst_anchorsFromTo() { EnsureTopLevelsDeleted e; - DockWidget *centralDock; - DockWidget *leftDock; - DockWidget *rightDock; + DockWidgetBase *centralDock; + DockWidgetBase *leftDock; + DockWidgetBase *rightDock; auto mainwindow = createSimpleNestedMainWindow(¢ralDock, &leftDock, &rightDock); auto dropArea = mainwindow->dropArea(); QVERIFY(dropArea->checkSanity()); @@ -966,7 +966,7 @@ void TestDocks::tst_anchorsFromTo() qDebug() << "Adding the bottom one"; QVERIFY(dropArea->checkSanity()); - DockWidget *bottom = createAndNestDockWidget(dropArea, nullptr, KDDockWidgets::Location_OnBottom); + DockWidgetBase *bottom = createAndNestDockWidget(dropArea, nullptr, KDDockWidgets::Location_OnBottom); QVERIFY(dropArea->checkSanity()); nonStaticAnchors = dropArea->nonStaticAnchors(); auto horizAnchors = dropArea->multiSplitterLayout()->anchors(Qt::Horizontal); @@ -1696,7 +1696,7 @@ void TestDocks::tst_restoreWithNonClosableWidget() { EnsureTopLevelsDeleted e; auto m = createMainWindow(QSize(500, 500), {}, "tst_marginsAfterRestore"); - auto dock1 = createDockWidget("1", new NonClosableWidget(), DockWidget::Option_NotClosable); + auto dock1 = createDockWidget("1", new NonClosableWidget(), DockWidgetBase::Option_NotClosable); m->addDockWidget(dock1, Location_OnLeft); auto layout = m->multiSplitterLayout(); @@ -2017,9 +2017,9 @@ void TestDocks::tst_fairResizeAfterRemoveWidget() EnsureTopLevelsDeleted e; - DockWidget *dock1 = createDockWidget("dock1", new QPushButton("one")); - DockWidget *dock2 = createDockWidget("dock2", new QPushButton("two")); - DockWidget *dock3 = createDockWidget("dock3", new QPushButton("three")); + DockWidgetBase *dock1 = createDockWidget("dock1", new QPushButton("one")); + DockWidgetBase *dock2 = createDockWidget("dock2", new QPushButton("two")); + DockWidgetBase *dock3 = createDockWidget("dock3", new QPushButton("three")); dock1->addDockWidgetToContainingWindow(dock2, Location_OnRight); dock1->addDockWidgetToContainingWindow(dock3, Location_OnRight, dock2); @@ -2066,7 +2066,7 @@ void TestDocks::tst_notClosable() { EnsureTopLevelsDeleted e; { - auto dock1 = createDockWidget("dock1", new QPushButton("one"), DockWidget::Option_NotClosable); + auto dock1 = createDockWidget("dock1", new QPushButton("one"), DockWidgetBase::Option_NotClosable); auto dock2 = createDockWidget("dock2", new QPushButton("two")); dock1->addDockWidgetAsTab(dock2); @@ -2086,7 +2086,7 @@ void TestDocks::tst_notClosable() { // Now dock dock1 into dock1 instead - auto dock1 = createDockWidget("dock1", new QPushButton("one"), DockWidget::Option_NotClosable); + auto dock1 = createDockWidget("dock1", new QPushButton("one"), DockWidgetBase::Option_NotClosable); auto dock2 = createDockWidget("dock2", new QPushButton("two")); dock2->morphIntoFloatingWindow(); @@ -3139,7 +3139,7 @@ void TestDocks::tst_closeShowWhenNoCentralFrame() // Tests a crash I got when hidding and showing and no central frame auto m = createMainWindow(QSize(800, 500), MainWindowOption_None); // Remove central frame - QPointer dock1 = createDockWidget("1", new QPushButton("1")); + QPointer dock1 = createDockWidget("1", new QPushButton("1")); m->addDockWidget(dock1, Location_OnLeft); dock1->close(); QVERIFY(!dock1->frame()); @@ -3160,7 +3160,7 @@ void TestDocks::tst_placeholderDisappearsOnReadd() auto dropArea = m->dropArea(); MultiSplitterLayout *layout = dropArea->multiSplitterLayout(); - QPointer dock1 = createDockWidget("1", new QPushButton("1")); + QPointer dock1 = createDockWidget("1", new QPushButton("1")); m->addDockWidget(dock1, Location_OnLeft); QCOMPARE(layout->count(), 1); QCOMPARE(layout->placeholderCount(), 0); @@ -3192,8 +3192,8 @@ void TestDocks::tst_placeholdersAreRemovedPropertly() auto m = createMainWindow(QSize(800, 500), MainWindowOption_None); // Remove central frame auto dropArea = m->dropArea(); MultiSplitterLayout *layout = dropArea->multiSplitterLayout(); - QPointer dock1 = createDockWidget("1", new QPushButton("1")); - QPointer dock2 = createDockWidget("2", new QPushButton("2")); + QPointer dock1 = createDockWidget("1", new QPushButton("1")); + QPointer dock2 = createDockWidget("2", new QPushButton("2")); m->addDockWidget(dock1, Location_OnLeft); Item *item = layout->items().constFirst(); m->addDockWidget(dock2, Location_OnRight); @@ -3249,9 +3249,9 @@ void TestDocks::tst_toggleMiddleDockCrash() auto m = createMainWindow(QSize(800, 500), MainWindowOption_None); // Remove central frame auto dropArea = m->dropArea(); MultiSplitterLayout *layout = dropArea->multiSplitterLayout(); - QPointer dock1 = createDockWidget("1", new QPushButton("1")); - QPointer dock2 = createDockWidget("2", new QPushButton("2")); - QPointer dock3 = createDockWidget("3", new QPushButton("3")); + QPointer dock1 = createDockWidget("1", new QPushButton("1")); + QPointer dock2 = createDockWidget("2", new QPushButton("2")); + QPointer dock3 = createDockWidget("3", new QPushButton("3")); m->addDockWidget(dock1, Location_OnLeft); m->addDockWidget(dock2, Location_OnRight); @@ -3585,7 +3585,7 @@ void TestDocks::tst_28NestedWidgets() for (DockDescriptor &desc : docksToCreate) { desc.createdDock = createDockWidget(QString("%1").arg(i), new QPushButton(QString("%1").arg(i)), {}, false); - DockWidget *relativeTo = nullptr; + DockWidgetBase *relativeTo = nullptr; if (desc.relativeToIndex != -1) relativeTo = docksToCreate.at(desc.relativeToIndex).createdDock; @@ -4164,7 +4164,7 @@ void TestDocks::tst_sizeConstraintWarning() SetExpectedWarning sew("Dock widget already exists in the layout"); auto window = createMainWindow(); - QList listDockWidget; + QList listDockWidget; { auto dock = new DockWidget("foo-0"); dock->setWidget(new QTextEdit(dock)); diff --git a/tests/utils.cpp b/tests/utils.cpp index 5b743dd7..5519907f 100644 --- a/tests/utils.cpp +++ b/tests/utils.cpp @@ -60,7 +60,7 @@ std::unique_ptr KDDockWidgets::Tests::createMainWindo return ptr; } -DockWidget *KDDockWidgets::Tests::createDockWidget(const QString &name, QWidget *w, DockWidget::Options options, bool show) +DockWidgetBase *KDDockWidgets::Tests::createDockWidget(const QString &name, QWidget *w, DockWidgetBase::Options options, bool show) { auto dock = new DockWidget(name, options); dock->setWidget(w); @@ -81,7 +81,7 @@ DockWidget *KDDockWidgets::Tests::createDockWidget(const QString &name, QWidget } }; -DockWidget *KDDockWidgets::Tests::createDockWidget(const QString &name, QColor color) +DockWidgetBase *KDDockWidgets::Tests::createDockWidget(const QString &name, QColor color) { return createDockWidget(name, new MyWidget(name, color)); }; @@ -100,7 +100,7 @@ std::unique_ptr KDDockWidgets::Tests::createMainWindow(QVector #include @@ -39,7 +39,7 @@ namespace Tests { struct DockDescriptor { Location loc; int relativeToIndex; - QPointer createdDock; + QPointer createdDock; KDDockWidgets::AddingOption option; }; @@ -53,9 +53,9 @@ std::unique_ptr createMainWindow(QSize sz = {600, 600 std::unique_ptr createMainWindow(QVector &docks); -KDDockWidgets::DockWidget *createDockWidget(const QString &name, QWidget *w, - DockWidget::Options options = {}, bool show = true); -KDDockWidgets::DockWidget *createDockWidget(const QString &name, QColor color); +KDDockWidgets::DockWidgetBase *createDockWidget(const QString &name, QWidget *w, + DockWidgetBase::Options options = {}, bool show = true); +KDDockWidgets::DockWidgetBase *createDockWidget(const QString &name, QColor color); class NonClosableWidget : public QWidget {