23 #include "serverfilterdock.h" 24 #include "ui_serverfilterdock.h" 26 #include "configuration/doomseekerconfig.h" 27 #include "gui/entity/serverlistfilterinfo.h" 31 DClass<ServerFilterDock> :
public Ui::ServerFilterDock
41 QLineEdit *leQuickSearch;
52 : QDockWidget(pParent)
55 d->leQuickSearch =
nullptr;
56 d->bDisableUpdate =
false;
57 d->cbGroupServersWithPlayersAtTop->setChecked(gConfig.doomseeker.bGroupServersWithPlayersAtTheTopOfTheList);
59 toggleViewAction()->setIcon(QIcon(
":/icons/filter.png"));
61 toggleViewAction()->setText(ServerFilterDock::tr(
"Server &Filter"));
62 toggleViewAction()->setShortcut(ServerFilterDock::tr(
"CTRL+F"));
65 ServerFilterDock::~ServerFilterDock()
69 void ServerFilterDock::addGameModeToComboBox(
const QString &gameMode)
71 addSortedNonDuplicate(d->cboGameMode, gameMode.trimmed());
72 addSortedNonDuplicate(d->cboExcludeGameMode, gameMode.trimmed());
75 void ServerFilterDock::addSortedNonDuplicate(QComboBox *comboBox,
const QString &text)
77 if (comboBox->findText(text, Qt::MatchFixedString) < 0)
80 for (
int i = 0; i < comboBox->count(); ++i)
82 if (text < comboBox->itemText(i))
84 comboBox->insertItem(i, text);
91 comboBox->addItem(text);
95 void ServerFilterDock::clear()
102 if (d->leQuickSearch ==
nullptr)
104 auto qs =
new QLineEdit();
105 qs->setText(d->leServerName->text());
107 connect(d->leServerName, SIGNAL(textEdited(
const QString&)), qs, SLOT(setText(
const QString&)));
108 connect(qs, SIGNAL(textEdited(
const QString&)), d->leServerName, SLOT(setText(
const QString&)));
110 d->leQuickSearch = qs;
113 return d->leQuickSearch;
116 void ServerFilterDock::emitUpdated()
118 if (d->bDisableUpdate)
121 emit filterUpdated(filterInfo());
124 void ServerFilterDock::enableFilter()
126 d->cbFilteringEnabled->setChecked(
true);
134 filterInfo.bEnabled = d->cbFilteringEnabled->isChecked();
135 filterInfo.bShowEmpty = d->cbShowEmpty->isChecked();
136 filterInfo.bShowFull = d->cbShowFull->isChecked();
137 filterInfo.bShowOnlyValid = d->cbShowOnlyValid->isChecked();
138 filterInfo.gameModes = d->cboGameMode->selectedItemTexts();
139 filterInfo.gameModesExcluded = d->cboExcludeGameMode->selectedItemTexts();
140 filterInfo.
maxPing = d->spinMaxPing->value();
141 filterInfo.testingServers = Doomseeker::checkboxTristateToShowMode(d->cbShowTestingServers->checkState());
142 filterInfo.serverName = d->leServerName->text();
143 filterInfo.wads = d->leWads->text().trimmed().split(
",", QString::SkipEmptyParts);
144 filterInfo.wadsExcluded = d->leExcludeWads->text().trimmed().split(
",", QString::SkipEmptyParts);
149 void ServerFilterDock::onServerGroupingChange()
151 gConfig.doomseeker.bGroupServersWithPlayersAtTheTopOfTheList = d->cbGroupServersWithPlayersAtTop->isChecked();
152 emit nonEmptyServerGroupingAtTopToggled(d->cbGroupServersWithPlayersAtTop->isChecked());
157 d->bDisableUpdate =
true;
159 d->cbFilteringEnabled->setChecked(filterInfo.bEnabled);
160 d->cbShowEmpty->setChecked(filterInfo.bShowEmpty);
161 d->cbShowFull->setChecked(filterInfo.bShowFull);
162 d->cbShowOnlyValid->setChecked(filterInfo.bShowOnlyValid);
164 for (
const QString &gameMode : filterInfo.gameModes)
166 addGameModeToComboBox(gameMode);
168 d->cboGameMode->setSelectedTexts(filterInfo.gameModes);
170 for (
const QString &gameMode : filterInfo.gameModesExcluded)
172 addGameModeToComboBox(gameMode);
174 d->cboExcludeGameMode->setSelectedTexts(filterInfo.gameModesExcluded);
176 d->spinMaxPing->setValue(filterInfo.
maxPing);
177 if (d->leQuickSearch !=
nullptr)
178 d->leQuickSearch->setText(filterInfo.serverName.trimmed());
180 d->leServerName->setText(filterInfo.serverName.trimmed());
181 d->leWads->setText(filterInfo.wads.join(
",").trimmed());
182 d->leExcludeWads->setText(filterInfo.wadsExcluded.join(
",").trimmed());
184 d->cbShowTestingServers->setCheckState(Doomseeker::showModeToCheckboxState(
185 filterInfo.testingServers));
187 d->bDisableUpdate =
false;
Structure describing server filter.
unsigned maxPing
Maximum allowed ping.
QLineEdit * createQuickSearch()
Creates and/or returns an instance of widget that is located in the MainWindow toolbar.
void setFilterInfo(const ServerListFilterInfo &filterInfo)
Sets widgets to new filter info.