diff --git a/src/libs/utils/layoutbuilder.cpp b/src/libs/utils/layoutbuilder.cpp index 236c2db7ead..81c7991b964 100644 --- a/src/libs/utils/layoutbuilder.cpp +++ b/src/libs/utils/layoutbuilder.cpp @@ -30,6 +30,7 @@ #include #include #include +#include namespace Layouting { @@ -1088,6 +1089,19 @@ ToolBar::ToolBar(std::initializer_list ps) access(this)->setOrientation(Qt::Horizontal); } +// ToolButton + +ToolButton::ToolButton(std::initializer_list ps) +{ + ptr = new Implementation; + apply(this, ps); +} + +void ToolButton::setDefaultAction(QAction *action) +{ + access(this)->setDefaultAction(action); +} + // TabWidget TabWidget::TabWidget(std::initializer_list ps) diff --git a/src/libs/utils/layoutbuilder.h b/src/libs/utils/layoutbuilder.h index 824f3904b27..46db73f2d39 100644 --- a/src/libs/utils/layoutbuilder.h +++ b/src/libs/utils/layoutbuilder.h @@ -5,6 +5,7 @@ #include "builderutils.h" +#include #include #include @@ -38,6 +39,7 @@ class QStackedWidget; class QTabWidget; class QTextEdit; class QToolBar; +class QToolButton; class QVBoxLayout; class QWidget; QT_END_NAMESPACE @@ -435,6 +437,17 @@ public: ToolBar(std::initializer_list items); }; +class QTCREATOR_UTILS_EXPORT ToolButton : public Widget +{ +public: + using Implementation = QToolButton; + using I = Building::BuilderItem; + + ToolButton(std::initializer_list items); + + void setDefaultAction(QAction *action); +}; + class QTCREATOR_UTILS_EXPORT Spinner : public Widget { public: diff --git a/src/plugins/lua/bindings/gui.cpp b/src/plugins/lua/bindings/gui.cpp index 3d9e4a80a98..bfde53d10ac 100644 --- a/src/plugins/lua/bindings/gui.cpp +++ b/src/plugins/lua/bindings/gui.cpp @@ -119,6 +119,7 @@ CREATE_HAS_FUNC(setViewportMargins, int(), int(), int(), int()); CREATE_HAS_FUNC(setCursor, Qt::CursorShape()) CREATE_HAS_FUNC(setMinimumWidth, int()); CREATE_HAS_FUNC(setEnableCodeCopyButton, bool()); +CREATE_HAS_FUNC(setDefaultAction, nullptr); template void setProperties(std::unique_ptr &item, const sol::table &children, QObject *guard) @@ -153,6 +154,12 @@ void setProperties(std::unique_ptr &item, const sol::table &children, QObject item->setEnableCodeCopyButton(*enableCodeCopyButton); } + if constexpr (has_setDefaultAction) { + const auto defaultAction = children.get>("defaultAction"sv); + if (defaultAction) + item->setDefaultAction(*defaultAction); + } + if constexpr (has_setVisible) { const auto visible = children.get>("visible"sv); if (visible) @@ -675,6 +682,14 @@ void setupGuiModule() }), sol::base_classes, sol::bases()); + gui.new_usertype( + "ToolButton", + sol::call_constructor, + sol::factories([guard](const sol::table &children) { + return constructWidgetType(children, guard); + }), + sol::base_classes, + sol::bases()); gui.new_usertype( "TabWidget", sol::call_constructor, diff --git a/src/plugins/lua/bindings/texteditor.cpp b/src/plugins/lua/bindings/texteditor.cpp index 95ab7dc7ed6..d1601969e5e 100644 --- a/src/plugins/lua/bindings/texteditor.cpp +++ b/src/plugins/lua/bindings/texteditor.cpp @@ -412,6 +412,13 @@ void setupTextEditorModule() QTC_ASSERT(textEditor, throw sol::error("TextEditor is not valid")); return addEmbeddedWidget(textEditor, toWidget(widget), position); }, + "insertExtraToolBarWidget", + [](const TextEditorPtr &textEditor, + TextEditorWidget::Side side, + LayoutOrWidget widget) { + QTC_ASSERT(textEditor, throw sol::error("TextEditor is not valid")); + textEditor->editorWidget()->insertExtraToolBarWidget(side, toWidget(widget)); + }, "setRefactorMarker", [pluginSpec, activeMarkers]( const TextEditorPtr &textEditor, @@ -461,6 +468,11 @@ void setupTextEditorModule() return textEditor->editorWidget()->hasFocus(); }); + result["Side"] = lua.create_table_with( + "Left", TextEditorWidget::Left, + "Right", TextEditorWidget::Right + ); + result.new_usertype( "Suggestion", "create", diff --git a/src/plugins/lua/meta/gui.lua b/src/plugins/lua/meta/gui.lua index e74a4fe31c9..b78f6ad5bdc 100644 --- a/src/plugins/lua/meta/gui.lua +++ b/src/plugins/lua/meta/gui.lua @@ -214,6 +214,13 @@ local toolBar = {} ---@return ToolBar function gui.ToolBar(options) end +---@class ToolButton : Widget +local toolButton = {} + +---@param options WidgetOptions +---@return ToolButton +function gui.ToolButton(options) end + ---@class TabWidget : Widget local tabWidget = {} diff --git a/src/plugins/lua/meta/texteditor.lua b/src/plugins/lua/meta/texteditor.lua index 80b5fbf884b..b832fe5c497 100644 --- a/src/plugins/lua/meta/texteditor.lua +++ b/src/plugins/lua/meta/texteditor.lua @@ -208,6 +208,11 @@ function EmbeddedWidget:onShouldClose(fn) end ---@return EmbeddedWidget interface An interface to control the floating widget. function TextEditor:addEmbeddedWidget(widget, position) end +---Inserts a widget into toolbar. +---@param side TextEditor.Side The side where the widget should be added. +---@param widget Widget|Layout The widget to be added to the toolbar +function TextEditor:insertExtraToolBarWidget(side, widget) end + ---Adds an refactor marker in the text editor at given cursor position. ---@param icon Utils.Icon|FilePath|string Icon to be used. If specified icon is invalid the default QtCreator for markers is used. ---@param position integer The position in the document where the marker should appear. @@ -236,4 +241,11 @@ function TextEditor:hasFocus() end ---@return TextEditor|nil editor The currently active editor or nil if there is none. function textEditor.currentEditor() end +---@enum TextEditor.Side +---Side of the toolbar. +textEditor.Side = { + Left = 0, + Right = 0 +} + return textEditor