#pragma once #include "apitracecall.h" #include "ui_argumentseditor.h" #include #include #include #include #include #include #include #include class ApiTraceCall; class BooleanComboBox : public QComboBox { Q_OBJECT Q_PROPERTY(bool value READ value WRITE setValue USER true) public: BooleanComboBox(QWidget *parent); void setValue(bool); bool value() const; }; class BooleanComboBoxEditorCreator : public BooleanComboBox { Q_OBJECT Q_PROPERTY(bool value READ value WRITE setValue USER true) public: BooleanComboBoxEditorCreator(QWidget *widget = 0) : BooleanComboBox(widget) { this->setFrame(false); }; }; class UIntEditorCreator : public QSpinBox { Q_OBJECT Q_PROPERTY(int value READ value WRITE setValue USER true) public: UIntEditorCreator(QWidget *widget = 0) : QSpinBox(widget) { this->setFrame(false); this->setMaximum(INT_MAX); }; }; class IntEditorCreator : public QSpinBox { Q_OBJECT Q_PROPERTY(int value READ value WRITE setValue USER true) public: IntEditorCreator(QWidget *widget = 0) : QSpinBox(widget) { this->setFrame(false); this->setMinimum(INT_MIN); this->setMaximum(INT_MAX); }; }; class ULongLongEditorCreator : public QSpinBox { Q_OBJECT Q_PROPERTY(int value READ value WRITE setValue USER true) public: ULongLongEditorCreator(QWidget *widget = 0) : QSpinBox(widget) { this->setFrame(false); this->setMaximum(INT_MAX); }; }; class LongLongEditorCreator : public QSpinBox { Q_OBJECT Q_PROPERTY(int value READ value WRITE setValue USER true) public: LongLongEditorCreator(QWidget *widget = 0) : QSpinBox(widget) { this->setFrame(false); this->setMinimum(INT_MIN); this->setMaximum(INT_MAX); }; }; class PixmapEditorCreator : public QLabel { Q_OBJECT Q_PROPERTY(QString text READ text WRITE setText USER true) public: PixmapEditorCreator(QWidget *widget = 0) : QLabel (widget) { }; }; class FloatEditorCreator : public QDoubleSpinBox { Q_OBJECT Q_PROPERTY(double value READ value WRITE setValue USER true) public: FloatEditorCreator(QWidget *widget = 0) : QDoubleSpinBox(widget) { this->setFrame(false); this->setMinimum(-FLT_MAX); this->setMaximum(FLT_MAX); this->setDecimals(8); }; }; class DoubleEditorCreator : public QDoubleSpinBox { Q_OBJECT Q_PROPERTY(double value READ value WRITE setValue USER true) public: DoubleEditorCreator(QWidget *widget = 0) : QDoubleSpinBox(widget) { this->setFrame(false); this->setMinimum(-DBL_MAX); this->setMaximum(DBL_MAX); this->setDecimals(8); }; }; class StringEditorCreator : public QTextEdit { Q_OBJECT Q_PROPERTY(QString plainText READ toPlainText WRITE setPlainText USER true) public: StringEditorCreator(QWidget *widget = 0) : QTextEdit(widget) { }; }; class InvalidEditorCreator : public QLabel { Q_OBJECT Q_PROPERTY(QString text READ text WRITE setText USER true) public: InvalidEditorCreator(QWidget *widget = 0) : QLabel(widget) { }; }; class ArgumentsEditor : public QDialog { Q_OBJECT public: ArgumentsEditor(QWidget *parent=0); ~ArgumentsEditor(); virtual void accept() override; void setCall(ApiTraceCall *call); ApiTraceCall *call() const; private slots: void currentSourceChanged(int idx); void sourceChanged(); void revert(); private: void init(); void setupCall(); void setupShaderEditor(const QVector &sources); QVariant valueForName(const QString &name, const QVariant &orignalValue, bool *changed) const; QVariant arrayFromIndex(const QModelIndex &index, const ApiArray &array, bool *changed) const; QVariant arrayFromEditor(const ApiArray &origArray, bool *changed) const; private: Ui_ArgumentsEditor m_ui; QStandardItemModel *m_model; ApiTraceCall *m_call; };