mirror of
https://github.com/WarmUpTill/SceneSwitcher.git
synced 2026-06-14 12:51:43 -05:00
Add status dock
This commit is contained in:
parent
2649efe8b3
commit
3417fc5407
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
|||
30
src/headers/status-dock.hpp
Normal file
30
src/headers/status-dock.hpp
Normal 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);
|
||||
|
|
@ -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
91
src/status-dock.cpp
Normal 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);
|
||||
}
|
||||
}
|
||||
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user