1
0

VisibilityItemWidget.cpp 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. #include "VisibilityItemWidget.hpp"
  2. #include <components/OBSSourceLabel.hpp>
  3. #include <QCheckBox>
  4. #include <QHBoxLayout>
  5. #include "moc_VisibilityItemWidget.cpp"
  6. VisibilityItemWidget::VisibilityItemWidget(obs_source_t *source_)
  7. : source(source_),
  8. enabledSignal(obs_source_get_signal_handler(source), "enable", OBSSourceEnabled, this)
  9. {
  10. bool enabled = obs_source_enabled(source);
  11. vis = new QCheckBox();
  12. vis->setProperty("class", "checkbox-icon indicator-visibility");
  13. vis->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum);
  14. vis->setChecked(enabled);
  15. label = new OBSSourceLabel(source);
  16. label->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
  17. QHBoxLayout *itemLayout = new QHBoxLayout();
  18. itemLayout->addWidget(vis);
  19. itemLayout->addWidget(label);
  20. itemLayout->setContentsMargins(0, 0, 0, 0);
  21. setLayout(itemLayout);
  22. connect(vis, &QCheckBox::clicked, [this](bool visible) { obs_source_set_enabled(source, visible); });
  23. }
  24. void VisibilityItemWidget::OBSSourceEnabled(void *param, calldata_t *data)
  25. {
  26. VisibilityItemWidget *window = static_cast<VisibilityItemWidget *>(param);
  27. bool enabled = calldata_bool(data, "enabled");
  28. QMetaObject::invokeMethod(window, "SourceEnabled", Q_ARG(bool, enabled));
  29. }
  30. void VisibilityItemWidget::SourceEnabled(bool enabled)
  31. {
  32. if (vis->isChecked() != enabled)
  33. vis->setChecked(enabled);
  34. }
  35. void VisibilityItemWidget::SetColor(const QColor &color, bool active_, bool selected_)
  36. {
  37. /* Do not update unless the state has actually changed */
  38. if (active_ == active && selected_ == selected)
  39. return;
  40. QPalette pal = vis->palette();
  41. pal.setColor(QPalette::WindowText, color);
  42. vis->setPalette(pal);
  43. label->setStyleSheet(QString("color: %1;").arg(color.name()));
  44. active = active_;
  45. selected = selected_;
  46. }
  47. void SetupVisibilityItem(QListWidget *list, QListWidgetItem *item, obs_source_t *source)
  48. {
  49. VisibilityItemWidget *baseWidget = new VisibilityItemWidget(source);
  50. list->setItemWidget(item, baseWidget);
  51. }