From 3da1d6a464b1f9ce9d058f37b9b7c8841a0f0c85 Mon Sep 17 00:00:00 2001 From: leo78913 Date: Fri, 30 Dec 2022 21:06:14 -0300 Subject: feat: add Widebar::InsertWidgetBefore method Signed-off-by: leo78913 --- launcher/ui/widgets/WideBar.h | 1 + 1 file changed, 1 insertion(+) (limited to 'launcher/ui/widgets/WideBar.h') diff --git a/launcher/ui/widgets/WideBar.h b/launcher/ui/widgets/WideBar.h index a0a7896c..4004d415 100644 --- a/launcher/ui/widgets/WideBar.h +++ b/launcher/ui/widgets/WideBar.h @@ -22,6 +22,7 @@ class WideBar : public QToolBar { void insertSeparator(QAction* before); void insertActionBefore(QAction* before, QAction* action); void insertActionAfter(QAction* after, QAction* action); + void insertWidgetBefore(QAction* before, QWidget* widget); QMenu* createContextMenu(QWidget* parent = nullptr, const QString& title = QString()); void showVisibilityMenu(const QPoint&); -- cgit From b2de01b0760d6cb814fe570bc150ee6d891f2e9d Mon Sep 17 00:00:00 2001 From: leo78913 Date: Sun, 8 Jan 2023 22:47:38 -0300 Subject: feat(WideBar): Allow disabling alt shortcuts Signed-off-by: leo78913 --- launcher/ui/MainWindow.cpp | 1 + launcher/ui/MainWindow.ui | 3 +++ launcher/ui/widgets/WideBar.cpp | 34 +++++++++++++++++++++------------- launcher/ui/widgets/WideBar.h | 5 +++++ 4 files changed, 30 insertions(+), 13 deletions(-) (limited to 'launcher/ui/widgets/WideBar.h') diff --git a/launcher/ui/MainWindow.cpp b/launcher/ui/MainWindow.cpp index 30bbf685..69ef3016 100644 --- a/launcher/ui/MainWindow.cpp +++ b/launcher/ui/MainWindow.cpp @@ -174,6 +174,7 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi instanceToolbarSetting = APPLICATION->settings()->getSetting(setting_name); ui->instanceToolBar->setVisibilityState(instanceToolbarSetting->get().toByteArray()); + } // set the menu for the folders and help tool buttons diff --git a/launcher/ui/MainWindow.ui b/launcher/ui/MainWindow.ui index 6078ecbf..218f0a2a 100644 --- a/launcher/ui/MainWindow.ui +++ b/launcher/ui/MainWindow.ui @@ -106,6 +106,9 @@ false + + true + RightToolBarArea diff --git a/launcher/ui/widgets/WideBar.cpp b/launcher/ui/widgets/WideBar.cpp index a029b0a8..717958fd 100644 --- a/launcher/ui/widgets/WideBar.cpp +++ b/launcher/ui/widgets/WideBar.cpp @@ -7,15 +7,20 @@ class ActionButton : public QToolButton { Q_OBJECT public: - ActionButton(QAction* action, QWidget* parent = nullptr) : QToolButton(parent), m_action(action) + ActionButton(QAction* action, QWidget* parent = nullptr, bool use_default_action = false) : QToolButton(parent), + m_action(action), m_use_default_action(use_default_action) { setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); setToolButtonStyle(Qt::ToolButtonTextBesideIcon); // workaround for breeze and breeze forks setProperty("_kde_toolButton_alignment", Qt::AlignLeft); + if (m_use_default_action) { + setDefaultAction(action); + } else { + connect(this, &ActionButton::clicked, action, &QAction::trigger); + } connect(action, &QAction::changed, this, &ActionButton::actionChanged); - connect(this, &ActionButton::clicked, action, &QAction::trigger); actionChanged(); }; @@ -23,21 +28,24 @@ class ActionButton : public QToolButton { void actionChanged() { setEnabled(m_action->isEnabled()); - setChecked(m_action->isChecked()); - setMenu(m_action->menu()); - if (menu()) { + // better pop up mode + if (m_action->menu()) { setPopupMode(QToolButton::MenuButtonPopup); } - setCheckable(m_action->isCheckable()); - setText(m_action->text()); - setIcon(m_action->icon()); - setToolTip(m_action->toolTip()); - setHidden(!m_action->isVisible()); + if (!m_use_default_action) { + setChecked(m_action->isChecked()); + setCheckable(m_action->isCheckable()); + setText(m_action->text()); + setIcon(m_action->icon()); + setToolTip(m_action->toolTip()); + setHidden(!m_action->isVisible()); + } setFocusPolicy(Qt::NoFocus); } private: QAction* m_action; + bool m_use_default_action; }; WideBar::WideBar(const QString& title, QWidget* parent) : QToolBar(title, parent) @@ -61,7 +69,7 @@ WideBar::WideBar(QWidget* parent) : QToolBar(parent) void WideBar::addAction(QAction* action) { BarEntry entry; - entry.bar_action = addWidget(new ActionButton(action, this)); + entry.bar_action = addWidget(new ActionButton(action, this, m_use_default_action)); entry.menu_action = action; entry.type = BarEntry::Type::Action; @@ -93,7 +101,7 @@ void WideBar::insertActionBefore(QAction* before, QAction* action) return; BarEntry entry; - entry.bar_action = insertWidget(iter->bar_action, new ActionButton(action, this)); + entry.bar_action = insertWidget(iter->bar_action, new ActionButton(action, this, m_use_default_action)); entry.menu_action = action; entry.type = BarEntry::Type::Action; @@ -109,7 +117,7 @@ void WideBar::insertActionAfter(QAction* after, QAction* action) return; BarEntry entry; - entry.bar_action = insertWidget((iter + 1)->bar_action, new ActionButton(action, this)); + entry.bar_action = insertWidget((iter + 1)->bar_action, new ActionButton(action, this, m_use_default_action)); entry.menu_action = action; entry.type = BarEntry::Type::Action; diff --git a/launcher/ui/widgets/WideBar.h b/launcher/ui/widgets/WideBar.h index 4004d415..59bda514 100644 --- a/launcher/ui/widgets/WideBar.h +++ b/launcher/ui/widgets/WideBar.h @@ -9,6 +9,9 @@ class WideBar : public QToolBar { Q_OBJECT + // Why: so we can enable / disable alt shortcuts in toolbuttons + // with toolbuttons using setDefaultAction, theres no alt shortcuts + Q_PROPERTY(bool useDefaultAction MEMBER m_use_default_action) public: explicit WideBar(const QString& title, QWidget* parent = nullptr); @@ -49,6 +52,8 @@ class WideBar : public QToolBar { private: QList m_entries; + bool m_use_default_action = false; + // Menu to toggle visibility from buttons in the bar std::unique_ptr m_bar_menu = nullptr; enum class MenuState { Fresh, Dirty } m_menu_state = MenuState::Dirty; -- cgit From f16989bea94163ade99c2c24fc88d53aaff30a8d Mon Sep 17 00:00:00 2001 From: leo78913 Date: Tue, 10 Jan 2023 12:02:02 -0300 Subject: feat(WideBar): custom context menu actions Signed-off-by: leo78913 --- launcher/ui/MainWindow.cpp | 4 ++++ launcher/ui/widgets/WideBar.cpp | 8 ++++++++ launcher/ui/widgets/WideBar.h | 4 ++++ 3 files changed, 16 insertions(+) (limited to 'launcher/ui/widgets/WideBar.h') diff --git a/launcher/ui/MainWindow.cpp b/launcher/ui/MainWindow.cpp index 1fc94807..ae458b38 100644 --- a/launcher/ui/MainWindow.cpp +++ b/launcher/ui/MainWindow.cpp @@ -177,6 +177,10 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi ui->instanceToolBar->setVisibilityState(instanceToolbarSetting->get().toByteArray()); + ui->instanceToolBar->addContextMenuAction(ui->newsToolBar->toggleViewAction()); + ui->instanceToolBar->addContextMenuAction(ui->instanceToolBar->toggleViewAction()); + ui->instanceToolBar->addContextMenuAction(ui->actionLockToolbars); + } // set the menu for the folders and help tool buttons diff --git a/launcher/ui/widgets/WideBar.cpp b/launcher/ui/widgets/WideBar.cpp index 4f81f444..540d599d 100644 --- a/launcher/ui/widgets/WideBar.cpp +++ b/launcher/ui/widgets/WideBar.cpp @@ -207,6 +207,10 @@ void WideBar::showVisibilityMenu(QPoint const& position) m_bar_menu->clear(); + m_bar_menu->addActions(m_context_menu_actions); + + m_bar_menu->addSeparator()->setText(tr("Customize toolbar actions")); + for (auto& entry : m_entries) { if (entry.type != BarEntry::Type::Action) continue; @@ -233,6 +237,10 @@ void WideBar::showVisibilityMenu(QPoint const& position) m_bar_menu->popup(mapToGlobal(position)); } +void WideBar::addContextMenuAction(QAction* action) { + m_context_menu_actions.append(action); +} + [[nodiscard]] QByteArray WideBar::getVisibilityState() const { QByteArray state; diff --git a/launcher/ui/widgets/WideBar.h b/launcher/ui/widgets/WideBar.h index 59bda514..c47f3a59 100644 --- a/launcher/ui/widgets/WideBar.h +++ b/launcher/ui/widgets/WideBar.h @@ -30,6 +30,8 @@ class WideBar : public QToolBar { QMenu* createContextMenu(QWidget* parent = nullptr, const QString& title = QString()); void showVisibilityMenu(const QPoint&); + void addContextMenuAction(QAction* action); + // Ideally we would use a QBitArray for this, but it doesn't support string conversion, // so using it in settings is very messy. @@ -52,6 +54,8 @@ class WideBar : public QToolBar { private: QList m_entries; + QList m_context_menu_actions; + bool m_use_default_action = false; // Menu to toggle visibility from buttons in the bar -- cgit