Skip to content

Commit

Permalink
feat: support add custom widgets to deepin file chooser dialog
Browse files Browse the repository at this point in the history
Change-Id: I75e246c57eab95e5f3ffa64cc20a37717600b431
  • Loading branch information
zccrs committed Mar 1, 2018
1 parent 3cc29bb commit 63caf8f
Show file tree
Hide file tree
Showing 3 changed files with 62 additions and 0 deletions.
40 changes: 40 additions & 0 deletions platformthemeplugin/qdeepinfiledialoghelper.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,28 @@ DFileDialogManager *QDeepinFileDialogHelper::manager = Q_NULLPTR;

QDeepinFileDialogHelper::QDeepinFileDialogHelper()
{
connect(this, &QDeepinFileDialogHelper::accept, this, [this] {
if (sourceDialog && nativeDialog) {
const QMap<QString, QVariant> &map_lineedit = nativeDialog->allCustomWidgetsValue(LineEditType);
const QMap<QString, QVariant> &map_combobox = nativeDialog->allCustomWidgetsValue(ComboBoxType);

auto map_eidt_begin = map_lineedit.constBegin();

while (map_eidt_begin != map_lineedit.constEnd()) {
sourceDialog->setProperty(QString("_dtk_widget_lineedit_%1_value").arg(map_eidt_begin.key()).toUtf8(),
map_eidt_begin.value());
++map_eidt_begin;
}

auto map_combobox_begion = map_combobox.constBegin();

while (map_combobox_begion != map_combobox.constEnd()) {
sourceDialog->setProperty(QString("_dtk_widget_combobox_%1_value").arg(map_combobox_begion.key()).toUtf8(),
map_combobox_begion.value());
++map_combobox_begion;
}
}
});
}

QDeepinFileDialogHelper::~QDeepinFileDialogHelper()
Expand Down Expand Up @@ -383,6 +404,25 @@ void QDeepinFileDialogHelper::applyOptions()
selectFile(filename);

selectNameFilter(options->initiallySelectedNameFilter());

if (!sourceDialog) {
sourceDialog = reinterpret_cast<QFileDialog*>(qvariant_cast<quintptr>(property("_dtk_widget_QFileDialog")));

if (sourceDialog && nativeDialog) {
const QStringList lineedit_list = sourceDialog->property("_dtk_widget_custom_lineedit_list").toStringList();
const QStringList combobox_list = sourceDialog->property("_dtk_widget_custom_combobox_list").toStringList();

nativeDialog->beginAddCustomWidget();

for (const QString &i : lineedit_list)
nativeDialog->addCustomWidget(LineEditType, i);

for (const QString &i : combobox_list)
nativeDialog->addCustomWidget(ComboBoxType, i);

nativeDialog->endAddCustomWidget();
}
}
}

QT_END_NAMESPACE
6 changes: 6 additions & 0 deletions platformthemeplugin/qdeepinfiledialoghelper.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,11 @@ typedef ComDeepinFilemanagerFiledialogmanagerInterface DFileDialogManager;
class QDeepinFileDialogHelper : public QPlatformFileDialogHelper
{
public:
enum CustomWidgetType {
LineEditType = 0,
ComboBoxType = 1
};

QDeepinFileDialogHelper();
~QDeepinFileDialogHelper();

Expand All @@ -55,6 +60,7 @@ class QDeepinFileDialogHelper : public QPlatformFileDialogHelper
mutable QPointer<QWindow> auxiliaryWindow;
mutable QPointer<QFileDialog> qtDialog;
QPointer<QWindow> activeWindow;
QPointer<QFileDialog> sourceDialog;
static DFileDialogManager *manager;

void ensureDialog() const;
Expand Down
16 changes: 16 additions & 0 deletions platformthemeplugin/xmls/com.deepin.filemanager.filedialog.xml
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,22 @@
<method name="deleteLater"></method>
<method name="activateWindow"></method>
<method name="makeHeartbeat"></method>
<method name="addCustomWidget">
<arg name="type" type="i" direction="in"/>
<arg name="data" type="s" direction="in"/>
</method>
<method name="getCustomWidgetValue">
<arg name="type" type="i" direction="in"/>
<arg name="text" type="s" direction="in"/>
<arg name="value" type="v" direction="out"/>
</method>
<method name="allCustomWidgetsValue">
<arg name="type" type="i" direction="in"/>
<arg name="values" type="a{sv}" direction="out"/>
<annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="QMap&lt;QString,QVariant&gt;"/>
</method>
<method name="beginAddCustomWidget"></method>
<method name="endAddCustomWidget"></method>
<signal name="finished">
<arg name="result" type="i" direction="out"/>
</signal>
Expand Down

0 comments on commit 63caf8f

Please sign in to comment.