8#include <QtCore/qloggingcategory.h>
9#include <QtGui/private/qguiapplication_p.h>
10#include <QtGui/qpa/qplatformtheme.h>
11#include <QtQml/qqmlinfo.h>
12#include <QtQml/qqmlfile.h>
13#include <QtQuick/private/qquickitemview_p_p.h>
14#include <QtQuickTemplates2/private/qquickdialogbuttonbox_p_p.h>
15#include <QtQuickTemplates2/private/qquickpopupitem_p_p.h>
16#include <QtQuickControls2Impl/private/qquickplatformtheme_p.h>
17#include <QtQuickDialogs2Utils/private/qquickfilenamefilter_p.h>
25Q_STATIC_LOGGING_CATEGORY(lcCurrentFolder,
"qt.quick.dialogs.quickfiledialogimpl.currentFolder")
26Q_STATIC_LOGGING_CATEGORY(lcSelectedFile,
"qt.quick.dialogs.quickfiledialogimpl.selectedFile")
27Q_STATIC_LOGGING_CATEGORY(lcUpdateSelectedFile,
"qt.quick.dialogs.quickfiledialogimpl.updateSelectedFile")
28Q_STATIC_LOGGING_CATEGORY(lcOptions,
"qt.quick.dialogs.quickfiledialogimpl.options")
29Q_STATIC_LOGGING_CATEGORY(lcNameFilters,
"qt.quick.dialogs.quickfiledialogimpl.namefilters")
30Q_STATIC_LOGGING_CATEGORY(lcAttachedNameFilters,
"qt.quick.dialogs.quickfiledialogimplattached.namefilters")
31Q_STATIC_LOGGING_CATEGORY(lcAttachedCurrentIndex,
"qt.quick.dialogs.quickfiledialogimplattached.currentIndex")
33QQuickFileDialogImplPrivate::QQuickFileDialogImplPrivate()
37void QQuickFileDialogImplPrivate::setNameFilters(
const QStringList &filters)
39 Q_Q(QQuickFileDialogImpl);
40 if (filters == nameFilters)
43 nameFilters = filters;
44 emit q->nameFiltersChanged();
47void QQuickFileDialogImplPrivate::updateEnabled()
49 Q_Q(QQuickFileDialogImpl);
50 QQuickFileDialogImplAttached *attached = attachedOrWarn();
54 auto openButton = attached->buttonBox()->standardButton(QPlatformDialogHelper::Open);
56 qmlWarning(q).nospace() <<
"Can't update Open button's enabled state because it wasn't found";
60 openButton->setEnabled(!selectedFile.isEmpty() && attached->breadcrumbBar()
61 && !attached->breadcrumbBar()->textField()->isVisible());
65
66
67
68
69
70
71void QQuickFileDialogImplPrivate::updateSelectedFile(
const QString &oldFolderPath)
73 Q_Q(QQuickFileDialogImpl);
74 QQuickFileDialogImplAttached *attached = attachedOrWarn();
75 if (!attached || !attached->fileDialogListView())
78 qCDebug(lcUpdateSelectedFile) <<
"updateSelectedFile called with oldFolderPath" << oldFolderPath;
80 QString newSelectedFilePath;
81 int newSelectedFileIndex = -1;
82 const QString newFolderPath = QQmlFile::urlToLocalFileOrQrc(currentFolder);
83 if (!oldFolderPath.isEmpty() && !newFolderPath.isEmpty()) {
91 const int indexOfFolder = oldFolderPath.indexOf(newFolderPath);
92 if (indexOfFolder != -1) {
97 QStringList relativePaths = oldFolderPath.mid(indexOfFolder + newFolderPath.size()).split(QLatin1Char(
'/'), Qt::SkipEmptyParts);
98 newSelectedFilePath = newFolderPath + QLatin1Char(
'/') + relativePaths.first();
101 const QDir newFolderDir(newFolderPath);
103 if (!newFolderDir.exists()) {
104 qmlWarning(q) <<
"Directory" << newSelectedFilePath <<
"doesn't exist; can't get a file entry list for it";
108 const QFileInfoList filesInNewDir = fileList(newFolderDir);
109 const QFileInfo newSelectedFileInfo(newSelectedFilePath);
110 newSelectedFileIndex = filesInNewDir.indexOf(newSelectedFileInfo);
114 static const bool preselectFirstFile = []() {
115 const QVariant envVar = qEnvironmentVariable(
"QT_QUICK_DIALOGS_PRESELECT_FIRST_FILE");
116 if (envVar.isValid() && envVar.canConvert<
bool>())
117 return envVar.toBool();
118 return QGuiApplicationPrivate::platformTheme()->themeHint(
119 QPlatformTheme::PreselectFirstFileInDirectory).toBool();
122 if (preselectFirstFile && newSelectedFilePath.isEmpty()) {
129 const QDir newFolderDir(newFolderPath);
130 if (newFolderDir.exists()) {
131 if (!cachedFileList.isEmpty()) {
132 newSelectedFilePath = cachedFileList.first().absoluteFilePath();
133 newSelectedFileIndex = 0;
138 const QUrl newSelectedFileUrl = QUrl::fromLocalFile(newSelectedFilePath);
139 qCDebug(lcUpdateSelectedFile).nospace() <<
"updateSelectedFile is setting selectedFile to " << newSelectedFileUrl
140 <<
", newSelectedFileIndex is " << newSelectedFileIndex;
141 q->setSelectedFile(newSelectedFileUrl);
142 updateFileNameTextEdit();
145 if (newSelectedFileIndex != -1)
146 tryUpdateFileDialogListViewCurrentIndex(newSelectedFileIndex);
149void QQuickFileDialogImplPrivate::updateFileNameTextEdit()
151 QQuickFileDialogImplAttached *attached = attachedOrWarn();
152 if (Q_UNLIKELY(!attached))
155 const QFileInfo fileInfo(selectedFile.toLocalFile());
156 if (fileInfo.isFile())
157 attached->fileNameTextField()->setText(fileInfo.fileName());
160QDir::SortFlags QQuickFileDialogImplPrivate::fileListSortFlags()
162 QDir::SortFlags sortFlags = QDir::IgnoreCase;
163 if (QQuickPlatformTheme::getThemeHint(QPlatformTheme::ShowDirectoriesFirst).toBool())
164 sortFlags.setFlag(QDir::DirsFirst);
168QFileInfoList QQuickFileDialogImplPrivate::fileList(
const QDir &dir)
170 return dir.entryInfoList(QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot, fileListSortFlags());
173void QQuickFileDialogImplPrivate::setFileDialogListViewCurrentIndex(
int newCurrentIndex)
175 qCDebug(lcSelectedFile) <<
"setting fileDialogListView's currentIndex to" << newCurrentIndex;
180 QQuickFileDialogImplAttached *attached = attachedOrWarn();
181 const QSignalBlocker blocker(attached->fileDialogListView());
182 attached->fileDialogListView()->setCurrentIndex(newCurrentIndex);
183 attached->fileDialogListView()->positionViewAtIndex(newCurrentIndex, QQuickListView::Center);
184 if (QQuickItem *currentItem = attached->fileDialogListView()->currentItem())
185 currentItem->forceActiveFocus();
189
190
191
192
193
194void QQuickFileDialogImplPrivate::tryUpdateFileDialogListViewCurrentIndex(
int newCurrentIndex)
196 qCDebug(lcSelectedFile) <<
"tryUpdateFileDialogListViewCurrentIndex called with newCurrentIndex" << newCurrentIndex;
197 QQuickFileDialogImplAttached *attached = attachedOrWarn();
199 Q_ASSERT(attached->fileDialogListView());
204 if (newCurrentIndex != -1 && newCurrentIndex >= attached->fileDialogListView()->count()) {
205 qCDebug(lcSelectedFile) <<
"- trying to set currentIndex to" << newCurrentIndex
206 <<
"but fileDialogListView only has" << attached->fileDialogListView()->count()
207 <<
"items; setting pendingCurrentIndexToSet to" << newCurrentIndex;
208 pendingCurrentIndexToSet = newCurrentIndex;
209 QObjectPrivate::connect(attached->fileDialogListView(), &QQuickItemView::countChanged,
210 this, &QQuickFileDialogImplPrivate::fileDialogListViewCountChanged, Qt::ConnectionType(Qt::DirectConnection | Qt::UniqueConnection));
214 setFileDialogListViewCurrentIndex(newCurrentIndex);
217void QQuickFileDialogImplPrivate::fileDialogListViewCountChanged()
219 QQuickFileDialogImplAttached *attached = attachedOrWarn();
220 qCDebug(lcSelectedFile) <<
"fileDialogListView count changed to" << attached->fileDialogListView()->count();
222 if (pendingCurrentIndexToSet != -1 && pendingCurrentIndexToSet < attached->fileDialogListView()->count()) {
225 qCDebug(lcSelectedFile) <<
"- ListView has expected count;"
226 <<
"applying pending fileDialogListView currentIndex" << pendingCurrentIndexToSet;
228 QObjectPrivate::disconnect(attached->fileDialogListView(), &QQuickItemView::countChanged,
229 this, &QQuickFileDialogImplPrivate::fileDialogListViewCountChanged);
230 setFileDialogListViewCurrentIndex(pendingCurrentIndexToSet);
231 pendingCurrentIndexToSet = -1;
232 qCDebug(lcSelectedFile) <<
"- reset pendingCurrentIndexToSet to -1";
234 qCDebug(lcSelectedFile) <<
"- ListView doesn't yet have expected count of" << cachedFileList.size();
238void QQuickFileDialogImplPrivate::handleAccept()
243void QQuickFileDialogImplPrivate::handleClick(QQuickAbstractButton *button)
245 Q_Q(QQuickFileDialogImpl);
246 if (buttonRole(button) == QPlatformDialogHelper::AcceptRole && selectedFile.isValid()) {
248 const QFileInfo fileInfo(selectedFile.toLocalFile());
249 if (fileInfo.isDir()) {
251 q->setCurrentFolder(selectedFile);
256 lastButtonClicked = button;
259 const bool dontConfirmOverride = q->options()->testOption(QFileDialogOptions::DontConfirmOverwrite);
260 const bool isSaveMode = q->options()->fileMode() == QFileDialogOptions::AnyFile;
261 if (QQuickFileDialogImplAttached *attached = attachedOrWarn();
262 attached && fileInfo.exists() && isSaveMode && !dontConfirmOverride) {
263 QQuickDialog *confirmationDialog = attached->overwriteConfirmationDialog();
264 confirmationDialog->open();
265 static_cast<QQuickDialogButtonBox *>(confirmationDialog->footer())->standardButton(QPlatformDialogHelper::Yes)
266 ->forceActiveFocus(Qt::PopupFocusReason);
274void QQuickFileDialogImplPrivate::selectFile()
276 Q_Q(QQuickFileDialogImpl);
277 Q_ASSERT(lastButtonClicked);
278 q->setSelectedFile(selectedFile);
280 QQuickDialogPrivate::handleClick(lastButtonClicked);
281 emit q->fileSelected(selectedFile);
284QQuickFileDialogImpl::QQuickFileDialogImpl(QObject *parent)
285 : QQuickDialog(*(
new QQuickFileDialogImplPrivate), parent)
289QQuickFileDialogImplAttached *QQuickFileDialogImpl::qmlAttachedProperties(QObject *object)
291 return new QQuickFileDialogImplAttached(object);
294QUrl QQuickFileDialogImpl::currentFolder()
const
296 Q_D(
const QQuickFileDialogImpl);
297 return d->currentFolder;
300void QQuickFileDialogImpl::setCurrentFolder(
const QUrl ¤tFolder, SetReason setReason)
302 Q_D(QQuickFileDialogImpl);
303 qCDebug(lcCurrentFolder).nospace() <<
"setCurrentFolder called with " << currentFolder
304 <<
" (old currentFolder is " << d->currentFolder <<
")";
310 if (!currentFolder.isEmpty())
311 d->cachedFileList = d->fileList(QQmlFile::urlToLocalFileOrQrc(currentFolder));
313 d->cachedFileList.clear();
314 qCDebug(lcCurrentFolder) <<
"- cachedFileList size is now " << d->cachedFileList.size();
316 if (currentFolder == d->currentFolder)
319 const QString oldFolderPath = QQmlFile::urlToLocalFileOrQrc(d->currentFolder);
321 d->currentFolder = currentFolder;
324 if (setReason == SetReason::External) {
326 d->updateSelectedFile(oldFolderPath);
328 emit currentFolderChanged(d->currentFolder);
331QUrl QQuickFileDialogImpl::selectedFile()
const
333 Q_D(
const QQuickFileDialogImpl);
334 return d->selectedFile;
338
339
340
341
342
343
344void QQuickFileDialogImpl::setSelectedFile(
const QUrl &selectedFile)
346 qCDebug(lcSelectedFile) <<
"setSelectedFile called with" << selectedFile;
347 Q_D(QQuickFileDialogImpl);
348 if (selectedFile == d->selectedFile)
351 d->selectedFile = selectedFile;
353 emit selectedFileChanged(d->selectedFile);
357
358
359
360
361
362void QQuickFileDialogImpl::setInitialCurrentFolderAndSelectedFile(
const QUrl &file)
364 Q_D(QQuickFileDialogImpl);
365 const QUrl fileDirUrl = QUrl::fromLocalFile(QFileInfo(file.toLocalFile()).dir().absolutePath());
366 const bool currentFolderChanged = d->currentFolder != fileDirUrl;
367 qCDebug(lcSelectedFile) <<
"setting initial currentFolder to" << fileDirUrl <<
"and selectedFile to" << file;
368 setCurrentFolder(fileDirUrl, QQuickFileDialogImpl::SetReason::Internal);
369 setSelectedFile(file);
370 d->updateFileNameTextEdit();
371 d->setCurrentIndexToInitiallySelectedFile =
true;
373 bool isListViewCurrentIndexNegative =
false;
374 if (
const auto *attached = d->attachedOrWarn())
375 isListViewCurrentIndexNegative = attached->fileDialogListView()->currentIndex() < 0;
381 if (!currentFolderChanged || isListViewCurrentIndexNegative) {
382 const QFileInfo newSelectedFileInfo(d->selectedFile.toLocalFile());
383 const int indexOfSelectedFileInFileDialogListView = d->cachedFileList.indexOf(newSelectedFileInfo);
384 d->tryUpdateFileDialogListViewCurrentIndex(indexOfSelectedFileInFileDialogListView);
388QSharedPointer<QFileDialogOptions> QQuickFileDialogImpl::options()
const
390 Q_D(
const QQuickFileDialogImpl);
394void QQuickFileDialogImpl::setOptions(
const QSharedPointer<QFileDialogOptions> &options)
396 qCDebug(lcOptions).nospace() <<
"setOptions called with:"
397 <<
" acceptMode=" << options->acceptMode()
398 <<
" fileMode=" << options->fileMode()
399 <<
" initialDirectory=" << options->initialDirectory()
400 <<
" nameFilters=" << options->nameFilters()
401 <<
" initiallySelectedNameFilter=" << options->initiallySelectedNameFilter();
403 Q_D(QQuickFileDialogImpl);
404 d->options = options;
407 d->selectedNameFilter->setOptions(options);
408 d->setNameFilters(options->nameFilters());
410 if (
auto attached = d->attachedOrWarn()) {
411 const bool isSaveMode = d->options->fileMode() == QFileDialogOptions::AnyFile;
412 attached->fileNameLabel()->setVisible(isSaveMode);
413 attached->fileNameTextField()->setVisible(isSaveMode);
419
420
421
422
423QStringList QQuickFileDialogImpl::nameFilters()
const
425 Q_D(
const QQuickFileDialogImpl);
426 return d->options ? d->options->nameFilters() : QStringList();
429void QQuickFileDialogImpl::resetNameFilters()
431 Q_D(QQuickFileDialogImpl);
432 d->setNameFilters(QStringList());
435QQuickFileNameFilter *QQuickFileDialogImpl::selectedNameFilter()
const
437 Q_D(
const QQuickFileDialogImpl);
438 if (!d->selectedNameFilter) {
439 QQuickFileDialogImpl *that =
const_cast<QQuickFileDialogImpl *>(
this);
440 d->selectedNameFilter =
new QQuickFileNameFilter(that);
442 d->selectedNameFilter->setOptions(d->options);
444 return d->selectedNameFilter;
448
449
450
451
452
453
454void QQuickFileDialogImpl::setAcceptLabel(
const QString &label)
456 Q_D(QQuickFileDialogImpl);
457 d->acceptLabel = label;
458 QQuickFileDialogImplAttached *attached = d->attachedOrWarn();
462 auto acceptButton = attached->buttonBox()->standardButton(QPlatformDialogHelper::Open);
464 qmlWarning(
this).nospace() <<
"Can't set accept label to " << label
465 <<
"; failed to find Open button in DialogButtonBox of " <<
this;
469 auto buttonType = (d->options && d->options->acceptMode() == QFileDialogOptions::AcceptSave)
470 ? QPlatformDialogHelper::Save
471 : QPlatformDialogHelper::Open;
472 acceptButton->setText(!label.isEmpty()
473 ? label : QQuickDialogButtonBoxPrivate::buttonText(buttonType));
476void QQuickFileDialogImpl::setRejectLabel(
const QString &label)
478 Q_D(QQuickFileDialogImpl);
479 d->rejectLabel = label;
480 QQuickFileDialogImplAttached *attached = d->attachedOrWarn();
484 auto rejectButton = attached->buttonBox()->standardButton(QPlatformDialogHelper::Cancel);
486 qmlWarning(
this).nospace() <<
"Can't set reject label to " << label
487 <<
"; failed to find Open button in DialogButtonBox of " <<
this;
491 rejectButton->setText(!label.isEmpty()
492 ? label : QQuickDialogButtonBoxPrivate::buttonText(QPlatformDialogHelper::Cancel));
495void QQuickFileDialogImpl::selectNameFilter(
const QString &filter)
497 qCDebug(lcNameFilters) <<
"selectNameFilter called with" << filter;
498 Q_D(QQuickFileDialogImpl);
499 d->selectedNameFilter->update(filter);
500 emit filterSelected(filter);
503QString QQuickFileDialogImpl::fileName()
const
505 return selectedFile().fileName();
507void QQuickFileDialogImpl::setFileName(
const QString &fileName)
509 const QString previous = selectedFile().fileName();
510 if (previous == fileName)
513 QUrl newSelectedFile;
514 newSelectedFile.setScheme(currentFolder().scheme());
515 newSelectedFile.setPath(currentFolder().path() + u'/' + fileName);
516 setSelectedFile(newSelectedFile);
519QString QQuickFileDialogImpl::currentFolderName()
const
521 return QDir(currentFolder().toLocalFile()).dirName();
524void QQuickFileDialogImpl::componentComplete()
526 Q_D(QQuickFileDialogImpl);
527 QQuickDialog::componentComplete();
533 QQuickFileDialogImplAttached *attached = d->attachedOrWarn();
537 const int buttonCount = attached->buttonBox()->count();
538 if (buttonCount == 0)
541 QQuickAbstractButton *rightMostButton = qobject_cast<QQuickAbstractButton *>(
542 attached->buttonBox()->itemAt(buttonCount - 1));
543 if (!rightMostButton) {
544 qmlWarning(
this) <<
"Can't find right-most button in DialogButtonBox";
548 auto keyNavigationAttached = QQuickKeyNavigationAttached::qmlAttachedProperties(rightMostButton);
549 if (!keyNavigationAttached) {
550 qmlWarning(
this) <<
"Can't create attached KeyNavigation object on" << QDebug::toString(rightMostButton);
554 keyNavigationAttached->setTab(attached->breadcrumbBar()->upButton());
557void QQuickFileDialogImpl::itemChange(QQuickItem::ItemChange change,
const QQuickItem::ItemChangeData &data)
559 Q_D(QQuickFileDialogImpl);
560 QQuickDialog::itemChange(change, data);
562 if (change != QQuickItem::ItemVisibleHasChanged || !isComponentComplete() || !data.boolValue)
565 QQuickFileDialogImplAttached *attached = d->attachedOrWarn();
569 attached->fileDialogListView()->forceActiveFocus();
573QQuickFileDialogImplAttached *QQuickFileDialogImplPrivate::attachedOrWarn()
575 Q_Q(QQuickFileDialogImpl);
576 QQuickFileDialogImplAttached *attached =
static_cast<QQuickFileDialogImplAttached*>(
577 qmlAttachedPropertiesObject<QQuickFileDialogImpl>(q,
false));
579 qmlWarning(q) <<
"Expected FileDialogImpl attached object to be present on" <<
this;
585 qCDebug(lcAttachedNameFilters) <<
"nameFiltersComboBoxItemActivated called with" << index;
586 auto fileDialogImpl = qobject_cast<QQuickFileDialogImpl*>(parent);
590 fileDialogImpl->selectNameFilter(nameFiltersComboBox->textAt(index));
595 auto fileDialogImpl = qobject_cast<QQuickFileDialogImpl*>(parent);
599 auto fileDialogDelegate = qobject_cast<QQuickFileDialogDelegate*>(fileDialogListView->currentItem());
600 if (!fileDialogDelegate)
603 const QQuickItemViewPrivate::MovementReason moveReason = QQuickItemViewPrivate::get(fileDialogListView)->moveReason;
604 qCDebug(lcAttachedCurrentIndex).nospace() <<
"fileDialogListView currentIndex changed to " << fileDialogListView->currentIndex()
605 <<
" with moveReason " << moveReason
606 <<
"; the file at that index is " << fileDialogDelegate->file();
612 auto fileDialogImplPrivate = QQuickFileDialogImplPrivate::get(fileDialogImpl);
613 if (moveReason != QQuickItemViewPrivate::Other) {
614 fileDialogImpl->setSelectedFile(fileDialogDelegate->file());
615 fileDialogImplPrivate->updateFileNameTextEdit();
616 }
else if (fileDialogImplPrivate->setCurrentIndexToInitiallySelectedFile) {
621 const QFileInfo newSelectedFileInfo(fileDialogImplPrivate->selectedFile.toLocalFile());
622 const int indexOfSelectedFileInFileDialogListView = fileDialogImplPrivate->cachedFileList.indexOf(newSelectedFileInfo);
623 fileDialogImplPrivate->tryUpdateFileDialogListViewCurrentIndex(indexOfSelectedFileInFileDialogListView);
624 fileDialogImplPrivate->setCurrentIndexToInitiallySelectedFile =
false;
632 auto openButton = buttonBox->standardButton(QPlatformDialogHelper::Open);
633 if (!openButton || !fileNameTextField)
635 openButton->setEnabled(!fileNameTextField->text().isEmpty());
640 auto fileDialogImpl = qobject_cast<QQuickFileDialogImpl *>(parent);
644 fileDialogImpl->setFileName(fileNameTextField->text());
647QQuickFileDialogImplAttached::QQuickFileDialogImplAttached(QObject *parent)
648 : QObject(*(
new QQuickFileDialogImplAttachedPrivate), parent)
650 if (!qobject_cast<QQuickFileDialogImpl*>(parent)) {
651 qmlWarning(
this) <<
"FileDialogImpl attached properties should only be "
652 <<
"accessed through the root FileDialogImpl instance";
656QQuickDialogButtonBox *QQuickFileDialogImplAttached::buttonBox()
const
658 Q_D(
const QQuickFileDialogImplAttached);
662void QQuickFileDialogImplAttached::setButtonBox(QQuickDialogButtonBox *buttonBox)
664 Q_D(QQuickFileDialogImplAttached);
665 if (buttonBox == d->buttonBox)
669 QQuickFileDialogImpl *fileDialogImpl = qobject_cast<QQuickFileDialogImpl*>(parent());
670 if (fileDialogImpl) {
671 auto dialogPrivate = QQuickDialogPrivate::get(fileDialogImpl);
672 QObjectPrivate::disconnect(d->buttonBox, &QQuickDialogButtonBox::accepted,
673 dialogPrivate, &QQuickDialogPrivate::handleAccept);
674 QObjectPrivate::disconnect(d->buttonBox, &QQuickDialogButtonBox::rejected,
675 dialogPrivate, &QQuickDialogPrivate::handleReject);
676 QObjectPrivate::disconnect(d->buttonBox, &QQuickDialogButtonBox::clicked,
677 dialogPrivate, &QQuickDialogPrivate::handleClick);
681 d->buttonBox = buttonBox;
684 QQuickFileDialogImpl *fileDialogImpl = qobject_cast<QQuickFileDialogImpl*>(parent());
685 if (fileDialogImpl) {
686 auto dialogPrivate = QQuickDialogPrivate::get(fileDialogImpl);
687 QObjectPrivate::connect(d->buttonBox, &QQuickDialogButtonBox::accepted,
688 dialogPrivate, &QQuickDialogPrivate::handleAccept);
689 QObjectPrivate::connect(d->buttonBox, &QQuickDialogButtonBox::rejected,
690 dialogPrivate, &QQuickDialogPrivate::handleReject);
691 QObjectPrivate::connect(d->buttonBox, &QQuickDialogButtonBox::clicked,
692 dialogPrivate, &QQuickDialogPrivate::handleClick);
696 emit buttonBoxChanged();
699QQuickComboBox *QQuickFileDialogImplAttached::nameFiltersComboBox()
const
701 Q_D(
const QQuickFileDialogImplAttached);
702 return d->nameFiltersComboBox;
705void QQuickFileDialogImplAttached::setNameFiltersComboBox(QQuickComboBox *nameFiltersComboBox)
707 Q_D(QQuickFileDialogImplAttached);
708 if (nameFiltersComboBox == d->nameFiltersComboBox)
711 d->nameFiltersComboBox = nameFiltersComboBox;
713 QObjectPrivate::connect(d->nameFiltersComboBox, &QQuickComboBox::activated,
714 d, &QQuickFileDialogImplAttachedPrivate::nameFiltersComboBoxItemActivated);
716 emit nameFiltersComboBoxChanged();
719QString QQuickFileDialogImplAttached::selectedNameFilter()
const
721 Q_D(
const QQuickFileDialogImplAttached);
722 return d->nameFiltersComboBox ? d->nameFiltersComboBox->currentText() : QString();
725void QQuickFileDialogImplAttached::selectNameFilter(
const QString &filter)
727 Q_D(QQuickFileDialogImplAttached);
728 qCDebug(lcAttachedNameFilters) <<
"selectNameFilter called with" << filter;
729 if (!d->nameFiltersComboBox)
732 const int indexInComboBox = d->nameFiltersComboBox->find(filter);
733 if (indexInComboBox == -1)
736 qCDebug(lcAttachedNameFilters) <<
"setting ComboBox's currentIndex to" << indexInComboBox;
737 d->nameFiltersComboBox->setCurrentIndex(indexInComboBox);
740QQuickListView *QQuickFileDialogImplAttached::fileDialogListView()
const
742 Q_D(
const QQuickFileDialogImplAttached);
743 return d->fileDialogListView;
746void QQuickFileDialogImplAttached::setFileDialogListView(QQuickListView *fileDialogListView)
748 Q_D(QQuickFileDialogImplAttached);
749 if (fileDialogListView == d->fileDialogListView)
752 if (d->fileDialogListView)
753 QObjectPrivate::disconnect(d->fileDialogListView, &QQuickListView::currentIndexChanged,
754 d, &QQuickFileDialogImplAttachedPrivate::fileDialogListViewCurrentIndexChanged);
756 d->fileDialogListView = fileDialogListView;
758 if (d->fileDialogListView)
759 QObjectPrivate::connect(d->fileDialogListView, &QQuickListView::currentIndexChanged,
760 d, &QQuickFileDialogImplAttachedPrivate::fileDialogListViewCurrentIndexChanged);
762 emit fileDialogListViewChanged();
765QQuickFolderBreadcrumbBar *QQuickFileDialogImplAttached::breadcrumbBar()
const
767 Q_D(
const QQuickFileDialogImplAttached);
768 return d->breadcrumbBar;
771void QQuickFileDialogImplAttached::setBreadcrumbBar(QQuickFolderBreadcrumbBar *breadcrumbBar)
773 Q_D(QQuickFileDialogImplAttached);
774 if (breadcrumbBar == d->breadcrumbBar)
777 d->breadcrumbBar = breadcrumbBar;
778 emit breadcrumbBarChanged();
781QQuickLabel *QQuickFileDialogImplAttached::fileNameLabel()
const
783 Q_D(
const QQuickFileDialogImplAttached);
784 return d->fileNameLabel;
787void QQuickFileDialogImplAttached::setFileNameLabel(QQuickLabel *fileNameLabel)
789 Q_D(QQuickFileDialogImplAttached);
790 if (fileNameLabel == d->fileNameLabel)
793 d->fileNameLabel = fileNameLabel;
795 emit fileNameLabelChanged();
798QQuickTextField *QQuickFileDialogImplAttached::fileNameTextField()
const
800 Q_D(
const QQuickFileDialogImplAttached);
801 return d->fileNameTextField;
804void QQuickFileDialogImplAttached::setFileNameTextField(QQuickTextField *fileNameTextField)
806 Q_D(QQuickFileDialogImplAttached);
807 if (fileNameTextField == d->fileNameTextField)
810 if (d->fileNameTextField) {
811 QObjectPrivate::disconnect(d->fileNameTextField, &QQuickTextField::editingFinished,
812 d, &QQuickFileDialogImplAttachedPrivate::fileNameEditingByUserFinished);
813 QObjectPrivate::disconnect(d->fileNameTextField, &QQuickTextField::textEdited,
814 d, &QQuickFileDialogImplAttachedPrivate::fileNameEditedByUser);
817 d->fileNameTextField = fileNameTextField;
819 if (d->fileNameTextField) {
820 QObjectPrivate::connect(d->fileNameTextField, &QQuickTextField::editingFinished,
821 d, &QQuickFileDialogImplAttachedPrivate::fileNameEditingByUserFinished);
822 QObjectPrivate::connect(d->fileNameTextField, &QQuickTextField::textEdited,
823 d, &QQuickFileDialogImplAttachedPrivate::fileNameEditedByUser);
825 emit fileNameTextFieldChanged();
828QQuickDialog *QQuickFileDialogImplAttached::overwriteConfirmationDialog()
const
830 Q_D(
const QQuickFileDialogImplAttached);
831 return d->overwriteConfirmationDialog;
834void QQuickFileDialogImplAttached::setOverwriteConfirmationDialog(QQuickDialog *dialog)
836 Q_D(QQuickFileDialogImplAttached);
837 if (dialog == d->overwriteConfirmationDialog)
840 QQuickFileDialogImpl *fileDialogImpl = qobject_cast<QQuickFileDialogImpl*>(parent());
841 if (d->overwriteConfirmationDialog && fileDialogImpl)
842 QObjectPrivate::disconnect(d->overwriteConfirmationDialog, &QQuickDialog::accepted,
843 QQuickFileDialogImplPrivate::get(fileDialogImpl), &QQuickFileDialogImplPrivate::selectFile);
845 d->overwriteConfirmationDialog = dialog;
847 if (d->overwriteConfirmationDialog && fileDialogImpl)
848 QObjectPrivate::connect(d->overwriteConfirmationDialog, &QQuickDialog::accepted,
849 QQuickFileDialogImplPrivate::get(fileDialogImpl), &QQuickFileDialogImplPrivate::selectFile, Qt::QueuedConnection);
851 emit overwriteConfirmationDialogChanged();
854QQuickSideBar *QQuickFileDialogImplAttached::sideBar()
const
856 Q_D(
const QQuickFileDialogImplAttached);
860void QQuickFileDialogImplAttached::setSideBar(QQuickSideBar *sideBar)
862 Q_D(QQuickFileDialogImplAttached);
863 if (sideBar == d->sideBar)
866 d->sideBar = sideBar;
868 emit sideBarChanged();
873#include "moc_qquickfiledialogimpl_p.cpp"