SWMMVis  6.0.0-alpha.4
Qt6/C++ GIS-based graphical user interface for the SWMMVis engine (6.0.0-alpha.4)
Loading...
Searching...
No Matches
istyleeditorwidget.h
Go to the documentation of this file.
1
21#ifndef OPENSWMMVIS_UI_DIALOGS_ISTYLEEDITORWIDGET_H
22#define OPENSWMMVIS_UI_DIALOGS_ISTYLEEDITORWIDGET_H
23
24#include <QWidget>
25#include <QString>
26
27#include <functional>
28#include <memory>
29
30namespace openswmmvis::ui {
31
43class IStyleEditorWidget : public QWidget
44{
45 Q_OBJECT
46public:
47 using QWidget::QWidget;
48 ~IStyleEditorWidget() override = default;
49
53 virtual void refreshFromModel() = 0;
54};
55
66{
67public:
68 using Factory = std::function<IStyleEditorWidget *(QObject *propertyObject, QWidget *parent)>;
69
71
74 void registerFactory(const QString &className, Factory factory);
75
79 [[nodiscard]] IStyleEditorWidget *createEditorFor(QObject *propertyObject,
80 QWidget *parent = nullptr) const;
81
82private:
83 StyleEditorRegistry() = default;
84
85 struct Entry { QString className; Factory factory; };
86 std::vector<Entry> m_entries;
87};
88
92{
93public:
94 StyleEditorRegistrar(const QString &className,
96 {
97 StyleEditorRegistry::instance().registerFactory(className, std::move(factory));
98 }
99};
100
101#define REGISTER_STYLE_EDITOR(CLASSNAME, FACTORY_BODY) \
102 static const openswmmvis::ui::StyleEditorRegistrar \
103 s_register_##CLASSNAME(QStringLiteral(#CLASSNAME), FACTORY_BODY);
104
105} // namespace openswmmvis::ui
106
107#endif // OPENSWMMVIS_UI_DIALOGS_ISTYLEEDITORWIDGET_H
Custom editor widget for one style subject.
Definition istyleeditorwidget.h:44
~IStyleEditorWidget() override=default
Definition istyleeditorwidget.h:92
StyleEditorRegistrar(const QString &className, StyleEditorRegistry::Factory factory)
Definition istyleeditorwidget.h:94
Maps a property-object class name to an editor-widget factory.
Definition istyleeditorwidget.h:66
std::function< IStyleEditorWidget *(QObject *propertyObject, QWidget *parent)> Factory
Definition istyleeditorwidget.h:68
static StyleEditorRegistry & instance()
Definition istyleeditorwidget.cpp:13
void registerFactory(const QString &className, Factory factory)
Definition istyleeditorwidget.cpp:19
IStyleEditorWidget * createEditorFor(QObject *propertyObject, QWidget *parent=nullptr) const
Definition istyleeditorwidget.cpp:25
Definition openswmmvislayer.h:43
QVector< int > parent
union-find
Definition pslgminsize.cpp:176