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())
{
_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()
{

View File

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

View File

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

View File

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

View File

@ -468,6 +468,19 @@ signals:
* This signal is emitted, if close is requested
*/
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
}
// namespace ads