Migration of QtMvvm from github
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

106 lines
2.7 KiB

#ifndef QTMVVM_ANDROIDFILECHOOSER_H
#define QTMVVM_ANDROIDFILECHOOSER_H
#include <QtCore/QObject>
#include <QtCore/QUrl>
#include <QtCore/QVariant>
#include <QtAndroidExtras/QAndroidActivityResultReceiver>
#include <QtAndroidExtras/QAndroidJniObject>
namespace QtMvvm {
class AndroidFileChooser : public QObject, public QAndroidActivityResultReceiver
{
Q_OBJECT
Q_PROPERTY(QString title READ title WRITE setTitle NOTIFY titleChanged)
Q_PROPERTY(QUrl folderUrl READ folderUrl WRITE setFolderUrl NOTIFY folderUrlChanged)
Q_PROPERTY(ChooserType type READ type WRITE setType NOTIFY typeChanged)
Q_PROPERTY(QStringList mimeTypes READ mimeTypes WRITE setMimeTypes NOTIFY mimeTypesChanged)
Q_PROPERTY(ChooserFlags chooserFlags READ chooserFlags WRITE setChooserFlags NOTIFY chooserFlagsChanged)
Q_PROPERTY(QVariant result READ result NOTIFY resultChanged)
public:
enum ChooserType {
GetContent = 0,
OpenDocument = 1,
OpenMultipleDocuments = 2,
CreateDocument = 3,
OpenDocumentTree = 4
};
Q_ENUM(ChooserType)
enum ChooserFlag {
OpenableFlag = 0x01,
LocalOnlyFlag = 0x02,
AlwaysGrantWriteFlag = 0x04,
PersistPermissionsFlag = 0x08
};
Q_DECLARE_FLAGS(ChooserFlags, ChooserFlag)
Q_FLAG(ChooserFlags)
explicit AndroidFileChooser(QObject *parent = nullptr);
~AndroidFileChooser();
QString title() const;
QUrl folderUrl() const;
ChooserType type() const;
QStringList mimeTypes() const;
ChooserFlags chooserFlags() const;
QVariant result() const;
public Q_SLOTS:
void open();
void setTitle(const QString &title);
void setFolderUrl(const QUrl &folderUrl);
void setType(ChooserType type);
void setMimeTypes(const QStringList &mimeTypes);
void setChooserFlags(ChooserFlags chooserFlags);
Q_SIGNALS:
void accepted();
void rejected();
void titleChanged(const QString &title);
void folderUrlChanged(const QUrl &folderUrl);
void typeChanged(ChooserType type);
void mimeTypesChanged(const QStringList &mimeTypes);
void chooserFlagsChanged(ChooserFlags chooserFlags);
void resultChanged(QVariant result);
protected:
void handleActivityResult(int receiverRequestCode, int resultCode, const QAndroidJniObject &data) override;
private:
const static int RequestCodeNormal = 0x1091c657;
const static int RequestCodePersist = 0x1091c658;
QString _title;
QUrl _folderUrl;
ChooserType _type;
QStringList _mimeTypes;
ChooserFlags _flags;
bool _active;
QVariant _result;
QAndroidJniObject createGetIntent();
QAndroidJniObject createOpenIntent();
QAndroidJniObject createOpenMultipleIntent();
QAndroidJniObject createSaveIntent();
QAndroidJniObject createOpenTreeIntent();
void setupBasic(QAndroidJniObject &intent, bool asTree = false);
};
}
Q_DECLARE_OPERATORS_FOR_FLAGS(QtMvvm::AndroidFileChooser::ChooserFlags)
#endif // QTMVVM_ANDROIDFILECHOOSER_H