24 #include "engineconfigpage.h"
25 #include "filefilter.h"
26 #include "gui/widgets/filepickwidget.h"
28 #include "plugins/engineplugin.h"
29 #include "serverapi/gameexefactory.h"
30 #include "serverapi/gamefile.h"
31 #include "ui_engineconfigpage.h"
33 #include <QFileDialog>
36 DClass<EngineConfigPage> :
public Ui::EngineConfigPage
45 this->wrapper = wrapper;
47 QStringList neighbours()
override
49 return (*wrapper)->parent->collectKnownGameFilePaths();
58 QList<FilePickWidget *> filePickers;
61 QStringList readStoredCustomParameters()
const
63 return config->
value(
"StoredCustomParameters").toStringList();
66 void saveStoredCustomParameters(
const QStringList ¶ms)
68 config->
setValue(
"StoredCustomParameters", params);
71 bool existsInStoredCustomParameters(
const QString &text)
const
73 return readStoredCustomParameters().contains(text);
89 d->errorTimer.setInterval(5000);
90 d->errorTimer.setSingleShot(
true);
91 this->connect(&d->errorTimer, SIGNAL(timeout()), d->lblError, SLOT(hide()));
94 d->cboCustomParameters->setMinimumContentsLength(25);
95 d->cboCustomParameters->setSizeAdjustPolicy(QComboBox::AdjustToMinimumContentsLengthWithIcon);
99 if (!plugin->data()->hasMasterClient())
100 d->masterAddressBox->hide();
103 EngineConfigPage::~EngineConfigPage()
109 layout()->removeItem(d->verticalSpacer);
110 layout()->addWidget(widget);
111 layout()->addItem(d->verticalSpacer);
114 void EngineConfigPage::autoFindNeighbouringPaths()
117 if (QFileInfo(picker->path()).isFile())
119 QStringList knownPaths = collectKnownGameFilePaths();
122 if (picker->isEmpty())
124 picker->blockSignals(
true);
126 picker->blockSignals(
false);
133 QStringList EngineConfigPage::collectKnownGameFilePaths()
const
135 QStringList knownPaths;
138 if (!picker->isEmpty())
139 knownPaths << picker->path();
144 QString EngineConfigPage::currentCustomParameters()
const
146 return d->cboCustomParameters->currentText().trimmed();
151 return d->plugin->icon();
154 void EngineConfigPage::makeFileBrowsers()
156 QSharedPointer<FilePickWidget::NeighbourStrategy> neighbours(
158 QList<GameFile> files = d->plugin->gameExe()->gameFiles().asQList();
162 widget->setFile(file);
163 widget->setNeighbourStrategy(neighbours);
164 this->connect(widget, SIGNAL(findFailed()), SLOT(showFindFailError()));
165 this->connect(widget, SIGNAL(pathChanged()), SLOT(autoFindNeighbouringPaths()));
168 d->exePickArea->layout()->addWidget(widget);
169 d->filePickers << widget;
175 return d->plugin->data()->name;
187 filePicker->blockSignals(
true);
188 filePicker->load(*d->config);
189 filePicker->blockSignals(
false);
192 d->cboCustomParameters->clear();
193 d->cboCustomParameters->addItems(d->readStoredCustomParameters());
194 d->cboCustomParameters->setEditText(d->config->value(
"CustomParameters").toString());
195 if (d->plugin->data()->hasMasterClient())
196 d->leMasterserverAddress->setText(d->config->value(
"Masterserver").toString());
198 updateCustomParametersSaveState();
201 void EngineConfigPage::removeCurrentCustomParametersFromStorage()
203 QString currentParams = currentCustomParameters();
204 removeStoredCustomParametersFromConfig(currentParams);
205 removeStoredCustomParametersFromWidget(currentParams);
206 updateCustomParametersSaveState();
209 void EngineConfigPage::resetMasterServerToDefault()
211 d->leMasterserverAddress->setText(d->plugin->defaultMasterAddress());
214 void EngineConfigPage::removeStoredCustomParametersFromConfig(
const QString ¶meters)
216 QStringList storedParameters = d->readStoredCustomParameters();
217 storedParameters.removeAll(parameters);
218 d->saveStoredCustomParameters(storedParameters);
221 void EngineConfigPage::removeStoredCustomParametersFromWidget(
const QString ¶meters)
223 int indexInWidget = d->cboCustomParameters->findText(parameters);
224 if (indexInWidget >= 0)
226 d->cboCustomParameters->removeItem(indexInWidget);
227 d->cboCustomParameters->setEditText(parameters);
228 d->cboCustomParameters->setFocus();
232 void EngineConfigPage::saveCustomParameters()
234 if (!d->existsInStoredCustomParameters(currentCustomParameters()))
236 QStringList parameters = d->readStoredCustomParameters();
237 parameters << currentCustomParameters();
238 d->saveStoredCustomParameters(parameters);
239 d->cboCustomParameters->addItem(currentCustomParameters());
240 d->cboCustomParameters->setFocus();
242 updateCustomParametersSaveState();
249 filePicker->save(*d->config);
251 d->config->setValue(
"CustomParameters", currentCustomParameters());
252 if (d->plugin->data()->hasMasterClient())
253 d->config->setValue(
"Masterserver", d->leMasterserverAddress->text());
256 void EngineConfigPage::showError(
const QString &error)
258 d->lblError->setText(error);
260 d->errorTimer.start();
263 void EngineConfigPage::showFindFailError()
265 showError(tr(
"Failed to automatically find file.\nYou may need to use the browse button."));
270 return tr(
"Game - %1").arg(
name());
273 void EngineConfigPage::updateCustomParametersSaveState()
275 bool paramExists = d->existsInStoredCustomParameters(currentCustomParameters());
276 bool isEmpty = currentCustomParameters().isEmpty();
277 d->btnSaveCustomParameters->setEnabled(!isEmpty);
278 d->btnSaveCustomParameters->setVisible(!paramExists);
279 d->btnDeleteCustomParameters->setVisible(paramExists);
284 bool allFilesOk =
true;
287 bool thisFileOk = filePicker->validate();
288 allFilesOk = allFilesOk && thisFileOk;