mirror of
https://github.com/WarmUpTill/SceneSwitcher.git
synced 2026-09-08 01:26:04 -05:00
I18n Support (#72)
* adapt UI for i18n * add placeWidgets() helper function to ease translation * add hint about Transition Matrix plugin on Transition tab * translate * rework UI of file tab * write status of plugin to scene info file
This commit is contained in:
@@ -8,16 +8,16 @@
|
||||
#include "headers/curl-helper.hpp"
|
||||
#include "headers/utility.hpp"
|
||||
|
||||
#define LOCAL_FILE_IDX 0
|
||||
#define REMOTE_FILE_IDX 1
|
||||
|
||||
std::hash<std::string> strHash;
|
||||
static QMetaObject::Connection addPulse;
|
||||
static std::hash<std::string> strHash;
|
||||
|
||||
void AdvSceneSwitcher::on_browseButton_clicked()
|
||||
{
|
||||
QString path = QFileDialog::getOpenFileName(
|
||||
this, tr("Select a file to write to ..."), QDir::currentPath(),
|
||||
tr("Text files (*.txt)"));
|
||||
this,
|
||||
tr(obs_module_text("AdvSceneSwitcher.fileTab.selectWrite")),
|
||||
QDir::currentPath(),
|
||||
tr(obs_module_text("AdvSceneSwitcher.fileTab.textFileType")));
|
||||
if (!path.isEmpty())
|
||||
ui->writePathLineEdit->setText(path);
|
||||
}
|
||||
@@ -70,8 +70,10 @@ void AdvSceneSwitcher::on_writePathLineEdit_textChanged(const QString &text)
|
||||
void AdvSceneSwitcher::on_browseButton_2_clicked()
|
||||
{
|
||||
QString path = QFileDialog::getOpenFileName(
|
||||
this, tr("Select a file to read from ..."), QDir::currentPath(),
|
||||
tr("Any files (*.*)"));
|
||||
this,
|
||||
tr(obs_module_text("AdvSceneSwitcher.fileTab.selectRead")),
|
||||
QDir::currentPath(),
|
||||
tr(obs_module_text("AdvSceneSwitcher.fileTab.anyFileType")));
|
||||
if (!path.isEmpty())
|
||||
ui->readPathLineEdit->setText(path);
|
||||
}
|
||||
@@ -92,6 +94,19 @@ void SwitcherData::writeSceneInfoToFile()
|
||||
obs_source_release(currentSource);
|
||||
}
|
||||
|
||||
void SwitcherData::writeToStatusFile(QString msg)
|
||||
{
|
||||
if (!fileIO.writeEnabled || fileIO.writePath.empty())
|
||||
return;
|
||||
|
||||
QFile file(QString::fromStdString(fileIO.writePath));
|
||||
if (file.open(QIODevice::ReadWrite)) {
|
||||
QTextStream stream(&file);
|
||||
stream << msg << endl;
|
||||
}
|
||||
file.close();
|
||||
}
|
||||
|
||||
void SwitcherData::checkSwitchInfoFromFile(bool &match, OBSWeakSource &scene,
|
||||
OBSWeakSource &transition)
|
||||
{
|
||||
@@ -151,7 +166,7 @@ bool compareIgnoringLineEnding(QString &s1, QString &s2)
|
||||
QTextStream s1stream(&s1);
|
||||
QTextStream s2stream(&s2);
|
||||
|
||||
while (!s1stream.atEnd() && !s2stream.atEnd()) {
|
||||
while (!s1stream.atEnd() || !s2stream.atEnd()) {
|
||||
QString s1s = s1stream.readLine();
|
||||
QString s2s = s2stream.readLine();
|
||||
if (QString::compare(s1s, s2s, Qt::CaseSensitive) != 0) {
|
||||
@@ -171,8 +186,8 @@ bool matchFileContent(QString &filedata, FileSwitch &s)
|
||||
}
|
||||
|
||||
if (s.useRegex) {
|
||||
return filedata.contains(
|
||||
QRegularExpression(QString::fromStdString(s.text)));
|
||||
QRegExp rx(QString::fromStdString(s.text));
|
||||
return rx.exactMatch(filedata);
|
||||
}
|
||||
|
||||
QString text = QString::fromStdString(s.text);
|
||||
@@ -190,7 +205,7 @@ bool checkLocalFileContent(FileSwitch &s)
|
||||
{
|
||||
QString t = QString::fromStdString(s.text);
|
||||
QFile file(QString::fromStdString(s.file));
|
||||
if (!file.open(QIODevice::ReadOnly))
|
||||
if (s.file.empty() || !file.open(QIODevice::ReadOnly))
|
||||
return false;
|
||||
|
||||
if (s.useTime) {
|
||||
@@ -230,86 +245,37 @@ void SwitcherData::checkFileContent(bool &match, OBSWeakSource &scene,
|
||||
}
|
||||
}
|
||||
|
||||
void AdvSceneSwitcher::on_browseButton_3_clicked()
|
||||
{
|
||||
QString path = QFileDialog::getOpenFileName(
|
||||
this, tr("Select a file to read from ..."), QDir::currentPath(),
|
||||
tr("Any files (*.*)"));
|
||||
if (!path.isEmpty())
|
||||
ui->filePathLineEdit->setText(path);
|
||||
}
|
||||
|
||||
void AdvSceneSwitcher::on_fileType_currentIndexChanged(int idx)
|
||||
{
|
||||
if (idx == -1)
|
||||
return;
|
||||
if (idx == LOCAL_FILE_IDX) {
|
||||
ui->browseButton_3->setDisabled(false);
|
||||
ui->fileContentTimeCheckBox->setDisabled(false);
|
||||
ui->remoteFileWarningLabel->hide();
|
||||
}
|
||||
if (idx == REMOTE_FILE_IDX) {
|
||||
ui->browseButton_3->setDisabled(true);
|
||||
ui->fileContentTimeCheckBox->setDisabled(true);
|
||||
ui->remoteFileWarningLabel->show();
|
||||
}
|
||||
}
|
||||
|
||||
void AdvSceneSwitcher::on_fileAdd_clicked()
|
||||
{
|
||||
QString sceneName = ui->fileScenes->currentText();
|
||||
QString transitionName = ui->fileTransitions->currentText();
|
||||
QString fileName = ui->filePathLineEdit->text();
|
||||
QString text = ui->fileTextEdit->toPlainText();
|
||||
bool remote = (ui->fileType->currentIndex() == REMOTE_FILE_IDX);
|
||||
bool useRegex = ui->fileContentRegExCheckBox->isChecked();
|
||||
bool useTime = ui->fileContentTimeCheckBox->isChecked();
|
||||
bool onlyMatchIfChanged = ui->onlyMatchIfChanged->isChecked();
|
||||
|
||||
if (sceneName.isEmpty() || transitionName.isEmpty() ||
|
||||
fileName.isEmpty() || text.isEmpty())
|
||||
return;
|
||||
|
||||
OBSWeakSource source = GetWeakSourceByQString(sceneName);
|
||||
OBSWeakSource transition = GetWeakTransitionByQString(transitionName);
|
||||
|
||||
QString switchText = MakeFileSwitchName(sceneName, transitionName,
|
||||
fileName, text, useRegex,
|
||||
useTime, onlyMatchIfChanged);
|
||||
QVariant v = QVariant::fromValue(switchText);
|
||||
|
||||
QListWidgetItem *item =
|
||||
new QListWidgetItem(switchText, ui->fileScenesList);
|
||||
item->setData(Qt::UserRole, v);
|
||||
|
||||
std::lock_guard<std::mutex> lock(switcher->m);
|
||||
switcher->fileSwitches.emplace_back(source, transition,
|
||||
fileName.toUtf8().constData(),
|
||||
text.toUtf8().constData(), remote,
|
||||
useRegex, useTime,
|
||||
onlyMatchIfChanged);
|
||||
switcher->fileSwitches.emplace_back();
|
||||
|
||||
QListWidgetItem *item;
|
||||
item = new QListWidgetItem(ui->fileSwitches);
|
||||
ui->fileSwitches->addItem(item);
|
||||
FileSwitchWidget *sw =
|
||||
new FileSwitchWidget(&switcher->fileSwitches.back());
|
||||
item->setSizeHint(sw->minimumSizeHint());
|
||||
ui->fileSwitches->setItemWidget(item, sw);
|
||||
}
|
||||
|
||||
void AdvSceneSwitcher::on_fileRemove_clicked()
|
||||
{
|
||||
QListWidgetItem *item = ui->fileScenesList->currentItem();
|
||||
QListWidgetItem *item = ui->fileSwitches->currentItem();
|
||||
if (!item)
|
||||
return;
|
||||
|
||||
int idx = ui->fileScenesList->currentRow();
|
||||
if (idx == -1)
|
||||
return;
|
||||
|
||||
{
|
||||
std::lock_guard<std::mutex> lock(switcher->m);
|
||||
|
||||
int idx = ui->fileSwitches->currentRow();
|
||||
auto &switches = switcher->fileSwitches;
|
||||
switches.erase(switches.begin() + idx);
|
||||
}
|
||||
qDeleteAll(ui->fileScenesList->selectedItems());
|
||||
|
||||
delete item;
|
||||
}
|
||||
|
||||
void AdvSceneSwitcher::on_fileScenesList_currentRowChanged(int idx)
|
||||
void AdvSceneSwitcher::on_fileSwitches_currentRowChanged(int idx)
|
||||
{
|
||||
if (loading)
|
||||
return;
|
||||
@@ -321,51 +287,47 @@ void AdvSceneSwitcher::on_fileScenesList_currentRowChanged(int idx)
|
||||
if ((int)switcher->fileSwitches.size() <= idx)
|
||||
return;
|
||||
FileSwitch s = switcher->fileSwitches[idx];
|
||||
|
||||
std::string sceneName = GetWeakSourceName(s.scene);
|
||||
std::string transitionName = GetWeakSourceName(s.transition);
|
||||
|
||||
ui->fileScenes->setCurrentText(sceneName.c_str());
|
||||
ui->fileTransitions->setCurrentText(transitionName.c_str());
|
||||
ui->fileTextEdit->setPlainText(s.text.c_str());
|
||||
ui->filePathLineEdit->setText(s.file.c_str());
|
||||
if (s.remote)
|
||||
ui->fileType->setCurrentIndex(REMOTE_FILE_IDX);
|
||||
ui->remoteFileWarningLabel->show();
|
||||
else
|
||||
ui->fileType->setCurrentIndex(LOCAL_FILE_IDX);
|
||||
ui->fileContentRegExCheckBox->setChecked(s.useRegex);
|
||||
ui->fileContentTimeCheckBox->setChecked(s.useTime);
|
||||
ui->onlyMatchIfChanged->setChecked(s.onlyMatchIfChanged);
|
||||
ui->remoteFileWarningLabel->hide();
|
||||
}
|
||||
|
||||
void AdvSceneSwitcher::on_fileUp_clicked()
|
||||
{
|
||||
int index = ui->fileScenesList->currentRow();
|
||||
if (index != -1 && index != 0) {
|
||||
ui->fileScenesList->insertItem(
|
||||
index - 1, ui->fileScenesList->takeItem(index));
|
||||
ui->fileScenesList->setCurrentRow(index - 1);
|
||||
int index = ui->fileSwitches->currentRow();
|
||||
if (!listMoveUp(ui->fileSwitches))
|
||||
return;
|
||||
|
||||
std::lock_guard<std::mutex> lock(switcher->m);
|
||||
FileSwitchWidget *s1 = (FileSwitchWidget *)ui->fileSwitches->itemWidget(
|
||||
ui->fileSwitches->item(index));
|
||||
FileSwitchWidget *s2 = (FileSwitchWidget *)ui->fileSwitches->itemWidget(
|
||||
ui->fileSwitches->item(index - 1));
|
||||
FileSwitchWidget::swapSwitchData(s1, s2);
|
||||
|
||||
iter_swap(switcher->fileSwitches.begin() + index,
|
||||
switcher->fileSwitches.begin() + index - 1);
|
||||
}
|
||||
std::lock_guard<std::mutex> lock(switcher->m);
|
||||
|
||||
std::swap(switcher->fileSwitches[index],
|
||||
switcher->fileSwitches[index - 1]);
|
||||
}
|
||||
|
||||
void AdvSceneSwitcher::on_fileDown_clicked()
|
||||
{
|
||||
int index = ui->fileScenesList->currentRow();
|
||||
if (index != -1 && index != ui->fileScenesList->count() - 1) {
|
||||
ui->fileScenesList->insertItem(
|
||||
index + 1, ui->fileScenesList->takeItem(index));
|
||||
ui->fileScenesList->setCurrentRow(index + 1);
|
||||
int index = ui->fileSwitches->currentRow();
|
||||
|
||||
std::lock_guard<std::mutex> lock(switcher->m);
|
||||
if (!listMoveDown(ui->fileSwitches))
|
||||
return;
|
||||
|
||||
iter_swap(switcher->fileSwitches.begin() + index,
|
||||
switcher->fileSwitches.begin() + index + 1);
|
||||
}
|
||||
FileSwitchWidget *s1 = (FileSwitchWidget *)ui->fileSwitches->itemWidget(
|
||||
ui->fileSwitches->item(index));
|
||||
FileSwitchWidget *s2 = (FileSwitchWidget *)ui->fileSwitches->itemWidget(
|
||||
ui->fileSwitches->item(index + 1));
|
||||
FileSwitchWidget::swapSwitchData(s1, s2);
|
||||
|
||||
std::lock_guard<std::mutex> lock(switcher->m);
|
||||
|
||||
std::swap(switcher->fileSwitches[index],
|
||||
switcher->fileSwitches[index + 1]);
|
||||
}
|
||||
|
||||
void SwitcherData::saveFileSwitches(obs_data_t *obj)
|
||||
@@ -447,31 +409,27 @@ void SwitcherData::loadFileSwitches(obs_data_t *obj)
|
||||
|
||||
void AdvSceneSwitcher::setupFileTab()
|
||||
{
|
||||
populateSceneSelection(ui->fileScenes, false);
|
||||
populateTransitionSelection(ui->fileTransitions);
|
||||
|
||||
ui->fileType->addItem("local");
|
||||
ui->fileType->addItem("remote");
|
||||
ui->remoteFileWarningLabel->setText(
|
||||
"Note that the scene switcher will try to access the remote location every " +
|
||||
QString::number(switcher->interval) + "ms");
|
||||
obs_module_text("AdvSceneSwitcher.fileTab.remoteFileWarning1") +
|
||||
QString::number(switcher->interval) +
|
||||
obs_module_text("AdvSceneSwitcher.fileTab.remoteFileWarning2"));
|
||||
ui->remoteFileWarningLabel->hide();
|
||||
|
||||
if (switcher->curl)
|
||||
ui->libcurlWarning->setVisible(false);
|
||||
|
||||
for (auto &s : switcher->fileSwitches) {
|
||||
std::string sceneName = GetWeakSourceName(s.scene);
|
||||
std::string transitionName = GetWeakSourceName(s.transition);
|
||||
QString listText = MakeFileSwitchName(
|
||||
sceneName.c_str(), transitionName.c_str(),
|
||||
s.file.c_str(), s.text.c_str(), s.useRegex, s.useTime,
|
||||
s.onlyMatchIfChanged);
|
||||
|
||||
QListWidgetItem *item =
|
||||
new QListWidgetItem(listText, ui->fileScenesList);
|
||||
item->setData(Qt::UserRole, listText);
|
||||
QListWidgetItem *item;
|
||||
item = new QListWidgetItem(ui->fileSwitches);
|
||||
ui->fileSwitches->addItem(item);
|
||||
FileSwitchWidget *sw = new FileSwitchWidget(&s);
|
||||
item->setSizeHint(sw->minimumSizeHint());
|
||||
ui->fileSwitches->setItemWidget(item, sw);
|
||||
}
|
||||
|
||||
if (switcher->fileSwitches.size() == 0)
|
||||
addPulse = PulseWidget(ui->fileAdd, QColor(Qt::green));
|
||||
|
||||
ui->readPathLineEdit->setText(
|
||||
QString::fromStdString(switcher->fileIO.readPath.c_str()));
|
||||
ui->readFileCheckBox->setChecked(switcher->fileIO.readEnabled);
|
||||
@@ -487,28 +445,175 @@ void AdvSceneSwitcher::setupFileTab()
|
||||
}
|
||||
}
|
||||
|
||||
static inline QString MakeFileSwitchName(const QString &scene,
|
||||
const QString &transition,
|
||||
const QString &fileName,
|
||||
const QString &text, bool useRegex,
|
||||
bool useTime, bool onlyMatchIfChanged)
|
||||
FileSwitchWidget::FileSwitchWidget(FileSwitch *s) : SwitchWidget(s, false)
|
||||
{
|
||||
QString switchName = QStringLiteral("Switch to ") + scene +
|
||||
QStringLiteral(" using ") + transition +
|
||||
QStringLiteral(" if ") + fileName;
|
||||
if (useTime)
|
||||
switchName += QStringLiteral(" was modified and");
|
||||
if (onlyMatchIfChanged)
|
||||
switchName += QStringLiteral(" if the contents changed and");
|
||||
switchName += QStringLiteral(" contains");
|
||||
if (useRegex)
|
||||
switchName += QStringLiteral(" (RegEx): \n\"");
|
||||
else
|
||||
switchName += QStringLiteral(": \n\"");
|
||||
if (text.length() > 30)
|
||||
switchName += text.left(27) + QStringLiteral("...\"");
|
||||
else
|
||||
switchName += text + QStringLiteral("\"");
|
||||
fileType = new QComboBox();
|
||||
filePath = new QLineEdit();
|
||||
browseButton =
|
||||
new QPushButton(obs_module_text("AdvSceneSwitcher.browse"));
|
||||
browseButton->setStyleSheet("border:1px solid gray;");
|
||||
matchText = new QPlainTextEdit();
|
||||
useRegex = new QCheckBox(
|
||||
obs_module_text("AdvSceneSwitcher.fileTab.useRegExp"));
|
||||
checkModificationDate = new QCheckBox(obs_module_text(
|
||||
"AdvSceneSwitcher.fileTab.checkfileContentTime"));
|
||||
checkFileContent = new QCheckBox(
|
||||
obs_module_text("AdvSceneSwitcher.fileTab.checkfileContent"));
|
||||
|
||||
return switchName;
|
||||
QWidget::connect(fileType, SIGNAL(currentIndexChanged(int)), this,
|
||||
SLOT(FileTypeChanged(int)));
|
||||
QWidget::connect(filePath, SIGNAL(editingFinished()), this,
|
||||
SLOT(FilePathChanged()));
|
||||
QWidget::connect(browseButton, SIGNAL(clicked()), this,
|
||||
SLOT(BrowseButtonClicked()));
|
||||
QWidget::connect(matchText, SIGNAL(textChanged()), this,
|
||||
SLOT(MatchTextChanged()));
|
||||
QWidget::connect(useRegex, SIGNAL(stateChanged(int)), this,
|
||||
SLOT(UseRegexChanged(int)));
|
||||
QWidget::connect(checkModificationDate, SIGNAL(stateChanged(int)), this,
|
||||
SLOT(CheckModificationDateChanged(int)));
|
||||
QWidget::connect(checkFileContent, SIGNAL(stateChanged(int)), this,
|
||||
SLOT(CheckFileContentChanged(int)));
|
||||
|
||||
fileType->addItem(obs_module_text("AdvSceneSwitcher.fileTab.local"));
|
||||
fileType->addItem(obs_module_text("AdvSceneSwitcher.fileTab.remote"));
|
||||
|
||||
if (s) {
|
||||
if (s->remote)
|
||||
fileType->setCurrentIndex(1);
|
||||
else
|
||||
fileType->setCurrentIndex(0);
|
||||
filePath->setText(QString::fromStdString(s->file));
|
||||
matchText->setPlainText(QString::fromStdString(s->text));
|
||||
useRegex->setChecked(s->useRegex);
|
||||
checkModificationDate->setChecked(s->useTime);
|
||||
checkFileContent->setChecked(s->onlyMatchIfChanged);
|
||||
}
|
||||
|
||||
setStyleSheet("* { background-color: transparent; }");
|
||||
|
||||
std::unordered_map<std::string, QWidget *> widgetPlaceholders = {
|
||||
{"{{fileType}}", fileType},
|
||||
{"{{filePath}}", filePath},
|
||||
{"{{browseButton}}", browseButton},
|
||||
{"{{matchText}}", matchText},
|
||||
{"{{useRegex}}", useRegex},
|
||||
{"{{checkModificationDate}}", checkModificationDate},
|
||||
{"{{checkFileContent}}", checkFileContent},
|
||||
{"{{scenes}}", scenes},
|
||||
{"{{transitions}}", transitions}};
|
||||
|
||||
QVBoxLayout *mainLayout = new QVBoxLayout;
|
||||
QHBoxLayout *line1Layout = new QHBoxLayout;
|
||||
QHBoxLayout *line2Layout = new QHBoxLayout;
|
||||
QHBoxLayout *line3Layout = new QHBoxLayout;
|
||||
placeWidgets(obs_module_text("AdvSceneSwitcher.fileTab.entry"),
|
||||
line1Layout, widgetPlaceholders);
|
||||
placeWidgets(obs_module_text("AdvSceneSwitcher.fileTab.entry2"),
|
||||
line2Layout, widgetPlaceholders, false);
|
||||
placeWidgets(obs_module_text("AdvSceneSwitcher.fileTab.entry3"),
|
||||
line3Layout, widgetPlaceholders);
|
||||
mainLayout->addLayout(line1Layout);
|
||||
mainLayout->addLayout(line2Layout);
|
||||
mainLayout->addLayout(line3Layout);
|
||||
|
||||
setLayout(mainLayout);
|
||||
|
||||
switchData = s;
|
||||
|
||||
loading = false;
|
||||
}
|
||||
|
||||
FileSwitch *FileSwitchWidget::getSwitchData()
|
||||
{
|
||||
return switchData;
|
||||
}
|
||||
|
||||
void FileSwitchWidget::setSwitchData(FileSwitch *s)
|
||||
{
|
||||
switchData = s;
|
||||
}
|
||||
|
||||
void FileSwitchWidget::swapSwitchData(FileSwitchWidget *s1,
|
||||
FileSwitchWidget *s2)
|
||||
{
|
||||
SwitchWidget::swapSwitchData(s1, s2);
|
||||
|
||||
FileSwitch *t = s1->getSwitchData();
|
||||
s1->setSwitchData(s2->getSwitchData());
|
||||
s2->setSwitchData(t);
|
||||
}
|
||||
|
||||
void FileSwitchWidget::FileTypeChanged(int index)
|
||||
{
|
||||
if (loading || !switchData)
|
||||
return;
|
||||
|
||||
if ((file_type)index == LOCAL) {
|
||||
browseButton->setDisabled(false);
|
||||
checkModificationDate->setDisabled(false);
|
||||
} else {
|
||||
browseButton->setDisabled(true);
|
||||
checkModificationDate->setDisabled(true);
|
||||
}
|
||||
|
||||
std::lock_guard<std::mutex> lock(switcher->m);
|
||||
switchData->remote = (file_type)index == REMOTE;
|
||||
}
|
||||
|
||||
void FileSwitchWidget::FilePathChanged()
|
||||
{
|
||||
if (loading || !switchData)
|
||||
return;
|
||||
std::lock_guard<std::mutex> lock(switcher->m);
|
||||
switchData->file = filePath->text().toUtf8().constData();
|
||||
}
|
||||
|
||||
void FileSwitchWidget::BrowseButtonClicked()
|
||||
{
|
||||
if (loading || !switchData)
|
||||
return;
|
||||
|
||||
QString path = QFileDialog::getOpenFileName(
|
||||
this,
|
||||
tr(obs_module_text("AdvSceneSwitcher.fileTab.selectRead")),
|
||||
QDir::currentPath(),
|
||||
tr(obs_module_text("AdvSceneSwitcher.fileTab.anyFileType")));
|
||||
if (path.isEmpty())
|
||||
return;
|
||||
|
||||
filePath->setText(path);
|
||||
FilePathChanged();
|
||||
}
|
||||
|
||||
void FileSwitchWidget::MatchTextChanged()
|
||||
{
|
||||
if (loading || !switchData)
|
||||
return;
|
||||
std::lock_guard<std::mutex> lock(switcher->m);
|
||||
switchData->text = matchText->toPlainText().toUtf8().constData();
|
||||
}
|
||||
|
||||
void FileSwitchWidget::UseRegexChanged(int state)
|
||||
{
|
||||
if (loading || !switchData)
|
||||
return;
|
||||
std::lock_guard<std::mutex> lock(switcher->m);
|
||||
switchData->useRegex = state;
|
||||
}
|
||||
|
||||
void FileSwitchWidget::CheckModificationDateChanged(int state)
|
||||
{
|
||||
if (loading || !switchData)
|
||||
return;
|
||||
std::lock_guard<std::mutex> lock(switcher->m);
|
||||
switchData->useTime = state;
|
||||
}
|
||||
|
||||
void FileSwitchWidget::CheckFileContentChanged(int state)
|
||||
{
|
||||
if (loading || !switchData)
|
||||
return;
|
||||
std::lock_guard<std::mutex> lock(switcher->m);
|
||||
switchData->onlyMatchIfChanged = state;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user