Implemented custom close handling

This commit is contained in:
Uwe Kindler
2020-01-06 11:42:36 +01:00
parent 0305d8a221
commit a5e8011222
10 changed files with 449 additions and 376 deletions

View File

@@ -64,7 +64,7 @@ struct DockWidgetPrivate
QBoxLayout* Layout = nullptr;
QWidget* Widget = nullptr;
CDockWidgetTab* TabWidget = nullptr;
CDockWidget::DockWidgetFeatures Features = CDockWidget::AllDockWidgetFeatures;
CDockWidget::DockWidgetFeatures Features = CDockWidget::DefaultDockWidgetFeatures;
CDockManager* DockManager = nullptr;
CDockAreaWidget* DockArea = nullptr;
QAction* ToggleViewAction = nullptr;
@@ -744,42 +744,40 @@ void CDockWidget::deleteDockWidget()
{
dockManager()->removeDockWidget(this);
deleteLater();
}
//============================================================================
bool CDockWidget::handleCloseRequest()
{
std::cout << "CDockWidget::handleCloseRequest()" << std::endl;
return true;
d->Closed = true;
}
//============================================================================
void CDockWidget::closeDockWidget()
{
closeDockWidgetInternal();
closeDockWidgetInternal(true);
}
//============================================================================
bool CDockWidget::closeDockWidgetInternal()
bool CDockWidget::closeDockWidgetInternal(bool ForceClose)
{
if (!ForceClose)
{
emit closeRequested();
}
if (!ForceClose && features().testFlag(CDockWidget::CustomCloseHandling))
{
return false;
}
if (features().testFlag(CDockWidget::DockWidgetDeleteOnClose))
{
if (handleCloseRequest())
{
deleteDockWidget();
return true;
}
deleteDockWidget();
}
else
{
toggleView(false);
return true;
}
return false;
return true;
}