save and load tab order

This commit is contained in:
WarmUpTill 2020-07-31 21:58:17 +02:00
parent 79f5ec340d
commit 1516263d2a
5 changed files with 125 additions and 1 deletions

View File

@ -2038,7 +2038,7 @@
</widget>
<widget class="QWidget" name="mediaTab">
<attribute name="title">
<string notr="true"> Media </string>
<string notr="true">Media</string>
</attribute>
<layout class="QVBoxLayout" name="verticalLayout_28">
<item>

View File

@ -45,6 +45,8 @@ void SceneSwitcher::loadUI()
#if __APPLE__
setMinimumHeight(700);
#endif
setTabOrder();
BPtr<char *> scenes = obs_frontend_get_scene_names();
char **temp = scenes;
while (*temp) {

View File

@ -246,6 +246,83 @@ void SceneSwitcher::on_importSettings_clicked()
}
}
int findTabIndex(QTabBar *bar, int pos)
{
int at = -1;
QString tabName = "";
switch (pos) {
case 0:
tabName = "General";
break;
case 1:
tabName = "Transition";
break;
case 2:
tabName = "Pause";
break;
case 3:
tabName = "Title";
break;
case 4:
tabName = "Executable";
break;
case 5:
tabName = "Region";
break;
case 6:
tabName = "Media";
break;
case 7:
tabName = "File";
break;
case 8:
tabName = "Random";
break;
case 9:
tabName = "Time";
break;
case 10:
tabName = "Idle";
break;
case 11:
tabName = "Sequence";
break;
}
for (int i = 0; i < bar->count(); ++i) {
if (bar->tabText(i).compare(tabName) == 0) {
at = i;
break;
}
}
if (at == -1)
blog(LOG_INFO, "Advanced Scene Switcher failed to find tab %s",
tabName.toUtf8().constData());
return at;
}
void SceneSwitcher::setTabOrder()
{
QTabBar *bar = ui->tabWidget->tabBar();
for (int i = 0; i < bar->count(); ++i) {
int curPos = findTabIndex(bar, switcher->tabOrder[i]);
if (i != curPos && curPos != -1)
bar->moveTab(curPos, i);
}
connect(bar, &QTabBar::tabMoved, this, &SceneSwitcher::on_tabMoved);
}
void SceneSwitcher::on_tabMoved(int from, int to)
{
if (loading)
return;
std::swap(switcher->tabOrder[from], switcher->tabOrder[to]);
}
void SwitcherData::saveGeneralSettings(obs_data_t *obj)
{
obs_data_set_int(obj, "interval", switcher->interval);
@ -285,6 +362,19 @@ void SwitcherData::saveGeneralSettings(obs_data_t *obj)
switcher->functionNamesByPriority[7]);
obs_data_set_int(obj, "threadPriority", switcher->threadPriority);
obs_data_set_int(obj, "generalTabPos", switcher->tabOrder[0]);
obs_data_set_int(obj, "transitionTabPos", switcher->tabOrder[1]);
obs_data_set_int(obj, "pauseTabPos", switcher->tabOrder[2]);
obs_data_set_int(obj, "titleTabPos", switcher->tabOrder[3]);
obs_data_set_int(obj, "exeTabPos", switcher->tabOrder[4]);
obs_data_set_int(obj, "regionTabPos", switcher->tabOrder[5]);
obs_data_set_int(obj, "mediaTabPos", switcher->tabOrder[6]);
obs_data_set_int(obj, "fileTabPos", switcher->tabOrder[7]);
obs_data_set_int(obj, "randomTabPos", switcher->tabOrder[8]);
obs_data_set_int(obj, "timeTabPos", switcher->tabOrder[9]);
obs_data_set_int(obj, "idleTabPos", switcher->tabOrder[10]);
obs_data_set_int(obj, "sequenceTabPos", switcher->tabOrder[11]);
}
void SwitcherData::loadGeneralSettings(obs_data_t *obj)
@ -348,4 +438,32 @@ void SwitcherData::loadGeneralSettings(obs_data_t *obj)
obs_data_set_default_int(obj, "threadPriority",
QThread::NormalPriority);
switcher->threadPriority = obs_data_get_int(obj, "threadPriority");
obs_data_set_default_int(obj, "generalTabPos", 0);
obs_data_set_default_int(obj, "transitionTabPos", 1);
obs_data_set_default_int(obj, "pauseTabPos", 2);
obs_data_set_default_int(obj, "titleTabPos", 3);
obs_data_set_default_int(obj, "exeTabPos", 4);
obs_data_set_default_int(obj, "regionTabPos", 5);
obs_data_set_default_int(obj, "mediaTabPos", 6);
obs_data_set_default_int(obj, "fileTabPos", 7);
obs_data_set_default_int(obj, "randomTabPos", 8);
obs_data_set_default_int(obj, "timeTabPos", 9);
obs_data_set_default_int(obj, "idleTabPos", 10);
obs_data_set_default_int(obj, "sequenceTabPos", 11);
switcher->tabOrder.emplace_back(obs_data_get_int(obj, "generalTabPos"));
switcher->tabOrder.emplace_back(
obs_data_get_int(obj, "transitionTabPos"));
switcher->tabOrder.emplace_back(obs_data_get_int(obj, "pauseTabPos"));
switcher->tabOrder.emplace_back(obs_data_get_int(obj, "titleTabPos"));
switcher->tabOrder.emplace_back(obs_data_get_int(obj, "exeTabPos"));
switcher->tabOrder.emplace_back(obs_data_get_int(obj, "regionTabPos"));
switcher->tabOrder.emplace_back(obs_data_get_int(obj, "mediaTabPos"));
switcher->tabOrder.emplace_back(obs_data_get_int(obj, "fileTabPos"));
switcher->tabOrder.emplace_back(obs_data_get_int(obj, "randomTabPos"));
switcher->tabOrder.emplace_back(obs_data_get_int(obj, "timeTabPos"));
switcher->tabOrder.emplace_back(obs_data_get_int(obj, "idleTabPos"));
switcher->tabOrder.emplace_back(
obs_data_get_int(obj, "sequenceTabPos"));
}

View File

@ -50,6 +50,7 @@ public:
void UpdateIdleDataScene(const QString &name);
void loadUI();
void setTabOrder();
public slots:
void on_switches_currentRowChanged(int idx);
@ -64,6 +65,7 @@ public slots:
void on_noMatchSwitchScene_currentTextChanged(const QString &text);
void on_checkInterval_valueChanged(int value);
void on_toggleStartButton_clicked();
void on_tabMoved(int from, int to);
void on_screenRegions_currentRowChanged(int idx);
void on_screenRegionAdd_clicked();

View File

@ -345,6 +345,8 @@ struct SwitcherData {
uint32_t threadPriority = QThread::NormalPriority;
std::vector<int> tabOrder;
void Thread();
void Start();
void Stop();