properties-view.hpp 2.6 KB

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