From 6cb1f33451f47e3b865dafc4faf363760946504e Mon Sep 17 00:00:00 2001 From: Yozka Date: Wed, 23 Jan 2019 11:43:07 +0500 Subject: [PATCH] ToolTip from titlebar and menu --- src/DockAreaTitleBar.cpp | 13 +++++++++++++ src/DockAreaWidget.cpp | 15 +++++++++------ src/DockWidget.cpp | 28 ++++++++++++++++++++++++++-- src/DockWidget.h | 8 ++++++++ src/DockWidgetTab.cpp | 24 +++++++++++++++++++++++- src/DockWidgetTab.h | 6 ++++++ src/ElidingLabel.cpp | 4 ++++ 7 files changed, 89 insertions(+), 9 deletions(-) diff --git a/src/DockAreaTitleBar.cpp b/src/DockAreaTitleBar.cpp index 5c1e151..65bc3dd 100644 --- a/src/DockAreaTitleBar.cpp +++ b/src/DockAreaTitleBar.cpp @@ -119,9 +119,14 @@ void DockAreaTitleBarPrivate::createButtons() TabsMenuButton->setIcon(_this->style()->standardIcon(QStyle::SP_TitleBarUnshadeButton)); QMenu* TabsMenu = new QMenu(TabsMenuButton); + #ifndef QT_NO_TOOLTIP + TabsMenu->setToolTipsVisible(true); + #endif _this->connect(TabsMenu, SIGNAL(aboutToShow()), SLOT(onTabsMenuAboutToShow())); TabsMenuButton->setMenu(TabsMenu); + #ifndef QT_NO_TOOLTIP TabsMenuButton->setToolTip(QObject::tr("List all tabs")); + #endif TabsMenuButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding); TopLayout->addWidget(TabsMenuButton, 0); _this->connect(TabsMenuButton->menu(), SIGNAL(triggered(QAction*)), @@ -131,7 +136,9 @@ void DockAreaTitleBarPrivate::createButtons() UndockButton = new tTileBarButton(); UndockButton->setObjectName("undockButton"); UndockButton->setAutoRaise(true); + #ifndef QT_NO_TOOLTIP UndockButton->setToolTip(QObject::tr("Detach Group")); + #endif UndockButton->setIcon(_this->style()->standardIcon(QStyle::SP_TitleBarNormalButton)); UndockButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding); TopLayout->addWidget(UndockButton, 0); @@ -148,6 +155,7 @@ void DockAreaTitleBarPrivate::createButtons() CloseIcon.addPixmap(disabledPixmap, QIcon::Disabled); CloseButton->setIcon(CloseIcon); + #ifndef QT_NO_TOOLTIP if (testConfigFlag(CDockManager::DockAreaCloseButtonClosesTab)) { CloseButton->setToolTip(QObject::tr("Close Active Tab")); @@ -156,6 +164,7 @@ void DockAreaTitleBarPrivate::createButtons() { CloseButton->setToolTip(QObject::tr("Close Group")); } + #endif CloseButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding); TopLayout->addWidget(CloseButton, 0); _this->connect(CloseButton, SIGNAL(clicked()), SLOT(onCloseButtonClicked())); @@ -240,6 +249,9 @@ void CDockAreaTitleBar::onTabsMenuAboutToShow() } auto Tab = d->TabBar->tab(i); QAction* Action = menu->addAction(Tab->icon(), Tab->text()); + #ifndef QT_NO_TOOLTIP + Action->setToolTip(Tab->toolTip()); + #endif Action->setData(i); } @@ -312,6 +324,7 @@ QAbstractButton* CDockAreaTitleBar::button(TitleBarButton which) const void CDockAreaTitleBar::setVisible(bool Visible) { Super::setVisible(Visible); + markTabsMenuOutdated(); } diff --git a/src/DockAreaWidget.cpp b/src/DockAreaWidget.cpp index 5e05f36..ab15781 100644 --- a/src/DockAreaWidget.cpp +++ b/src/DockAreaWidget.cpp @@ -236,11 +236,11 @@ using DockAreaLayout = CDockAreaLayout; */ struct DockAreaWidgetPrivate { - CDockAreaWidget* _this; - QBoxLayout* Layout; - DockAreaLayout* ContentsLayout; - CDockAreaTitleBar* TitleBar; - CDockManager* DockManager = nullptr; + CDockAreaWidget* _this = nullptr; + QBoxLayout* Layout = nullptr; + DockAreaLayout* ContentsLayout = nullptr; + CDockAreaTitleBar* TitleBar = nullptr; + CDockManager* DockManager = nullptr; bool UpdateCloseButton = false; /** @@ -680,7 +680,10 @@ void CDockAreaWidget::updateTitleBarVisibility() return; } - d->TitleBar->setVisible(!Container->isFloating() || !Container->hasTopLevelDockWidget()); + if (d->TitleBar) + { + d->TitleBar->setVisible(!Container->isFloating() || !Container->hasTopLevelDockWidget()); + } } diff --git a/src/DockWidget.cpp b/src/DockWidget.cpp index 9389d3a..109346c 100644 --- a/src/DockWidget.cpp +++ b/src/DockWidget.cpp @@ -58,8 +58,8 @@ namespace ads */ struct DockWidgetPrivate { - CDockWidget* _this; - QBoxLayout* Layout; + CDockWidget* _this = nullptr; + QBoxLayout* Layout = nullptr; QWidget* Widget = nullptr; CDockWidgetTab* TabWidget = nullptr; CDockWidget::DockWidgetFeatures Features = CDockWidget::AllDockWidgetFeatures; @@ -516,12 +516,36 @@ bool CDockWidget::event(QEvent *e) { d->ToggleViewAction->setText(title); } + if (d->DockArea) + { + d->DockArea->updateTitleBarVisibility();//update tabs menu + } emit titleChanged(title); } return QFrame::event(e); } +#ifndef QT_NO_TOOLTIP +//============================================================================ +void CDockWidget::setTabToolTip(const QString &text) +{ + if (d->TabWidget) + { + d->TabWidget->setToolTip(text); + } + if (d->ToggleViewAction) + { + d->ToggleViewAction->setToolTip(text); + } + if (d->DockArea) + { + d->DockArea->updateTitleBarVisibility();//update tabs menu + } +} +#endif + + //============================================================================ void CDockWidget::setIcon(const QIcon& Icon) { diff --git a/src/DockWidget.h b/src/DockWidget.h index a50e0c1..17b4d63 100644 --- a/src/DockWidget.h +++ b/src/DockWidget.h @@ -385,6 +385,14 @@ public: QSize toolBarIconSize(eState State) const; + #ifndef QT_NO_TOOLTIP + /** + * This is function sets text tooltip for title bar widget + * and tooltip for toggle view action + */ + void setTabToolTip(const QString &text); + #endif + public: // reimplements QFrame ----------------------------------------------- /** * Emits titleChanged signal if title change event occurs diff --git a/src/DockWidgetTab.cpp b/src/DockWidgetTab.cpp index 887eb4a..1da00a0 100644 --- a/src/DockWidgetTab.cpp +++ b/src/DockWidgetTab.cpp @@ -153,7 +153,9 @@ void DockWidgetTabPrivate::createLayout() CloseButton->setIcon(CloseIcon); CloseButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); CloseButton->setVisible(false); + #ifndef QT_NO_TOOLTIP CloseButton->setToolTip(QObject::tr("Close Tab")); + #endif _this->connect(CloseButton, SIGNAL(clicked()), SIGNAL(closeRequested())); QFontMetrics fm(TitleLabel->font()); @@ -422,7 +424,9 @@ void CDockWidgetTab::setIcon(const QIcon& Icon) d->IconLabel = new QLabel(); d->IconLabel->setAlignment(Qt::AlignVCenter); d->IconLabel->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred); + #ifndef QT_NO_TOOLTIP d->IconLabel->setToolTip(d->TitleLabel->toolTip()); + #endif Layout->insertWidget(0, d->IconLabel, Qt::AlignVCenter); Layout->insertSpacing(1, qRound(1.5 * Layout->contentsMargins().left() / 2.0)); } @@ -504,7 +508,25 @@ void CDockWidgetTab::onDetachActionTriggered() d->startFloating(DraggingInactive); } -} // namespace ads + + +//============================================================================ +bool CDockWidgetTab::event(QEvent *e) +{ + #ifndef QT_NO_TOOLTIP + if (e->type() == QEvent::ToolTipChange) + { + const auto text = toolTip(); + d->TitleLabel->setToolTip(text); + } + #endif + return QFrame::event(e); +} + + + + +} // namespace ads //--------------------------------------------------------------------------- // EOF DockWidgetTab.cpp diff --git a/src/DockWidgetTab.h b/src/DockWidgetTab.h index f828190..275609e 100644 --- a/src/DockWidgetTab.h +++ b/src/DockWidgetTab.h @@ -136,6 +136,12 @@ public: */ bool isClosable() const; + + /** + * Emits tooltipChanged + */ + virtual bool event(QEvent *e) override; + public slots: virtual void setVisible(bool visible) override; diff --git a/src/ElidingLabel.cpp b/src/ElidingLabel.cpp index cfebb16..8e6ea56 100644 --- a/src/ElidingLabel.cpp +++ b/src/ElidingLabel.cpp @@ -88,7 +88,9 @@ CElidingLabel::CElidingLabel(const QString& text, QWidget* parent, Qt::WindowFla d(new ElidingLabelPrivate(this)) { d->Text = text; +#ifndef QT_NO_TOOLTIP setToolTip(text); +#endif } @@ -183,7 +185,9 @@ void CElidingLabel::setText(const QString &text) else { d->Text = text; +#ifndef QT_NO_TOOLTIP setToolTip( text ); +#endif d->elideText(this->size().width()); } }