Skip to content

Commit 957dce5

Browse files
authored
Merge pull request #2 from githubuser0xFFFF/master
merge
2 parents 1ad6cae + e352ce5 commit 957dce5

10 files changed

+121
-17
lines changed

demo/MainWindow.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ struct MainWindowPrivate
127127
Ui::MainWindow ui;
128128
QAction* SavePerspectiveAction = nullptr;
129129
QWidgetAction* PerspectiveListAction = nullptr;
130-
QComboBox* PerspectiveComboBox = nullptr;;
130+
QComboBox* PerspectiveComboBox = nullptr;
131131
ads::CDockManager* DockManager = nullptr;
132132

133133
MainWindowPrivate(CMainWindow* _public) : _this(_public) {}
@@ -188,6 +188,7 @@ void MainWindowPrivate::createContent()
188188
auto TopDockArea = DockManager->addDockWidget(ads::TopDockWidgetArea, FileSystemWidget);
189189
DockWidget = createCalendarDockWidget(ViewMenu);
190190
DockWidget->setFeature(ads::CDockWidget::DockWidgetClosable, false);
191+
DockWidget->setTabToolTip(QString("Tab ToolTip\nHodie est dies magna"));
191192
DockManager->addDockWidget(ads::CenterDockWidgetArea, DockWidget, TopDockArea);
192193

193194
// Test dock area docking

src/DockAreaTitleBar.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,9 +119,14 @@ void DockAreaTitleBarPrivate::createButtons()
119119
TabsMenuButton->setIcon(_this->style()->standardIcon(QStyle::SP_TitleBarUnshadeButton));
120120

121121
QMenu* TabsMenu = new QMenu(TabsMenuButton);
122+
#ifndef QT_NO_TOOLTIP
123+
TabsMenu->setToolTipsVisible(true);
124+
#endif
122125
_this->connect(TabsMenu, SIGNAL(aboutToShow()), SLOT(onTabsMenuAboutToShow()));
123126
TabsMenuButton->setMenu(TabsMenu);
127+
#ifndef QT_NO_TOOLTIP
124128
TabsMenuButton->setToolTip(QObject::tr("List all tabs"));
129+
#endif
125130
TabsMenuButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding);
126131
TopLayout->addWidget(TabsMenuButton, 0);
127132
_this->connect(TabsMenuButton->menu(), SIGNAL(triggered(QAction*)),
@@ -131,7 +136,9 @@ void DockAreaTitleBarPrivate::createButtons()
131136
UndockButton = new tTileBarButton();
132137
UndockButton->setObjectName("undockButton");
133138
UndockButton->setAutoRaise(true);
139+
#ifndef QT_NO_TOOLTIP
134140
UndockButton->setToolTip(QObject::tr("Detach Group"));
141+
#endif
135142
UndockButton->setIcon(_this->style()->standardIcon(QStyle::SP_TitleBarNormalButton));
136143
UndockButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding);
137144
TopLayout->addWidget(UndockButton, 0);
@@ -148,6 +155,7 @@ void DockAreaTitleBarPrivate::createButtons()
148155
CloseIcon.addPixmap(disabledPixmap, QIcon::Disabled);
149156

150157
CloseButton->setIcon(CloseIcon);
158+
#ifndef QT_NO_TOOLTIP
151159
if (testConfigFlag(CDockManager::DockAreaCloseButtonClosesTab))
152160
{
153161
CloseButton->setToolTip(QObject::tr("Close Active Tab"));
@@ -156,6 +164,7 @@ void DockAreaTitleBarPrivate::createButtons()
156164
{
157165
CloseButton->setToolTip(QObject::tr("Close Group"));
158166
}
167+
#endif
159168
CloseButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding);
160169
TopLayout->addWidget(CloseButton, 0);
161170
_this->connect(CloseButton, SIGNAL(clicked()), SLOT(onCloseButtonClicked()));
@@ -240,6 +249,9 @@ void CDockAreaTitleBar::onTabsMenuAboutToShow()
240249
}
241250
auto Tab = d->TabBar->tab(i);
242251
QAction* Action = menu->addAction(Tab->icon(), Tab->text());
252+
#ifndef QT_NO_TOOLTIP
253+
Action->setToolTip(Tab->toolTip());
254+
#endif
243255
Action->setData(i);
244256
}
245257

@@ -312,6 +324,7 @@ QAbstractButton* CDockAreaTitleBar::button(TitleBarButton which) const
312324
void CDockAreaTitleBar::setVisible(bool Visible)
313325
{
314326
Super::setVisible(Visible);
327+
markTabsMenuOutdated();
315328
}
316329

317330

src/DockAreaTitleBar.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,14 +53,17 @@ class CDockAreaTitleBar : public QFrame
5353
friend struct DockAreaTitleBarPrivate;
5454

