2019-07-08 00:47:29 +02:00
|
|
|
#include "record-button.hpp"
|
|
|
|
#include "window-basic-main.hpp"
|
|
|
|
|
|
|
|
void RecordButton::resizeEvent(QResizeEvent *event)
|
|
|
|
{
|
|
|
|
OBSBasic *main = OBSBasic::Get();
|
|
|
|
if (!main->pause)
|
|
|
|
return;
|
|
|
|
|
|
|
|
QSize pauseSize = main->pause->size();
|
|
|
|
int height = main->ui->recordButton->size().height();
|
|
|
|
|
|
|
|
if (pauseSize.height() != height || pauseSize.width() != height) {
|
|
|
|
main->pause->setMinimumSize(height, height);
|
|
|
|
main->pause->setMaximumSize(height, height);
|
|
|
|
}
|
2019-07-15 13:50:23 +02:00
|
|
|
|
|
|
|
event->accept();
|
2019-07-08 00:47:29 +02:00
|
|
|
}
|
2019-12-13 02:07:26 +01:00
|
|
|
|
2022-07-19 18:32:39 +02:00
|
|
|
static QWidget *firstWidget(QLayoutItem *item)
|
2019-12-13 02:07:26 +01:00
|
|
|
{
|
2022-07-19 18:32:39 +02:00
|
|
|
auto widget = item->widget();
|
|
|
|
if (widget)
|
|
|
|
return widget;
|
|
|
|
|
|
|
|
auto layout = item->layout();
|
|
|
|
if (!layout)
|
|
|
|
return nullptr;
|
|
|
|
|
|
|
|
auto n = layout->count();
|
2022-10-06 23:34:54 +02:00
|
|
|
for (auto i = 0; i < n; i++) {
|
2022-07-19 18:32:39 +02:00
|
|
|
widget = firstWidget(layout->itemAt(i));
|
|
|
|
if (widget)
|
|
|
|
return widget;
|
|
|
|
}
|
|
|
|
return nullptr;
|
|
|
|
}
|
|
|
|
|
|
|
|
static QWidget *lastWidget(QLayoutItem *item)
|
|
|
|
{
|
|
|
|
auto widget = item->widget();
|
|
|
|
if (widget)
|
|
|
|
return widget;
|
|
|
|
|
|
|
|
auto layout = item->layout();
|
|
|
|
if (!layout)
|
|
|
|
return nullptr;
|
|
|
|
|
|
|
|
for (auto i = layout->count(); i > 0; i--) {
|
|
|
|
widget = lastWidget(layout->itemAt(i - 1));
|
|
|
|
if (widget)
|
|
|
|
return widget;
|
|
|
|
}
|
|
|
|
return nullptr;
|
|
|
|
}
|
|
|
|
|
|
|
|
static QWidget *getNextWidget(QBoxLayout *container, QLayoutItem *item)
|
|
|
|
{
|
|
|
|
for (auto i = 1, n = container->count(); i < n; i++) {
|
|
|
|
if (container->itemAt(i - 1) == item)
|
|
|
|
return firstWidget(container->itemAt(i));
|
|
|
|
}
|
|
|
|
return nullptr;
|
|
|
|
}
|
|
|
|
|
|
|
|
ControlsSplitButton::ControlsSplitButton(const QString &text,
|
|
|
|
const QVariant &themeID,
|
|
|
|
void (OBSBasic::*clicked)())
|
|
|
|
: QHBoxLayout(OBSBasic::Get())
|
|
|
|
{
|
|
|
|
button.reset(new QPushButton(text));
|
|
|
|
button->setCheckable(true);
|
|
|
|
button->setProperty("themeID", themeID);
|
|
|
|
|
|
|
|
button->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Fixed);
|
|
|
|
button->installEventFilter(this);
|
|
|
|
|
2019-12-13 02:07:26 +01:00
|
|
|
OBSBasic *main = OBSBasic::Get();
|
2022-07-19 18:32:39 +02:00
|
|
|
connect(button.data(), &QPushButton::clicked, main, clicked);
|
2019-12-13 02:07:26 +01:00
|
|
|
|
2022-07-19 18:32:39 +02:00
|
|
|
addWidget(button.data());
|
|
|
|
}
|
|
|
|
|
|
|
|
void ControlsSplitButton::addIcon(const QString &name, const QVariant &themeID,
|
|
|
|
void (OBSBasic::*clicked)())
|
|
|
|
{
|
|
|
|
icon.reset(new QPushButton());
|
|
|
|
icon->setAccessibleName(name);
|
|
|
|
icon->setToolTip(name);
|
|
|
|
icon->setChecked(false);
|
|
|
|
icon->setProperty("themeID", themeID);
|
2019-12-13 02:07:26 +01:00
|
|
|
|
2022-07-19 18:32:39 +02:00
|
|
|
QSizePolicy sp;
|
|
|
|
sp.setHeightForWidth(true);
|
|
|
|
icon->setSizePolicy(sp);
|
|
|
|
|
|
|
|
OBSBasic *main = OBSBasic::Get();
|
|
|
|
connect(icon.data(), &QAbstractButton::clicked, main, clicked);
|
|
|
|
|
|
|
|
addWidget(icon.data());
|
|
|
|
QWidget::setTabOrder(button.data(), icon.data());
|
|
|
|
|
|
|
|
auto next = getNextWidget(main->ui->buttonsVLayout, this);
|
|
|
|
if (next)
|
|
|
|
QWidget::setTabOrder(icon.data(), next);
|
|
|
|
}
|
|
|
|
|
|
|
|
void ControlsSplitButton::removeIcon()
|
|
|
|
{
|
|
|
|
icon.reset();
|
|
|
|
}
|
|
|
|
|
|
|
|
void ControlsSplitButton::insert(int index)
|
|
|
|
{
|
|
|
|
OBSBasic *main = OBSBasic::Get();
|
|
|
|
auto count = main->ui->buttonsVLayout->count();
|
|
|
|
if (index < 0)
|
|
|
|
index = 0;
|
|
|
|
else if (index > count)
|
|
|
|
index = count;
|
|
|
|
|
|
|
|
main->ui->buttonsVLayout->insertLayout(index, this);
|
|
|
|
|
|
|
|
QWidget *prev = button.data();
|
|
|
|
|
|
|
|
if (index > 0) {
|
|
|
|
prev = lastWidget(main->ui->buttonsVLayout->itemAt(index - 1));
|
|
|
|
if (prev)
|
|
|
|
QWidget::setTabOrder(prev, button.data());
|
|
|
|
prev = button.data();
|
2019-12-13 02:07:26 +01:00
|
|
|
}
|
|
|
|
|
2022-07-19 18:32:39 +02:00
|
|
|
if (icon) {
|
|
|
|
QWidget::setTabOrder(button.data(), icon.data());
|
|
|
|
prev = icon.data();
|
|
|
|
}
|
|
|
|
|
|
|
|
if (index < count) {
|
|
|
|
auto next = firstWidget(
|
|
|
|
main->ui->buttonsVLayout->itemAt(index + 1));
|
|
|
|
if (next)
|
|
|
|
QWidget::setTabOrder(prev, next);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
bool ControlsSplitButton::eventFilter(QObject *obj, QEvent *event)
|
|
|
|
{
|
|
|
|
if (event->type() == QEvent::Resize && icon) {
|
|
|
|
QSize iconSize = icon->size();
|
|
|
|
int height = button->height();
|
|
|
|
|
|
|
|
if (iconSize.height() != height || iconSize.width() != height) {
|
|
|
|
icon->setMinimumSize(height, height);
|
|
|
|
icon->setMaximumSize(height, height);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return QObject::eventFilter(obj, event);
|
2019-12-13 02:07:26 +01:00
|
|
|
}
|