more wrappers and helpers!
This commit is contained in:
@@ -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;
|
||||
}
|
||||
Reference in New Issue
Block a user