PeriDyno 1.0.0
Loading...
Searching...
No Matches
PPropertyWidget.h
Go to the documentation of this file.
1
19#pragma once
20#include <map>
21#include <QWidget>
22#include <typeinfo>
23#include <memory>
24
25
26class QVBoxLayout;
27class QScrollArea;
28class QGridLayout;
29class LockerButton;
30
31namespace Qt {
32 class QtNode;
33}
34
35namespace dyno
36{
37 class OBase;
38 class Node;
39 class FBase;
40 class Module;
41
42 class PPropertyWidget : public QWidget
43 {
44 Q_OBJECT
45 public:
46 explicit PPropertyWidget(QWidget *parent = nullptr);
48
49 virtual QSize sizeHint() const;
50
51// void clear();
52
53 //signals:
54 QWidget* addWidget(QWidget* widget);
55 void removeAllWidgets();
56
57 signals:
58 void nodeUpdated(std::shared_ptr<Node> node);
59 void moduleUpdated(std::shared_ptr<Module> node);
60
61 void stateFieldUpdated(FBase* field, int status);
62
63 public slots:
64 void showModuleProperty(std::shared_ptr<Module> module);
65 void showNodeProperty(std::shared_ptr<Node> node);
66
67 void showProperty(Qt::QtNode& block);
68
69 void clearProperty();
70
71 //A slot to receive a message when any field widget is updated
72 void contentUpdated();
73
74 public:
76 using constructor_t = QWidget* (*)(FBase*);
77 const std::type_info* type;
79 };
80 static int registerWidget(const FieldWidgetMeta&);
81 static FieldWidgetMeta* getRegistedWidget(const std::string&);
82
83 static QWidget* createFieldWidget(FBase* field);
84
85
86 static std::map<std::string, FieldWidgetMeta> tempGetMeta() { return sFieldWidgetMeta; };
87 private:
88 static std::map<std::string, FieldWidgetMeta> sFieldWidgetMeta;
89
90 void addScalarFieldWidget(FBase* field, QGridLayout* layout,int j);
91 void addArrayFieldWidget(FBase* field);
92
93 void addStateFieldWidget(FBase* field);
94
95 QVBoxLayout* mMainLayout;
96 QScrollArea* mScrollArea;
97 QGridLayout* mScrollLayout;
98
99 std::vector<QWidget*> mPropertyItems;
100
102 QWidget* mPropertyWidget[3];
103 QGridLayout* mPropertyLayout[3];
104 bool mFlag[3];
105
106 std::shared_ptr<OBase> mSeleted = nullptr;
107 };
108}
109
110#define DECLARE_FIELD_WIDGET \
111 static int reg_field_widget; \
112 static QWidget* createWidget(dyno::FBase*);
113
114#define IMPL_FIELD_WIDGET(_data_type_, _type_) \
115 int _type_::reg_field_widget = \
116 dyno::PPropertyWidget::registerWidget(dyno::PPropertyWidget::FieldWidgetMeta {&typeid(_data_type_), &_type_::createWidget}); \
117 QWidget* _type_::createWidget(dyno::FBase* f) { return new _type_(f); }
void showProperty(Qt::QtNode &block)
void addStateFieldWidget(FBase *field)
static FieldWidgetMeta * getRegistedWidget(const std::string &)
static int registerWidget(const FieldWidgetMeta &)
void nodeUpdated(std::shared_ptr< Node > node)
void addArrayFieldWidget(FBase *field)
void showModuleProperty(std::shared_ptr< Module > module)
static std::map< std::string, FieldWidgetMeta > tempGetMeta()
QVBoxLayout * mMainLayout
QScrollArea * mScrollArea
QWidget * addWidget(QWidget *widget)
LockerButton * mPropertyLabel[3]
QGridLayout * mPropertyLayout[3]
static QWidget * createFieldWidget(FBase *field)
void showNodeProperty(std::shared_ptr< Node > node)
std::vector< QWidget * > mPropertyItems
static std::map< std::string, FieldWidgetMeta > sFieldWidgetMeta
void addScalarFieldWidget(FBase *field, QGridLayout *layout, int j)
QGridLayout * mScrollLayout
PPropertyWidget(QWidget *parent=nullptr)
virtual QSize sizeHint() const
void moduleUpdated(std::shared_ptr< Module > node)
void stateFieldUpdated(FBase *field, int status)
std::shared_ptr< OBase > mSeleted
This is an implementation of AdditiveCCD based on peridyno.
Definition Array.h:25