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/QtExpander.hxx | 5 +++ vcl/inc/qt5/QtInstanceBuilder.hxx | 2 - vcl/inc/qt5/QtInstanceExpander.hxx | 30 ++++++++++++++++++++++ vcl/inc/qt6/QtInstanceExpander.hxx | 12 ++++++++ vcl/qt5/QtExpander.cxx | 13 ++++++++- vcl/qt5/QtInstanceBuilder.cxx | 10 +++++-- vcl/qt5/QtInstanceExpander.cxx | 50 +++++++++++++++++++++++++++++++++++++ vcl/qt6/QtInstanceExpander.cxx | 12 ++++++++ 12 files changed, 132 insertions(+), 6 deletions(-)
New commits: commit ec760b211087b90f9cddec96d1e097bf68ad3e1f Author: Michael Weghorn <m.wegh...@posteo.de> AuthorDate: Sun Nov 24 01:20:31 2024 +0100 Commit: Michael Weghorn <m.wegh...@posteo.de> CommitDate: Sun Nov 24 17:04:48 2024 +0100 tdf#130857 qt weld: Add QtInstanceExpander Add a new QtInstanceExpander class that is the weld::Expander implementation using a native Qt widget. It uses the custom QtExpander widget added in Change-Id: Id2366834cb542eba613ea087e70f3a812d20fa89 Author: Michael Weghorn <m.wegh...@posteo.de> Date: Sun Nov 24 00:07:44 2024 +0100 tdf#130857 qt weld: Implement "GtkExpander" equivalent Extend QtExpander to provide what's needed to implement the QtInstanceExpander methods. Let QtInstanceBuilder::weld_expander return an instance of the new class. Signal handling still needs to be implemented (calling `weld::Expander::signal_expanded` when the expanded state is toggled). QtInstanceExpander is e.g. needed by the "Set Password" dialog. ("File" -> "Save As", check "Save with password" checkbox and press "Save" to trigger the dialog.) Change-Id: I7e3a332c0417b1897ae57d7d4c29609245fb5e19 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177197 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.wegh...@posteo.de> diff --git a/vcl/CustomTarget_qt5_moc.mk b/vcl/CustomTarget_qt5_moc.mk index 184787590282..48dea66e2136 100644 --- a/vcl/CustomTarget_qt5_moc.mk +++ b/vcl/CustomTarget_qt5_moc.mk @@ -21,6 +21,7 @@ $(call gb_CustomTarget_get_target,vcl/qt5) : \ $(gb_CustomTarget_workdir)/vcl/qt5/QtInstanceDialog.moc \ $(gb_CustomTarget_workdir)/vcl/qt5/QtInstanceDrawingArea.moc \ $(gb_CustomTarget_workdir)/vcl/qt5/QtInstanceEntry.moc \ + $(gb_CustomTarget_workdir)/vcl/qt5/QtInstanceExpander.moc \ $(gb_CustomTarget_workdir)/vcl/qt5/QtInstanceLevelBar.moc \ $(gb_CustomTarget_workdir)/vcl/qt5/QtInstanceLinkButton.moc \ $(gb_CustomTarget_workdir)/vcl/qt5/QtInstanceMessageDialog.moc \ diff --git a/vcl/CustomTarget_qt6_moc.mk b/vcl/CustomTarget_qt6_moc.mk index 1ca3042eddc5..8c72cb8b70fe 100644 --- a/vcl/CustomTarget_qt6_moc.mk +++ b/vcl/CustomTarget_qt6_moc.mk @@ -21,6 +21,7 @@ $(call gb_CustomTarget_get_target,vcl/qt6) : \ $(gb_CustomTarget_workdir)/vcl/qt6/QtInstanceDialog.moc \ $(gb_CustomTarget_workdir)/vcl/qt6/QtInstanceDrawingArea.moc \ $(gb_CustomTarget_workdir)/vcl/qt6/QtInstanceEntry.moc \ + $(gb_CustomTarget_workdir)/vcl/qt6/QtInstanceExpander.moc \ $(gb_CustomTarget_workdir)/vcl/qt6/QtInstanceLevelBar.moc \ $(gb_CustomTarget_workdir)/vcl/qt6/QtInstanceLinkButton.moc \ $(gb_CustomTarget_workdir)/vcl/qt6/QtInstanceMessageDialog.moc \ diff --git a/vcl/Library_vclplug_qt5.mk b/vcl/Library_vclplug_qt5.mk index 46d5eba4266a..664f4153ebc1 100644 --- a/vcl/Library_vclplug_qt5.mk +++ b/vcl/Library_vclplug_qt5.mk @@ -106,6 +106,7 @@ $(eval $(call gb_Library_add_exception_objects,vclplug_qt5,\ vcl/qt5/QtInstanceDialog \ vcl/qt5/QtInstanceDrawingArea \ vcl/qt5/QtInstanceEntry \ + vcl/qt5/QtInstanceExpander \ vcl/qt5/QtInstanceFrame \ vcl/qt5/QtInstanceImage \ vcl/qt5/QtInstanceLabel \ diff --git a/vcl/Library_vclplug_qt6.mk b/vcl/Library_vclplug_qt6.mk index 9a01ca63f7f6..da06490af0e9 100644 --- a/vcl/Library_vclplug_qt6.mk +++ b/vcl/Library_vclplug_qt6.mk @@ -105,6 +105,7 @@ $(eval $(call gb_Library_add_exception_objects,vclplug_qt6,\ vcl/qt6/QtInstanceDialog \ vcl/qt6/QtInstanceDrawingArea \ vcl/qt6/QtInstanceEntry \ + vcl/qt6/QtInstanceExpander \ vcl/qt6/QtInstanceFrame \ vcl/qt6/QtInstanceImage \ vcl/qt6/QtInstanceLabel \ diff --git a/vcl/inc/qt5/QtExpander.hxx b/vcl/inc/qt5/QtExpander.hxx index 135841c039f7..394712a55a77 100644 --- a/vcl/inc/qt5/QtExpander.hxx +++ b/vcl/inc/qt5/QtExpander.hxx @@ -25,7 +25,12 @@ class QtExpander : public QWidget public: QtExpander(QWidget* pParent); void setContentWidget(QWidget* pWidget); + void setText(const QString& rText); + QString text() const; + + void setExpanded(bool bExpand); + bool isExpanded() const; private: void update(); diff --git a/vcl/inc/qt5/QtInstanceBuilder.hxx b/vcl/inc/qt5/QtInstanceBuilder.hxx index caf264735275..547d7aec1b8e 100644 --- a/vcl/inc/qt5/QtInstanceBuilder.hxx +++ b/vcl/inc/qt5/QtInstanceBuilder.hxx @@ -68,7 +68,7 @@ public: virtual std::unique_ptr<weld::IconView> weld_icon_view(const OUString&) override; virtual std::unique_ptr<weld::Label> weld_label(const OUString&) override; virtual std::unique_ptr<weld::TextView> weld_text_view(const OUString& rId) override; - virtual std::unique_ptr<weld::Expander> weld_expander(const OUString&) override; + virtual std::unique_ptr<weld::Expander> weld_expander(const OUString& rId) override; virtual std::unique_ptr<weld::DrawingArea> weld_drawing_area(const OUString&, const a11yref& rA11yImpl = nullptr, FactoryFunction pUITestFactoryFunction = nullptr, diff --git a/vcl/inc/qt5/QtInstanceExpander.hxx b/vcl/inc/qt5/QtInstanceExpander.hxx new file mode 100644 index 000000000000..d596acb9ba94 --- /dev/null +++ b/vcl/inc/qt5/QtInstanceExpander.hxx @@ -0,0 +1,30 @@ +/* -*- 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 "QtExpander.hxx" + +class QtInstanceExpander : public QObject, public QtInstanceWidget, public virtual weld::Expander +{ + Q_OBJECT + + QtExpander* m_pExpander; + +public: + QtInstanceExpander(QtExpander* pExpander); + + virtual void set_label(const OUString& rText); + virtual OUString get_label() const; + virtual bool get_expanded() const; + virtual void set_expanded(bool bExpand); +}; + +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/vcl/inc/qt6/QtInstanceExpander.hxx b/vcl/inc/qt6/QtInstanceExpander.hxx new file mode 100644 index 000000000000..1dd97000e6bd --- /dev/null +++ b/vcl/inc/qt6/QtInstanceExpander.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/QtInstanceExpander.hxx" + +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/vcl/qt5/QtExpander.cxx b/vcl/qt5/QtExpander.cxx index b7e9b499f285..433244999905 100644 --- a/vcl/qt5/QtExpander.cxx +++ b/vcl/qt5/QtExpander.cxx @@ -41,6 +41,16 @@ void QtExpander::setContentWidget(QWidget* pWidget) void QtExpander::setText(const QString& rText) { m_pButton->setText(rText); } +QString QtExpander::text() const { return m_pButton->text(); } + +void QtExpander::setExpanded(bool bExpand) +{ + m_bExpanded = bExpand; + update(); +} + +bool QtExpander::isExpanded() const { return m_bExpanded; } + void QtExpander::update() { const QString sIcon = m_bExpanded ? "go-down" : "go-next"; @@ -53,8 +63,7 @@ void QtExpander::update() void QtExpander::handleButtonClick() { // toggle - m_bExpanded = !m_bExpanded; - update(); + setExpanded(!isExpanded()); } /* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/vcl/qt5/QtInstanceBuilder.cxx b/vcl/qt5/QtInstanceBuilder.cxx index 8971fbcda96e..c0512b5929aa 100644 --- a/vcl/qt5/QtInstanceBuilder.cxx +++ b/vcl/qt5/QtInstanceBuilder.cxx @@ -16,6 +16,7 @@ #include <QtInstanceComboBox.hxx> #include <QtInstanceDrawingArea.hxx> #include <QtInstanceEntry.hxx> +#include <QtInstanceExpander.hxx> #include <QtInstanceFrame.hxx> #include <QtInstanceImage.hxx> #include <QtInstanceLabel.hxx> @@ -329,10 +330,12 @@ std::unique_ptr<weld::TextView> QtInstanceBuilder::weld_text_view(const OUString return xRet; } -std::unique_ptr<weld::Expander> QtInstanceBuilder::weld_expander(const OUString&) +std::unique_ptr<weld::Expander> QtInstanceBuilder::weld_expander(const OUString& rId) { - assert(false && "Not implemented yet"); - return nullptr; + QtExpander* pExpander = m_xBuilder->get<QtExpander>(rId); + std::unique_ptr<weld::Expander> xRet(pExpander ? std::make_unique<QtInstanceExpander>(pExpander) + : nullptr); + return xRet; } std::unique_ptr<weld::DrawingArea> diff --git a/vcl/qt5/QtInstanceExpander.cxx b/vcl/qt5/QtInstanceExpander.cxx new file mode 100644 index 000000000000..7594af8f0a26 --- /dev/null +++ b/vcl/qt5/QtInstanceExpander.cxx @@ -0,0 +1,50 @@ +/* -*- 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 <QtInstanceExpander.hxx> +#include <QtInstanceExpander.moc> + +#include <vcl/qt/QtUtils.hxx> + +QtInstanceExpander::QtInstanceExpander(QtExpander* pExpander) + : QtInstanceWidget(pExpander) + , m_pExpander(pExpander) +{ + assert(m_pExpander); +} + +void QtInstanceExpander::set_label(const OUString& rText) +{ + SolarMutexGuard g; + GetQtInstance().RunInMainThread([&] { m_pExpander->setText(toQString(rText)); }); +} + +OUString QtInstanceExpander::get_label() const +{ + SolarMutexGuard g; + OUString sLabel; + GetQtInstance().RunInMainThread([&] { sLabel = toOUString(m_pExpander->text()); }); + return sLabel; +} + +bool QtInstanceExpander::get_expanded() const +{ + SolarMutexGuard g; + bool bExpanded = false; + GetQtInstance().RunInMainThread([&] { bExpanded = m_pExpander->isExpanded(); }); + return bExpanded; +} + +void QtInstanceExpander::set_expanded(bool bExpand) +{ + SolarMutexGuard g; + GetQtInstance().RunInMainThread([&] { m_pExpander->setExpanded(bExpand); }); +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/vcl/qt6/QtInstanceExpander.cxx b/vcl/qt6/QtInstanceExpander.cxx new file mode 100644 index 000000000000..584bb0bc3fab --- /dev/null +++ b/vcl/qt6/QtInstanceExpander.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/QtInstanceExpander.cxx" + +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ commit a60ccb091ed26e5287d29ea1df885bf144c74b3f Author: Michael Weghorn <m.wegh...@posteo.de> AuthorDate: Sun Nov 24 00:50:39 2024 +0100 Commit: Michael Weghorn <m.wegh...@posteo.de> CommitDate: Sun Nov 24 17:04:38 2024 +0100 tdf#130857 qt weld: Support "Safe Mode" dialog Now that "GtkExpander" support has been implemented, declare support for the "Safe Mode" dialog that can be triggered via "Help" -> "Restart in Safe Mode" and confirming with "Restart". This means that native Qt widgets are used for that dialog now when using the qt5 or qt6 VCL plugin and starting LO with environment variable SAL_VCL_QT_USE_WELDED_WIDGETS=1 set. Change-Id: I67ef04356a5147c24442cd3ec84e4bbc644b3a71 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177196 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.wegh...@posteo.de> diff --git a/vcl/qt5/QtInstanceBuilder.cxx b/vcl/qt5/QtInstanceBuilder.cxx index 1cfb2349f431..8971fbcda96e 100644 --- a/vcl/qt5/QtInstanceBuilder.cxx +++ b/vcl/qt5/QtInstanceBuilder.cxx @@ -71,6 +71,7 @@ bool QtInstanceBuilder::IsUIFileSupported(const OUString& rUIFile) u"sfx/ui/safemodequerydialog.ui"_ustr, u"svt/ui/printersetupdialog.ui"_ustr, u"svt/ui/restartdialog.ui"_ustr, + u"svx/ui/safemodedialog.ui"_ustr, u"vcl/ui/openlockedquerybox.ui"_ustr, u"vcl/ui/printprogressdialog.ui"_ustr, u"writerperfect/ui/exportepub.ui"_ustr,