5555
private slots:
56-
void markTabsMenuOutdated();
5756
void onTabsMenuAboutToShow();
5857
void onCloseButtonClicked();
5958
void onUndockButtonClicked();
6059
void onTabsMenuActionTriggered(QAction* Action);
6160
void onCurrentTabChanged(int Index);
6261
void showContextMenu(const QPoint& pos);
6362

63+
public slots:
64+
void markTabsMenuOutdated();
65+
66+
6467
public:
6568
using Super = QFrame;
6669
/**
@@ -88,6 +91,7 @@ private slots:
8891
*/
8992
virtual void setVisible(bool Visible) override;
9093

94+
9195
signals:
9296
/**
9397
* This signal is emitted if a tab in the tab bar is clicked by the user

src/DockAreaWidget.cpp

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -236,11 +236,11 @@ using DockAreaLayout = CDockAreaLayout;
236236
*/
237237
struct DockAreaWidgetPrivate
238238
{
239-
CDockAreaWidget* _this;
240-
QBoxLayout* Layout;
241-
DockAreaLayout* ContentsLayout;
242-
CDockAreaTitleBar* TitleBar;
243-
CDockManager* DockManager = nullptr;
239+
CDockAreaWidget* _this = nullptr;
240+
QBoxLayout* Layout = nullptr;
241+
DockAreaLayout* ContentsLayout = nullptr;
242+
CDockAreaTitleBar* TitleBar = nullptr;
243+
CDockManager* DockManager = nullptr;
244244
bool UpdateCloseButton = false;
245245

246246
/**
@@ -680,10 +680,24 @@ void CDockAreaWidget::updateTitleBarVisibility()
680680
return;
681681
}
682682

683-
d->TitleBar->setVisible(!Container->isFloating() || !Container->hasTopLevelDockWidget());
683+
if (d->TitleBar)
684+
{
685+
d->TitleBar->setVisible(!Container->isFloating() || !Container->hasTopLevelDockWidget());
686+
}
687+
}
688+
689+
690+
//============================================================================
691+
void CDockAreaWidget::markTitleBarMenuOutdated()
692+
{
693+
if (d->TitleBar)
694+
{
695+
d->TitleBar->markTabsMenuOutdated();
696+
}
684697
}
685698

686699

700+
687701
//============================================================================
688702
void CDockAreaWidget::saveState(QXmlStreamWriter& s) const
689703
{

src/DockAreaWidget.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,12 @@ private slots:
130130
*/
131131
void internalSetCurrentDockWidget(CDockWidget* DockWidget);
132132

133+
134+
/**
135+
* Marks tabs menu to update
136+
*/
137+
void markTitleBarMenuOutdated();
138+
133139
protected slots:
134140
void toggleView(bool Open);
135141

src/DockWidget.cpp

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,8 @@ namespace ads
5858
*/
5959
struct DockWidgetPrivate
6060
{
61-
CDockWidget* _this;
62-
QBoxLayout* Layout;
61+
CDockWidget* _this = nullptr;
62+
QBoxLayout* Layout = nullptr;
6363
QWidget* Widget = nullptr;
6464
CDockWidgetTab* TabWidget = nullptr;
6565
CDockWidget::DockWidgetFeatures Features = CDockWidget::AllDockWidgetFeatures;
@@ -516,12 +516,36 @@ bool CDockWidget::event(QEvent *e)
516516
{
517517
d->ToggleViewAction->setText(title);
518518
}
519+
if (d->DockArea)
520+
{
521+
d->DockArea->markTitleBarMenuOutdated();//update tabs menu
522+
}
519523
emit titleChanged(title);
520524
}
521-
return QFrame::event(e);
525+
return Super::event(e);
522526
}
523527

524528

