0
0
mirror of https://github.com/obsproject/obs-studio.git synced 2024-09-20 04:42:18 +02:00
obs-studio/UI/window-basic-status-bar.hpp
cg2121 b19f922747 UI: Fix alignment of status bar message
The status bar message was not vertically aligned properly to
other widgets in the status bar. We have to implement our own
message system here, as the default status bar in Qt has hardcoded
paddings.
2023-08-21 17:46:25 -03:00

118 lines
2.4 KiB
C++

#pragma once
#include <QStatusBar>
#include <QPointer>
#include <QTimer>
#include <obs.h>
#include <memory>
class Ui_StatusBarWidget;
class StatusBarWidget : public QWidget {
Q_OBJECT
friend class OBSBasicStatusBar;
private:
std::unique_ptr<Ui_StatusBarWidget> ui;
public:
StatusBarWidget(QWidget *parent = nullptr);
~StatusBarWidget();
};
class OBSBasicStatusBar : public QStatusBar {
Q_OBJECT
private:
StatusBarWidget *statusWidget = nullptr;
obs_output_t *streamOutput = nullptr;
obs_output_t *recordOutput = nullptr;
bool active = false;
bool overloadedNotify = true;
bool streamPauseIconToggle = false;
bool disconnected = false;
bool firstCongestionUpdate = false;
std::vector<float> congestionArray;
int retries = 0;
int totalStreamSeconds = 0;
int totalRecordSeconds = 0;
int reconnectTimeout = 0;
int delaySecTotal = 0;
int delaySecStarting = 0;
int delaySecStopping = 0;
int startSkippedFrameCount = 0;
int startTotalFrameCount = 0;
int lastSkippedFrameCount = 0;
int seconds = 0;
uint64_t lastBytesSent = 0;
uint64_t lastBytesSentTime = 0;
QPixmap excellentPixmap;
QPixmap goodPixmap;
QPixmap mediocrePixmap;
QPixmap badPixmap;
QPixmap disconnectedPixmap;
QPixmap inactivePixmap;
QPixmap recordingActivePixmap;
QPixmap recordingPausePixmap;
QPixmap recordingPauseInactivePixmap;
QPixmap recordingInactivePixmap;
QPixmap streamingActivePixmap;
QPixmap streamingInactivePixmap;
float lastCongestion = 0.0f;
QPointer<QTimer> refreshTimer;
QPointer<QTimer> messageTimer;
obs_output_t *GetOutput();
void Activate();
void Deactivate();
void UpdateDelayMsg();
void UpdateBandwidth();
void UpdateStreamTime();
void UpdateRecordTime();
void UpdateDroppedFrames();
static void OBSOutputReconnect(void *data, calldata_t *params);
static void OBSOutputReconnectSuccess(void *data, calldata_t *params);
public slots:
void UpdateCPUUsage();
void clearMessage();
void showMessage(const QString &message, int timeout = 0);
private slots:
void Reconnect(int seconds);
void ReconnectSuccess();
void UpdateStatusBar();
void UpdateCurrentFPS();
void UpdateIcons();
public:
OBSBasicStatusBar(QWidget *parent);
void StreamDelayStarting(int sec);
void StreamDelayStopping(int sec);
void StreamStarted(obs_output_t *output);
void StreamStopped();
void RecordingStarted(obs_output_t *output);
void RecordingStopped();
void RecordingPaused();
void RecordingUnpaused();
void ReconnectClear();
};