From 81b49d7dd8d8f628f1f8221053d08918ece7ede5 Mon Sep 17 00:00:00 2001 From: forbes Date: Fri, 13 Feb 2026 14:08:05 -0600 Subject: [PATCH] cherry-pick #15: OriginSelectorWidget (deeb6376f71) Action.cpp/.h: toolbar action integration for origin selector. Resolved add/add: kept Phase 1 OriginSelectorWidget.cpp. --- src/Gui/Action.cpp | 22 ++++++++++ src/Gui/Action.h | 19 +++++++++ src/Gui/CMakeLists.txt | 2 + src/Gui/CommandStd.cpp | 40 +++++++++++++++++++ .../KindredCreate/KindredCreate.qss | 22 ++++++++++ src/Gui/Workbench.cpp | 2 +- 6 files changed, 106 insertions(+), 1 deletion(-) diff --git a/src/Gui/Action.cpp b/src/Gui/Action.cpp index ef7586d3e9..cfa8e7191b 100644 --- a/src/Gui/Action.cpp +++ b/src/Gui/Action.cpp @@ -54,6 +54,7 @@ #include "Workbench.h" #include "WorkbenchManager.h" #include "WorkbenchSelector.h" +#include "OriginSelectorWidget.h" #include "ShortcutManager.h" #include "Tools.h" @@ -1471,4 +1472,25 @@ void WindowAction::addTo(QWidget* widget) } } +// -------------------------------------------------------------------- + +OriginSelectorAction::OriginSelectorAction(Command* pcCmd, QObject* parent) + : Action(pcCmd, parent) +{} + +OriginSelectorAction::~OriginSelectorAction() = default; + +void OriginSelectorAction::addTo(QWidget* widget) +{ + if (widget->inherits("QToolBar")) { + auto* toolbar = static_cast(widget); + auto* selector = new OriginSelectorWidget(widget); + toolbar->addWidget(selector); + } + else { + // For menus, just add the action + widget->addAction(action()); + } +} + #include "moc_Action.cpp" diff --git a/src/Gui/Action.h b/src/Gui/Action.h index b52ab61076..01d02ed936 100644 --- a/src/Gui/Action.h +++ b/src/Gui/Action.h @@ -421,6 +421,25 @@ private: Q_DISABLE_COPY(WindowAction) }; +// -------------------------------------------------------------------- + +/** + * Action for origin selector widget in toolbars. + * Creates OriginSelectorWidget when added to a toolbar. + */ +class GuiExport OriginSelectorAction: public Action +{ + Q_OBJECT + +public: + explicit OriginSelectorAction(Command* pcCmd, QObject* parent = nullptr); + ~OriginSelectorAction() override; + void addTo(QWidget* widget) override; + +private: + Q_DISABLE_COPY(OriginSelectorAction) +}; + } // namespace Gui #endif // GUI_ACTION_H diff --git a/src/Gui/CMakeLists.txt b/src/Gui/CMakeLists.txt index da3115b7e8..c9519eed18 100644 --- a/src/Gui/CMakeLists.txt +++ b/src/Gui/CMakeLists.txt @@ -1236,6 +1236,7 @@ SET(Widget_CPP_SRCS ElideCheckBox.cpp FontScaledSVG.cpp SplitButton.cpp + OriginSelectorWidget.cpp ) SET(Widget_HPP_SRCS ComboLinks.h @@ -1262,6 +1263,7 @@ SET(Widget_HPP_SRCS ElideCheckBox.h FontScaledSVG.h SplitButton.h + OriginSelectorWidget.h ) SET(Widget_SRCS ${Widget_CPP_SRCS} diff --git a/src/Gui/CommandStd.cpp b/src/Gui/CommandStd.cpp index 9f0d32bfb2..ec41692e5d 100644 --- a/src/Gui/CommandStd.cpp +++ b/src/Gui/CommandStd.cpp @@ -132,6 +132,45 @@ Action* StdCmdWorkbench::createAction() return pcAction; } +//=========================================================================== +// Std_Origin +//=========================================================================== + +DEF_STD_CMD_AC(StdCmdOrigin) + +StdCmdOrigin::StdCmdOrigin() + : Command("Std_Origin") +{ + sGroup = "File"; + sMenuText = QT_TR_NOOP("&Origin"); + sToolTipText = QT_TR_NOOP("Select file origin (Local Files, Silo, etc.)"); + sWhatsThis = "Std_Origin"; + sStatusTip = sToolTipText; + sPixmap = "folder"; + eType = 0; +} + +void StdCmdOrigin::activated(int /*iMsg*/) +{ + // Action is handled by OriginSelectorWidget +} + +bool StdCmdOrigin::isActive() +{ + return true; +} + +Action* StdCmdOrigin::createAction() +{ + Action* pcAction = new OriginSelectorAction(this, getMainWindow()); + pcAction->setShortcut(QString::fromLatin1(getAccel())); + applyCommandData(this->className(), pcAction); + if (getPixmap()) { + pcAction->setIcon(Gui::BitmapFactory().iconFromTheme(getPixmap())); + } + return pcAction; +} + //=========================================================================== // Std_RecentFiles //=========================================================================== @@ -1057,6 +1096,7 @@ void CreateStdCommands() rcCmdMgr.addCommand(new StdCmdDlgCustomize()); rcCmdMgr.addCommand(new StdCmdCommandLine()); rcCmdMgr.addCommand(new StdCmdWorkbench()); + rcCmdMgr.addCommand(new StdCmdOrigin()); rcCmdMgr.addCommand(new StdCmdRecentFiles()); rcCmdMgr.addCommand(new StdCmdRecentMacros()); rcCmdMgr.addCommand(new StdCmdWhatsThis()); diff --git a/src/Gui/PreferencePacks/KindredCreate/KindredCreate.qss b/src/Gui/PreferencePacks/KindredCreate/KindredCreate.qss index e391a1102b..afbf474893 100644 --- a/src/Gui/PreferencePacks/KindredCreate/KindredCreate.qss +++ b/src/Gui/PreferencePacks/KindredCreate/KindredCreate.qss @@ -1142,6 +1142,28 @@ Gui--WorkbenchComboBox::drop-down { border-radius: 0 4px 4px 0; } +/* Origin Selector */ +Gui--OriginSelectorWidget { + background-color: #313244; + color: #cdd6f4; + border: 1px solid #45475a; + border-radius: 4px; + padding: 4px 8px; + min-width: 70px; + max-width: 120px; +} + +Gui--OriginSelectorWidget:hover { + border-color: #585b70; + background-color: #45475a; +} + +Gui--OriginSelectorWidget::menu-indicator { + subcontrol-origin: padding; + subcontrol-position: center right; + right: 4px; +} + /* Task Panel */ QSint--ActionGroup { background-color: #313244; diff --git a/src/Gui/Workbench.cpp b/src/Gui/Workbench.cpp index 05964a37fd..96b393b58c 100644 --- a/src/Gui/Workbench.cpp +++ b/src/Gui/Workbench.cpp @@ -834,7 +834,7 @@ ToolBarItem* StdWorkbench::setupToolBars() const // File auto file = new ToolBarItem(root); file->setCommand("File"); - *file << "Std_New" << "Std_Open" << "Std_Save"; + *file << "Std_Origin" << "Std_New" << "Std_Open" << "Std_Save"; // Edit auto edit = new ToolBarItem(root);