From 00f5b92335b64cc4c5d4746ab30e88489f116260 Mon Sep 17 00:00:00 2001 From: "O. Khryshchuk" Date: Sat, 18 Apr 2026 21:58:29 +0200 Subject: [PATCH 1/7] Added quick actions bar: open/list/close tabs. --- src/CMakeLists.txt | 2 + src/dialogs/MainWindow.cpp | 29 ++++++++- src/dialogs/MainWindow.h | 3 + src/icons/cross.svg | 1 + src/icons/list_with_icons.svg | 1 + src/icons/plus.svg | 1 + src/resources.qrc | 3 + src/widgets/QuickActionsBar.cpp | 110 ++++++++++++++++++++++++++++++++ src/widgets/QuickActionsBar.h | 55 ++++++++++++++++ 9 files changed, 204 insertions(+), 1 deletion(-) create mode 100644 src/icons/cross.svg create mode 100644 src/icons/list_with_icons.svg create mode 100644 src/icons/plus.svg create mode 100644 src/widgets/QuickActionsBar.cpp create mode 100644 src/widgets/QuickActionsBar.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 2bc1f9fa4..39790adf2 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -181,6 +181,8 @@ qt_add_executable(NotepadNext widgets/StatusLabel.h Sorter.h Sorter.cpp ScintillaSorter.h ScintillaSorter.cpp + widgets/QuickActionsBar.cpp + widgets/QuickActionsBar.h ) set_target_properties(NotepadNext PROPERTIES diff --git a/src/dialogs/MainWindow.cpp b/src/dialogs/MainWindow.cpp index fd25f62db..de99ecf6a 100644 --- a/src/dialogs/MainWindow.cpp +++ b/src/dialogs/MainWindow.cpp @@ -43,7 +43,6 @@ #include #include - #ifdef Q_OS_WIN #include #include @@ -74,6 +73,8 @@ #include "PreferencesDialog.h" #include "ColumnEditorDialog.h" +#include "QuickActionsBar.h" + #include "QuickFindWidget.h" #include "EditorPrintPreviewRenderer.h" @@ -850,6 +851,32 @@ MainWindow::MainWindow(NotepadNextApplication *app) : mb.exec(); }); + { + quickActionsBar = new QuickActionsBar(ui->menuBar); + + connect(quickActionsBar, &QuickActionsBar::newTabClicked, + this, &MainWindow::newFile); + connect(quickActionsBar, &QuickActionsBar::closeCurrentTabClicked, + this, &MainWindow::closeCurrentFile); + connect(quickActionsBar, &QuickActionsBar::tabsListAboutToShow, [this](QMenu *editorsMenu) { + const auto editorsList = editors(); + + editorsMenu->clear(); + + for (const auto editor : editorsList) + { + const auto action = editorsMenu->addAction( + QIcon(editor->isSavedToDisk() ? ":/icons/saved.png" : ":/icons/unsaved.png"), + (editor->isActiveWindow() ? "> " : "") + editor->getName() + ); + + connect(action, &QAction::triggered, [this, editor]() { switchToEditor(editor); }); + } + }); + + ui->menuBar->setCornerWidget(quickActionsBar, Qt::TopRightCorner); + } + #ifdef Q_OS_WIN connect(ui->actionShowInExplorer, &QAction::triggered, this, [=]() { QString filePath = QDir::toNativeSeparators(currentEditor()->getFileInfo().canonicalFilePath()); diff --git a/src/dialogs/MainWindow.h b/src/dialogs/MainWindow.h index 5c510a51b..82b82ffc5 100644 --- a/src/dialogs/MainWindow.h +++ b/src/dialogs/MainWindow.h @@ -42,6 +42,7 @@ class QuickFindWidget; class ZoomEventWatcher; class Converter; class DefaultDirectoryManager; +class QuickActionsBar; class MainWindow : public QMainWindow { @@ -167,6 +168,8 @@ private slots: QActionGroup *languageActionGroup; + QuickActionsBar *quickActionsBar = nullptr; + //NppImporter *npp; MacroManager macroManager; diff --git a/src/icons/cross.svg b/src/icons/cross.svg new file mode 100644 index 000000000..eb194fd2e --- /dev/null +++ b/src/icons/cross.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/list_with_icons.svg b/src/icons/list_with_icons.svg new file mode 100644 index 000000000..9d3230f78 --- /dev/null +++ b/src/icons/list_with_icons.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/plus.svg b/src/icons/plus.svg new file mode 100644 index 000000000..12fd70c58 --- /dev/null +++ b/src/icons/plus.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/resources.qrc b/src/resources.qrc index d373be086..9f390c4bd 100644 --- a/src/resources.qrc +++ b/src/resources.qrc @@ -42,5 +42,8 @@ icons/application_osx_terminal.png icons/folder_go.png icons/wrapindicator.png + icons/cross.svg + icons/plus.svg + icons/list_with_icons.svg diff --git a/src/widgets/QuickActionsBar.cpp b/src/widgets/QuickActionsBar.cpp new file mode 100644 index 000000000..aea44f700 --- /dev/null +++ b/src/widgets/QuickActionsBar.cpp @@ -0,0 +1,110 @@ +#include +#include + +#include "QuickActionsBar.h" + +namespace { + constexpr char* IconPlusPath = "://icons/plus.svg"; + constexpr char* IconListPath = "://icons/list_with_icons.svg"; + constexpr char* IconCrossPath = "://icons/cross.svg"; +} + +struct QuickActionsBar::QuickActionsBarPrivate +{ + QuickActionsBar::Buttons visibilityOptions = QuickActionsBar::AllButtons; + QAction *newTabAction = nullptr; + QAction *showTabsListAction = nullptr; + QAction *closeCurrentTabAction = nullptr; +}; + +QuickActionsBar::QuickActionsBar(const Buttons &visibilityOptions, QWidget *parent) + : QToolBar(parent), + p(new QuickActionsBarPrivate) +{ + setIconSize({ 16, 16 }); // TODO: adjustible + setStyleSheet( + "QToolBar { margin: 0px; } " + "QToolButton { padding: 0px; margin: 0px; }" + "QToolButton::menu-indicator { image:none; }" + ); + + { + p->newTabAction = new QAction(this); + + p->newTabAction->setIcon(QIcon(IconPlusPath)); + p->newTabAction->setToolTip(tr("Create a new file")); + + connect(p->newTabAction, &QAction::triggered, + this, &QuickActionsBar::newTabClicked); + + addAction(p->newTabAction); + } + + { + const auto tabsMenu = new QMenu(this); + p->showTabsListAction = new QAction(this); + + p->showTabsListAction->setIcon(QIcon(IconListPath)); + p->showTabsListAction->setMenu(tabsMenu); + + connect(tabsMenu, &QMenu::aboutToShow, [this, tabsMenu]() { + emit tabsListAboutToShow(tabsMenu); + }); + + addAction(p->showTabsListAction); + + { // Trick cause addWidget will lost some style things + const auto toolButton = qobject_cast(widgetForAction(p->showTabsListAction)); + + if (toolButton) { + toolButton->setPopupMode(QToolButton::InstantPopup); + } + } + } + + { + p->closeCurrentTabAction = new QAction(this); + + p->closeCurrentTabAction->setIcon(QIcon(IconCrossPath)); + p->closeCurrentTabAction->setToolTip(tr("Close the current file")); + + connect(p->closeCurrentTabAction, &QAction::triggered, + this, &QuickActionsBar::closeCurrentTabClicked); + + addAction(p->closeCurrentTabAction); + } + + setVisibilityOptions(visibilityOptions); +} + +QuickActionsBar::~QuickActionsBar() +{ + delete p; +} + +QuickActionsBar::Buttons QuickActionsBar::visibilityOptions() const +{ + return p->visibilityOptions; +} + +void QuickActionsBar::setVisibilityOptions(const Buttons &options) +{ + if (p->visibilityOptions == options) return; + + p->visibilityOptions = options; + + p->newTabAction->setVisible(options.testFlag(NewTabButton)); + p->showTabsListAction->setVisible(options.testFlag(TabsListButton)); + p->closeCurrentTabAction->setVisible(options.testFlag(CloseCurrentTabButton)); + + emit visibilityOptionsChanged(options); +} + +void QuickActionsBar::setVisibilityOption(Button option, bool on) +{ + const auto& currentOptions = p->visibilityOptions; + setVisibilityOptions( + on ? (currentOptions | option) + : (currentOptions & ~option) + ); +} diff --git a/src/widgets/QuickActionsBar.h b/src/widgets/QuickActionsBar.h new file mode 100644 index 000000000..b92fa8eae --- /dev/null +++ b/src/widgets/QuickActionsBar.h @@ -0,0 +1,55 @@ +#ifndef QUICKACTIONSBAR_H +#define QUICKACTIONSBAR_H + +#include + +class QuickActionsBar : public QToolBar +{ + Q_OBJECT + + Q_PROPERTY( + Buttons visibilityOptions + READ visibilityOptions + WRITE setVisibilityOptions + NOTIFY visibilityOptionsChanged + ) + +public: + enum Button { + NoButtons = 0x00, + NewTabButton = 0x01, + TabsListButton = 0x02, + CloseCurrentTabButton = 0x04, + + AllButtons = NewTabButton | + TabsListButton | + CloseCurrentTabButton + }; + + Q_FLAG(Button) + Q_DECLARE_FLAGS(Buttons, Button) + +signals: /*public*/ + void newTabClicked(); + void tabsListAboutToShow(QMenu *list); + void closeCurrentTabClicked(); + + void visibilityOptionsChanged(const QuickActionsBar::Buttons &visibleOptions); + +public: + inline QuickActionsBar(QWidget *parent = nullptr) : QuickActionsBar(AllButtons, parent) { } + explicit QuickActionsBar(const Buttons &visibilityOptions = Button::AllButtons, QWidget *parent = nullptr); + virtual ~QuickActionsBar(); + + Buttons visibilityOptions() const; + void setVisibilityOptions(const Buttons &options); + void setVisibilityOption(Button option, bool on = true); + +private: + struct QuickActionsBarPrivate; + QuickActionsBarPrivate *p = nullptr; +}; + +Q_DECLARE_OPERATORS_FOR_FLAGS(QuickActionsBar::Buttons); + +#endif // QUICKACTIONSBAR_H From 5a573e951989cac1e74530e4fab8b77209310b24 Mon Sep 17 00:00:00 2001 From: "O. Khryshchuk" Date: Sat, 18 Apr 2026 22:36:48 +0200 Subject: [PATCH 2/7] Disabled tabs menu in DockedEditor. --- src/DockedEditor.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/DockedEditor.cpp b/src/DockedEditor.cpp index 9e6b4771c..f813f0471 100644 --- a/src/DockedEditor.cpp +++ b/src/DockedEditor.cpp @@ -62,6 +62,7 @@ DockedEditor::DockedEditor(QWidget *parent) : QObject(parent) ads::CDockManager::setConfigFlag(ads::CDockManager::FocusHighlighting, true); ads::CDockManager::setConfigFlag(ads::CDockManager::EqualSplitOnInsertion, true); ads::CDockManager::setConfigFlag(ads::CDockManager::MiddleMouseButtonClosesTab, true); + ads::CDockManager::setConfigFlag(ads::CDockManager::DockAreaHasTabsMenuButton, false); dockManager = new ads::CDockManager(parent); dockManager->setStyleSheet(""); From c8e8eaa1e3394fd5a74095533432e1772477b1e4 Mon Sep 17 00:00:00 2001 From: "O. Khryshchuk" Date: Sat, 18 Apr 2026 23:07:13 +0200 Subject: [PATCH 3/7] Windows build fix. --- src/widgets/QuickActionsBar.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/widgets/QuickActionsBar.cpp b/src/widgets/QuickActionsBar.cpp index aea44f700..451f670af 100644 --- a/src/widgets/QuickActionsBar.cpp +++ b/src/widgets/QuickActionsBar.cpp @@ -4,9 +4,9 @@ #include "QuickActionsBar.h" namespace { - constexpr char* IconPlusPath = "://icons/plus.svg"; - constexpr char* IconListPath = "://icons/list_with_icons.svg"; - constexpr char* IconCrossPath = "://icons/cross.svg"; + constexpr QLatin1StringView IconPlusPath("://icons/plus.svg"); + constexpr QLatin1StringView IconListPath("://icons/list_with_icons.svg"); + constexpr QLatin1StringView IconCrossPath("://icons/cross.svg"); } struct QuickActionsBar::QuickActionsBarPrivate From aa14d85049697fe674a9459981c9452c44a53255 Mon Sep 17 00:00:00 2001 From: "O. Khryshchuk" Date: Mon, 20 Apr 2026 10:12:30 +0200 Subject: [PATCH 4/7] Small refactor --- src/CMakeLists.txt | 4 +- src/dialogs/MainWindow.cpp | 10 +-- src/dialogs/MainWindow.h | 4 +- src/widgets/QuickActionsBar.cpp | 110 -------------------------- src/widgets/QuickActionsBar.h | 55 ------------- src/widgets/TabsQuickActionsBar.cpp | 117 ++++++++++++++++++++++++++++ src/widgets/TabsQuickActionsBar.h | 56 +++++++++++++ 7 files changed, 182 insertions(+), 174 deletions(-) delete mode 100644 src/widgets/QuickActionsBar.cpp delete mode 100644 src/widgets/QuickActionsBar.h create mode 100644 src/widgets/TabsQuickActionsBar.cpp create mode 100644 src/widgets/TabsQuickActionsBar.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 39790adf2..c465a6aaa 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -181,8 +181,8 @@ qt_add_executable(NotepadNext widgets/StatusLabel.h Sorter.h Sorter.cpp ScintillaSorter.h ScintillaSorter.cpp - widgets/QuickActionsBar.cpp - widgets/QuickActionsBar.h + widgets/TabsQuickActionsBar.cpp + widgets/TabsQuickActionsBar.h ) set_target_properties(NotepadNext PROPERTIES diff --git a/src/dialogs/MainWindow.cpp b/src/dialogs/MainWindow.cpp index de99ecf6a..899a572ed 100644 --- a/src/dialogs/MainWindow.cpp +++ b/src/dialogs/MainWindow.cpp @@ -73,7 +73,7 @@ #include "PreferencesDialog.h" #include "ColumnEditorDialog.h" -#include "QuickActionsBar.h" +#include "TabsQuickActionsBar.h" #include "QuickFindWidget.h" @@ -852,13 +852,13 @@ MainWindow::MainWindow(NotepadNextApplication *app) : }); { - quickActionsBar = new QuickActionsBar(ui->menuBar); + quickActionsBar = new TabsQuickActionsBar(ui->menuBar); - connect(quickActionsBar, &QuickActionsBar::newTabClicked, + connect(quickActionsBar, &TabsQuickActionsBar::createNewTabClicked, this, &MainWindow::newFile); - connect(quickActionsBar, &QuickActionsBar::closeCurrentTabClicked, + connect(quickActionsBar, &TabsQuickActionsBar::closeCurrentTabClicked, this, &MainWindow::closeCurrentFile); - connect(quickActionsBar, &QuickActionsBar::tabsListAboutToShow, [this](QMenu *editorsMenu) { + connect(quickActionsBar, &TabsQuickActionsBar::tabsMenuAboutToShow, [this](QMenu *editorsMenu) { const auto editorsList = editors(); editorsMenu->clear(); diff --git a/src/dialogs/MainWindow.h b/src/dialogs/MainWindow.h index 82b82ffc5..9fb18e9ab 100644 --- a/src/dialogs/MainWindow.h +++ b/src/dialogs/MainWindow.h @@ -42,7 +42,7 @@ class QuickFindWidget; class ZoomEventWatcher; class Converter; class DefaultDirectoryManager; -class QuickActionsBar; +class TabsQuickActionsBar; class MainWindow : public QMainWindow { @@ -168,7 +168,7 @@ private slots: QActionGroup *languageActionGroup; - QuickActionsBar *quickActionsBar = nullptr; + TabsQuickActionsBar *quickActionsBar = nullptr; //NppImporter *npp; diff --git a/src/widgets/QuickActionsBar.cpp b/src/widgets/QuickActionsBar.cpp deleted file mode 100644 index 451f670af..000000000 --- a/src/widgets/QuickActionsBar.cpp +++ /dev/null @@ -1,110 +0,0 @@ -#include -#include - -#include "QuickActionsBar.h" - -namespace { - constexpr QLatin1StringView IconPlusPath("://icons/plus.svg"); - constexpr QLatin1StringView IconListPath("://icons/list_with_icons.svg"); - constexpr QLatin1StringView IconCrossPath("://icons/cross.svg"); -} - -struct QuickActionsBar::QuickActionsBarPrivate -{ - QuickActionsBar::Buttons visibilityOptions = QuickActionsBar::AllButtons; - QAction *newTabAction = nullptr; - QAction *showTabsListAction = nullptr; - QAction *closeCurrentTabAction = nullptr; -}; - -QuickActionsBar::QuickActionsBar(const Buttons &visibilityOptions, QWidget *parent) - : QToolBar(parent), - p(new QuickActionsBarPrivate) -{ - setIconSize({ 16, 16 }); // TODO: adjustible - setStyleSheet( - "QToolBar { margin: 0px; } " - "QToolButton { padding: 0px; margin: 0px; }" - "QToolButton::menu-indicator { image:none; }" - ); - - { - p->newTabAction = new QAction(this); - - p->newTabAction->setIcon(QIcon(IconPlusPath)); - p->newTabAction->setToolTip(tr("Create a new file")); - - connect(p->newTabAction, &QAction::triggered, - this, &QuickActionsBar::newTabClicked); - - addAction(p->newTabAction); - } - - { - const auto tabsMenu = new QMenu(this); - p->showTabsListAction = new QAction(this); - - p->showTabsListAction->setIcon(QIcon(IconListPath)); - p->showTabsListAction->setMenu(tabsMenu); - - connect(tabsMenu, &QMenu::aboutToShow, [this, tabsMenu]() { - emit tabsListAboutToShow(tabsMenu); - }); - - addAction(p->showTabsListAction); - - { // Trick cause addWidget will lost some style things - const auto toolButton = qobject_cast(widgetForAction(p->showTabsListAction)); - - if (toolButton) { - toolButton->setPopupMode(QToolButton::InstantPopup); - } - } - } - - { - p->closeCurrentTabAction = new QAction(this); - - p->closeCurrentTabAction->setIcon(QIcon(IconCrossPath)); - p->closeCurrentTabAction->setToolTip(tr("Close the current file")); - - connect(p->closeCurrentTabAction, &QAction::triggered, - this, &QuickActionsBar::closeCurrentTabClicked); - - addAction(p->closeCurrentTabAction); - } - - setVisibilityOptions(visibilityOptions); -} - -QuickActionsBar::~QuickActionsBar() -{ - delete p; -} - -QuickActionsBar::Buttons QuickActionsBar::visibilityOptions() const -{ - return p->visibilityOptions; -} - -void QuickActionsBar::setVisibilityOptions(const Buttons &options) -{ - if (p->visibilityOptions == options) return; - - p->visibilityOptions = options; - - p->newTabAction->setVisible(options.testFlag(NewTabButton)); - p->showTabsListAction->setVisible(options.testFlag(TabsListButton)); - p->closeCurrentTabAction->setVisible(options.testFlag(CloseCurrentTabButton)); - - emit visibilityOptionsChanged(options); -} - -void QuickActionsBar::setVisibilityOption(Button option, bool on) -{ - const auto& currentOptions = p->visibilityOptions; - setVisibilityOptions( - on ? (currentOptions | option) - : (currentOptions & ~option) - ); -} diff --git a/src/widgets/QuickActionsBar.h b/src/widgets/QuickActionsBar.h deleted file mode 100644 index b92fa8eae..000000000 --- a/src/widgets/QuickActionsBar.h +++ /dev/null @@ -1,55 +0,0 @@ -#ifndef QUICKACTIONSBAR_H -#define QUICKACTIONSBAR_H - -#include - -class QuickActionsBar : public QToolBar -{ - Q_OBJECT - - Q_PROPERTY( - Buttons visibilityOptions - READ visibilityOptions - WRITE setVisibilityOptions - NOTIFY visibilityOptionsChanged - ) - -public: - enum Button { - NoButtons = 0x00, - NewTabButton = 0x01, - TabsListButton = 0x02, - CloseCurrentTabButton = 0x04, - - AllButtons = NewTabButton | - TabsListButton | - CloseCurrentTabButton - }; - - Q_FLAG(Button) - Q_DECLARE_FLAGS(Buttons, Button) - -signals: /*public*/ - void newTabClicked(); - void tabsListAboutToShow(QMenu *list); - void closeCurrentTabClicked(); - - void visibilityOptionsChanged(const QuickActionsBar::Buttons &visibleOptions); - -public: - inline QuickActionsBar(QWidget *parent = nullptr) : QuickActionsBar(AllButtons, parent) { } - explicit QuickActionsBar(const Buttons &visibilityOptions = Button::AllButtons, QWidget *parent = nullptr); - virtual ~QuickActionsBar(); - - Buttons visibilityOptions() const; - void setVisibilityOptions(const Buttons &options); - void setVisibilityOption(Button option, bool on = true); - -private: - struct QuickActionsBarPrivate; - QuickActionsBarPrivate *p = nullptr; -}; - -Q_DECLARE_OPERATORS_FOR_FLAGS(QuickActionsBar::Buttons); - -#endif // QUICKACTIONSBAR_H diff --git a/src/widgets/TabsQuickActionsBar.cpp b/src/widgets/TabsQuickActionsBar.cpp new file mode 100644 index 000000000..bb7a442eb --- /dev/null +++ b/src/widgets/TabsQuickActionsBar.cpp @@ -0,0 +1,117 @@ +#include +#include + +#include + +#include "TabsQuickActionsBar.h" + +namespace { + constexpr QLatin1StringView IconPlusPath("://icons/plus.svg"); + constexpr QLatin1StringView IconListPath("://icons/list_with_icons.svg"); + constexpr QLatin1StringView IconCrossPath("://icons/cross.svg"); +} + +struct TabsQuickActionsBar::Private +{ + TabsQuickActionsBar::Buttons visibileButtons = TabsQuickActionsBar::All; + QAction *createNewTabAction = nullptr; + QAction *showTabsMenuAction = nullptr; + QAction *closeCurrentTabAction = nullptr; +}; + +TabsQuickActionsBar::TabsQuickActionsBar(const Buttons &visibileButtons, QWidget *parent) + : QToolBar(parent), + p(new Private) +{ + setIconSize({ 16, 16 }); + setStyleSheet( + "QToolBar { margin: 0px; }" + "QToolButton { padding: 0px; margin: 0px; }" + "QToolButton::menu-indicator { image: none; }" + ); + + { + p->createNewTabAction = new QAction(this); + + p->createNewTabAction->setIcon(QIcon(IconPlusPath)); + p->createNewTabAction->setToolTip(tr("Create a new file")); + + connect(p->createNewTabAction, &QAction::triggered, + this, &TabsQuickActionsBar::createNewTabClicked); + + addAction(p->createNewTabAction); + } + + { + const auto tabsMenu = new QMenu(this); + p->showTabsMenuAction = new QAction(this); + + p->showTabsMenuAction->setIcon(QIcon(IconListPath)); + p->showTabsMenuAction->setMenu(tabsMenu); + + connect(tabsMenu, &QMenu::aboutToShow, [this, tabsMenu]() { + emit tabsMenuAboutToShow(tabsMenu); + }); + + addAction(p->showTabsMenuAction); + + { // Trick, cause addWidget will lost some style things + const auto toolButton = qobject_cast(widgetForAction(p->showTabsMenuAction)); + + if (toolButton) { + toolButton->setPopupMode(QToolButton::InstantPopup); + } + } + } + + { + p->closeCurrentTabAction = new QAction(this); + + p->closeCurrentTabAction->setIcon(QIcon(IconCrossPath)); + p->closeCurrentTabAction->setToolTip(tr("Close the current file")); + + connect(p->closeCurrentTabAction, &QAction::triggered, + this, &TabsQuickActionsBar::closeCurrentTabClicked); + + addAction(p->closeCurrentTabAction); + } + + setVisibileButtons(visibileButtons); +} + +TabsQuickActionsBar::~TabsQuickActionsBar() +{ + delete p; +} + +TabsQuickActionsBar::Buttons TabsQuickActionsBar::visibileButtons() const +{ + return p->visibileButtons; +} + +void TabsQuickActionsBar::setVisibileButtons(const Buttons &buttons) +{ + if (p->visibileButtons == buttons) return; + + p->visibileButtons = buttons; + + const std::map mapping { + { p->createNewTabAction, CreateNewTab }, + { p->showTabsMenuAction, ShowTabsMenu }, + { p->closeCurrentTabAction, CloseCurrentTab } + }; + + for (const auto &pair : mapping) + pair.first->setVisible(buttons.testFlag(pair.second)); + + emit visibileButtonsChanged(buttons); +} + +void TabsQuickActionsBar::setVisibileButton(Button button, bool on) +{ + const auto& currentOptions = p->visibileButtons; + setVisibileButtons( + on ? (currentOptions | button) + : (currentOptions & ~button) + ); +} diff --git a/src/widgets/TabsQuickActionsBar.h b/src/widgets/TabsQuickActionsBar.h new file mode 100644 index 000000000..7f68a47b2 --- /dev/null +++ b/src/widgets/TabsQuickActionsBar.h @@ -0,0 +1,56 @@ +#ifndef TABSQUICKACTIONSBAR_H +#define TABSQUICKACTIONSBAR_H + +#include + +class TabsQuickActionsBar : public QToolBar +{ + Q_OBJECT + + Q_PROPERTY( + Buttons visibileButtons + READ visibileButtons + WRITE setVisibileButtons + NOTIFY visibileButtonsChanged + ) + +public: + enum Button { + None = 0x00, + CreateNewTab = 0x01, + ShowTabsMenu = 0x02, + CloseCurrentTab = 0x04, + + All = CreateNewTab | + ShowTabsMenu | + CloseCurrentTab + }; + + Q_FLAG(Button) + Q_DECLARE_FLAGS(Buttons, Button) + +signals: /*public*/ + void createNewTabClicked(); + // Tabs menu must be filled with actual data from outside + void tabsMenuAboutToShow(QMenu *menu); + void closeCurrentTabClicked(); + + void visibileButtonsChanged(const TabsQuickActionsBar::Buttons &visibileButtons); + +public: + inline TabsQuickActionsBar(QWidget *parent = nullptr) : TabsQuickActionsBar(Button::All, parent) { } + explicit TabsQuickActionsBar(const Buttons &visibileButtons = Button::All, QWidget *parent = nullptr); + virtual ~TabsQuickActionsBar(); + + Buttons visibileButtons() const; + void setVisibileButtons(const Buttons &buttons); + void setVisibileButton(Button button, bool on = true); + +private: + struct Private; + Private *p = nullptr; +}; + +Q_DECLARE_OPERATORS_FOR_FLAGS(TabsQuickActionsBar::Buttons); + +#endif // TABSQUICKACTIONSBAR_H From 47887099a0f9d1f6026eb2658474928e5d195140 Mon Sep 17 00:00:00 2001 From: "O. Khryshchuk" Date: Mon, 4 May 2026 00:18:14 +0200 Subject: [PATCH 5/7] - TabsQuickActionsBar::Private removed; - icons size adjusted to style. --- src/dialogs/MainWindow.cpp | 47 ++++++------ src/widgets/TabsQuickActionsBar.cpp | 110 +++++++++------------------- src/widgets/TabsQuickActionsBar.h | 11 ++- 3 files changed, 68 insertions(+), 100 deletions(-) diff --git a/src/dialogs/MainWindow.cpp b/src/dialogs/MainWindow.cpp index 899a572ed..ca2f1926e 100644 --- a/src/dialogs/MainWindow.cpp +++ b/src/dialogs/MainWindow.cpp @@ -851,31 +851,34 @@ MainWindow::MainWindow(NotepadNextApplication *app) : mb.exec(); }); - { - quickActionsBar = new TabsQuickActionsBar(ui->menuBar); - - connect(quickActionsBar, &TabsQuickActionsBar::createNewTabClicked, - this, &MainWindow::newFile); - connect(quickActionsBar, &TabsQuickActionsBar::closeCurrentTabClicked, - this, &MainWindow::closeCurrentFile); - connect(quickActionsBar, &TabsQuickActionsBar::tabsMenuAboutToShow, [this](QMenu *editorsMenu) { - const auto editorsList = editors(); - - editorsMenu->clear(); - - for (const auto editor : editorsList) + quickActionsBar = new TabsQuickActionsBar(ui->menuBar); + ui->menuBar->setCornerWidget(quickActionsBar, Qt::TopRightCorner); + connect(quickActionsBar, &TabsQuickActionsBar::createNewTabClicked, + this, &MainWindow::newFile); + connect(quickActionsBar, &TabsQuickActionsBar::closeCurrentTabClicked, + this, &MainWindow::closeCurrentFile); + connect(quickActionsBar, &TabsQuickActionsBar::tabsMenuAboutToShow, + this, [this](QMenu *editorsMenu) { + const auto editorsList = editors(); + + editorsMenu->clear(); + + for (const auto editor : editorsList) + { + const auto iconPath = editor->isSavedToDisk() ? + ":/icons/saved.png" : ":/icons/unsaved.png"; + const auto action = editorsMenu->addAction(QIcon(iconPath), editor->getName()); + + if (editor->isActiveWindow()) { - const auto action = editorsMenu->addAction( - QIcon(editor->isSavedToDisk() ? ":/icons/saved.png" : ":/icons/unsaved.png"), - (editor->isActiveWindow() ? "> " : "") + editor->getName() - ); - - connect(action, &QAction::triggered, [this, editor]() { switchToEditor(editor); }); + QFont font = action->font(); + font.setBold(true); + action->setFont(font); } - }); - ui->menuBar->setCornerWidget(quickActionsBar, Qt::TopRightCorner); - } + connect(action, &QAction::triggered, this, [this, editor]() { switchToEditor(editor); }); + } + }); #ifdef Q_OS_WIN connect(ui->actionShowInExplorer, &QAction::triggered, this, [=]() { diff --git a/src/widgets/TabsQuickActionsBar.cpp b/src/widgets/TabsQuickActionsBar.cpp index bb7a442eb..b454af7f9 100644 --- a/src/widgets/TabsQuickActionsBar.cpp +++ b/src/widgets/TabsQuickActionsBar.cpp @@ -1,104 +1,66 @@ +#include #include +#include #include #include #include "TabsQuickActionsBar.h" -namespace { +namespace +{ constexpr QLatin1StringView IconPlusPath("://icons/plus.svg"); constexpr QLatin1StringView IconListPath("://icons/list_with_icons.svg"); constexpr QLatin1StringView IconCrossPath("://icons/cross.svg"); } -struct TabsQuickActionsBar::Private -{ - TabsQuickActionsBar::Buttons visibileButtons = TabsQuickActionsBar::All; - QAction *createNewTabAction = nullptr; - QAction *showTabsMenuAction = nullptr; - QAction *closeCurrentTabAction = nullptr; -}; - TabsQuickActionsBar::TabsQuickActionsBar(const Buttons &visibileButtons, QWidget *parent) - : QToolBar(parent), - p(new Private) + : QToolBar(parent) { - setIconSize({ 16, 16 }); - setStyleSheet( - "QToolBar { margin: 0px; }" - "QToolButton { padding: 0px; margin: 0px; }" - "QToolButton::menu-indicator { image: none; }" - ); - - { - p->createNewTabAction = new QAction(this); - - p->createNewTabAction->setIcon(QIcon(IconPlusPath)); - p->createNewTabAction->setToolTip(tr("Create a new file")); - - connect(p->createNewTabAction, &QAction::triggered, - this, &TabsQuickActionsBar::createNewTabClicked); - - addAction(p->createNewTabAction); - } - - { - const auto tabsMenu = new QMenu(this); - p->showTabsMenuAction = new QAction(this); - - p->showTabsMenuAction->setIcon(QIcon(IconListPath)); - p->showTabsMenuAction->setMenu(tabsMenu); + mCreateNewTabAction = addAction(QIcon(IconPlusPath), ""); + mCreateNewTabAction->setToolTip(tr("Create a new file")); - connect(tabsMenu, &QMenu::aboutToShow, [this, tabsMenu]() { - emit tabsMenuAboutToShow(tabsMenu); - }); + mShowTabsMenuAction = addAction(QIcon(IconListPath), ""); + mShowTabsMenuAction->setToolTip(tr("Show opened files list")); - addAction(p->showTabsMenuAction); + const auto tabsMenu = new QMenu(this); + mShowTabsMenuAction->setMenu(tabsMenu); - { // Trick, cause addWidget will lost some style things - const auto toolButton = qobject_cast(widgetForAction(p->showTabsMenuAction)); + mCloseCurrentTabAction = addAction(QIcon(IconCrossPath), ""); + mCloseCurrentTabAction->setToolTip(tr("Close the current file")); - if (toolButton) { - toolButton->setPopupMode(QToolButton::InstantPopup); - } - } - } - - { - p->closeCurrentTabAction = new QAction(this); - - p->closeCurrentTabAction->setIcon(QIcon(IconCrossPath)); - p->closeCurrentTabAction->setToolTip(tr("Close the current file")); + const auto iconSize = qApp->style()->pixelMetric(QStyle::PM_SmallIconSize); + setIconSize({ iconSize, iconSize }); + setStyleSheet( + "QToolBar { padding: 0px; margin: 0px; }" + "QToolButton::menu-indicator { image: none; }" + ); - connect(p->closeCurrentTabAction, &QAction::triggered, - this, &TabsQuickActionsBar::closeCurrentTabClicked); + // Trick, cause addWidget will lost some style things + const auto toolButton = qobject_cast(widgetForAction(mShowTabsMenuAction)); + if (toolButton) toolButton->setPopupMode(QToolButton::InstantPopup); - addAction(p->closeCurrentTabAction); - } + connect(mCreateNewTabAction, &QAction::triggered, + this, &TabsQuickActionsBar::createNewTabClicked); + connect(tabsMenu, &QMenu::aboutToShow, + this, [this, tabsMenu]() { emit tabsMenuAboutToShow(tabsMenu); }); + connect(mCloseCurrentTabAction, &QAction::triggered, + this, &TabsQuickActionsBar::closeCurrentTabClicked); setVisibileButtons(visibileButtons); } -TabsQuickActionsBar::~TabsQuickActionsBar() -{ - delete p; -} - -TabsQuickActionsBar::Buttons TabsQuickActionsBar::visibileButtons() const -{ - return p->visibileButtons; -} - void TabsQuickActionsBar::setVisibileButtons(const Buttons &buttons) { - if (p->visibileButtons == buttons) return; + if (mVisibileButtons == buttons) + return; - p->visibileButtons = buttons; + mVisibileButtons = buttons; const std::map mapping { - { p->createNewTabAction, CreateNewTab }, - { p->showTabsMenuAction, ShowTabsMenu }, - { p->closeCurrentTabAction, CloseCurrentTab } + { mCreateNewTabAction, CreateNewTab }, + { mShowTabsMenuAction, ShowTabsMenu }, + { mCloseCurrentTabAction, CloseCurrentTab } }; for (const auto &pair : mapping) @@ -109,9 +71,9 @@ void TabsQuickActionsBar::setVisibileButtons(const Buttons &buttons) void TabsQuickActionsBar::setVisibileButton(Button button, bool on) { - const auto& currentOptions = p->visibileButtons; + const auto ¤tOptions = mVisibileButtons; setVisibileButtons( - on ? (currentOptions | button) + on ? (currentOptions | button) : (currentOptions & ~button) ); } diff --git a/src/widgets/TabsQuickActionsBar.h b/src/widgets/TabsQuickActionsBar.h index 7f68a47b2..5469675ee 100644 --- a/src/widgets/TabsQuickActionsBar.h +++ b/src/widgets/TabsQuickActionsBar.h @@ -40,15 +40,18 @@ class TabsQuickActionsBar : public QToolBar public: inline TabsQuickActionsBar(QWidget *parent = nullptr) : TabsQuickActionsBar(Button::All, parent) { } explicit TabsQuickActionsBar(const Buttons &visibileButtons = Button::All, QWidget *parent = nullptr); - virtual ~TabsQuickActionsBar(); + virtual ~TabsQuickActionsBar() = default; - Buttons visibileButtons() const; + inline Buttons visibileButtons() const { return mVisibileButtons; } void setVisibileButtons(const Buttons &buttons); void setVisibileButton(Button button, bool on = true); private: - struct Private; - Private *p = nullptr; + Buttons mVisibileButtons = TabsQuickActionsBar::All; + + QAction *mCreateNewTabAction = nullptr; + QAction *mShowTabsMenuAction = nullptr; + QAction *mCloseCurrentTabAction = nullptr; }; Q_DECLARE_OPERATORS_FOR_FLAGS(TabsQuickActionsBar::Buttons); From 2a67426645bfeff4c51edc360bbad3a1be0b7dd3 Mon Sep 17 00:00:00 2001 From: "O. Khryshchuk" Date: Mon, 4 May 2026 00:33:38 +0200 Subject: [PATCH 6/7] - code style adjustments. --- src/dialogs/MainWindow.cpp | 18 +++++++-------- src/dialogs/MainWindow.h | 2 +- src/widgets/TabsQuickActionsBar.cpp | 36 ++++++++++++++--------------- src/widgets/TabsQuickActionsBar.h | 12 +++++----- 4 files changed, 34 insertions(+), 34 deletions(-) diff --git a/src/dialogs/MainWindow.cpp b/src/dialogs/MainWindow.cpp index ca2f1926e..a07f19de9 100644 --- a/src/dialogs/MainWindow.cpp +++ b/src/dialogs/MainWindow.cpp @@ -851,14 +851,14 @@ MainWindow::MainWindow(NotepadNextApplication *app) : mb.exec(); }); - quickActionsBar = new TabsQuickActionsBar(ui->menuBar); - ui->menuBar->setCornerWidget(quickActionsBar, Qt::TopRightCorner); - connect(quickActionsBar, &TabsQuickActionsBar::createNewTabClicked, - this, &MainWindow::newFile); - connect(quickActionsBar, &TabsQuickActionsBar::closeCurrentTabClicked, - this, &MainWindow::closeCurrentFile); - connect(quickActionsBar, &TabsQuickActionsBar::tabsMenuAboutToShow, - this, [this](QMenu *editorsMenu) { + tabsQuickActionsBar = new TabsQuickActionsBar(ui->menuBar); + ui->menuBar->setCornerWidget(tabsQuickActionsBar, Qt::TopRightCorner); + connect(tabsQuickActionsBar, &TabsQuickActionsBar::createNewTabClicked, + this, &MainWindow::newFile); + connect(tabsQuickActionsBar, &TabsQuickActionsBar::closeCurrentTabClicked, + this, &MainWindow::closeCurrentFile); + connect(tabsQuickActionsBar, &TabsQuickActionsBar::tabsMenuAboutToShow, + this, [this](QMenu *editorsMenu) { const auto editorsList = editors(); editorsMenu->clear(); @@ -871,7 +871,7 @@ MainWindow::MainWindow(NotepadNextApplication *app) : if (editor->isActiveWindow()) { - QFont font = action->font(); + auto font = action->font(); font.setBold(true); action->setFont(font); } diff --git a/src/dialogs/MainWindow.h b/src/dialogs/MainWindow.h index 9fb18e9ab..607cec6c2 100644 --- a/src/dialogs/MainWindow.h +++ b/src/dialogs/MainWindow.h @@ -168,7 +168,7 @@ private slots: QActionGroup *languageActionGroup; - TabsQuickActionsBar *quickActionsBar = nullptr; + TabsQuickActionsBar *tabsQuickActionsBar = Q_NULLPTR; //NppImporter *npp; diff --git a/src/widgets/TabsQuickActionsBar.cpp b/src/widgets/TabsQuickActionsBar.cpp index b454af7f9..1575a99e3 100644 --- a/src/widgets/TabsQuickActionsBar.cpp +++ b/src/widgets/TabsQuickActionsBar.cpp @@ -17,17 +17,17 @@ namespace TabsQuickActionsBar::TabsQuickActionsBar(const Buttons &visibileButtons, QWidget *parent) : QToolBar(parent) { - mCreateNewTabAction = addAction(QIcon(IconPlusPath), ""); - mCreateNewTabAction->setToolTip(tr("Create a new file")); + createNewTabAction = addAction(QIcon(IconPlusPath), ""); + createNewTabAction->setToolTip(tr("Create a new file")); - mShowTabsMenuAction = addAction(QIcon(IconListPath), ""); - mShowTabsMenuAction->setToolTip(tr("Show opened files list")); + showTabsMenuAction = addAction(QIcon(IconListPath), ""); + showTabsMenuAction->setToolTip(tr("Show opened files list")); const auto tabsMenu = new QMenu(this); - mShowTabsMenuAction->setMenu(tabsMenu); + showTabsMenuAction->setMenu(tabsMenu); - mCloseCurrentTabAction = addAction(QIcon(IconCrossPath), ""); - mCloseCurrentTabAction->setToolTip(tr("Close the current file")); + closeCurrentTabAction = addAction(QIcon(IconCrossPath), ""); + closeCurrentTabAction->setToolTip(tr("Close the current file")); const auto iconSize = qApp->style()->pixelMetric(QStyle::PM_SmallIconSize); setIconSize({ iconSize, iconSize }); @@ -37,30 +37,30 @@ TabsQuickActionsBar::TabsQuickActionsBar(const Buttons &visibileButtons, QWidget ); // Trick, cause addWidget will lost some style things - const auto toolButton = qobject_cast(widgetForAction(mShowTabsMenuAction)); + const auto toolButton = qobject_cast(widgetForAction(showTabsMenuAction)); if (toolButton) toolButton->setPopupMode(QToolButton::InstantPopup); - connect(mCreateNewTabAction, &QAction::triggered, - this, &TabsQuickActionsBar::createNewTabClicked); + connect(createNewTabAction, &QAction::triggered, + this, &TabsQuickActionsBar::createNewTabClicked); connect(tabsMenu, &QMenu::aboutToShow, this, [this, tabsMenu]() { emit tabsMenuAboutToShow(tabsMenu); }); - connect(mCloseCurrentTabAction, &QAction::triggered, - this, &TabsQuickActionsBar::closeCurrentTabClicked); + connect(closeCurrentTabAction, &QAction::triggered, + this, &TabsQuickActionsBar::closeCurrentTabClicked); setVisibileButtons(visibileButtons); } void TabsQuickActionsBar::setVisibileButtons(const Buttons &buttons) { - if (mVisibileButtons == buttons) + if (visibileButtons == buttons) return; - mVisibileButtons = buttons; + visibileButtons = buttons; const std::map mapping { - { mCreateNewTabAction, CreateNewTab }, - { mShowTabsMenuAction, ShowTabsMenu }, - { mCloseCurrentTabAction, CloseCurrentTab } + { createNewTabAction, CreateNewTab }, + { showTabsMenuAction, ShowTabsMenu }, + { closeCurrentTabAction, CloseCurrentTab } }; for (const auto &pair : mapping) @@ -71,7 +71,7 @@ void TabsQuickActionsBar::setVisibileButtons(const Buttons &buttons) void TabsQuickActionsBar::setVisibileButton(Button button, bool on) { - const auto ¤tOptions = mVisibileButtons; + const auto ¤tOptions = visibileButtons; setVisibileButtons( on ? (currentOptions | button) : (currentOptions & ~button) diff --git a/src/widgets/TabsQuickActionsBar.h b/src/widgets/TabsQuickActionsBar.h index 5469675ee..5f7222d10 100644 --- a/src/widgets/TabsQuickActionsBar.h +++ b/src/widgets/TabsQuickActionsBar.h @@ -9,7 +9,7 @@ class TabsQuickActionsBar : public QToolBar Q_PROPERTY( Buttons visibileButtons - READ visibileButtons + READ getVisibileButtons WRITE setVisibileButtons NOTIFY visibileButtonsChanged ) @@ -42,16 +42,16 @@ class TabsQuickActionsBar : public QToolBar explicit TabsQuickActionsBar(const Buttons &visibileButtons = Button::All, QWidget *parent = nullptr); virtual ~TabsQuickActionsBar() = default; - inline Buttons visibileButtons() const { return mVisibileButtons; } + inline Buttons getVisibileButtons() const { return visibileButtons; } void setVisibileButtons(const Buttons &buttons); void setVisibileButton(Button button, bool on = true); private: - Buttons mVisibileButtons = TabsQuickActionsBar::All; + Buttons visibileButtons = TabsQuickActionsBar::All; - QAction *mCreateNewTabAction = nullptr; - QAction *mShowTabsMenuAction = nullptr; - QAction *mCloseCurrentTabAction = nullptr; + QAction *createNewTabAction = nullptr; + QAction *showTabsMenuAction = nullptr; + QAction *closeCurrentTabAction = nullptr; }; Q_DECLARE_OPERATORS_FOR_FLAGS(TabsQuickActionsBar::Buttons); From 374f3ec1e441bb4340d6f3f41d2f37eb178a16d7 Mon Sep 17 00:00:00 2001 From: dail8859 Date: Mon, 4 May 2026 21:19:52 -0400 Subject: [PATCH 7/7] Cleanup --- src/dialogs/MainWindow.cpp | 18 +++++---------- src/widgets/TabsQuickActionsBar.cpp | 36 +++++++++++++++++++++-------- src/widgets/TabsQuickActionsBar.h | 21 ++++++++++++++++- 3 files changed, 52 insertions(+), 23 deletions(-) diff --git a/src/dialogs/MainWindow.cpp b/src/dialogs/MainWindow.cpp index a07f19de9..9cbe9a133 100644 --- a/src/dialogs/MainWindow.cpp +++ b/src/dialogs/MainWindow.cpp @@ -853,24 +853,18 @@ MainWindow::MainWindow(NotepadNextApplication *app) : tabsQuickActionsBar = new TabsQuickActionsBar(ui->menuBar); ui->menuBar->setCornerWidget(tabsQuickActionsBar, Qt::TopRightCorner); - connect(tabsQuickActionsBar, &TabsQuickActionsBar::createNewTabClicked, - this, &MainWindow::newFile); - connect(tabsQuickActionsBar, &TabsQuickActionsBar::closeCurrentTabClicked, - this, &MainWindow::closeCurrentFile); - connect(tabsQuickActionsBar, &TabsQuickActionsBar::tabsMenuAboutToShow, - this, [this](QMenu *editorsMenu) { + connect(tabsQuickActionsBar, &TabsQuickActionsBar::createNewTabClicked, this, &MainWindow::newFile); + connect(tabsQuickActionsBar, &TabsQuickActionsBar::closeCurrentTabClicked, this, &MainWindow::closeCurrentFile); + connect(tabsQuickActionsBar, &TabsQuickActionsBar::tabsMenuAboutToShow, this, [this](QMenu *editorsMenu) { const auto editorsList = editors(); editorsMenu->clear(); - for (const auto editor : editorsList) - { - const auto iconPath = editor->isSavedToDisk() ? - ":/icons/saved.png" : ":/icons/unsaved.png"; + for (const auto editor : editorsList) { + const auto iconPath = editor->isSavedToDisk() ? ":/icons/saved.png" : ":/icons/unsaved.png"; const auto action = editorsMenu->addAction(QIcon(iconPath), editor->getName()); - if (editor->isActiveWindow()) - { + if (editor->isActiveWindow()) { auto font = action->font(); font.setBold(true); action->setFont(font); diff --git a/src/widgets/TabsQuickActionsBar.cpp b/src/widgets/TabsQuickActionsBar.cpp index 1575a99e3..9e76a830f 100644 --- a/src/widgets/TabsQuickActionsBar.cpp +++ b/src/widgets/TabsQuickActionsBar.cpp @@ -1,3 +1,22 @@ +/* + * This file is part of Notepad Next. + * Copyright 2026 Justin Dailey + * + * Notepad Next is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Notepad Next is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Notepad Next. If not, see . + */ + + #include #include #include @@ -9,9 +28,9 @@ namespace { - constexpr QLatin1StringView IconPlusPath("://icons/plus.svg"); - constexpr QLatin1StringView IconListPath("://icons/list_with_icons.svg"); - constexpr QLatin1StringView IconCrossPath("://icons/cross.svg"); + constexpr QLatin1StringView IconPlusPath(":/icons/plus.svg"); + constexpr QLatin1StringView IconListPath(":/icons/list_with_icons.svg"); + constexpr QLatin1StringView IconCrossPath(":/icons/cross.svg"); } TabsQuickActionsBar::TabsQuickActionsBar(const Buttons &visibileButtons, QWidget *parent) @@ -36,16 +55,13 @@ TabsQuickActionsBar::TabsQuickActionsBar(const Buttons &visibileButtons, QWidget "QToolButton::menu-indicator { image: none; }" ); - // Trick, cause addWidget will lost some style things + // Trick, cause addWidget will lose some style things const auto toolButton = qobject_cast(widgetForAction(showTabsMenuAction)); if (toolButton) toolButton->setPopupMode(QToolButton::InstantPopup); - connect(createNewTabAction, &QAction::triggered, - this, &TabsQuickActionsBar::createNewTabClicked); - connect(tabsMenu, &QMenu::aboutToShow, - this, [this, tabsMenu]() { emit tabsMenuAboutToShow(tabsMenu); }); - connect(closeCurrentTabAction, &QAction::triggered, - this, &TabsQuickActionsBar::closeCurrentTabClicked); + connect(createNewTabAction, &QAction::triggered, this, &TabsQuickActionsBar::createNewTabClicked); + connect(tabsMenu, &QMenu::aboutToShow, this, [this, tabsMenu]() { emit tabsMenuAboutToShow(tabsMenu); }); + connect(closeCurrentTabAction, &QAction::triggered, this, &TabsQuickActionsBar::closeCurrentTabClicked); setVisibileButtons(visibileButtons); } diff --git a/src/widgets/TabsQuickActionsBar.h b/src/widgets/TabsQuickActionsBar.h index 5f7222d10..3dc386215 100644 --- a/src/widgets/TabsQuickActionsBar.h +++ b/src/widgets/TabsQuickActionsBar.h @@ -1,3 +1,22 @@ +/* + * This file is part of Notepad Next. + * Copyright 2026 Justin Dailey + * + * Notepad Next is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Notepad Next is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Notepad Next. If not, see . + */ + + #ifndef TABSQUICKACTIONSBAR_H #define TABSQUICKACTIONSBAR_H @@ -29,7 +48,7 @@ class TabsQuickActionsBar : public QToolBar Q_FLAG(Button) Q_DECLARE_FLAGS(Buttons, Button) -signals: /*public*/ +signals: void createNewTabClicked(); // Tabs menu must be filled with actual data from outside void tabsMenuAboutToShow(QMenu *menu);