From 84fcca22936c9268918d4f61a1dbc63990b04e3a Mon Sep 17 00:00:00 2001 From: Howard-C Date: Thu, 26 Mar 2020 11:05:50 +0800 Subject: [PATCH] Add the ability to close score tab by clicking middle button --- mscore/scoretab.cpp | 29 +++++++++++++++++++++++++++-- mscore/scoretab.h | 21 ++++++++++++++++++--- 2 files changed, 45 insertions(+), 5 deletions(-) diff --git a/mscore/scoretab.cpp b/mscore/scoretab.cpp index 39a6279734f10..8b1b3a4e70306 100644 --- a/mscore/scoretab.cpp +++ b/mscore/scoretab.cpp @@ -42,6 +42,31 @@ namespace Ms { +//--------------------------------------------------------- +// MsTabBar::mousePressEvent +//--------------------------------------------------------- + +void MsTabBar::mousePressEvent(QMouseEvent* e) + { + QTabBar::mousePressEvent(e); + if (e->button() == Qt::MiddleButton) + _middleClickedTab = tabAt(e->pos()); + } + +//--------------------------------------------------------- +// MsTabBar::mouseReleaseEvent +//--------------------------------------------------------- + +void MsTabBar::mouseReleaseEvent(QMouseEvent* e) + { + QTabBar::mouseReleaseEvent(e); + if (e->button() == Qt::MiddleButton) { + if (tabAt(e->pos()) == _middleClickedTab) + emit tabCloseRequested(_middleClickedTab); + _middleClickedTab = -1; // reset + } + } + //--------------------------------------------------------- // ScoreTab //--------------------------------------------------------- @@ -64,7 +89,7 @@ ScoreTab::ScoreTab(QList* sl, QWidget* parent) connect(ag, SIGNAL(triggered(QAction*)), this, SIGNAL(actionTriggered(QAction*))); - tab = new QTabBar(this); + tab = new MsTabBar(this); tab->setObjectName("primarytab"); tab->setAccessibleName(""); tab->setExpanding(false); @@ -73,7 +98,7 @@ ScoreTab::ScoreTab(QList* sl, QWidget* parent) tab->setTabsClosable(true); tab->setMovable(true); - tab2 = new QTabBar(this); + tab2 = new MsTabBar(this); tab2->setObjectName("secondarytab"); tab2->setAccessibleName(""); tab2->setExpanding(false); diff --git a/mscore/scoretab.h b/mscore/scoretab.h index 8083cf4bffc30..a896183a8006d 100644 --- a/mscore/scoretab.h +++ b/mscore/scoretab.h @@ -40,6 +40,21 @@ struct TabScoreView { } }; +//--------------------------------------------------------- +// MsTabBar +//--------------------------------------------------------- + +class MsTabBar : public QTabBar { + int _middleClickedTab { -1 }; + + public: + MsTabBar(QWidget* parent = nullptr) : QTabBar(parent) {} + + private: + void mousePressEvent(QMouseEvent* e) override; + void mouseReleaseEvent(QMouseEvent* e) override; + }; + //--------------------------------------------------------- // ScoreTab //--------------------------------------------------------- @@ -47,8 +62,8 @@ struct TabScoreView { class ScoreTab : public QWidget { Q_OBJECT QList* scoreList { nullptr }; - QTabBar* tab { nullptr }; // list of scores - QTabBar* tab2 { nullptr }; // list of excerpts for current score + MsTabBar* tab { nullptr }; // list of scores + MsTabBar* tab2 { nullptr }; // list of excerpts for current score QStackedLayout* stack { nullptr }; MuseScore* mainWindow { nullptr };; void clearTab2(); @@ -75,7 +90,7 @@ class ScoreTab : public QWidget { ScoreTab(QList*, QWidget* parent = 0); ~ScoreTab(); - QTabBar* getTab() const { return tab; } + MsTabBar* getTab() const { return tab; } void insertTab(MasterScore*); void setTabText(int, const QString&);