Selaa lähdekoodia

UI: Add OBSSourceLabel

Palana 10 vuotta sitten
vanhempi
sitoutus
369d95dfc3
3 muutettua tiedostoa jossa 96 lisäystä ja 0 poistoa
  1. 2 0
      obs/CMakeLists.txt
  2. 44 0
      obs/source-label.cpp
  3. 50 0
      obs/source-label.hpp

+ 2 - 0
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

+ 44 - 0
obs/source-label.cpp

@@ -0,0 +1,44 @@
+/******************************************************************************
+    Copyright (C) 2015 by Ruwen Hahn <[email protected]>
+
+    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 <http://www.gnu.org/licenses/>.
+******************************************************************************/
+
+#include "source-label.hpp"
+
+void OBSSourceLabel::SourceRenamed(void *data, calldata_t *params)
+{
+	auto &label = *static_cast<OBSSourceLabel*>(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<OBSSourceLabel*>(data);
+	emit label.Removed();
+}
+
+void OBSSourceLabel::SourceDestroyed(void *data, calldata_t *)
+{
+	auto &label = *static_cast<OBSSourceLabel*>(data);
+	emit label.Destroyed();
+
+	label.destroyedSignal.Disconnect();
+	label.removedSignal.Disconnect();
+	label.renamedSignal.Disconnect();
+}

+ 50 - 0
obs/source-label.hpp

@@ -0,0 +1,50 @@
+/******************************************************************************
+    Copyright (C) 2015 by Ruwen Hahn <[email protected]>
+
+    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 <http://www.gnu.org/licenses/>.
+******************************************************************************/
+
+#include <QLabel>
+#include <obs.hpp>
+
+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();
+};