23 #include "serverfilterdock.h"
24 #include "ui_serverfilterdock.h"
26 #include "configuration/doomseekerconfig.h"
27 #include "gui/entity/serverlistfilterinfo.h"
28 #include "strings.hpp"
32 DClass<ServerFilterDock> :
public Ui::ServerFilterDock
42 QLineEdit *leQuickSearch;
53 : QDockWidget(pParent)
56 d->leQuickSearch =
nullptr;
57 d->bDisableUpdate =
false;
58 d->cbGroupServersWithPlayersAtTop->setChecked(gConfig.doomseeker.bGroupServersWithPlayersAtTheTopOfTheList);
60 toggleViewAction()->setIcon(QIcon(
":/icons/filter.png"));
62 toggleViewAction()->setText(ServerFilterDock::tr(
"Server &filter"));
63 toggleViewAction()->setShortcut(ServerFilterDock::tr(
"CTRL+F"));
66 ServerFilterDock::~ServerFilterDock()
70 void ServerFilterDock::addGameModeToComboBox(
const QString &gameMode)
72 addSortedNonDuplicate(d->cboGameMode, gameMode.trimmed());
73 addSortedNonDuplicate(d->cboExcludeGameMode, gameMode.trimmed());
76 void ServerFilterDock::addSortedNonDuplicate(QComboBox *comboBox,
const QString &text)
78 if (comboBox->findText(text, Qt::MatchFixedString) < 0)
81 for (
int i = 0; i < comboBox->count(); ++i)
83 if (text < comboBox->itemText(i))
85 comboBox->insertItem(i, text);
92 comboBox->addItem(text);
96 void ServerFilterDock::clear()
103 if (d->leQuickSearch ==
nullptr)
105 auto qs =
new QLineEdit();
106 qs->setText(d->leServerName->text());
108 connect(d->leServerName, SIGNAL(textEdited(
const QString&)), qs, SLOT(setText(
const QString&)));
109 connect(qs, SIGNAL(textEdited(
const QString&)), d->leServerName, SLOT(setText(
const QString&)));
111 d->leQuickSearch = qs;
114 return d->leQuickSearch;
117 void ServerFilterDock::emitUpdated()
119 if (d->bDisableUpdate)
122 emit filterUpdated(filterInfo());
125 void ServerFilterDock::enableFilter()
127 d->cbFilteringEnabled->setChecked(
true);
135 filterInfo.bEnabled = d->cbFilteringEnabled->isChecked();
136 filterInfo.bShowEmpty = d->cbShowEmpty->isChecked();
137 filterInfo.bShowFull = d->cbShowFull->isChecked();
138 filterInfo.bShowOnlyValid = d->cbShowOnlyValid->isChecked();
139 filterInfo.gameModes = d->cboGameMode->selectedItemTexts();
140 filterInfo.gameModesExcluded = d->cboExcludeGameMode->selectedItemTexts();
141 filterInfo.
maxPing = d->spinMaxPing->value();
142 filterInfo.testingServers = Doomseeker::checkboxTristateToShowMode(d->cbShowTestingServers->checkState());
143 filterInfo.serverName = d->leServerName->text();
144 filterInfo.wads = d->leWads->text().trimmed().split(
",", Qt::SkipEmptyParts);
145 filterInfo.wadsExcluded = d->leExcludeWads->text().trimmed().split(
",", Qt::SkipEmptyParts);
150 void ServerFilterDock::onServerGroupingChange()
152 gConfig.doomseeker.bGroupServersWithPlayersAtTheTopOfTheList = d->cbGroupServersWithPlayersAtTop->isChecked();
153 emit nonEmptyServerGroupingAtTopToggled(d->cbGroupServersWithPlayersAtTop->isChecked());
158 d->bDisableUpdate =
true;
160 d->cbFilteringEnabled->setChecked(filterInfo.bEnabled);
161 d->cbShowEmpty->setChecked(filterInfo.bShowEmpty);
162 d->cbShowFull->setChecked(filterInfo.bShowFull);
163 d->cbShowOnlyValid->setChecked(filterInfo.bShowOnlyValid);
165 for (
const QString &gameMode : filterInfo.gameModes)
167 addGameModeToComboBox(gameMode);
169 d->cboGameMode->setSelectedTexts(filterInfo.gameModes);
171 for (
const QString &gameMode : filterInfo.gameModesExcluded)
173 addGameModeToComboBox(gameMode);
175 d->cboExcludeGameMode->setSelectedTexts(filterInfo.gameModesExcluded);
177 d->spinMaxPing->setValue(filterInfo.
maxPing);
178 if (d->leQuickSearch !=
nullptr)
179 d->leQuickSearch->setText(filterInfo.serverName.trimmed());
181 d->leServerName->setText(filterInfo.serverName.trimmed());
182 d->leWads->setText(filterInfo.wads.join(
",").trimmed());
183 d->leExcludeWads->setText(filterInfo.wadsExcluded.join(
",").trimmed());
185 d->cbShowTestingServers->setCheckState(Doomseeker::showModeToCheckboxState(
186 filterInfo.testingServers));
188 d->bDisableUpdate =
false;