529+
#ifndef QT_NO_TOOLTIP
530+
//============================================================================
531+
void CDockWidget::setTabToolTip(const QString &text)
532+
{
533+
if (d->TabWidget)
534+
{
535+
d->TabWidget->setToolTip(text);
536+
}
537+
if (d->ToggleViewAction)
538+
{
539+
d->ToggleViewAction->setToolTip(text);
540+
}
541+
if (d->DockArea)
542+
{
543+
d->DockArea->markTitleBarMenuOutdated();//update tabs menu
544+
}
545+
}
546+
#endif
547+
548+
525549
//============================================================================
526550
void CDockWidget::setIcon(const QIcon& Icon)
527551
{

src/DockWidget.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,8 @@ private slots:
136136
void toggleViewInternal(bool Open);
137137

138138
public:
139+
using Super = QFrame;
140+
139141
enum DockWidgetFeature
140142
{
141143
DockWidgetClosable = 0x01,
@@ -385,6 +387,14 @@ private slots:
385387
QSize toolBarIconSize(eState State) const;
386388

387389

390+
#ifndef QT_NO_TOOLTIP
391+
/**
392+
* This is function sets text tooltip for title bar widget
393+
* and tooltip for toggle view action
394+
*/
395+
void setTabToolTip(const QString &text);
396+
#endif
397+
388398
public: // reimplements QFrame -----------------------------------------------
389399
/**
390400
* Emits titleChanged signal if title change event occurs

src/DockWidgetTab.cpp

Lines changed: 28 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,9 @@ void DockWidgetTabPrivate::createLayout()
153153
CloseButton->setIcon(CloseIcon);
154154
CloseButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
155155
CloseButton->setVisible(false);
156+
#ifndef QT_NO_TOOLTIP
156157
CloseButton->setToolTip(QObject::tr("Close Tab"));
158+
#endif
157159
_this->connect(CloseButton, SIGNAL(clicked()), SIGNAL(closeRequested()));
158160

159161
QFontMetrics fm(TitleLabel->font());
@@ -264,7 +266,7 @@ void CDockWidgetTab::mousePressEvent(QMouseEvent* ev)
264266
emit clicked();
265267
return;
266268
}
267-
QFrame::mousePressEvent(ev);
269+
Super::mousePressEvent(ev);
268270
}
269271

270272

@@ -280,7 +282,7 @@ void CDockWidgetTab::mouseReleaseEvent(QMouseEvent* ev)
280282

281283
d->DragStartMousePosition = QPoint();
282284
d->DragState = DraggingInactive;
283-
QFrame::mouseReleaseEvent(ev);
285+
Super::mouseReleaseEvent(ev);
284286
}
285287

286288

@@ -290,15 +292,15 @@ void CDockWidgetTab::mouseMoveEvent(QMouseEvent* ev)
290292
if (!(ev->buttons() & Qt::LeftButton) || d->isDraggingState(DraggingInactive))
291293
{
292294
d->DragState = DraggingInactive;
293-
QFrame::mouseMoveEvent(ev);
295+
Super::mouseMoveEvent(ev);
294296
return;
295297
}
296298

297299
// move floating window
298300
if (d->isDraggingState(DraggingFloatingWidget))
299301
{
300302
d->FloatingWidget->moveFloating();
301-
QFrame::mouseMoveEvent(ev);
303+
Super::mouseMoveEvent(ev);
302304
return;
303305
}
304306

@@ -338,7 +340,7 @@ void CDockWidgetTab::mouseMoveEvent(QMouseEvent* ev)
338340
return;
339341
}
340342

341-
QFrame::mouseMoveEvent(ev);
343+
Super::mouseMoveEvent(ev);
342344
}
343345

344346

@@ -422,7 +424,9 @@ void CDockWidgetTab::setIcon(const QIcon& Icon)
422424
d->IconLabel = new QLabel();
423425
d->IconLabel->setAlignment(Qt::AlignVCenter);
424426
d->IconLabel->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred);
427+
#ifndef QT_NO_TOOLTIP
425428
d->IconLabel->setToolTip(d->TitleLabel->toolTip());
429+
#endif
426430
Layout->insertWidget(0, d->IconLabel, Qt::AlignVCenter);
427431
Layout->insertSpacing(1, qRound(1.5 * Layout->contentsMargins().left() / 2.0));
428432
}
@@ -504,7 +508,25 @@ void CDockWidgetTab::onDetachActionTriggered()
504508
d->startFloating(DraggingInactive);
505509
}
506510

507-
} // namespace ads
508511

512+
513+
514+
//============================================================================
515+
bool CDockWidgetTab::event(QEvent *e)
516+
{
517+
#ifndef QT_NO_TOOLTIP
518+
if (e->type() == QEvent::ToolTipChange)
519+
{
520+
const auto text = toolTip();
521+
d->TitleLabel->setToolTip(text);
522+
}
523+
#endif
524+
return Super::event(e);
525+
}
526+
527+
528+
529+
530+
} // namespace ads
509531
//---------------------------------------------------------------------------
510532
// EOF DockWidgetTab.cpp

src/DockWidgetTab.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,12 @@ private slots:
136136
*/
137137
bool isClosable() const;
138138

139+
140+
/**
141+
* Track event ToolTipChange and set child ToolTip
142+
*/
143+
virtual bool event(QEvent *e) override;
144+
139145
public slots:
140146

141147
virtual void setVisible(bool visible) override;

src/ElidingLabel.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,9 @@ CElidingLabel::CElidingLabel(const QString& text, QWidget* parent, Qt::WindowFla
8888
d(new ElidingLabelPrivate(this))
8989
{
9090
d->Text = text;
91+
#ifndef QT_NO_TOOLTIP
9192
setToolTip(text);
93+
#endif
9294
}
9395

9496

@@ -183,7 +185,9 @@ void CElidingLabel::setText(const QString &text)
183185
else
184186
{
185187
d->Text = text;
188+
#ifndef QT_NO_TOOLTIP
186189
setToolTip( text );
190+
#endif
187191
d->elideText(this->size().width());
188192
}
189193
}

0 commit comments

Comments
 (0)