4#ifndef QWINDOWSDIALOGHELPER_H
5#define QWINDOWSDIALOGHELPER_H
7#include <QtCore/qt_windows.h>
8#include <qpa/qplatformdialoghelper.h>
9#include <qpa/qplatformtheme.h>
10#include <QtCore/qbasictimer.h>
11#include <QtCore/qstringlist.h>
12#include <QtCore/qsharedpointer.h>
25 bool useHelper(QPlatformTheme::DialogType type);
26 QPlatformDialogHelper *createHelper(QPlatformTheme::DialogType type);
29template <
class BaseClass>
38 bool show(Qt::WindowFlags windowFlags,
39 Qt::WindowModality windowModality,
40 QWindow *parent)
override;
54 inline void startDialogThread();
55 inline void stopTimer();
58 QWindowsNativeDialogBasePtr m_nativeDialog;
59 HWND m_ownerWindow =
nullptr;
61 QThread *m_thread =
nullptr;
Helper for native Windows dialogs.
bool show(Qt::WindowFlags windowFlags, Qt::WindowModality windowModality, QWindow *parent) override
virtual bool supportsNonModalDialog(const QWindow *=nullptr) const
void timerEvent(QTimerEvent *) override
virtual QWindowsNativeDialogBase * createNativeDialog()=0
bool hasNativeDialog() const
~QWindowsDialogHelperBase()
QWindowsDialogHelperBase()=default
QWindowsNativeDialogBase * nativeDialog() const
Run a non-modal native dialog in a separate thread.
QWindowsDialogThread(const QWindowsNativeDialogBasePtr &d, HWND owner)
Helper for native Windows file dialogs.
QWindowsFileDialogHelper()
void setFilter() override
QWindowsNativeDialogBase * createNativeDialog() override
QString selectedNameFilter() const override
bool supportsNonModalDialog(const QWindow *=nullptr) const override
bool defaultNameFilterDisables() const override
QUrl directory() const override
void setDirectory(const QUrl &directory) override
void selectFile(const QUrl &filename) override
QList< QUrl > selectedFiles() const override
void selectNameFilter(const QString &filter) override
Explicitly shared file dialog parameters that are not in QFileDialogOptions.
QString selectedNameFilter() const
void fromOptions(const QSharedPointer< QFileDialogOptions > &o)
void setSelectedNameFilter(const QString &)
QString selectedFile() const
void setDirectory(const QUrl &)
QWindowsFileDialogSharedData()
QList< QUrl > selectedFiles() const
void setSelectedFiles(const QList< QUrl > &)
Base class for Windows native dialogs.
void exec(HWND owner=nullptr)
virtual void doExec(HWND owner=nullptr)=0
QWindowsNativeDialogBase()
Windows native file dialog wrapper around IFileOpenDialog, IFileSaveDialog.
void setDefaultSuffix(const QString &s)
bool hasDefaultSuffix() const
QWindowsFileDialogSharedData & data()
void setDirectory(const QUrl &directory)
void setLabelText(QFileDialogOptions::DialogLabel l, const QString &text)
void selectFile(const QString &fileName) const
void currentChanged(const QUrl &file)
bool hideFiltersDetails() const
QString selectedNameFilter() const
QWindowsNativeFileDialogBase(const QWindowsFileDialogSharedData &data)
void setHideFiltersDetails(bool h)
virtual void setNameFilters(const QStringList &f)
static IShellItem * shellItem(const QUrl &url)
IFileDialog * fileDialog() const
virtual QList< QUrl > selectedFiles() const =0
void setMode(QFileDialogOptions::FileMode mode, QFileDialogOptions::AcceptMode acceptMode, QFileDialogOptions::FileDialogOptions options)
void selectNameFilter(const QString &filter)
static QWindowsNativeFileDialogBase * create(QFileDialogOptions::AcceptMode am, const QWindowsFileDialogSharedData &data)
Factory method for QWindowsNativeFileDialogBase returning QWindowsNativeOpenFileDialog or QWindowsNat...
const QWindowsFileDialogSharedData & data() const
void setWindowTitle(const QString &title) override
void updateSelectedNameFilter()
bool init(const CLSID &clsId, const IID &iid)
QString directory() const
void setDefaultSuffixSys(const QString &s)
void filterSelected(const QString &filter)
void doExec(HWND owner=nullptr) override
virtual QList< QUrl > dialogResult() const =0
void onFolderChange(IShellItem *)
Listens to IFileDialog events and forwards them to QWindowsNativeFileDialogBase.
IFACEMETHODIMP OnFileOk(IFileDialog *) override
IFACEMETHODIMP OnFolderChange(IFileDialog *) override
QWindowsNativeFileDialogEventHandler(QWindowsNativeFileDialogBase *nativeFileDialog)
IFACEMETHODIMP OnShareViolation(IFileDialog *, IShellItem *, FDE_SHAREVIOLATION_RESPONSE *) override
IFACEMETHODIMP OnOverwrite(IFileDialog *, IShellItem *, FDE_OVERWRITE_RESPONSE *) override
IFACEMETHODIMP OnFolderChanging(IFileDialog *, IShellItem *) override
IFACEMETHODIMP OnSelectionChange(IFileDialog *) override
IFACEMETHODIMP OnTypeChange(IFileDialog *) override
Windows native file save dialog wrapper around IFileOpenDialog.
QWindowsNativeOpenFileDialog(const QWindowsFileDialogSharedData &data)
QList< QUrl > dialogResult() const override
QList< QUrl > selectedFiles() const override
Windows native file save dialog wrapper around IFileSaveDialog.
QList< QUrl > dialogResult() const override
QList< QUrl > selectedFiles() const override
bool isFileSystem() const
SFGAOF attributes() const
QWindowsShellItem(IShellItem *item)
QString normalDisplay() const
static IShellItems itemsFromItemArray(IShellItemArray *items)
QString urlString() const
QString fileSysPath() const
void format(QDebug &d) const
bool copyData(QIODevice *out, QString *errorMessage)
QString desktopAbsoluteParsing() const
Dialog helper using QWindowsXpNativeFileDialog.
void selectNameFilter(const QString &) override
void selectFile(const QUrl &url) override
bool defaultNameFilterDisables() const override
QList< QUrl > selectedFiles() const override
QWindowsXpFileDialogHelper()=default
void setFilter() override
bool supportsNonModalDialog(const QWindow *=nullptr) const override
QWindowsNativeDialogBase * createNativeDialog() override
QUrl directory() const override
QString selectedNameFilter() const override
void setDirectory(const QUrl &directory) override
Native Windows directory dialog for Windows XP using SHlib-functions.
static QWindowsXpNativeFileDialog * create(const OptionsPtr &options, const QWindowsFileDialogSharedData &data)
void setWindowTitle(const QString &t) override
int existingDirCallback(HWND hwnd, UINT uMsg, LPARAM lParam)
void doExec(HWND owner=nullptr) override
bool useHelper(QPlatformTheme::DialogType type)
QPlatformDialogHelper * createHelper(QPlatformTheme::DialogType type)
HWND getHWND(IFileDialog *fileDialog)
void eatMouseMove()
After closing a windows dialog with a double click (i.e.
Q_GLOBAL_STATIC(QReadWriteLock, g_updateMutex)
static bool validFileNameCharacter(QChar c)
static IFileDialog2 * getFileDialog2(IFileDialog *fileDialog)
static int indexOfNameFilter(const QStringList &filters, const QString &needle)
static void cleanupTemporaryItemCopies()
static bool isClsid(const QString &s)
static QList< FilterSpec > filterSpecs(const QStringList &filters, bool hideFilterDetails, int *totalStringLength)
static QString createTemporaryItemCopy(QWindowsShellItem &qItem, QString *errorMessage)
static IShellLibrary * sHLoadLibraryFromItem(IShellItem *libraryItem, DWORD mode)
QString tempFilePattern(QString name)
static wchar_t * qStringToWCharArray(const QString &s, size_t reserveSize=0)
static bool isHexRange(const QString &s, int start, int end)
static QUrl itemToDialogUrl(QWindowsShellItem &qItem, QString *errorMessage)
static QString suffixFromFilter(const QString &filter)