Plasma Engine  2.0
Loading...
Searching...
No Matches
CVarWidget.moc.h
1#pragma once
2
3#include <GuiFoundation/GuiFoundationDLL.h>
4
5#include <Core/Console/Console.h>
6#include <Foundation/Basics.h>
7#include <Foundation/Containers/Deque.h>
8#include <Foundation/Containers/Map.h>
9#include <Foundation/Strings/String.h>
10#include <Foundation/Types/Variant.h>
11#include <GuiFoundation/ui_CVarWidget.h>
12#include <QItemDelegate>
13#include <QPointer>
14#include <QWidget>
15
16class QStandardItemModel;
17class QSortFilterProxyModel;
18class plQtCVarModel;
19class plQtCVarWidget;
20
21class plQtCVarItemDelegate : public QItemDelegate
22{
23 Q_OBJECT
24
25public:
26 explicit plQtCVarItemDelegate(QObject* pParent = nullptr)
27 : QItemDelegate(pParent)
28 {
29 }
30
31 virtual QWidget* createEditor(QWidget* pParent, const QStyleOptionViewItem& option, const QModelIndex& index) const override;
32 virtual void setEditorData(QWidget* pEditor, const QModelIndex& index) const override;
33 virtual void setModelData(QWidget* pEditor, QAbstractItemModel* pModel, const QModelIndex& index) const override;
34
35 plQtCVarModel* m_pModel = nullptr;
36
37private:
38 mutable QModelIndex m_Index;
39
40private Q_SLOTS:
41 void onComboChanged(int);
42};
43
44class plQtCVarModel : public QAbstractItemModel
45{
46 Q_OBJECT
47public:
50
51 void BeginResetModel();
52 void EndResetModel();
53
54public: // QAbstractItemModel interface
55 virtual QVariant headerData(int iSection, Qt::Orientation orientation, int iRole = Qt::DisplayRole) const override;
56 virtual QVariant data(const QModelIndex& index, int iRole) const override;
57 virtual bool setData(const QModelIndex& index, const QVariant& value, int iRole = Qt::EditRole) override;
58 virtual Qt::ItemFlags flags(const QModelIndex& index) const override;
59 virtual QModelIndex index(int iRow, int iColumn, const QModelIndex& parent = QModelIndex()) const override;
60 virtual QModelIndex parent(const QModelIndex& index) const override;
61 virtual int rowCount(const QModelIndex& parent = QModelIndex()) const override;
62 virtual int columnCount(const QModelIndex& parent = QModelIndex()) const override;
63
64public:
65 struct Entry
66 {
67 plString m_sFullName;
68 QString m_sDisplayString;
69 Entry* m_pParentEntry = nullptr;
70 plDynamicArray<Entry*> m_ChildEntries;
71
72 QString m_sPlugin; // in which plugin a CVar is defined
73 QString m_sDescription; // CVar description text
74 plVariant m_Value;
75 };
76
77 Entry* CreateEntry(const char* szName);
78
79 plQtCVarWidget* m_pOwner = nullptr;
80 plDynamicArray<Entry*> m_RootEntries;
81 plDeque<Entry> m_AllEntries;
82};
83
85struct PL_GUIFOUNDATION_DLL plCVarWidgetData
86{
87 mutable bool m_bNewEntry = true;
88
89 plString m_sPlugin; // in which plugin a CVar is defined
90 plString m_sDescription; // CVar description text
91 plUInt8 m_uiType = 0; // plCVarType
92
93 // 'union' over the different possible CVar types
94 bool m_bValue = false;
95 float m_fValue = 0.0f;
96 plInt32 m_iValue = 0;
97 plString m_sValue;
98};
99
101class PL_GUIFOUNDATION_DLL plQtCVarWidget : public QWidget, public Ui_CVarWidget
102{
103 Q_OBJECT
104
105public:
106 plQtCVarWidget(QWidget* pParent);
108
110 void Clear();
111
113 void RebuildCVarUI(const plMap<plString, plCVarWidgetData>& cvars);
114
116 void UpdateCVarUI(const plMap<plString, plCVarWidgetData>& cvars);
117
118 void AddConsoleStrings(const plStringBuilder& sEncoded);
119
120 plConsole& GetConsole() { return m_Console; }
121
122Q_SIGNALS:
123 void onBoolChanged(const char* szCVar, bool bNewValue);
124 void onFloatChanged(const char* szCVar, float fNewValue);
125 void onIntChanged(const char* szCVar, int iNewValue);
126 void onStringChanged(const char* szCVar, const char* szNewValue);
127
128private Q_SLOTS:
129 void SearchTextChanged(const QString& text);
130 void ConsoleEnterPressed();
131 void ConsoleSpecialKeyPressed(Qt::Key key);
132
133private:
134 QPointer<plQtCVarModel> m_pItemModel;
135 QPointer<QSortFilterProxyModel> m_pFilterModel;
136 QPointer<plQtCVarItemDelegate> m_pItemDelegate;
137
138 plConsole m_Console;
139};
Definition Console.h:78
Definition Deque.h:270
Definition DynamicArray.h:81
Definition Map.h:408
Definition CVarWidget.moc.h:22
Definition CVarWidget.moc.h:45
Displays CVar values in a table and allows to modify them.
Definition CVarWidget.moc.h:102
plStringBuilder is a class that is meant for creating and modifying strings.
Definition StringBuilder.h:35
plVariant is a class that can store different types of variables, which is useful in situations where...
Definition Variant.h:44
Data used by plQtCVarWidget to represent CVar states.
Definition CVarWidget.moc.h:86
Definition CVarWidget.moc.h:66