vcl/CustomTarget_qt5_moc.mk | 1 vcl/CustomTarget_qt6_moc.mk | 1 vcl/Library_vclplug_qt5.mk | 1 vcl/Library_vclplug_qt6.mk | 1 vcl/inc/qt5/QtInstanceBuilder.hxx | 2 vcl/inc/qt5/QtInstanceToolbar.hxx | 67 +++++++++++++ vcl/inc/qt6/QtInstanceToolbar.hxx | 12 ++ vcl/qt5/QtBuilder.cxx | 5 vcl/qt5/QtInstanceBuilder.cxx | 9 + vcl/qt5/QtInstanceToolbar.cxx | 192 ++++++++++++++++++++++++++++++++++++++ vcl/qt6/QtInstanceToolbar.cxx | 12 ++ 11 files changed, 299 insertions(+), 4 deletions(-)
New commits: commit bcc518102ac9db436b1f41be835c055aaffb74a9 Author: Michael Weghorn <[email protected]> AuthorDate: Tue Jan 7 13:24:26 2025 +0100 Commit: Michael Weghorn <[email protected]> CommitDate: Wed Jan 8 09:52:01 2025 +0100 tdf#130857 qt weld: Introduce QtInstanceToolbar Introduce QtInstanceToolbar as the native Qt implementation for weld::Toolbar that uses a QToolBar widget. This mostly adds the basic structure and lets Qt{,Instance}Builder create an instance of the class when encountering a "GtkToolbar" object in a .ui file. The actual logic for the QtInstanceToolbar methods still needs to be implemented. Calling them currently triggers an assert. Change-Id: I2734e5b931d5cb9608ec4d01222634a8ffada299 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/179883 Tested-by: Jenkins Reviewed-by: Michael Weghorn <[email protected]> diff --git a/vcl/CustomTarget_qt5_moc.mk b/vcl/CustomTarget_qt5_moc.mk index 8627b72d87b1..b01d55097987 100644 --- a/vcl/CustomTarget_qt5_moc.mk +++ b/vcl/CustomTarget_qt5_moc.mk @@ -41,6 +41,7 @@ $(call gb_CustomTarget_get_target,vcl/qt5) : \ $(gb_CustomTarget_workdir)/vcl/qt5/QtInstanceSpinButton.moc \ $(gb_CustomTarget_workdir)/vcl/qt5/QtInstanceTextView.moc \ $(gb_CustomTarget_workdir)/vcl/qt5/QtInstanceToggleButton.moc \ + $(gb_CustomTarget_workdir)/vcl/qt5/QtInstanceToolbar.moc \ $(gb_CustomTarget_workdir)/vcl/qt5/QtInstanceTreeView.moc \ $(gb_CustomTarget_workdir)/vcl/qt5/QtInstanceWidget.moc \ $(gb_CustomTarget_workdir)/vcl/qt5/QtInstanceWindow.moc \ diff --git a/vcl/CustomTarget_qt6_moc.mk b/vcl/CustomTarget_qt6_moc.mk index 1fae8dd27aca..2646f8902677 100644 --- a/vcl/CustomTarget_qt6_moc.mk +++ b/vcl/CustomTarget_qt6_moc.mk @@ -41,6 +41,7 @@ $(call gb_CustomTarget_get_target,vcl/qt6) : \ $(gb_CustomTarget_workdir)/vcl/qt6/QtInstanceSpinButton.moc \ $(gb_CustomTarget_workdir)/vcl/qt6/QtInstanceTextView.moc \ $(gb_CustomTarget_workdir)/vcl/qt6/QtInstanceToggleButton.moc \ + $(gb_CustomTarget_workdir)/vcl/qt6/QtInstanceToolbar.moc \ $(gb_CustomTarget_workdir)/vcl/qt6/QtInstanceTreeView.moc \ $(gb_CustomTarget_workdir)/vcl/qt6/QtInstanceWidget.moc \ $(gb_CustomTarget_workdir)/vcl/qt6/QtInstanceWindow.moc \ diff --git a/vcl/Library_vclplug_qt5.mk b/vcl/Library_vclplug_qt5.mk index c5012310b9aa..bacca3f1bfb3 100644 --- a/vcl/Library_vclplug_qt5.mk +++ b/vcl/Library_vclplug_qt5.mk @@ -127,6 +127,7 @@ $(eval $(call gb_Library_add_exception_objects,vclplug_qt5,\ vcl/qt5/QtInstanceSpinButton \ vcl/qt5/QtInstanceTextView \ vcl/qt5/QtInstanceToggleButton \ + vcl/qt5/QtInstanceToolbar \ vcl/qt5/QtInstanceTreeView \ vcl/qt5/QtInstanceWidget \ vcl/qt5/QtInstanceWindow \ diff --git a/vcl/Library_vclplug_qt6.mk b/vcl/Library_vclplug_qt6.mk index f533bc8a597c..1945687c4b4b 100644 --- a/vcl/Library_vclplug_qt6.mk +++ b/vcl/Library_vclplug_qt6.mk @@ -126,6 +126,7 @@ $(eval $(call gb_Library_add_exception_objects,vclplug_qt6,\ vcl/qt6/QtInstanceSpinButton \ vcl/qt6/QtInstanceTextView \ vcl/qt6/QtInstanceToggleButton \ + vcl/qt6/QtInstanceToolbar \ vcl/qt6/QtInstanceTreeView \ vcl/qt6/QtInstanceWidget \ vcl/qt6/QtInstanceWindow \ diff --git a/vcl/inc/qt5/QtInstanceBuilder.hxx b/vcl/inc/qt5/QtInstanceBuilder.hxx index 4f75711edb5f..340d332a86e0 100644 --- a/vcl/inc/qt5/QtInstanceBuilder.hxx +++ b/vcl/inc/qt5/QtInstanceBuilder.hxx @@ -76,7 +76,7 @@ public: void* pUserData = nullptr) override; virtual std::unique_ptr<weld::Menu> weld_menu(const OUString& rId) override; virtual std::unique_ptr<weld::Popover> weld_popover(const OUString& rId) override; - virtual std::unique_ptr<weld::Toolbar> weld_toolbar(const OUString&) override; + virtual std::unique_ptr<weld::Toolbar> weld_toolbar(const OUString& rId) override; virtual std::unique_ptr<weld::Scrollbar> weld_scrollbar(const OUString&) override; virtual std::unique_ptr<weld::SizeGroup> create_size_group() override; }; diff --git a/vcl/inc/qt5/QtInstanceToolbar.hxx b/vcl/inc/qt5/QtInstanceToolbar.hxx new file mode 100644 index 000000000000..70526fb79312 --- /dev/null +++ b/vcl/inc/qt5/QtInstanceToolbar.hxx @@ -0,0 +1,67 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#pragma once + +#include "QtInstanceWidget.hxx" + +#include <QtWidgets/QToolBar> + +class QtInstanceToolbar : public QtInstanceWidget, public virtual weld::Toolbar +{ + Q_OBJECT + + QToolBar* m_pToolBar; + +public: + QtInstanceToolbar(QToolBar* pToolBar); + + virtual void set_item_sensitive(const OUString& rIdent, bool bSensitive) override; + virtual bool get_item_sensitive(const OUString& rIdent) const override; + virtual void set_item_active(const OUString& rIdent, bool bActive) override; + virtual bool get_item_active(const OUString& rIdent) const override; + virtual void set_menu_item_active(const OUString& rIdent, bool bActive) override; + virtual bool get_menu_item_active(const OUString& rIdent) const override; + virtual void set_item_menu(const OUString& rIdent, weld::Menu* pMenu) override; + virtual void set_item_popover(const OUString& rIdent, weld::Widget* pPopover) override; + virtual void set_item_visible(const OUString& rIdent, bool bVisible) override; + virtual void set_item_help_id(const OUString& rIdent, const OUString& rHelpId) override; + virtual bool get_item_visible(const OUString& rIdent) const override; + virtual void set_item_label(const OUString& rIdent, const OUString& rLabel) override; + virtual OUString get_item_label(const OUString& rIdent) const override; + virtual void set_item_tooltip_text(const OUString& rIdent, const OUString& rTip) override; + virtual OUString get_item_tooltip_text(const OUString& rIdent) const override; + virtual void set_item_icon_name(const OUString& rIdent, const OUString& rIconName) override; + virtual void set_item_image_mirrored(const OUString& rIdent, bool bMirrored) override; + virtual void set_item_image(const OUString& rIdent, + const css::uno::Reference<css::graphic::XGraphic>& rIcon) override; + virtual void set_item_image(const OUString& rIdent, VirtualDevice* pDevice) override; + + virtual void insert_item(int pos, const OUString& rId) override; + virtual void insert_separator(int pos, const OUString& rId) override; + + virtual int get_n_items() const override; + virtual OUString get_item_ident(int nIndex) const override; + virtual void set_item_ident(int nIndex, const OUString& rIdent) override; + virtual void set_item_label(int nIndex, const OUString& rLabel) override; + virtual void set_item_image(int nIndex, + const css::uno::Reference<css::graphic::XGraphic>& rIcon) override; + virtual void set_item_tooltip_text(int nIndex, const OUString& rTip) override; + virtual void set_item_accessible_name(int nIndex, const OUString& rName) override; + virtual void set_item_accessible_name(const OUString& rIdent, const OUString& rName) override; + + virtual vcl::ImageType get_icon_size() const override; + virtual void set_icon_size(vcl::ImageType eType) override; + + virtual sal_uInt16 get_modifier_state() const override; + + virtual int get_drop_index(const Point& rPoint) const override; +}; + +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/vcl/inc/qt6/QtInstanceToolbar.hxx b/vcl/inc/qt6/QtInstanceToolbar.hxx new file mode 100644 index 000000000000..8ed2cf48a6b5 --- /dev/null +++ b/vcl/inc/qt6/QtInstanceToolbar.hxx @@ -0,0 +1,12 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include "../qt5/QtInstanceToolbar.hxx" + +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/vcl/qt5/QtBuilder.cxx b/vcl/qt5/QtBuilder.cxx index 253049625844..44835875cba8 100644 --- a/vcl/qt5/QtBuilder.cxx +++ b/vcl/qt5/QtBuilder.cxx @@ -39,6 +39,7 @@ #include <QtWidgets/QSlider> #include <QtWidgets/QSplitter> #include <QtWidgets/QTabWidget> +#include <QtWidgets/QToolBar> #include <QtWidgets/QToolButton> #include <QtWidgets/QTreeView> @@ -340,6 +341,10 @@ QObject* QtBuilder::makeObject(QObject* pParent, std::u16string_view sName, std: { pObject = new QToolButton(pParentWidget); } + else if (sName == u"GtkToolbar") + { + pObject = new QToolBar(pParentWidget); + } else if (sName == u"GtkTreeView") { QTreeView* pTreeView = new QTreeView(pParentWidget); diff --git a/vcl/qt5/QtInstanceBuilder.cxx b/vcl/qt5/QtInstanceBuilder.cxx index 146c6d067a65..479be26bcf1d 100644 --- a/vcl/qt5/QtInstanceBuilder.cxx +++ b/vcl/qt5/QtInstanceBuilder.cxx @@ -36,6 +36,7 @@ #include <QtInstanceSpinButton.hxx> #include <QtInstanceTextView.hxx> #include <QtInstanceToggleButton.hxx> +#include <QtInstanceToolbar.hxx> #include <QtInstanceTreeView.hxx> #include <QtWidgets/QToolButton> @@ -405,10 +406,12 @@ std::unique_ptr<weld::Popover> QtInstanceBuilder::weld_popover(const OUString& r return xRet; } -std::unique_ptr<weld::Toolbar> QtInstanceBuilder::weld_toolbar(const OUString&) +std::unique_ptr<weld::Toolbar> QtInstanceBuilder::weld_toolbar(const OUString& rId) { - assert(false && "Not implemented yet"); - return nullptr; + QToolBar* pToolBar = m_xBuilder->get<QToolBar>(rId); + std::unique_ptr<weld::Toolbar> xRet(pToolBar ? std::make_unique<QtInstanceToolbar>(pToolBar) + : nullptr); + return xRet; } std::unique_ptr<weld::Scrollbar> QtInstanceBuilder::weld_scrollbar(const OUString&) diff --git a/vcl/qt5/QtInstanceToolbar.cxx b/vcl/qt5/QtInstanceToolbar.cxx new file mode 100644 index 000000000000..69521771c0f7 --- /dev/null +++ b/vcl/qt5/QtInstanceToolbar.cxx @@ -0,0 +1,192 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include <QtInstanceToolbar.hxx> +#include <QtInstanceToolbar.moc> + +QtInstanceToolbar::QtInstanceToolbar(QToolBar* pToolBar) + : QtInstanceWidget(pToolBar) + , m_pToolBar(pToolBar) +{ + assert(m_pToolBar); +} + +void QtInstanceToolbar::set_item_sensitive(const OUString&, bool) +{ + assert(false && "Not implemented yet"); +} + +bool QtInstanceToolbar::get_item_sensitive(const OUString&) const +{ + assert(false && "Not implemented yet"); + return false; +} +void QtInstanceToolbar::set_item_active(const OUString&, bool) +{ + assert(false && "Not implemented yet"); +} + +bool QtInstanceToolbar::get_item_active(const OUString&) const +{ + assert(false && "Not implemented yet"); + return false; +} + +void QtInstanceToolbar::set_menu_item_active(const OUString&, bool) +{ + assert(false && "Not implemented yet"); +} + +bool QtInstanceToolbar::get_menu_item_active(const OUString&) const +{ + assert(false && "Not implemented yet"); + return false; +} + +void QtInstanceToolbar::set_item_menu(const OUString&, weld::Menu*) +{ + assert(false && "Not implemented yet"); +} +void QtInstanceToolbar::set_item_popover(const OUString&, weld::Widget*) +{ + assert(false && "Not implemented yet"); +} + +void QtInstanceToolbar::set_item_visible(const OUString&, bool) +{ + assert(false && "Not implemented yet"); +} + +void QtInstanceToolbar::set_item_help_id(const OUString&, const OUString&) +{ + assert(false && "Not implemented yet"); +} + +bool QtInstanceToolbar::get_item_visible(const OUString&) const +{ + assert(false && "Not implemented yet"); + return false; +} + +void QtInstanceToolbar::set_item_label(const OUString&, const OUString&) +{ + assert(false && "Not implemented yet"); +} + +OUString QtInstanceToolbar::get_item_label(const OUString&) const +{ + assert(false && "Not implemented yet"); + return OUString(); +} + +void QtInstanceToolbar::set_item_tooltip_text(const OUString&, const OUString&) +{ + assert(false && "Not implemented yet"); +} + +OUString QtInstanceToolbar::get_item_tooltip_text(const OUString&) const +{ + assert(false && "Not implemented yet"); + return OUString(); +} + +void QtInstanceToolbar::set_item_icon_name(const OUString&, const OUString&) +{ + assert(false && "Not implemented yet"); +} + +void QtInstanceToolbar::set_item_image_mirrored(const OUString&, bool) +{ + assert(false && "Not implemented yet"); +} + +void QtInstanceToolbar::set_item_image(const OUString&, + const css::uno::Reference<css::graphic::XGraphic>&) +{ + assert(false && "Not implemented yet"); +} + +void QtInstanceToolbar::set_item_image(const OUString&, VirtualDevice*) +{ + assert(false && "Not implemented yet"); +} + +void QtInstanceToolbar::insert_item(int, const OUString&) +{ + assert(false && "Not implemented yet"); +} + +void QtInstanceToolbar::insert_separator(int, const OUString&) +{ + assert(false && "Not implemented yet"); +} + +int QtInstanceToolbar::get_n_items() const +{ + assert(false && "Not implemented yet"); + return 0; +} + +OUString QtInstanceToolbar::get_item_ident(int) const +{ + assert(false && "Not implemented yet"); + return OUString(); +} + +void QtInstanceToolbar::set_item_ident(int, const OUString&) +{ + assert(false && "Not implemented yet"); +} + +void QtInstanceToolbar::set_item_label(int, const OUString&) +{ + assert(false && "Not implemented yet"); +} + +void QtInstanceToolbar::set_item_image(int, const css::uno::Reference<css::graphic::XGraphic>&) +{ + assert(false && "Not implemented yet"); +} + +void QtInstanceToolbar::set_item_tooltip_text(int, const OUString&) +{ + assert(false && "Not implemented yet"); +} + +void QtInstanceToolbar::set_item_accessible_name(int, const OUString&) +{ + assert(false && "Not implemented yet"); +} + +void QtInstanceToolbar::set_item_accessible_name(const OUString&, const OUString&) +{ + assert(false && "Not implemented yet"); +} + +vcl::ImageType QtInstanceToolbar::get_icon_size() const +{ + assert(false && "Not implemented yet"); + return vcl::ImageType::Size32; +} + +void QtInstanceToolbar::set_icon_size(vcl::ImageType) { assert(false && "Not implemented yet"); } + +sal_uInt16 QtInstanceToolbar::get_modifier_state() const +{ + assert(false && "Not implemented yet"); + return 0; +} + +int QtInstanceToolbar::get_drop_index(const Point&) const +{ + assert(false && "Not implemented yet"); + return -1; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/vcl/qt6/QtInstanceToolbar.cxx b/vcl/qt6/QtInstanceToolbar.cxx new file mode 100644 index 000000000000..9f439cedb050 --- /dev/null +++ b/vcl/qt6/QtInstanceToolbar.cxx @@ -0,0 +1,12 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include "../qt5/QtInstanceToolbar.cxx" + +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */
