vcl/unx/kde5/KDE5FilePicker.cxx | 4 --- vcl/unx/kde5/KDE5FilePicker.hxx | 19 ++++++++++++++++-- vcl/unx/kde5/KDE5FilePicker2.cxx | 40 +++++++++++++++++++++++++++++++++------ vcl/unx/kde5/KDE5SalInstance.cxx | 10 +++++++-- vcl/unx/kde5/KDE5SalInstance.hxx | 3 ++ 5 files changed, 62 insertions(+), 14 deletions(-)
New commits: commit 9cec4e710b11eff5e258d2a4c631c6a9989ddb6d Author: Katarina Behrens <[email protected]> Date: Thu Jun 7 14:20:07 2018 +0200 Basic native folder picker Change-Id: I1b77d7a1c8a4a3581554fb5c481b7d9039497ced diff --git a/vcl/unx/kde5/KDE5FilePicker.hxx b/vcl/unx/kde5/KDE5FilePicker.hxx index 3a02c770eda6..d303ba30a6ac 100644 --- a/vcl/unx/kde5/KDE5FilePicker.hxx +++ b/vcl/unx/kde5/KDE5FilePicker.hxx @@ -25,6 +25,7 @@ #include <com/sun/star/lang/XInitialization.hpp> #include <com/sun/star/ui/dialogs/XFilePicker3.hpp> #include <com/sun/star/ui/dialogs/XFilePickerControlAccess.hpp> +#include <com/sun/star/ui/dialogs/XFolderPicker2.hpp> #include <com/sun/star/uno/XComponentContext.hpp> #include <osl/conditn.hxx> @@ -37,13 +38,15 @@ #include <QtCore/QString> #include <QtCore/QStringList> #include <QtCore/QHash> +#include <QtWidgets/QFileDialog> class QFileDialog; class QGridLayout; class QWidget; typedef ::cppu::WeakComponentImplHelper<css::ui::dialogs::XFilePicker3, - css::ui::dialogs::XFilePickerControlAccess + css::ui::dialogs::XFilePickerControlAccess, + css::ui::dialogs::XFolderPicker2 // TODO css::ui::dialogs::XFilePreview , css::lang::XInitialization, css::lang::XServiceInfo> @@ -80,7 +83,7 @@ protected: bool allowRemoteUrls; public: - explicit KDE5FilePicker(const css::uno::Reference<css::uno::XComponentContext>&); + explicit KDE5FilePicker(QFileDialog::FileMode); virtual ~KDE5FilePicker() override; void enableFolderMode(); @@ -121,6 +124,10 @@ public: virtual void SAL_CALL setLabel(sal_Int16 nControlId, const OUString& rLabel) override; virtual OUString SAL_CALL getLabel(sal_Int16 nControlId) override; + // XFolderPicker stuff + virtual OUString SAL_CALL getDirectory() override; + virtual void SAL_CALL setDescription(const OUString& rDescription) override; + /* TODO XFilePreview virtual css::uno::Sequence< sal_Int16 > SAL_CALL getSupportedImageFormats( ); diff --git a/vcl/unx/kde5/KDE5FilePicker2.cxx b/vcl/unx/kde5/KDE5FilePicker2.cxx index 93e6d503d32b..759b2fccf790 100644 --- a/vcl/unx/kde5/KDE5FilePicker2.cxx +++ b/vcl/unx/kde5/KDE5FilePicker2.cxx @@ -77,7 +77,7 @@ uno::Sequence<OUString> FilePicker_getSupportedServiceNames() // KDE5FilePicker -KDE5FilePicker::KDE5FilePicker(const uno::Reference<uno::XComponentContext>&) +KDE5FilePicker::KDE5FilePicker(QFileDialog::FileMode eMode) : KDE5FilePicker_Base(_helperMutex) , _dialog(new QFileDialog(nullptr, {}, QDir::homePath())) , _extraControls(new QWidget) @@ -94,6 +94,7 @@ KDE5FilePicker::KDE5FilePicker(const uno::Reference<uno::XComponentContext>&) QStringLiteral("webdavs"), QStringLiteral("smb"), }); + _dialog->setFileMode(eMode); setMultiSelectionMode(false); @@ -231,6 +232,10 @@ OUString SAL_CALL KDE5FilePicker::getLabel(sal_Int16 controlId) return label; } +OUString SAL_CALL KDE5FilePicker::getDirectory() { return OUString(); } + +void SAL_CALL KDE5FilePicker::setDescription(const OUString&) {} + void KDE5FilePicker::addCustomControl(sal_Int16 controlId) { const char* resId = nullptr; diff --git a/vcl/unx/kde5/KDE5SalInstance.cxx b/vcl/unx/kde5/KDE5SalInstance.cxx index ac6173e13550..37021cbe9315 100644 --- a/vcl/unx/kde5/KDE5SalInstance.cxx +++ b/vcl/unx/kde5/KDE5SalInstance.cxx @@ -49,9 +49,15 @@ SalFrame* KDE5SalInstance::CreateFrame(SalFrame* pParent, SalFrameStyleFlags nSt } uno::Reference<ui::dialogs::XFilePicker2> -KDE5SalInstance::createFilePicker(const uno::Reference<uno::XComponentContext>& xMSF) +KDE5SalInstance::createFilePicker(const uno::Reference<uno::XComponentContext>& /*xMSF*/) { - return uno::Reference<ui::dialogs::XFilePicker2>(new KDE5FilePicker(xMSF)); + return uno::Reference<ui::dialogs::XFilePicker2>(new KDE5FilePicker(QFileDialog::ExistingFile)); +} + +uno::Reference<ui::dialogs::XFolderPicker2> +KDE5SalInstance::createFolderPicker(const uno::Reference<uno::XComponentContext>& /*xMSF*/) +{ + return uno::Reference<ui::dialogs::XFolderPicker2>(new KDE5FilePicker(QFileDialog::Directory)); } bool KDE5SalInstance::IsMainThread() const { return qApp->thread() == QThread::currentThread(); } diff --git a/vcl/unx/kde5/KDE5SalInstance.hxx b/vcl/unx/kde5/KDE5SalInstance.hxx index cc7d7ad7cbce..0bf30ab8b235 100644 --- a/vcl/unx/kde5/KDE5SalInstance.hxx +++ b/vcl/unx/kde5/KDE5SalInstance.hxx @@ -36,6 +36,9 @@ public: virtual css::uno::Reference<css::ui::dialogs::XFilePicker2> createFilePicker(const css::uno::Reference<css::uno::XComponentContext>&) override; + virtual css::uno::Reference<css::ui::dialogs::XFolderPicker2> + createFolderPicker(const css::uno::Reference<css::uno::XComponentContext>&) override; + virtual bool IsMainThread() const override; }; commit d9e66bd17cbb6f377cfe9994c1ac2c9e4c18f928 Author: Katarina Behrens <[email protected]> Date: Thu Jun 7 13:26:59 2018 +0200 Implement setDisplayDirectory, signal+slot Change-Id: Ieb3fb6bb9afa8cddbfd7f14ddfb36faebd524701 diff --git a/vcl/unx/kde5/KDE5FilePicker.cxx b/vcl/unx/kde5/KDE5FilePicker.cxx index 3968a0f686a6..9891439ae0ee 100644 --- a/vcl/unx/kde5/KDE5FilePicker.cxx +++ b/vcl/unx/kde5/KDE5FilePicker.cxx @@ -53,8 +53,6 @@ KDE5FilePicker::~KDE5FilePicker() void KDE5FilePicker::setDefaultName(const QString& name) { _dialog->selectUrl(QUrl(name)); } -void KDE5FilePicker::setDisplayDirectory(const QString& dir) { _dialog->selectUrl(QUrl(dir)); } - QString KDE5FilePicker::getDisplayDirectory() const { return _dialog->directoryUrl().url(); } QList<QUrl> KDE5FilePicker::getSelectedFiles() const { return _dialog->selectedUrls(); } diff --git a/vcl/unx/kde5/KDE5FilePicker.hxx b/vcl/unx/kde5/KDE5FilePicker.hxx index 6078a53b0f98..3a02c770eda6 100644 --- a/vcl/unx/kde5/KDE5FilePicker.hxx +++ b/vcl/unx/kde5/KDE5FilePicker.hxx @@ -166,9 +166,11 @@ protected: Q_SIGNALS: void setTitleSignal(const OUString& rTitle); + void setDisplayDirectorySignal(const OUString& rDir); private Q_SLOTS: void setTitleSlot(const OUString& rTitle) { return setTitle(rTitle); } + void setDisplayDirectorySlot(const OUString& rDir) { return setDisplayDirectory(rDir); } }; /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/vcl/unx/kde5/KDE5FilePicker2.cxx b/vcl/unx/kde5/KDE5FilePicker2.cxx index 8df045b3aa59..93e6d503d32b 100644 --- a/vcl/unx/kde5/KDE5FilePicker2.cxx +++ b/vcl/unx/kde5/KDE5FilePicker2.cxx @@ -101,6 +101,9 @@ KDE5FilePicker::KDE5FilePicker(const uno::Reference<uno::XComponentContext>&) connect(_dialog, &QFileDialog::fileSelected, this, &KDE5FilePicker::selectionChanged); connect(this, &KDE5FilePicker::setTitleSignal /*(const OUString&)*/, this, &KDE5FilePicker::setTitleSlot /*(const OUString&)*/, Qt::BlockingQueuedConnection); + connect(this, &KDE5FilePicker::setDisplayDirectorySignal /*(const OUString&)*/, this, + &KDE5FilePicker::setDisplayDirectorySlot /*(const OUString&)*/, + Qt::BlockingQueuedConnection); qApp->installEventFilter(this); setMultiSelectionMode(false); @@ -146,7 +149,16 @@ void SAL_CALL KDE5FilePicker::setMultiSelectionMode(sal_Bool multiSelect) {} void SAL_CALL KDE5FilePicker::setDefaultName(const OUString& name) {} -void SAL_CALL KDE5FilePicker::setDisplayDirectory(const OUString& dir) {} +void SAL_CALL KDE5FilePicker::setDisplayDirectory(const OUString& dir) +{ + if (qApp->thread() != QThread::currentThread()) + { + SolarMutexReleaser aReleaser; + return Q_EMIT setDisplayDirectorySignal(dir); + } + + _dialog->selectUrl(QUrl(toQString(dir))); +} OUString SAL_CALL KDE5FilePicker::getDisplayDirectory() { commit a1725517d644ba4bb9f91c74e1e54e8f3efe4d1b Author: Katarina Behrens <[email protected]> Date: Thu Jun 7 12:47:35 2018 +0200 Add setTitle functionality, signal+slot Change-Id: Ib79837ff08cabf8a27b6d154529399a5965ab148 diff --git a/vcl/unx/kde5/KDE5FilePicker.cxx b/vcl/unx/kde5/KDE5FilePicker.cxx index 3e1387da7fd2..3968a0f686a6 100644 --- a/vcl/unx/kde5/KDE5FilePicker.cxx +++ b/vcl/unx/kde5/KDE5FilePicker.cxx @@ -46,8 +46,6 @@ KDE5FilePicker::~KDE5FilePicker() delete _dialog; } -//void KDE5FilePicker::setTitle(const QString& title) { _dialog->setWindowTitle(title); } - /*void KDE5FilePicker::setMultiSelectionMode(bool multiSelect) { _dialog->setFileMode(multiSelect ? QFileDialog::ExistingFiles : QFileDialog::ExistingFile); diff --git a/vcl/unx/kde5/KDE5FilePicker.hxx b/vcl/unx/kde5/KDE5FilePicker.hxx index ea18b3298ed4..6078a53b0f98 100644 --- a/vcl/unx/kde5/KDE5FilePicker.hxx +++ b/vcl/unx/kde5/KDE5FilePicker.hxx @@ -163,6 +163,12 @@ private: protected: bool eventFilter(QObject* watched, QEvent* event) override; + +Q_SIGNALS: + void setTitleSignal(const OUString& rTitle); + +private Q_SLOTS: + void setTitleSlot(const OUString& rTitle) { return setTitle(rTitle); } }; /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/vcl/unx/kde5/KDE5FilePicker2.cxx b/vcl/unx/kde5/KDE5FilePicker2.cxx index e505791cad03..8df045b3aa59 100644 --- a/vcl/unx/kde5/KDE5FilePicker2.cxx +++ b/vcl/unx/kde5/KDE5FilePicker2.cxx @@ -31,16 +31,15 @@ #include <com/sun/star/ui/dialogs/ExecutableDialogResults.hpp> #include <osl/mutex.hxx> - -#include <fpicker/strings.hrc> - #include "FPServiceInfo.hxx" #undef Region #include <unx/geninst.h> +#include <qt5/Qt5Tools.hxx> #include <QtCore/QDebug> +#include <QtCore/QThread> #include <QtCore/QUrl> #include <QtGui/QClipboard> #include <QtGui/QWindow> @@ -50,6 +49,7 @@ #include <QtWidgets/QWidget> #include <QtWidgets/QApplication> +#include <fpicker/strings.hrc> #include <strings.hrc> using namespace ::com::sun::star; @@ -99,6 +99,8 @@ KDE5FilePicker::KDE5FilePicker(const uno::Reference<uno::XComponentContext>&) connect(_dialog, &QFileDialog::filterSelected, this, &KDE5FilePicker::filterChanged); connect(_dialog, &QFileDialog::fileSelected, this, &KDE5FilePicker::selectionChanged); + connect(this, &KDE5FilePicker::setTitleSignal /*(const OUString&)*/, this, + &KDE5FilePicker::setTitleSlot /*(const OUString&)*/, Qt::BlockingQueuedConnection); qApp->installEventFilter(this); setMultiSelectionMode(false); @@ -117,7 +119,16 @@ void SAL_CALL KDE5FilePicker::removeFilePickerListener(const uno::Reference<XFil m_xListener.clear(); } -void SAL_CALL KDE5FilePicker::setTitle(const OUString& title) {} +void SAL_CALL KDE5FilePicker::setTitle(const OUString& title) +{ + if (qApp->thread() != QThread::currentThread()) + { + SolarMutexReleaser aReleaser; + return Q_EMIT setTitleSignal(title); + } + + _dialog->setWindowTitle(toQString(title)); +} sal_Int16 SAL_CALL KDE5FilePicker::execute() { _______________________________________________ Libreoffice-commits mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
