Added visibilityChanged code

This commit is contained in:
Uwe Kindler 2020-01-14 15:58:45 +01:00
parent 407af06a4a
commit 03bd4a4505
5 changed files with 77 additions and 12 deletions

View File

@ -317,6 +317,7 @@ void MainWindowPrivate::createContent()
for (auto DockWidget : DockManager->dockWidgetsMap()) for (auto DockWidget : DockManager->dockWidgetsMap())
{ {
_this->connect(DockWidget, SIGNAL(viewToggled(bool)), SLOT(onViewToggled(bool))); _this->connect(DockWidget, SIGNAL(viewToggled(bool)), SLOT(onViewToggled(bool)));
_this->connect(DockWidget, SIGNAL(visibilityChanged(bool)), SLOT(onViewVisibilityChanged(bool)));
} }
} }
@ -501,6 +502,19 @@ void CMainWindow::onViewToggled(bool Open)
} }
//============================================================================
void CMainWindow::onViewVisibilityChanged(bool Visible)
{
auto DockWidget = qobject_cast<ads::CDockWidget*>(sender());
if (!DockWidget)
{
return;
}
qDebug() << DockWidget->objectName() << " visibilityChanged(" << Visible << ")";
}
//============================================================================ //============================================================================
void CMainWindow::createEditor() void CMainWindow::createEditor()
{ {

View File

@ -59,6 +59,7 @@ private slots:
void on_actionRestoreState_triggered(bool); void on_actionRestoreState_triggered(bool);
void savePerspective(); void savePerspective();
void onViewToggled(bool Open); void onViewToggled(bool Open);
void onViewVisibilityChanged(bool Visible);
void createEditor(); void createEditor();
void createTable(); void createTable();
void onEditorCloseRequested(); void onEditorCloseRequested();

View File

@ -546,6 +546,11 @@ void CDockAreaWidget::internalSetCurrentDockWidget(CDockWidget* DockWidget)
void CDockAreaWidget::setCurrentIndex(int index) void CDockAreaWidget::setCurrentIndex(int index)
{ {
auto TabBar = d->tabBar(); auto TabBar = d->tabBar();
/*if (TabBar->currentIndex() == index)
{
return;
}*/
if (index < 0 || index > (TabBar->count() - 1)) if (index < 0 || index > (TabBar->count() - 1))
{ {
qWarning() << Q_FUNC_INFO << "Invalid index" << index; qWarning() << Q_FUNC_INFO << "Invalid index" << index;

View File

@ -45,6 +45,10 @@
#include <QToolBar> #include <QToolBar>
#include <QXmlStreamWriter> #include <QXmlStreamWriter>
#include <QGuiApplication>
#include <QScreen>
#include <QWindow>
#include "DockContainerWidget.h" #include "DockContainerWidget.h"
#include "DockAreaWidget.h" #include "DockAreaWidget.h"
#include "DockManager.h" #include "DockManager.h"
@ -296,6 +300,7 @@ void CDockWidget::setFeatures(DockWidgetFeatures features)
return; return;
} }
d->Features = features; d->Features = features;
emit featuresChanged(d->Features);
d->TabWidget->onDockWidgetFeaturesChanged(); d->TabWidget->onDockWidgetFeaturesChanged();
} }
@ -517,23 +522,50 @@ void CDockWidget::flagAsUnassigned()
//============================================================================ //============================================================================
bool CDockWidget::event(QEvent *e) bool CDockWidget::event(QEvent *e)
{ {
if (e->type() == QEvent::WindowTitleChange) switch (e->type())
{ {
const auto title = windowTitle(); case QEvent::Hide:
if (d->TabWidget) emit visibilityChanged(false);
break;
case QEvent::Show:
{ {
d->TabWidget->setText(title); QPoint parentTopLeft(0, 0);
} if (isWindow())
if (d->ToggleViewAction) {
if (const QWindow *window = windowHandle())
parentTopLeft = window->screen()->availableVirtualGeometry().topLeft();
else
parentTopLeft = QGuiApplication::primaryScreen()->availableVirtualGeometry().topLeft();
std::cout << "QEvent::Show isWindow()" << std::endl;
}
emit visibilityChanged(geometry().right() >= parentTopLeft.x() && geometry().bottom() >= parentTopLeft.y());
}
break;
case QEvent::WindowTitleChange :
{ {
d->ToggleViewAction->setText(title); const auto title = windowTitle();
if (d->TabWidget)
{
d->TabWidget->setText(title);
}
if (d->ToggleViewAction)
{
d->ToggleViewAction->setText(title);
}
if (d->DockArea)
{
d->DockArea->markTitleBarMenuOutdated();//update tabs menu
}
emit titleChanged(title);
} }
if (d->DockArea) break;
{
d->DockArea->markTitleBarMenuOutdated();//update tabs menu default:
} break;
emit titleChanged(title);
} }
return Super::event(e); return Super::event(e);
} }

View File

@ -468,6 +468,19 @@ signals:
* This signal is emitted, if close is requested * This signal is emitted, if close is requested
*/ */
void closeRequested(); void closeRequested();
/**
* This signal is emitted when the dock widget becomes visible (or invisible).
* This happens when the widget is hidden or shown, as well as when it is
* docked in a tabbed dock area and its tab becomes selected or unselected.
*/
void visibilityChanged(bool visible);
/**
* This signal is emitted when the features property changes.
* The features parameter gives the new value of the property.
*/
void featuresChanged(DockWidgetFeatures features);
}; // class DockWidget }; // class DockWidget
} }
// namespace ads // namespace ads