Add status dock

This commit is contained in:
WarmUpTill 2022-01-02 04:08:02 +01:00 committed by WarmUpTill
parent 2649efe8b3
commit 3417fc5407
7 changed files with 141 additions and 8 deletions

View File

@ -256,6 +256,7 @@ set(advanced-scene-switcher_HEADERS
src/headers/duration-control.hpp
src/headers/file-selection.hpp
src/headers/section.hpp
src/headers/status-dock.hpp
src/headers/platform-funcs.hpp
src/headers/utility.hpp
src/headers/volume-control.hpp
@ -353,6 +354,7 @@ set(advanced-scene-switcher_SOURCES
src/transition-selection.cpp
src/name-dialog.cpp
src/duration-control.cpp
src/status-dock.cpp
src/section.cpp
src/utility.cpp
src/volume-control.cpp

View File

@ -8,6 +8,7 @@
#include <obs-frontend-api.h>
#include "headers/advanced-scene-switcher.hpp"
#include "headers/status-dock.hpp"
#include "headers/curl-helper.hpp"
#include "headers/utility.hpp"
#include "headers/version.h"
@ -635,14 +636,19 @@ extern "C" void InitSceneSwitcher()
PlatformInit();
dock = new StatusDock(
static_cast<QMainWindow *>(obs_frontend_get_main_window()));
obs_frontend_add_dock(dock);
auto cb = []() {
if (switcher->settingsWindowOpened) {
ssWindow->show();
ssWindow->raise();
ssWindow->activateWindow();
} else {
ssWindow = new AdvSceneSwitcher(
(QMainWindow *)obs_frontend_get_main_window());
ssWindow =
new AdvSceneSwitcher(static_cast<QMainWindow *>(
obs_frontend_get_main_window()));
ssWindow->setAttribute(Qt::WA_DeleteOnClose);
ssWindow->show();
}

View File

@ -1,9 +1,9 @@
#include "headers/advanced-scene-switcher.hpp"
#include "headers/status-dock.hpp"
#include "headers/utility.hpp"
#include "headers/version.h"
#include <QFileDialog>
#include <QGuiApplication>
#include <QStandardPaths>
QMetaObject::Connection inactivePluse;
@ -436,11 +436,6 @@ void AdvSceneSwitcher::setTabOrder()
connect(bar, &QTabBar::tabMoved, this, &AdvSceneSwitcher::on_tabMoved);
}
bool windowPosValid(QPoint pos)
{
return !!QGuiApplication::screenAt(pos);
}
void AdvSceneSwitcher::restoreWindowGeo()
{
if (switcher->saveWindowGeo && windowPosValid(switcher->windowPos)) {
@ -492,6 +487,7 @@ void SwitcherData::loadSettings(obs_data_t *obj)
loadSceneTriggers(obj);
loadGeneralSettings(obj);
loadHotkeys(obj);
loadDock(obj);
}
void SwitcherData::saveSettings(obs_data_t *obj)
@ -522,6 +518,7 @@ void SwitcherData::saveSettings(obs_data_t *obj)
saveSceneTriggers(obj);
saveGeneralSettings(obj);
saveHotkeys(obj);
saveDock(obj);
saveVersion(obj, g_GIT_SHA1);
}

View File

@ -0,0 +1,30 @@
#pragma once
#include <QDockWidget>
#include <QPushButton>
#include <QLabel>
#include <QTimer>
#include <obs-data.h>
class StatusDock : public QDockWidget {
Q_OBJECT
public:
StatusDock(QWidget *parent = 0);
private slots:
void ButtonClicked();
void UpdateStatus();
private:
void SetStopped();
void SetStarted();
QPushButton *_button;
QLabel *_status;
QTimer _timer;
};
extern StatusDock *dock;
void saveDock(obs_data_t *obj);
void loadDock(obs_data_t *obj);

View File

@ -82,3 +82,4 @@ void populateSceneItemSelection(QComboBox *list,
OBSWeakSource sceneWeakSource = nullptr);
void populateSceneItemSelection(QComboBox *list, SceneSelection &s);
void populateSourceGroupSelection(QComboBox *list);
bool windowPosValid(QPoint pos);

91
src/status-dock.cpp Normal file
View File

@ -0,0 +1,91 @@
#include "headers/status-dock.hpp"
#include "headers/advanced-scene-switcher.hpp"
#include "headers/utility.hpp"
#include <obs-module.h>
#include <QMainWindow>
#include <QLayout>
StatusDock *dock = nullptr;
StatusDock::StatusDock(QWidget *parent)
: QDockWidget(obs_module_text("AdvSceneSwitcher.windowTitle"), parent)
{
_button = new QPushButton(
obs_module_text("AdvSceneSwitcher.generalTab.status.start"));
_status =
new QLabel(obs_module_text("AdvSceneSwitcher.status.inactive"));
QWidget::connect(_button, SIGNAL(clicked()), this,
SLOT(ButtonClicked()));
QHBoxLayout *statusLayout = new QHBoxLayout;
statusLayout->addWidget(new QLabel(obs_module_text(
"AdvSceneSwitcher.generalTab.status.currentStatus")));
statusLayout->addWidget(_status);
QVBoxLayout *layout = new QVBoxLayout;
layout->addLayout(statusLayout);
layout->addWidget(_button);
layout->addStretch();
QWidget *tmp = new QWidget;
tmp->setLayout(layout);
setWidget(tmp);
connect(&_timer, SIGNAL(timeout()), this, SLOT(UpdateStatus()));
_timer.start(1000);
}
void StatusDock::ButtonClicked()
{
if (switcher->th && switcher->th->isRunning()) {
switcher->Stop();
SetStopped();
} else {
switcher->Start();
SetStarted();
}
}
void StatusDock::UpdateStatus()
{
if (switcher->th && switcher->th->isRunning()) {
SetStopped();
} else {
SetStarted();
}
}
void StatusDock::SetStopped()
{
_button->setText(
obs_module_text("AdvSceneSwitcher.generalTab.status.stop"));
_status->setText(obs_module_text("AdvSceneSwitcher.status.active"));
}
void StatusDock::SetStarted()
{
_button->setText(
obs_module_text("AdvSceneSwitcher.generalTab.status.start"));
_status->setText(obs_module_text("AdvSceneSwitcher.status.inactive"));
}
void saveDock(obs_data_t *obj)
{
obs_data_set_bool(obj, "statusDockVisible", dock->isVisible());
obs_data_set_bool(obj, "statusDockFloating", dock->isFloating());
obs_data_set_int(obj, "statusDockPosX", dock->pos().x());
obs_data_set_int(obj, "statusDockPosY", dock->pos().y());
obs_data_set_int(obj, "statusDockPosWidth", dock->width());
obs_data_set_int(obj, "statusDockPosHeight", dock->height());
}
void loadDock(obs_data_t *obj)
{
dock->setVisible(obs_data_get_bool(obj, "statusDockVisible"));
dock->setFloating(obs_data_get_bool(obj, "statusDockFloating"));
QPoint pos = {
static_cast<int>(obs_data_get_int(obj, "statusDockPosX")),
static_cast<int>(obs_data_get_int(obj, "statusDockPosY"))};
if (windowPosValid(pos)) {
dock->resize(obs_data_get_int(obj, "statusDockPosWidth"),
obs_data_get_int(obj, "statusDockPosHeight"));
dock->move(pos);
}
}

View File

@ -13,6 +13,7 @@
#include <QMessageBox>
#include <QJsonDocument>
#include <QSystemTrayIcon>
#include <QGuiApplication>
#include <unordered_map>
#include <regex>
#include <set>
@ -874,6 +875,11 @@ void populateSourceGroupSelection(QComboBox *list)
list->setCurrentIndex(0);
}
bool windowPosValid(QPoint pos)
{
return !!QGuiApplication::screenAt(pos);
}
QMetaObject::Connection PulseWidget(QWidget *widget, QColor startColor,
QColor endColor, QString specifier,
bool once)