From 963d3b4b518c94517d146c9a9d0fc6e3c9f5f0ac Mon Sep 17 00:00:00 2001 From: itsmattkc <34096995+itsmattkc@users.noreply.github.com> Date: Fri, 17 Feb 2023 11:58:26 -0800 Subject: [PATCH] move add tool items to main menu Makes them shortcut-assignable. Fixes #2158 --- app/panel/tool/tool.cpp | 1 - app/tool/tool.h | 24 ++++++++++++++++++++++++ app/widget/menu/menushared.cpp | 28 ++++++++++++++++++++++++++++ app/widget/menu/menushared.h | 9 ++++++++- app/widget/toolbar/toolbar.cpp | 13 ++----------- app/widget/toolbar/toolbar.h | 10 ---------- app/window/mainwindow/mainmenu.cpp | 8 ++++++++ app/window/mainwindow/mainmenu.h | 1 + 8 files changed, 71 insertions(+), 23 deletions(-) diff --git a/app/panel/tool/tool.cpp b/app/panel/tool/tool.cpp index 931234d33..074916ebd 100644 --- a/app/panel/tool/tool.cpp +++ b/app/panel/tool/tool.cpp @@ -41,7 +41,6 @@ ToolPanel::ToolPanel() : connect(t, &Toolbar::SnappingChanged, Core::instance(), &Core::SetSnapping); connect(Core::instance(), &Core::SnappingChanged, t, &Toolbar::SetSnapping); - connect(t, &Toolbar::AddableObjectChanged, Core::instance(), &Core::SetSelectedAddableObject); connect(t, &Toolbar::SelectedTransitionChanged, Core::instance(), &Core::SetSelectedTransitionObject); Retranslate(); diff --git a/app/tool/tool.h b/app/tool/tool.h index 5cdff7aa1..c66a8a60d 100644 --- a/app/tool/tool.h +++ b/app/tool/tool.h @@ -132,6 +132,30 @@ public: return QCoreApplication::translate("Tool", "Unknown"); } + static QString GetAddableObjectID(const AddableObject& a) + { + switch (a) { + case kAddableEmpty: + return QStringLiteral("empty"); + case kAddableBars: + return QStringLiteral("bars"); + case kAddableShape: + return QStringLiteral("shape"); + case kAddableSolid: + return QStringLiteral("solid"); + case kAddableTitle: + return QStringLiteral("title"); + case kAddableTone: + return QStringLiteral("tone"); + case kAddableSubtitle: + return QStringLiteral("subtitle"); + case kAddableCount: + break; + } + + return QString(); + } + }; } diff --git a/app/widget/menu/menushared.cpp b/app/widget/menu/menushared.cpp index 8ff97d204..72a19f3bb 100644 --- a/app/widget/menu/menushared.cpp +++ b/app/widget/menu/menushared.cpp @@ -50,6 +50,14 @@ MenuShared::MenuShared() edit_split_item_ = Menu::CreateItem(this, "split", this, &MenuShared::SplitAtPlayheadTriggered, tr("Ctrl+K")); edit_speedduration_item_ = Menu::CreateItem(this, "speeddur", this, &MenuShared::SpeedDurationTriggered, tr("Ctrl+R")); + // List of addable items + for (int i=0;i(i); + QAction *a = Menu::CreateItem(this, QStringLiteral("add:%1").arg(Tool::GetAddableObjectID(t)), this, &MenuShared::AddableItemTriggered); + a->setData(t); + addable_items_.append(a); + } + // "In/Out" menu shared items inout_set_in_item_ = Menu::CreateItem(this, "setinpoint", this, &MenuShared::SetInTriggered, tr("I")); inout_set_out_item_ = Menu::CreateItem(this, "setoutpoint", this, &MenuShared::SetOutTriggered, tr("O")); @@ -150,6 +158,14 @@ void MenuShared::AddItemsForEditMenu(Menu *m, bool for_clips) } } +void MenuShared::AddItemsForAddableObjectsMenu(Menu *m) +{ + for (QAction *a : qAsConst(addable_items_)) { + a->setChecked((a->data().toInt() == Core::instance()->GetSelectedAddableObject())); + m->addAction(a); + } +} + void MenuShared::AddItemsForInOutMenu(Menu *m) { m->addAction(inout_set_in_item_); @@ -328,6 +344,14 @@ void MenuShared::SpeedDurationTriggered() } } +void MenuShared::AddableItemTriggered() +{ + QAction *a = static_cast(sender()); + Tool::AddableObject i = static_cast(a->data().toInt()); + Core::instance()->SetTool(Tool::kAdd); + Core::instance()->SetSelectedAddableObject(i); +} + void MenuShared::Retranslate() { // "New" menu shared items @@ -347,6 +371,10 @@ void MenuShared::Retranslate() edit_split_item_->setText(tr("Split")); edit_speedduration_item_->setText(tr("Speed/Duration")); + for (QAction *a : qAsConst(addable_items_)) { + a->setText(Tool::GetAddableObjectName(static_cast(a->data().toInt()))); + } + // "In/Out" menu shared items inout_set_in_item_->setText(tr("Set In Point")); inout_set_out_item_->setText(tr("Set Out Point")); diff --git a/app/widget/menu/menushared.h b/app/widget/menu/menushared.h index 398d40e44..b3d2cba8a 100644 --- a/app/widget/menu/menushared.h +++ b/app/widget/menu/menushared.h @@ -32,7 +32,8 @@ using namespace core; /** * @brief A static object that provides various "stock" menus for use throughout the application */ -class MenuShared : public QObject { +class MenuShared : public QObject +{ Q_OBJECT public: MenuShared(); @@ -45,6 +46,7 @@ public: void AddItemsForNewMenu(Menu* m); void AddItemsForEditMenu(Menu* m, bool for_clips); + void AddItemsForAddableObjectsMenu(Menu* m); void AddItemsForInOutMenu(Menu* m); void AddColorCodingMenu(Menu* m); void AddItemsForClipEditMenu(Menu* m); @@ -80,6 +82,9 @@ private: QAction* edit_split_item_; QAction* edit_speedduration_item_; + // List of addable items + QVector addable_items_; + // "In/Out" menu shared items QAction* inout_set_in_item_; QAction* inout_set_out_item_; @@ -153,6 +158,8 @@ private slots: void SpeedDurationTriggered(); + void AddableItemTriggered(); + }; } diff --git a/app/widget/toolbar/toolbar.cpp b/app/widget/toolbar/toolbar.cpp index 50989d68e..79422ad40 100644 --- a/app/widget/toolbar/toolbar.cpp +++ b/app/widget/toolbar/toolbar.cpp @@ -29,6 +29,7 @@ #include "node/factory.h" #include "ui/icons/icons.h" #include "widget/menu/menu.h" +#include "widget/menu/menushared.h" namespace olive { @@ -191,12 +192,7 @@ void Toolbar::AddButtonClicked() { Menu m(this); - for (int i=0;i(i))); - action->setData(i); - } - - connect(&m, &QMenu::triggered, this, &Toolbar::AddMenuItemTriggered); + MenuShared::instance()->AddItemsForAddableObjectsMenu(&m); m.exec(QCursor::pos()); } @@ -212,11 +208,6 @@ void Toolbar::TransitionButtonClicked() delete m; } -void Toolbar::AddMenuItemTriggered(QAction* a) -{ - emit AddableObjectChanged(static_cast(a->data().toInt())); -} - void Toolbar::TransitionMenuItemTriggered(QAction *a) { emit SelectedTransitionChanged(NodeFactory::GetIDFromMenuAction(a)); diff --git a/app/widget/toolbar/toolbar.h b/app/widget/toolbar/toolbar.h index e189e3e1e..f4d896058 100644 --- a/app/widget/toolbar/toolbar.h +++ b/app/widget/toolbar/toolbar.h @@ -110,11 +110,6 @@ signals: */ void SnappingChanged(const bool& b); - /** - * @brief Emitted when the addable object is changed from the add tool menu - */ - void AddableObjectChanged(const Tool::AddableObject& obj); - /** * @brief Emitted when the selected transition is changed from the transition tool menu */ @@ -225,11 +220,6 @@ private slots: */ void TransitionButtonClicked(); - /** - * @brief Receiver for the menu created by AddButtonClicked() - */ - void AddMenuItemTriggered(QAction* a); - /** * @brief Receiver for the menu created by TransitionButtonClicked() */ diff --git a/app/window/mainwindow/mainmenu.cpp b/app/window/mainwindow/mainmenu.cpp index 9d0b8661b..3feb4ed91 100644 --- a/app/window/mainwindow/mainmenu.cpp +++ b/app/window/mainwindow/mainmenu.cpp @@ -266,6 +266,13 @@ MainMenu::MainMenu(MainWindow *parent) : tools_menu_->addSeparator(); + tools_add_item_menu_ = new Menu(tools_menu_); + tools_menu_->addMenu(tools_add_item_menu_); + + MenuShared::instance()->AddItemsForAddableObjectsMenu(tools_add_item_menu_); + + tools_menu_->addSeparator(); + tools_snapping_item_ = tools_menu_->AddItem("snapping", Core::instance(), &Core::SetSnapping, tr("S")); tools_snapping_item_->setCheckable(true); tools_snapping_item_->setChecked(Core::instance()->snapping()); @@ -772,6 +779,7 @@ void MainMenu::Retranslate() tools_record_item_->setText(tr("Record Tool")); tools_snapping_item_->setText(tr("Enable Snapping")); tools_preferences_item_->setText(tr("Preferences")); + tools_add_item_menu_->setTitle(tr("Add Tool Item")); #ifndef NDEBUG tools_magic_item_->setText("Magic"); #endif diff --git a/app/window/mainwindow/mainmenu.h b/app/window/mainwindow/mainmenu.h index 70d70549b..aa920e2be 100644 --- a/app/window/mainwindow/mainmenu.h +++ b/app/window/mainwindow/mainmenu.h @@ -281,6 +281,7 @@ private: QAction* tools_record_item_; QAction* tools_snapping_item_; QAction* tools_preferences_item_; + Menu *tools_add_item_menu_; #ifndef NDEBUG QAction* tools_magic_item_;