Add SceneItemSelection and SceneItemSelectionWidget

Allows selecting individual scene items if there are duplicate entries
for the same source.
This commit is contained in:
WarmUpTill
2021-12-30 23:31:01 +01:00
committed by WarmUpTill
parent fbdaffcbf6
commit 92877a6b30
4 changed files with 303 additions and 0 deletions

View File

@@ -0,0 +1,59 @@
#pragma once
#include <QComboBox>
#include <obs-data.h>
#include "scene-selection.hpp"
#include "utility.hpp"
class SceneItemSelection {
public:
void Save(obs_data_t *obj, const char *name = "sceneItem",
const char *targetName = "sceneItemTarget",
const char *idxName = "sceneItemIdx");
void Load(obs_data_t *obj, const char *name = "sceneItem",
const char *targetName = "sceneItemTarget",
const char *idxName = "sceneItemIdx");
enum class Target { ALL, ANY, INDIVIDUAL };
Target GetType() { return _target; }
std::vector<obs_scene_item *> GetSceneItems(SceneSelection &s);
std::string ToString();
private:
OBSWeakSource _sceneItem;
Target _target = Target::ALL;
int _idx = 0;
friend class SceneItemSelectionWidget;
};
class SceneItemSelectionWidget : public QWidget {
Q_OBJECT
public:
enum class AllSelectionType { ALL, ANY };
SceneItemSelectionWidget(
QWidget *parent, bool allSelection = true,
AllSelectionType allType = AllSelectionType::ALL);
void SetSceneItem(const SceneItemSelection &);
void SetScene(const SceneSelection &);
void SetShowAll(bool);
void SetShowAllSelectionType(AllSelectionType t);
signals:
void SceneItemChanged(const SceneItemSelection &);
private slots:
void SceneChanged(const SceneSelection &);
void SelectionChanged(const QString &name);
void IdxChanged(int);
private:
void SetupIdxSelection(int);
QComboBox *_sceneItems;
QComboBox *_idx;
SceneSelection _scene;
OBSWeakSource _sceneItem;
bool _showAll = false;
AllSelectionType _allType = AllSelectionType::ALL;
};