diff --git a/obs/CMakeLists.txt b/obs/CMakeLists.txt index 4653ee704..ea9a706e5 100644 --- a/obs/CMakeLists.txt +++ b/obs/CMakeLists.txt @@ -118,6 +118,7 @@ set(obs_SOURCES source-list-widget.cpp crash-report.cpp hotkey-edit.cpp + source-label.cpp qt-wrappers.cpp) set(obs_HEADERS @@ -155,6 +156,7 @@ set(obs_HEADERS qt-display.hpp crash-report.hpp hotkey-edit.hpp + source-label.hpp qt-wrappers.hpp) set(obs_UI diff --git a/obs/source-label.cpp b/obs/source-label.cpp new file mode 100644 index 000000000..a707f7db1 --- /dev/null +++ b/obs/source-label.cpp @@ -0,0 +1,44 @@ +/****************************************************************************** + Copyright (C) 2015 by Ruwen Hahn + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +******************************************************************************/ + +#include "source-label.hpp" + +void OBSSourceLabel::SourceRenamed(void *data, calldata_t *params) +{ + auto &label = *static_cast(data); + + const char *name = calldata_string(params, "new_name"); + label.setText(name); + + emit label.Renamed(name); +} + +void OBSSourceLabel::SourceRemoved(void *data, calldata_t *) +{ + auto &label = *static_cast(data); + emit label.Removed(); +} + +void OBSSourceLabel::SourceDestroyed(void *data, calldata_t *) +{ + auto &label = *static_cast(data); + emit label.Destroyed(); + + label.destroyedSignal.Disconnect(); + label.removedSignal.Disconnect(); + label.renamedSignal.Disconnect(); +} diff --git a/obs/source-label.hpp b/obs/source-label.hpp new file mode 100644 index 000000000..03b9be62a --- /dev/null +++ b/obs/source-label.hpp @@ -0,0 +1,50 @@ +/****************************************************************************** + Copyright (C) 2015 by Ruwen Hahn + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +******************************************************************************/ + +#include +#include + +class OBSSourceLabel : public QLabel { + Q_OBJECT; + +public: + OBSSignal renamedSignal; + OBSSignal removedSignal; + OBSSignal destroyedSignal; + + OBSSourceLabel(const obs_source_t *source, QWidget *parent=nullptr, + Qt::WindowFlags f=0) + : QLabel(obs_source_get_name(source), parent, f), + renamedSignal(obs_source_get_signal_handler(source), "rename", + &OBSSourceLabel::SourceRenamed, this), + removedSignal(obs_source_get_signal_handler(source), "remove", + &OBSSourceLabel::SourceRemoved, this), + destroyedSignal(obs_source_get_signal_handler(source), + "destroy", &OBSSourceLabel::SourceDestroyed, + this) + {} + +protected: + static void SourceRenamed(void *data, calldata_t *params); + static void SourceRemoved(void *data, calldata_t *params); + static void SourceDestroyed(void *data, calldata_t *params); + +signals: + void Renamed(const char *name); + void Removed(); + void Destroyed(); +};