Improved highlighting focused dock widget

This commit is contained in:
Uwe Kindler 2020-05-13 11:17:43 +02:00
parent f54869fbf7
commit 056e1ef947
3 changed files with 39 additions and 24 deletions

View File

@ -94,7 +94,8 @@ struct DockManagerPrivate
CDockManager::eViewMenuInsertionOrder MenuInsertionOrder = CDockManager::MenuAlphabeticallySorted; CDockManager::eViewMenuInsertionOrder MenuInsertionOrder = CDockManager::MenuAlphabeticallySorted;
bool RestoringState = false; bool RestoringState = false;
QVector<CFloatingDockContainer*> UninitializedFloatingWidgets; QVector<CFloatingDockContainer*> UninitializedFloatingWidgets;
QPointer<CDockWidget> FocusedDockWidget; QPointer<CDockWidget> FocusedDockWidget = nullptr;
QPointer<CDockAreaWidget> FocusedArea = nullptr;
/** /**
* Private data constructor * Private data constructor
@ -881,6 +882,12 @@ CIconProvider& CDockManager::iconProvider()
//=========================================================================== //===========================================================================
void CDockManager::onFocusObjectChanged(QObject *focusObject) void CDockManager::onFocusObjectChanged(QObject *focusObject)
{ {
if (!focusObject)
{
return;
}
std::cout << "\n\nCDockManager::onFocusObjectChanged " << focusObject->metaObject()->className() << std::endl;
auto FocusWidget = qobject_cast<QWidget*>(focusObject); auto FocusWidget = qobject_cast<QWidget*>(focusObject);
if (!FocusWidget) if (!FocusWidget)
{ {
@ -889,46 +896,39 @@ void CDockManager::onFocusObjectChanged(QObject *focusObject)
CDockWidget* DockWidget = nullptr; CDockWidget* DockWidget = nullptr;
std::cout << "CDockManager::onFocusObjectChanged " << focusObject->objectName().toStdString()
<< " meta: " << focusObject->metaObject()->className() << std::endl;
auto DockWidgetTab = qobject_cast<CDockWidgetTab*>(focusObject); auto DockWidgetTab = qobject_cast<CDockWidgetTab*>(focusObject);
if (DockWidgetTab) if (DockWidgetTab)
{ {
DockWidget = DockWidgetTab->dockWidget(); DockWidget = DockWidgetTab->dockWidget();
std::cout << "TabText: " << DockWidgetTab->text().toStdString() << std::endl;
} }
else else
{ {
DockWidget = internal::findParent<CDockWidget*>(FocusWidget); DockWidget = internal::findParent<CDockWidget*>(FocusWidget);
} }
std::cout << "Focus Object " << focusObject->objectName().toStdString()
<< " meta: " << focusObject->metaObject()->className() << std::endl;
if (!DockWidget) if (!DockWidget)
{ {
return; std::cout << "!DockWidget" << std::endl;
}
if (d->FocusedDockWidget.data() == DockWidget)
{
return; return;
} }
QList<CDockWidget*> DockWidgets; QList<CDockWidget*> DockWidgets;
CDockAreaWidget* OldFocusedDockArea = nullptr;
CDockAreaWidget* NewFocusedDockArea = nullptr; CDockAreaWidget* NewFocusedDockArea = nullptr;
if (d->FocusedDockWidget) if (d->FocusedDockWidget)
{ {
std::cout << "focuse = false: " << d->FocusedDockWidget->objectName().toStdString() << std::endl;
d->FocusedDockWidget->setProperty("focused", false); d->FocusedDockWidget->setProperty("focused", false);
d->FocusedDockWidget->tabWidget()->setProperty("focused", false); d->FocusedDockWidget->tabWidget()->setProperty("focused", false);
OldFocusedDockArea = d->FocusedDockWidget->dockAreaWidget();
if (OldFocusedDockArea)
{
OldFocusedDockArea->setProperty("focused", false);
}
DockWidgets.append(d->FocusedDockWidget); DockWidgets.append(d->FocusedDockWidget);
} }
d->FocusedDockWidget = DockWidget; d->FocusedDockWidget = DockWidget;
std::cout << "d->FocusedDockWidget " << d->FocusedDockWidget->objectName().toStdString() << std::endl;
d->FocusedDockWidget->setProperty("focused", true); d->FocusedDockWidget->setProperty("focused", true);
d->FocusedDockWidget->tabWidget()->setProperty("focused", true); d->FocusedDockWidget->tabWidget()->setProperty("focused", true);
connect(d->FocusedDockWidget, SIGNAL(closed()), this, SLOT(onFocusedDockWidgetClosed()));
NewFocusedDockArea = d->FocusedDockWidget->dockAreaWidget(); NewFocusedDockArea = d->FocusedDockWidget->dockAreaWidget();
if (NewFocusedDockArea) if (NewFocusedDockArea)
{ {
@ -942,22 +942,31 @@ void CDockManager::onFocusObjectChanged(QObject *focusObject)
internal::repolishStyle(DockWidget); internal::repolishStyle(DockWidget);
} }
if (OldFocusedDockArea == NewFocusedDockArea) if (!NewFocusedDockArea || (d->FocusedArea == NewFocusedDockArea))
{ {
std::cout << "d->FocusedArea == NewFocusedDockArea" << std::endl;
return; return;
} }
if (OldFocusedDockArea) if (d->FocusedArea)
{ {
internal::repolishStyle(OldFocusedDockArea); std::cout << "Repolish OldFocusedDockArea" << std::endl;
internal::repolishStyle(OldFocusedDockArea->titleBar()); d->FocusedArea->setProperty("focused", false);
internal::repolishStyle(d->FocusedArea);
internal::repolishStyle(d->FocusedArea->titleBar());
} }
if (NewFocusedDockArea) std::cout << "Repolish NewFocusedDockArea" << std::endl;
{ NewFocusedDockArea->setProperty("focused", true);
internal::repolishStyle(NewFocusedDockArea); internal::repolishStyle(NewFocusedDockArea);
internal::repolishStyle(NewFocusedDockArea->titleBar()); internal::repolishStyle(NewFocusedDockArea->titleBar());
} d->FocusedArea = NewFocusedDockArea;
}
//===========================================================================
void CDockManager::onFocusedDockWidgetClosed()
{
std::cout << "CDockManager::onFocusedDockWidgetClosed()" << std::endl;
} }

View File

@ -86,6 +86,7 @@ private:
private slots: private slots:
void onFocusObjectChanged(QObject *focusObject); void onFocusObjectChanged(QObject *focusObject);
void onFocusedDockWidgetClosed();
protected: protected:
/** /**

View File

@ -468,6 +468,11 @@ void CDockWidgetTab::setActiveTab(bool active)
return; return;
} }
if (active && !hasFocus())
{
std::cout << "setFocus(Qt::OtherFocusReason);" << std::endl;
setFocus(Qt::OtherFocusReason);
}
d->IsActiveTab = active; d->IsActiveTab = active;
updateStyle(); updateStyle();
update(); update();