properties-view.hpp 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  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. void ButtonClicked();
  25. public:
  26. inline WidgetInfo(OBSPropertiesView *view_, obs_property_t prop,
  27. QWidget *widget_)
  28. : view(view_), property(prop), widget(widget_)
  29. {}
  30. public slots:
  31. void ControlChanged();
  32. };
  33. /* ------------------------------------------------------------------------- */
  34. class OBSPropertiesView : public QScrollArea {
  35. Q_OBJECT
  36. friend class WidgetInfo;
  37. private:
  38. QWidget *widget;
  39. obs_properties_t properties;
  40. OBSData settings;
  41. void *obj;
  42. PropertiesUpdateCallback callback;
  43. int minSize;
  44. std::vector<std::unique_ptr<WidgetInfo>> children;
  45. std::string lastFocused;
  46. QWidget *lastWidget;
  47. QWidget *NewWidget(obs_property_t prop, QWidget *widget,
  48. const char *signal);
  49. QWidget *AddCheckbox(obs_property_t prop);
  50. QWidget *AddText(obs_property_t prop);
  51. void AddPath(obs_property_t prop, QFormLayout *layout, QLabel **label);
  52. QWidget *AddInt(obs_property_t prop);
  53. QWidget *AddFloat(obs_property_t prop);
  54. QWidget *AddList(obs_property_t prop, bool &warning);
  55. QWidget *AddButton(obs_property_t prop);
  56. void AddColor(obs_property_t prop, QFormLayout *layout, QLabel *&label);
  57. void AddProperty(obs_property_t property, QFormLayout *layout);
  58. public slots:
  59. void RefreshProperties();
  60. public:
  61. OBSPropertiesView(OBSData settings,
  62. obs_properties_t properties,
  63. void *obj, PropertiesUpdateCallback callback,
  64. int minSize = 0);
  65. inline ~OBSPropertiesView()
  66. {
  67. obs_properties_destroy(properties);
  68. }
  69. };