more wrappers and helpers!

This commit is contained in:
SimoZ64
2025-04-29 22:40:07 +02:00
parent b319255178
commit 730f5bed24
11 changed files with 194 additions and 89 deletions

View File

@@ -7,66 +7,70 @@ SettingsWindow::SettingsWindow() {
settings = JSONOpenOrCreate("resources/settings.json");
savePath = JSONGetField<std::string>(settings, "general", "savePath");
if (objectName().isEmpty())
setObjectName("Settings");
resize(500, 400);
setWindowTitle("Settings");
cpuSettings = std::make_unique<CPUSettings>(settings);
audioSettings = std::make_unique<AudioSettings>(settings);
inputSettings = std::make_unique<InputSettings>(settings);
generalSettings = std::make_unique<QWidget>();
keyMap = inputSettings.GetMappedKeys();
savesFolder.setName(fmt::format(savesFolder.getName(), savePath));
connect(folderBtn.get(), &QPushButton::pressed, this, [&]() {
savePath = QFileDialog::getExistingDirectory(this, tr("Select directory")).toStdString();
folderLabel->setText(fmt::format("{}", savePath).c_str());
JSONSetField(settings, "general", "savePath", savePath);
apply->setEnabled(true);
});
generalLayout->addWidget(folderLabelPrefix.get());
generalLayout->addWidget(folderLabel.get());
generalLayout->addStretch();
generalLayout->addWidget(folderBtn.get());
generalLayoutV->addLayout(generalLayout.get());
generalLayoutV->addStretch();
generalSettings->setLayout(generalLayoutV.get());
tabs->addTab(generalSettings.get(), tr("General"));
tabs->addTab(cpuSettings.get(), tr("CPU"));
tabs->addTab(audioSettings.get(), tr("Audio"));
tabs->addTab(inputSettings.get(), tr("Input"));
apply->setEnabled(false);
connect(cpuSettings.get(), &CPUSettings::modified, this, [&]() { apply->setEnabled(true); });
connect(audioSettings.get(), &AudioSettings::modified, this, [&]() { apply->setEnabled(true); });
connect(inputSettings.get(), &InputSettings::modified, this, [&]() { apply->setEnabled(true); });
connect(apply.get(), &QPushButton::pressed, this, [&]() {
auto newMap = inputSettings->GetMappedKeys();
if (!std::ranges::equal(keyMap, newMap)) {
keyMap = newMap;
emit regrabKeyboard();
tabs.addTab({"General", [](gui::TabItem* tab, void* userData) {
SettingsWindow* sW = (SettingsWindow*)userData;
if(sW->savesFolder.render()) {
// TODO: HANDLE FILE DIALOG savePath = QFileDialog::getExistingDirectory(this, tr("Select directory")).toStdString();
sW->savesFolder.setName(fmt::format(sW->savesFolder.getName(), savePath));
JSONSetField(sW->settings, "general", "savePath", savePath);
sW->apply.setEnabled(true);
}
apply->setEnabled(false);
}, this});
tabs.addTab({"CPU", [](gui::TabItem* tab, void* userData) {
SettingsWindow* sW = (SettingsWindow*)userData;
CPUSettings& cS = sW->cpuSettings;
gui::PushButton& apply = sW->apply;
if(cS.render()) {
if(cS.getModified())
sW->apply.setEnabled(true);
}
}, this});
tabs.addTab({"Audio", [](gui::TabItem* tab, void* userData) {
SettingsWindow* sW = (SettingsWindow*)userData;
AudioSettings& aS = sW->audioSettings;
gui::PushButton& apply = sW->apply;
if(aS.render()) {
if(aS.getModified())
apply.setEnabled(true);
}
}, this});
tabs.addTab({"Input", [](gui::TabItem* tab, void* userData) {
SettingsWindow* sW = (SettingsWindow*)userData;
sW->inputSettings.render();
InputSettings& iS = sW->inputSettings;
gui::PushButton& apply = sW->apply;
if(iS.render()) {
if(iS.getModified())
apply.setEnabled(true);
}
}, this});
apply.setEnabled(false);
}
bool SettingsWindow::render() {
tabs.render();
if(apply.render()) {
auto newMap = inputSettings.GetMappedKeys();
if (keyMap != newMap)
keyMap = newMap;
apply.setEnabled(false);
std::ofstream file("resources/settings.json");
file << settings;
file.close();
});
}
connect(cancel.get(), &QPushButton::pressed, this, &QWidget::hide);
buttonsLayout->addWidget(apply.get());
buttonsLayout->addWidget(cancel.get());
mainLayout->addWidget(tabs.get());
mainLayout->addLayout(buttonsLayout.get());
setLayout(mainLayout.get());
}
return false;
}