Integrated file selection dialogue with the main code. Improved the
[openvpnui.git] / src / filebrowse / engine.h
diff --git a/src/filebrowse/engine.h b/src/filebrowse/engine.h
new file mode 100644 (file)
index 0000000..c984958
--- /dev/null
@@ -0,0 +1,98 @@
+#ifndef ENGINE_H
+#define ENGINE_H
+
+#include <QDir>
+#include <QVariant>
+
+class FileWorker;
+
+/**
+ * @brief Engine to handle file operations, settings and other generic functionality.
+ */
+class Engine : public QObject
+{
+    Q_OBJECT
+    Q_PROPERTY(int clipboardCount READ clipboardCount() NOTIFY clipboardCountChanged())
+    Q_PROPERTY(int clipboardContainsCopy READ clipboardContainsCopy() NOTIFY clipboardContainsCopyChanged())
+    Q_PROPERTY(int progress READ progress() NOTIFY progressChanged())
+    Q_PROPERTY(QString progressFilename READ progressFilename() NOTIFY progressFilenameChanged())
+    Q_PROPERTY(QString selectedFilename READ selectedFilename() WRITE setSelectedFilename() NOTIFY selectedFilenameChanged())
+    Q_PROPERTY(QString extensionFilter READ extensionFilter() WRITE setExtensionFilter() NOTIFY extensionFilterChanged())
+
+public:
+    explicit Engine(QObject *parent = 0);
+    ~Engine();
+
+    int clipboardCount() const { return m_clipboardFiles.count(); }
+    bool clipboardContainsCopy() const { return m_clipboardContainsCopy; }
+    int progress() const { return m_progress; }
+    QString progressFilename() const { return m_progressFilename; }
+    QString selectedFilename() const { return m_selectedFilename; }
+    QString extensionFilter() const { return m_extensionFilter; }
+
+    // methods accessible from QML
+
+    // asynch methods send signals when done or error occurs
+    Q_INVOKABLE void deleteFiles(QStringList filenames);
+    Q_INVOKABLE void cutFiles(QStringList filenames);
+    Q_INVOKABLE void copyFiles(QStringList filenames);
+    Q_INVOKABLE void pasteFiles(QString destDirectory);
+
+    // cancel asynch methods
+    Q_INVOKABLE void cancel();
+
+    // returns error msg
+    Q_INVOKABLE QString errorMessage() const { return m_errorMessage; }
+
+    // sync methods
+    Q_INVOKABLE QString homeFolder() const;
+    Q_INVOKABLE bool exists(QString filename);
+    Q_INVOKABLE QStringList diskSpace(QString path);
+    Q_INVOKABLE QStringList readFile(QString filename);
+    Q_INVOKABLE QString mkdir(QString path, QString name);
+    Q_INVOKABLE QStringList rename(QString fullOldFilename, QString newName);
+    Q_INVOKABLE QString chmod(QString path,
+                              bool ownerRead, bool ownerWrite, bool ownerExecute,
+                              bool groupRead, bool groupWrite, bool groupExecute,
+                              bool othersRead, bool othersWrite, bool othersExecute);
+
+    // access settings
+    Q_INVOKABLE QString readSetting(QString key, QString defaultValue = QString());
+    Q_INVOKABLE void writeSetting(QString key, QString value);
+    Q_INVOKABLE int startDepth() const;
+
+    Q_INVOKABLE void setSelectedFilename(QString selectedFilename);
+    Q_INVOKABLE void setExtensionFilter(QString extensionFilter);
+
+
+signals:
+    void clipboardCountChanged();
+    void clipboardContainsCopyChanged();
+    void progressChanged();
+    void progressFilenameChanged();
+    void selectedFilenameChanged();
+    void extensionFilterChanged();
+    void workerDone();
+    void workerErrorOccurred(QString message, QString filename);
+    void fileDeleted(QString fullname);
+
+    void settingsChanged();
+
+private slots:
+    void setProgress(int progress, QString filename);
+
+private:
+    QString createHexDump(char *buffer, int size, int bytesPerLine);
+    QStringList makeStringList(QString msg, QString str = QString());
+
+    QStringList m_clipboardFiles;
+    bool m_clipboardContainsCopy;
+    int m_progress;
+    QString m_progressFilename;
+    QString m_errorMessage;
+    FileWorker *m_fileWorker;
+    QString m_selectedFilename;
+    QString m_extensionFilter;
+};
+
+#endif // ENGINE_H