Browse Source

UI: Add separate timers to status bar

This adds separate timers for streaming and recording to the status bar.
cg2121 8 years ago
parent
commit
9fe127ec04
2 changed files with 60 additions and 19 deletions
  1. 54 16
      UI/window-basic-status-bar.cpp
  2. 6 3
      UI/window-basic-status-bar.hpp

+ 54 - 16
UI/window-basic-status-bar.cpp

@@ -11,14 +11,16 @@ OBSBasicStatusBar::OBSBasicStatusBar(QWidget *parent)
 	: QStatusBar    (parent),
 	: QStatusBar    (parent),
 	  delayInfo     (new QLabel),
 	  delayInfo     (new QLabel),
 	  droppedFrames (new QLabel),
 	  droppedFrames (new QLabel),
-	  sessionTime   (new QLabel),
+	  streamTime    (new QLabel),
+	  recordTime    (new QLabel),
 	  cpuUsage      (new QLabel),
 	  cpuUsage      (new QLabel),
 	  transparentPixmap (20, 20),
 	  transparentPixmap (20, 20),
 	  greenPixmap       (20, 20),
 	  greenPixmap       (20, 20),
 	  grayPixmap        (20, 20),
 	  grayPixmap        (20, 20),
 	  redPixmap         (20, 20)
 	  redPixmap         (20, 20)
 {
 {
-	sessionTime->setText(QString("00:00:00"));
+	streamTime->setText(QString("LIVE: 00:00:00"));
+	recordTime->setText(QString("REC: 00:00:00"));
 	cpuUsage->setText(QString("CPU: 0.0%, 0.00 fps"));
 	cpuUsage->setText(QString("CPU: 0.0%, 0.00 fps"));
 
 
 	QWidget *brWidget = new QWidget(this);
 	QWidget *brWidget = new QWidget(this);
@@ -37,8 +39,10 @@ OBSBasicStatusBar::OBSBasicStatusBar(QWidget *parent)
 	delayInfo->setAlignment(Qt::AlignVCenter);
 	delayInfo->setAlignment(Qt::AlignVCenter);
 	droppedFrames->setAlignment(Qt::AlignRight);
 	droppedFrames->setAlignment(Qt::AlignRight);
 	droppedFrames->setAlignment(Qt::AlignVCenter);
 	droppedFrames->setAlignment(Qt::AlignVCenter);
-	sessionTime->setAlignment(Qt::AlignRight);
-	sessionTime->setAlignment(Qt::AlignVCenter);
+	streamTime->setAlignment(Qt::AlignRight);
+	streamTime->setAlignment(Qt::AlignVCenter);
+	recordTime->setAlignment(Qt::AlignRight);
+	recordTime->setAlignment(Qt::AlignVCenter);
 	cpuUsage->setAlignment(Qt::AlignRight);
 	cpuUsage->setAlignment(Qt::AlignRight);
 	cpuUsage->setAlignment(Qt::AlignVCenter);
 	cpuUsage->setAlignment(Qt::AlignVCenter);
 	kbps->setAlignment(Qt::AlignRight);
 	kbps->setAlignment(Qt::AlignRight);
@@ -46,12 +50,14 @@ OBSBasicStatusBar::OBSBasicStatusBar(QWidget *parent)
 
 
 	delayInfo->setIndent(20);
 	delayInfo->setIndent(20);
 	droppedFrames->setIndent(20);
 	droppedFrames->setIndent(20);
-	sessionTime->setIndent(20);
+	streamTime->setIndent(20);
+	recordTime->setIndent(20);
 	cpuUsage->setIndent(20);
 	cpuUsage->setIndent(20);
 	kbps->setIndent(10);
 	kbps->setIndent(10);
 
 
 	addPermanentWidget(droppedFrames);
 	addPermanentWidget(droppedFrames);
-	addPermanentWidget(sessionTime);
+	addPermanentWidget(streamTime);
+	addPermanentWidget(recordTime);
 	addPermanentWidget(cpuUsage);
 	addPermanentWidget(cpuUsage);
 	addPermanentWidget(delayInfo);
 	addPermanentWidget(delayInfo);
 	addPermanentWidget(brWidget);
 	addPermanentWidget(brWidget);
@@ -74,7 +80,8 @@ void OBSBasicStatusBar::Activate()
 		int skipped = video_output_get_skipped_frames(obs_get_video());
 		int skipped = video_output_get_skipped_frames(obs_get_video());
 		int total   = video_output_get_total_frames(obs_get_video());
 		int total   = video_output_get_total_frames(obs_get_video());
 
 
-		totalSeconds = 0;
+		totalStreamSeconds = 0;
+		totalRecordSeconds = 0;
 		lastSkippedFrameCount = 0;
 		lastSkippedFrameCount = 0;
 		startSkippedFrameCount = skipped;
 		startSkippedFrameCount = skipped;
 		startTotalFrameCount = total;
 		startTotalFrameCount = total;
@@ -94,9 +101,19 @@ void OBSBasicStatusBar::Deactivate()
 	if (!main)
 	if (!main)
 		return;
 		return;
 
 
+	if (!streamOutput) {
+		streamTime->setText(QString("LIVE: 00:00:00"));
+		totalStreamSeconds = 0;
+	}
+
+	if (!recordOutput) {
+		recordTime->setText(QString("REC: 00:00:00"));
+		totalRecordSeconds = 0;
+	}
+
 	if (!main->outputHandler->Active()) {
 	if (!main->outputHandler->Active()) {
 		delete refreshTimer;
 		delete refreshTimer;
-		sessionTime->setText(QString("00:00:00"));
+
 		delayInfo->setText("");
 		delayInfo->setText("");
 		droppedFrames->setText("");
 		droppedFrames->setText("");
 		kbps->setText("");
 		kbps->setText("");
@@ -190,19 +207,19 @@ void OBSBasicStatusBar::UpdateCPUUsage()
 	cpuUsage->setMinimumWidth(cpuUsage->width());
 	cpuUsage->setMinimumWidth(cpuUsage->width());
 }
 }
 
 
-void OBSBasicStatusBar::UpdateSessionTime()
+void OBSBasicStatusBar::UpdateStreamTime()
 {
 {
-	totalSeconds++;
+	totalStreamSeconds++;
 
 
-	int seconds      = totalSeconds % 60;
-	int totalMinutes = totalSeconds / 60;
+	int seconds      = totalStreamSeconds % 60;
+	int totalMinutes = totalStreamSeconds / 60;
 	int minutes      = totalMinutes % 60;
 	int minutes      = totalMinutes % 60;
 	int hours        = totalMinutes / 60;
 	int hours        = totalMinutes / 60;
 
 
 	QString text;
 	QString text;
-	text.sprintf("%02d:%02d:%02d", hours, minutes, seconds);
-	sessionTime->setText(text);
-	sessionTime->setMinimumWidth(sessionTime->width());
+	text.sprintf("LIVE: %02d:%02d:%02d", hours, minutes, seconds);
+	streamTime->setText(text);
+	streamTime->setMinimumWidth(streamTime->width());
 
 
 	if (reconnectTimeout > 0) {
 	if (reconnectTimeout > 0) {
 		QString msg = QTStr("Basic.StatusBar.Reconnecting")
 		QString msg = QTStr("Basic.StatusBar.Reconnecting")
@@ -225,6 +242,21 @@ void OBSBasicStatusBar::UpdateSessionTime()
 	}
 	}
 }
 }
 
 
+void OBSBasicStatusBar::UpdateRecordTime()
+{
+	totalRecordSeconds++;
+
+	int seconds      = totalRecordSeconds % 60;
+	int totalMinutes = totalRecordSeconds / 60;
+	int minutes      = totalMinutes % 60;
+	int hours        = totalMinutes / 60;
+
+	QString text;
+	text.sprintf("REC: %02d:%02d:%02d", hours, minutes, seconds);
+	recordTime->setText(text);
+	recordTime->setMinimumWidth(recordTime->width());
+}
+
 void OBSBasicStatusBar::UpdateDroppedFrames()
 void OBSBasicStatusBar::UpdateDroppedFrames()
 {
 {
 	if (!streamOutput)
 	if (!streamOutput)
@@ -344,7 +376,13 @@ void OBSBasicStatusBar::UpdateStatusBar()
 	OBSBasic *main = qobject_cast<OBSBasic*>(parent());
 	OBSBasic *main = qobject_cast<OBSBasic*>(parent());
 
 
 	UpdateBandwidth();
 	UpdateBandwidth();
-	UpdateSessionTime();
+
+	if (streamOutput)
+		UpdateStreamTime();
+
+	if (recordOutput)
+		UpdateRecordTime();
+
 	UpdateDroppedFrames();
 	UpdateDroppedFrames();
 
 
 	int skipped = video_output_get_skipped_frames(obs_get_video());
 	int skipped = video_output_get_skipped_frames(obs_get_video());

+ 6 - 3
UI/window-basic-status-bar.hpp

@@ -14,7 +14,8 @@ class OBSBasicStatusBar : public QStatusBar {
 private:
 private:
 	QLabel *delayInfo;
 	QLabel *delayInfo;
 	QLabel *droppedFrames;
 	QLabel *droppedFrames;
-	QLabel *sessionTime;
+	QLabel *streamTime;
+	QLabel *recordTime;
 	QLabel *cpuUsage;
 	QLabel *cpuUsage;
 	QLabel *kbps;
 	QLabel *kbps;
 	QLabel *statusSquare;
 	QLabel *statusSquare;
@@ -25,7 +26,8 @@ private:
 	bool overloadedNotify = true;
 	bool overloadedNotify = true;
 
 
 	int retries = 0;
 	int retries = 0;
-	int totalSeconds = 0;
+	int totalStreamSeconds = 0;
+	int totalRecordSeconds = 0;
 
 
 	int reconnectTimeout = 0;
 	int reconnectTimeout = 0;
 
 
@@ -57,7 +59,8 @@ private:
 
 
 	void UpdateDelayMsg();
 	void UpdateDelayMsg();
 	void UpdateBandwidth();
 	void UpdateBandwidth();
-	void UpdateSessionTime();
+	void UpdateStreamTime();
+	void UpdateRecordTime();
 	void UpdateDroppedFrames();
 	void UpdateDroppedFrames();
 
 
 	static void OBSOutputReconnect(void *data, calldata_t *params);
 	static void OBSOutputReconnect(void *data, calldata_t *params);