vcl/unx/kde5/KDE5FilePicker.hxx | 4 + vcl/unx/kde5/KDE5FilePicker2.cxx | 117 ++++++++++++++++++++++++++++++++++++--- 2 files changed, 112 insertions(+), 9 deletions(-)
New commits: commit d2c3a04525269f64d1056b49b11103a8bddaa546 Author: Katarina Behrens <katarina.behr...@cib.de> AuthorDate: Tue Jan 22 13:43:06 2019 +0100 Commit: Thorsten Behrens <thorsten.behr...@cib.de> CommitDate: Wed Jan 23 01:38:27 2019 +0100 tdf#121129: more custom listboxes in kde5 fpicker the following additional fpicker templates are now fully supported: FILEOPEN_LINK_PREVIEW_IMAGE_TEMPLATE FILESAVE_AUTOEXTENSION_TEMPLATE FILEOPEN_LINK_PREVIEW_IMAGE_ANCHOR FILEOPEN_READONLY_VERSION Listboxes now also have valid mnemonic labels Change-Id: Ib7f9dd234bf2cbd0eadc1a7675ef51abcea3c532 Reviewed-on: https://gerrit.libreoffice.org/66736 Tested-by: Jenkins Reviewed-by: Thorsten Behrens <thorsten.behr...@cib.de> Reviewed-on: https://gerrit.libreoffice.org/66761 Tested-by: Thorsten Behrens <thorsten.behr...@cib.de> diff --git a/vcl/unx/kde5/KDE5FilePicker2.cxx b/vcl/unx/kde5/KDE5FilePicker2.cxx index a0bc8f1fbe1b..94f7e74bb7c9 100644 --- a/vcl/unx/kde5/KDE5FilePicker2.cxx +++ b/vcl/unx/kde5/KDE5FilePicker2.cxx @@ -46,6 +46,7 @@ #include <QtWidgets/QComboBox> #include <QtWidgets/QFileDialog> #include <QtWidgets/QGridLayout> +#include <QtWidgets/QLabel> #include <QtWidgets/QWidget> #include <QtWidgets/QApplication> #include <KFileWidget> @@ -433,7 +434,7 @@ void SAL_CALL KDE5FilePicker::enableControl(sal_Int16 controlId, sal_Bool enable if (_customWidgets.contains(controlId)) _customWidgets.value(controlId)->setEnabled(enable); else - SAL_WARN("vcl.kde5", "enable on unknown control" << controlId); + SAL_WARN("vcl.kde5", "enable on unknown control " << controlId); } void SAL_CALL KDE5FilePicker::setLabel(sal_Int16 controlId, const OUString& label) @@ -451,7 +452,7 @@ void SAL_CALL KDE5FilePicker::setLabel(sal_Int16 controlId, const OUString& labe cb->setText(toQString(label)); } else - SAL_WARN("vcl.kde5", "set label on unknown control" << controlId); + SAL_WARN("vcl.kde5", "set label on unknown control " << controlId); } OUString SAL_CALL KDE5FilePicker::getLabel(sal_Int16 controlId) @@ -470,7 +471,7 @@ OUString SAL_CALL KDE5FilePicker::getLabel(sal_Int16 controlId) label = toOUString(cb->text()); } else - SAL_WARN("vcl.kde5", "get label on unknown control" << controlId); + SAL_WARN("vcl.kde5", "get label on unknown control " << controlId); return label; } @@ -542,6 +543,9 @@ void KDE5FilePicker::addCustomControl(sal_Int16 controlId) break; } + auto resString = toQString(VclResId(resId)); + resString.replace('~', '&'); + switch (controlId) { case CHECKBOX_AUTOEXTENSION: @@ -556,8 +560,6 @@ void KDE5FilePicker::addCustomControl(sal_Int16 controlId) // the checkbox is created even for CHECKBOX_AUTOEXTENSION to simplify // code, but the checkbox is hidden and ignored bool hidden = controlId == CHECKBOX_AUTOEXTENSION; - auto resString = toQString(VclResId(resId)); - resString.replace('~', '&'); auto widget = new QCheckBox(resString, _extraControls); widget->setHidden(hidden); @@ -570,9 +572,6 @@ void KDE5FilePicker::addCustomControl(sal_Int16 controlId) break; } case PUSHBUTTON_PLAY: - case LISTBOX_VERSION: - case LISTBOX_TEMPLATE: - case LISTBOX_IMAGE_ANCHOR: case LISTBOX_VERSION_LABEL: case LISTBOX_TEMPLATE_LABEL: case LISTBOX_IMAGE_TEMPLATE_LABEL: @@ -580,11 +579,22 @@ void KDE5FilePicker::addCustomControl(sal_Int16 controlId) case LISTBOX_FILTER_SELECTOR: break; + case LISTBOX_IMAGE_ANCHOR: case LISTBOX_IMAGE_TEMPLATE: + case LISTBOX_TEMPLATE: + case LISTBOX_VERSION: + { auto widget = new QComboBox(_extraControls); - _layout->addWidget(widget); + QLabel* label = new QLabel(resString); + label->setBuddy(widget); + + QHBoxLayout* hBox = new QHBoxLayout; + hBox->addWidget(label); + hBox->addWidget(widget); + _layout->addLayout(hBox, _layout->rowCount(), 0, Qt::AlignLeft); _customListboxes.insert(controlId, widget); break; + } } } @@ -619,7 +629,7 @@ void KDE5FilePicker::handleSetListValue(QComboBox* pQComboBox, sal_Int16 nAction } break; default: - //FIXME: insert warning here + SAL_WARN("vcl.kde5", "unknown action on list control " << nAction); break; } } @@ -653,7 +663,7 @@ uno::Any KDE5FilePicker::handleGetListValue(QComboBox* pQComboBox, sal_Int16 nAc } break; default: - //FIXME: insert warning here + SAL_WARN("vcl.kde5", "unknown action on list control " << nAction); break; } return aAny; commit d688b38cf86daa72f5fb243459aba2de99d29194 Author: Katarina Behrens <katarina.behr...@cib.de> AuthorDate: Mon Jan 21 22:12:15 2019 +0100 Commit: Thorsten Behrens <thorsten.behr...@cib.de> CommitDate: Wed Jan 23 01:38:13 2019 +0100 tdf#121129: custom listboxes in kde5 fpicker, first stab for FILESAVE_AUTOEXTENSION_TEMPLATE only so far (e.g. menu Insert > Image) Change-Id: I5674025788ce9bab4094f717e2b940e7cd6891e3 Reviewed-on: https://gerrit.libreoffice.org/66705 Tested-by: Jenkins Reviewed-by: Thorsten Behrens <thorsten.behr...@cib.de> (cherry picked from commit 2d33c7cb4b4835de77194650124a1cf046920f66) Reviewed-on: https://gerrit.libreoffice.org/66760 Tested-by: Thorsten Behrens <thorsten.behr...@cib.de> diff --git a/vcl/unx/kde5/KDE5FilePicker.hxx b/vcl/unx/kde5/KDE5FilePicker.hxx index 8179170e831d..b3293b32a1b7 100644 --- a/vcl/unx/kde5/KDE5FilePicker.hxx +++ b/vcl/unx/kde5/KDE5FilePicker.hxx @@ -43,6 +43,7 @@ class QFileDialog; class QGridLayout; class QWidget; +class QComboBox; typedef ::cppu::WeakComponentImplHelper<css::ui::dialogs::XFilePicker3, css::ui::dialogs::XFilePickerControlAccess, @@ -71,6 +72,7 @@ protected: //mapping of SAL control ID's to created custom controls QHash<sal_Int16, QWidget*> _customWidgets; + QHash<sal_Int16, QWidget*> _customListboxes; //widget to contain extra custom controls QWidget* _extraControls; @@ -157,6 +159,8 @@ public: private: //add a custom control widget to the file dialog void addCustomControl(sal_Int16 controlId); + void handleSetListValue(QComboBox* pQComboBox, sal_Int16 nAction, const css::uno::Any& rValue); + css::uno::Any handleGetListValue(QComboBox* pQComboBox, sal_Int16 nAction); OUString implGetDirectory(); // emit XFilePickerListener controlStateChanged event diff --git a/vcl/unx/kde5/KDE5FilePicker2.cxx b/vcl/unx/kde5/KDE5FilePicker2.cxx index 9861ac8c503e..a0bc8f1fbe1b 100644 --- a/vcl/unx/kde5/KDE5FilePicker2.cxx +++ b/vcl/unx/kde5/KDE5FilePicker2.cxx @@ -43,6 +43,7 @@ #include <QtGui/QClipboard> #include <QtGui/QWindow> #include <QtWidgets/QCheckBox> +#include <QtWidgets/QComboBox> #include <QtWidgets/QFileDialog> #include <QtWidgets/QGridLayout> #include <QtWidgets/QWidget> @@ -376,6 +377,12 @@ void SAL_CALL KDE5FilePicker::setValue(sal_Int16 controlId, sal_Int16 nControlAc if (cb) cb->setChecked(bChecked); } + else if (_customListboxes.contains(controlId)) + { + QComboBox* cb = dynamic_cast<QComboBox*>(_customListboxes.value(controlId)); + if (cb) + handleSetListValue(cb, nControlAction, value); + } else SAL_WARN("vcl.kde5", "set value on unknown control " << controlId); } @@ -403,6 +410,12 @@ uno::Any SAL_CALL KDE5FilePicker::getValue(sal_Int16 controlId, sal_Int16 nContr if (cb) value = cb->isChecked(); } + else if (_customListboxes.contains(controlId)) + { + QComboBox* cb = dynamic_cast<QComboBox*>(_customListboxes.value(controlId)); + if (cb) + return handleGetListValue(cb, nControlAction); + } else SAL_WARN("vcl.kde5", "get value on unknown control" << controlId); @@ -559,7 +572,6 @@ void KDE5FilePicker::addCustomControl(sal_Int16 controlId) case PUSHBUTTON_PLAY: case LISTBOX_VERSION: case LISTBOX_TEMPLATE: - case LISTBOX_IMAGE_TEMPLATE: case LISTBOX_IMAGE_ANCHOR: case LISTBOX_VERSION_LABEL: case LISTBOX_TEMPLATE_LABEL: @@ -567,7 +579,84 @@ void KDE5FilePicker::addCustomControl(sal_Int16 controlId) case LISTBOX_IMAGE_ANCHOR_LABEL: case LISTBOX_FILTER_SELECTOR: break; + + case LISTBOX_IMAGE_TEMPLATE: + auto widget = new QComboBox(_extraControls); + _layout->addWidget(widget); + _customListboxes.insert(controlId, widget); + break; + } +} + +void KDE5FilePicker::handleSetListValue(QComboBox* pQComboBox, sal_Int16 nAction, + const css::uno::Any& rValue) +{ + switch (nAction) + { + case ControlActions::ADD_ITEM: + { + OUString sItem; + rValue >>= sItem; + pQComboBox->addItem(toQString(sItem)); + } + break; + case ControlActions::ADD_ITEMS: + { + Sequence<OUString> aStringList; + rValue >>= aStringList; + sal_Int32 nItemCount = aStringList.getLength(); + for (sal_Int32 i = 0; i < nItemCount; ++i) + { + pQComboBox->addItem(toQString(aStringList[i])); + } + } + break; + case ControlActions::SET_SELECT_ITEM: + { + sal_Int32 nPos = 0; + rValue >>= nPos; + pQComboBox->setCurrentIndex(nPos); + } + break; + default: + //FIXME: insert warning here + break; + } +} + +uno::Any KDE5FilePicker::handleGetListValue(QComboBox* pQComboBox, sal_Int16 nAction) +{ + uno::Any aAny; + switch (nAction) + { + case ControlActions::GET_ITEMS: + { + uno::Sequence<OUString> aItemList; + + for (int i = 0; i < pQComboBox->count(); ++i) + { + aItemList[i] = toOUString(pQComboBox->itemText(i)); + } + aAny <<= aItemList; + } + break; + case ControlActions::GET_SELECTED_ITEM: + { + OUString sItem = toOUString(pQComboBox->currentText()); + aAny <<= sItem; + } + break; + case ControlActions::GET_SELECTED_ITEM_INDEX: + { + int nCurrent = pQComboBox->currentIndex(); + aAny <<= nCurrent; + } + break; + default: + //FIXME: insert warning here + break; } + return aAny; } OUString KDE5FilePicker::implGetDirectory() _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits