blob: 1a949173e571b468f4a90d862801fc9bf5b2e923 [file] [log] [blame]
#pragma once
#include "apitracecall.h"
#include "ui_argumentseditor.h"
#include <QComboBox>
#include <QDialog>
#include <QItemEditorFactory>
#include <QStandardItemModel>
#include <QSpinBox>
#include <QTextEdit>
#include <limits.h>
#include <float.h>
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<QVariant> &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;
};