← index
acidcam-gpu/ACMX2/interface/main_window.hpp
Source: acidcam-gpu/ACMX2/interface/main_window.hpp
// #define BUILD_BUNDLE

// uncomment above if building BUNDLE


#ifndef __APP_WINDOW_H_

#define __APP_WINDOW_H_

#include "editor.hpp"

#include "gpufilter.hpp"

#include "prop.hpp"

#include "shader.hpp"

#include "shaderlibrary.hpp"

#include "shaderpass.hpp"

#include "version_info.hpp" //defines VERSION_INFO

#include <QListView>

#include <QMainWindow>

#include <QMenuBar>

#include <QPointer>

#include <QProcess>

#include <QSettings>

#include <QStringListModel>

#include <QTextEdit>

#include <random>


class ReadOnlyStringListModel : public QStringListModel {
    Q_OBJECT
  public:
    using QStringListModel::QStringListModel;
    Qt::ItemFlags flags(const QModelIndex &index) const override {
        return QStringListModel::flags(index) & ~Qt::ItemIsEditable;
    }
};

class MainWindow : public QMainWindow {
    Q_OBJECT
  public:
    MainWindow(QWidget *parent = 0) : QMainWindow(parent) {
        initControls();
    }
    void initControls();
    void Log(const QString &message);
    void Write(const QString &message);
    bool loadShaders(const QString &path, bool force = false);
    void updateIndex();
    QDateTime indexTimestamp;
  public slots:
    void fileOpenProp();
    void fileExit();
    void runSelected();
    void runAll();
    void cameraSettings();
    void listClicked(const QModelIndex &i);
    void newList();
    void newShader();
    void menuUp();
    void menuDown();
    void menuRemove();
    void menuAudioSettings();
    void menuSort();
    void menuShuffle();
    void menuSearch();
    void menuFindNext();
    void menuGPUFilterSettings();
    void menuShaderPassSettings();
    void menuBuildShaderCache();
    void menuRunFromCache();
    void menuRecompileShaders();

  protected:
    bool addShaderToList(const QString &shaderName);

    void closeEvent(QCloseEvent *event) override {
        if (process->state() == QProcess::Running) {
            process->terminate();
            if (!process->waitForFinished(10000)) {
                process->kill();
            }
        }
        QMainWindow::closeEvent(event);
    }

  private:
    QListView *list_view;
    QStringList items;
    ReadOnlyStringListModel *model;
    QTextEdit *bottomTextBox;
    QMenu *fileMenu;
    QMenu *cameraMenu;
    QMenu *playbackMenu;
    QMenu *runMenu;
    QMenu *listMenu;
    QMenu *helpMenu;
    QAction *fileMenu_prop, *fileMenu_exit;
    QAction *cameraSet, *audioSet;
    QAction *runMenu_select, *runMenu_all;
    QAction *play_repeat, *play_stop;
    QAction *listMenu_new, *listMenu_shader, *listMenu_remove, *listMenu_up, *listMenu_down, *listMenu_shuffle, *listMenu_sort;
    QAction *helpMenu_about;
    QAction *listMenu_findNext;
    QString lastSearchText;
    int lastFoundIndex = -1;
    QString executable_path;
    QAction *listMenu_search;
    QString shader_path;
    QProcess *process;
    QSize camera_res, screen_res;
    unsigned int camera_index;
    QString video_file;
    QString graphics_file;
    QString prefix_path;
    QString output_file;
    int output_kbps = 10000;
    double output_fps = 24.0f;
    QString concatList(const QStringList lst);
    QVector<QPointer<TextEditor>> open_files;
    QString readFileContents(const QString &filePath);
    QString sanitizeShaderName(const QString &name);
    void cleanupClosedEditors();
    bool audio_enabled = false;
    unsigned int audio_channels = 2;
    float audio_sense = 0.25f;
    bool audio_passthrough = false;
    bool cache_enabled = false;
    int cache_delay = 1;
    bool full_screen_value = false;
    bool copy_audio = false;
    bool enable_3d = false;
    int audio_input = -1;
    int audio_output = -1;
    QString model_file;
    bool gpu_filter_enabled = false;
    QString gpu_filter_indices;
    int gpu_buffer_size = 8;
    QAction *gpuFilterAction;
    QAction *shaderPassAction;
    QAction *styleSheetAction;
    QAction *buildCacheAction;
    QAction *runFromCacheAction;
    QAction *recompileShadersAction;
    QString customStyleSheet;
    void applyCustomStyleSheet(bool enable);
    bool shader_pass_enabled = false;
    QStringList shader_pass_names;
    QString getShaderPassIndicesFromNames();
    int cuda_device = 0;
    bool use_shader_cache = true;
};

#endif