properties-view.hpp 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. #pragma once
  2. #include <QScrollArea>
  3. #include <obs.hpp>
  4. #include <vector>
  5. #include <memory>
  6. class QFormLayout;
  7. class OBSPropertiesView;
  8. typedef void (*PropertiesUpdateCallback)(void *obj, obs_data_t settings);
  9. /* ------------------------------------------------------------------------- */
  10. class WidgetInfo : public QObject {
  11. Q_OBJECT
  12. private:
  13. OBSPropertiesView *view;
  14. obs_property_t property;
  15. QWidget *widget;
  16. void BoolChanged(const char *setting);
  17. void IntChanged(const char *setting);
  18. void FloatChanged(const char *setting);
  19. void TextChanged(const char *setting);
  20. void PathChanged(const char *setting);
  21. void ListChanged(const char *setting);
  22. void ColorChanged(const char *setting);
  23. void ButtonClicked();
  24. public:
  25. inline WidgetInfo(OBSPropertiesView *view_, obs_property_t prop,
  26. QWidget *widget_)
  27. : view(view_), property(prop), widget(widget_)
  28. {}
  29. public slots:
  30. void ControlChanged();
  31. };
  32. /* ------------------------------------------------------------------------- */
  33. class OBSPropertiesView : public QScrollArea {
  34. Q_OBJECT
  35. friend class WidgetInfo;
  36. private:
  37. QWidget *widget;
  38. obs_properties_t properties;
  39. OBSData settings;
  40. void *obj;
  41. PropertiesUpdateCallback callback;
  42. int minSize;
  43. std::vector<std::unique_ptr<WidgetInfo>> children;
  44. std::string lastFocused;
  45. QWidget *lastWidget;
  46. QWidget *NewWidget(obs_property_t prop, QWidget *widget,
  47. const char *signal);
  48. QWidget *AddCheckbox(obs_property_t prop);
  49. QWidget *AddText(obs_property_t prop);
  50. QWidget *AddPath(obs_property_t prop, QFormLayout *layout);
  51. QWidget *AddInt(obs_property_t prop);
  52. QWidget *AddFloat(obs_property_t prop);
  53. QWidget *AddList(obs_property_t prop);
  54. QWidget *AddButton(obs_property_t prop);
  55. void AddProperty(obs_property_t property, QFormLayout *layout);
  56. public slots:
  57. void RefreshProperties();
  58. public:
  59. OBSPropertiesView(OBSData settings,
  60. obs_properties_t properties,
  61. void *obj, PropertiesUpdateCallback callback,
  62. int minSize = 0);
  63. inline ~OBSPropertiesView()
  64. {
  65. obs_properties_destroy(properties);
  66. }
  67. };