Skip to content
Extraits de code Groupes Projets
Vérifiée Valider 07d11cac rédigé par Kubat's avatar Kubat
Parcourir les fichiers

UI: Add a way to close the unclosable widget docks on view destruction

parent be66180b
Aucune branche associée trouvée
Aucune étiquette associée trouvée
1 requête de fusion!18Implement the VivyDocument specification
......@@ -19,6 +19,10 @@ AbstractDocumentView::AbstractDocumentView(AbstractDocumentView::Type type,
void
AbstractDocumentView::deleteAllContent() noexcept
{
// Allow to close all dock widgets
for (UnclosableDockWidget *const dock : dockWidgets)
dock->allowClose();
// Delete all widgets
if (layout() != nullptr) {
QLayoutItem *item;
......@@ -45,7 +49,7 @@ AbstractDocumentView::getType() const noexcept
}
void
AbstractDocumentView::delDockWidget(QDockWidget **dock) noexcept
AbstractDocumentView::delDockWidget(UnclosableDockWidget **dock) noexcept
{
// Remove the toggle view action
QAction *act = (*dock)->toggleViewAction();
......@@ -53,6 +57,7 @@ AbstractDocumentView::delDockWidget(QDockWidget **dock) noexcept
viewsActions.removeAll(act);
// Remove the widget
(*dock)->allowClose();
removeDockWidget(*dock);
delete *dock;
*dock = nullptr;
......@@ -61,7 +66,7 @@ AbstractDocumentView::delDockWidget(QDockWidget **dock) noexcept
emit viewActionsChanged();
}
void
AbstractDocumentView::addDockWidget(Qt::DockWidgetArea area, QDockWidget *dock,
AbstractDocumentView::addDockWidget(Qt::DockWidgetArea area, UnclosableDockWidget *dock,
Qt::Orientation orientation) noexcept
{
// dock->setTitleBarWidget(new QWidget(dock)); // <- to disable the header bar
......@@ -69,6 +74,8 @@ AbstractDocumentView::addDockWidget(Qt::DockWidgetArea area, QDockWidget *dock,
QAction *act = dock->toggleViewAction();
if (!viewsActions.contains(act))
viewsActions.prepend(act);
if (!dockWidgets.contains(dock))
dockWidgets.append(dock);
emit viewActionsChanged();
}
......
......@@ -6,6 +6,7 @@
#include "../Lib/Utils.hh"
#include "../Lib/AbstractDocument.hh"
#include "UnclosableDockWidget.hh"
namespace Vivy
{
......@@ -45,11 +46,12 @@ signals:
protected:
void deleteAllContent() noexcept;
void delDockWidget(QDockWidget **) noexcept;
void addDockWidget(Qt::DockWidgetArea, QDockWidget *, Qt::Orientation) noexcept;
void delDockWidget(UnclosableDockWidget **) noexcept;
void addDockWidget(Qt::DockWidgetArea, UnclosableDockWidget *, Qt::Orientation) noexcept;
QList<QAction *> viewsActions{};
private:
const Type documentType;
QVector<UnclosableDockWidget *> dockWidgets{};
};
}
......@@ -12,5 +12,14 @@ UnclosableDockWidget::UnclosableDockWidget(const QString &name, QWidget *parent)
void
UnclosableDockWidget::closeEvent(QCloseEvent *event) noexcept
{
event->ignore();
if (allowedToClose)
event->accept();
else
event->ignore();
}
void
UnclosableDockWidget::allowClose() noexcept
{
allowedToClose = true;
}
......@@ -10,8 +10,12 @@ class UnclosableDockWidget final : public QDockWidget {
public:
explicit UnclosableDockWidget(const QString &, QWidget *parent) noexcept;
void allowClose() noexcept;
protected:
void closeEvent(QCloseEvent *event) noexcept override;
private:
bool allowedToClose{ false };
};
}
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter