167 showGamesInProgress->setChecked(true); |
167 showGamesInProgress->setChecked(true); |
168 stateMenu->addAction(showGamesInLobby); |
168 stateMenu->addAction(showGamesInLobby); |
169 stateMenu->addAction(showGamesInProgress); |
169 stateMenu->addAction(showGamesInProgress); |
170 btnState->setMenu(stateMenu); |
170 btnState->setMenu(stateMenu); |
171 |
171 |
172 // Rules dropdown |
|
173 |
|
174 CBRules = new QComboBox(this); |
|
175 CBRules->setStyleSheet("QComboBox { border-top-left-radius: 0px; border-bottom-left-radius: 0px; border-left-width: 2px; }"); |
|
176 |
|
177 QLabel * ruleLabel = new QLabel(tr("Rules:"), this); |
|
178 ruleLabel->setFixedHeight(CBRules->height()); |
|
179 ruleLabel->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); |
|
180 ruleLabel->setStyleSheet("border: solid; border-width: 3px; border-right-width: 0px; border-color: #ffcc00; border-top-left-radius: 10px; border-bottom-left-radius: 10px; background-color: rgba(13, 5, 68, 70%);"); |
|
181 |
|
182 filterLayout->addWidget(ruleLabel); |
|
183 filterLayout->addWidget(CBRules); |
|
184 filterLayout->addSpacing(filterSpacing); |
|
185 |
|
186 // Weapons dropdown |
|
187 |
|
188 CBWeapons = new QComboBox(this); |
|
189 CBWeapons->setStyleSheet("QComboBox { border-top-left-radius: 0px; border-bottom-left-radius: 0px; border-left-width: 2px; }"); |
|
190 |
|
191 QLabel * weaponLabel = new QLabel(tr("Weapons:"), this); |
|
192 weaponLabel->setFixedHeight(CBWeapons->height()); |
|
193 weaponLabel->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); |
|
194 weaponLabel->setStyleSheet("border: solid; border-width: 3px; border-right-width: 0px; border-color: #ffcc00; border-top-left-radius: 10px; border-bottom-left-radius: 10px; background-color: rgba(13, 5, 68, 70%);"); |
|
195 |
|
196 filterLayout->addWidget(weaponLabel); |
|
197 filterLayout->addWidget(CBWeapons); |
|
198 filterLayout->addSpacing(filterSpacing); |
|
199 |
|
200 // Clear filters button |
172 // Clear filters button |
201 |
173 |
202 BtnClear = addButton(tr("Clear filters"), filterLayout, 0); |
174 BtnClear = addButton(tr("Clear filters"), filterLayout, 0); |
203 weaponLabel->setFixedHeight(CBWeapons->height()); |
|
204 BtnClear->setStyleSheet("padding: 4px;"); |
175 BtnClear->setStyleSheet("padding: 4px;"); |
205 |
176 |
206 // Lobby chat |
177 // Lobby chat |
207 |
178 |
208 chatWidget = new HWChatWidget(this, false); |
179 chatWidget = new HWChatWidget(this, false); |
209 m_splitter->addWidget(chatWidget); |
180 m_splitter->addWidget(chatWidget); |
210 |
|
211 CBRules->addItem(QComboBox::tr("Any")); |
|
212 |
181 |
213 return pageLayout; |
182 return pageLayout; |
214 } |
183 } |
215 |
184 |
216 QLayout * PageRoomsList::footerLayoutDefinition() |
185 QLayout * PageRoomsList::footerLayoutDefinition() |
236 connect(searchText, SIGNAL(returnPressed()), this, SLOT(onJoinClick())); |
205 connect(searchText, SIGNAL(returnPressed()), this, SLOT(onJoinClick())); |
237 connect(roomsList, SIGNAL(doubleClicked (const QModelIndex &)), this, SLOT(onJoinClick())); |
206 connect(roomsList, SIGNAL(doubleClicked (const QModelIndex &)), this, SLOT(onJoinClick())); |
238 connect(roomsList, SIGNAL(clicked (const QModelIndex &)), searchText, SLOT(setFocus())); |
207 connect(roomsList, SIGNAL(clicked (const QModelIndex &)), searchText, SLOT(setFocus())); |
239 connect(showGamesInLobby, SIGNAL(triggered()), this, SLOT(onFilterChanged())); |
208 connect(showGamesInLobby, SIGNAL(triggered()), this, SLOT(onFilterChanged())); |
240 connect(showGamesInProgress, SIGNAL(triggered()), this, SLOT(onFilterChanged())); |
209 connect(showGamesInProgress, SIGNAL(triggered()), this, SLOT(onFilterChanged())); |
241 connect(CBRules, SIGNAL(currentIndexChanged (int)), this, SLOT(onFilterChanged())); |
|
242 connect(CBWeapons, SIGNAL(currentIndexChanged (int)), this, SLOT(onFilterChanged())); |
|
243 connect(searchText, SIGNAL(textChanged (const QString &)), this, SLOT(onFilterChanged())); |
210 connect(searchText, SIGNAL(textChanged (const QString &)), this, SLOT(onFilterChanged())); |
244 connect(this, SIGNAL(askJoinConfirmation (const QString &)), this, SLOT(onJoinConfirmation(const QString &)), Qt::QueuedConnection); |
211 connect(this, SIGNAL(askJoinConfirmation (const QString &)), this, SLOT(onJoinConfirmation(const QString &)), Qt::QueuedConnection); |
245 |
212 |
246 // Set focus on search box |
213 // Set focus on search box |
247 connect(this, SIGNAL(pageEnter()), searchText, SLOT(setFocus())); |
214 connect(this, SIGNAL(pageEnter()), searchText, SLOT(setFocus())); |
271 PageRoomsList::PageRoomsList(QWidget* parent) : |
238 PageRoomsList::PageRoomsList(QWidget* parent) : |
272 AbstractPage(parent) |
239 AbstractPage(parent) |
273 { |
240 { |
274 roomsModel = NULL; |
241 roomsModel = NULL; |
275 stateFilteredModel = NULL; |
242 stateFilteredModel = NULL; |
276 schemeFilteredModel = NULL; |
|
277 weaponsFilteredModel = NULL; |
|
278 |
243 |
279 initPage(); |
244 initPage(); |
280 |
|
281 // not the most elegant solution but it works |
|
282 ammoSchemeModel = new AmmoSchemeModel(this, NULL); |
|
283 for (int i = 0; i < ammoSchemeModel->predefSchemesNames.count(); i++) |
|
284 CBRules->addItem(ammoSchemeModel->predefSchemesNames.at(i).toAscii().constData()); |
|
285 |
|
286 CBWeapons->addItem(QComboBox::tr("Any")); |
|
287 for (int i = 0; i < cDefaultAmmos.count(); i++) |
|
288 { |
|
289 QPair<QString,QString> ammo = cDefaultAmmos.at(i); |
|
290 CBWeapons->addItem(ammo.first.toAscii().constData()); |
|
291 } |
|
292 } |
245 } |
293 |
246 |
294 |
247 |
295 void PageRoomsList::displayError(const QString & message) |
248 void PageRoomsList::displayError(const QString & message) |
296 { |
249 { |
580 |
533 |
581 void PageRoomsList::onClearClick() |
534 void PageRoomsList::onClearClick() |
582 { |
535 { |
583 showGamesInLobby->setChecked(true); |
536 showGamesInLobby->setChecked(true); |
584 showGamesInProgress->setChecked(true); |
537 showGamesInProgress->setChecked(true); |
585 CBRules->setCurrentIndex(0); |
|
586 CBWeapons->setCurrentIndex(0); |
|
587 searchText->clear(); |
538 searchText->clear(); |
588 searchText->setFocus(); |
539 searchText->setFocus(); |
589 } |
540 } |
590 |
541 |
591 void PageRoomsList::onJoinConfirmation(const QString & room) |
542 void PageRoomsList::onJoinConfirmation(const QString & room) |
626 roomsModel->setDynamicSortFilter(true); |
577 roomsModel->setDynamicSortFilter(true); |
627 roomsModel->setSortCaseSensitivity(Qt::CaseInsensitive); |
578 roomsModel->setSortCaseSensitivity(Qt::CaseInsensitive); |
628 roomsModel->sort(RoomsListModel::StateColumn, Qt::AscendingOrder); |
579 roomsModel->sort(RoomsListModel::StateColumn, Qt::AscendingOrder); |
629 |
580 |
630 stateFilteredModel = new QSortFilterProxyModel(this); |
581 stateFilteredModel = new QSortFilterProxyModel(this); |
631 schemeFilteredModel = new QSortFilterProxyModel(this); |
|
632 weaponsFilteredModel = new QSortFilterProxyModel(this); |
|
633 |
582 |
634 stateFilteredModel->setDynamicSortFilter(true); |
583 stateFilteredModel->setDynamicSortFilter(true); |
635 schemeFilteredModel->setDynamicSortFilter(true); |
|
636 weaponsFilteredModel->setDynamicSortFilter(true); |
|
637 |
584 |
638 roomsModel->setFilterKeyColumn(-1); // search in all columns |
585 roomsModel->setFilterKeyColumn(-1); // search in all columns |
639 stateFilteredModel->setFilterKeyColumn(RoomsListModel::StateColumn); |
586 stateFilteredModel->setFilterKeyColumn(RoomsListModel::StateColumn); |
640 schemeFilteredModel->setFilterKeyColumn(RoomsListModel::SchemeColumn); |
|
641 weaponsFilteredModel->setFilterKeyColumn(RoomsListModel::WeaponsColumn); |
|
642 |
587 |
643 roomsModel->setFilterCaseSensitivity(Qt::CaseInsensitive); |
588 roomsModel->setFilterCaseSensitivity(Qt::CaseInsensitive); |
644 schemeFilteredModel->setFilterCaseSensitivity(Qt::CaseInsensitive); |
589 |
645 weaponsFilteredModel->setFilterCaseSensitivity(Qt::CaseInsensitive); |
590 roomsModel->setSourceModel(stateFilteredModel); |
646 |
|
647 schemeFilteredModel->setSourceModel(stateFilteredModel); |
|
648 weaponsFilteredModel->setSourceModel(schemeFilteredModel); |
|
649 roomsModel->setSourceModel(weaponsFilteredModel); |
|
650 |
591 |
651 // let the table view display the last model in the filter chain |
592 // let the table view display the last model in the filter chain |
652 roomsList->setModel(roomsModel); |
593 roomsList->setModel(roomsModel); |
653 |
594 |
654 // When the data changes |
595 // When the data changes |
657 // When a selection changes |
598 // When a selection changes |
658 connect(roomsList->selectionModel(), SIGNAL(currentRowChanged(const QModelIndex &, const QModelIndex &)), this, SLOT(roomSelectionChanged(const QModelIndex &, const QModelIndex &))); |
599 connect(roomsList->selectionModel(), SIGNAL(currentRowChanged(const QModelIndex &, const QModelIndex &)), this, SLOT(roomSelectionChanged(const QModelIndex &, const QModelIndex &))); |
659 } |
600 } |
660 |
601 |
661 stateFilteredModel->setSourceModel(model); |
602 stateFilteredModel->setSourceModel(model); |
662 |
|
663 roomsList->hideColumn(RoomsListModel::StateColumn); |
|
664 |
603 |
665 QHeaderView * h = roomsList->horizontalHeader(); |
604 QHeaderView * h = roomsList->horizontalHeader(); |
666 |
605 |
667 h->setSortIndicatorShown(true); |
606 h->setSortIndicatorShown(true); |
668 h->setSortIndicator(RoomsListModel::StateColumn, Qt::AscendingOrder); |
607 h->setSortIndicator(RoomsListModel::StateColumn, Qt::AscendingOrder); |
676 h->resizeSection(RoomsListModel::MapColumn, 100); |
615 h->resizeSection(RoomsListModel::MapColumn, 100); |
677 h->resizeSection(RoomsListModel::SchemeColumn, 100); |
616 h->resizeSection(RoomsListModel::SchemeColumn, 100); |
678 h->resizeSection(RoomsListModel::WeaponsColumn, 100); |
617 h->resizeSection(RoomsListModel::WeaponsColumn, 100); |
679 } |
618 } |
680 |
619 |
|
620 // hide column used for filtering |
|
621 roomsList->hideColumn(RoomsListModel::StateColumn); |
681 |
622 |
682 // save header state on change |
623 // save header state on change |
683 connect(roomsList->horizontalHeader(), SIGNAL(sortIndicatorChanged(int, Qt::SortOrder)), |
624 connect(roomsList->horizontalHeader(), SIGNAL(sortIndicatorChanged(int, Qt::SortOrder)), |
684 this, SLOT(saveHeaderState())); |
625 this, SLOT(saveHeaderState())); |
685 connect(roomsList->horizontalHeader(), SIGNAL(sectionResized(int, int, int)), |
626 connect(roomsList->horizontalHeader(), SIGNAL(sectionResized(int, int, int)), |
712 void PageRoomsList::onFilterChanged() |
653 void PageRoomsList::onFilterChanged() |
713 { |
654 { |
714 if (roomsModel == NULL) |
655 if (roomsModel == NULL) |
715 return; |
656 return; |
716 |
657 |
717 roomsModel->setFilterWildcard(QString("*%1*").arg(searchText->text())); |
658 roomsModel->setFilterFixedString(searchText->text()); |
718 |
659 |
719 bool stateLobby = showGamesInLobby->isChecked(); |
660 bool stateLobby = showGamesInLobby->isChecked(); |
720 bool stateProgress = showGamesInProgress->isChecked(); |
661 bool stateProgress = showGamesInProgress->isChecked(); |
721 |
662 |
722 if (stateLobby && stateProgress) |
663 if (stateLobby && stateProgress) |
723 stateFilteredModel->setFilterWildcard("*"); // "any" |
664 stateFilteredModel->setFilterFixedString(QString()); // "any" |
724 else if (stateLobby != stateProgress) |
665 else if (stateLobby != stateProgress) |
725 stateFilteredModel->setFilterFixedString(QString(stateProgress)); |
666 stateFilteredModel->setFilterFixedString(QString(stateProgress)); |
726 else |
667 else |
727 stateFilteredModel->setFilterFixedString(QString("none")); // Basically, none. |
668 stateFilteredModel->setFilterFixedString(QString("none")); // Basically, none. |
728 |
|
729 if (CBRules->currentIndex() == 0) |
|
730 schemeFilteredModel->setFilterWildcard("*"); // "any" |
|
731 else |
|
732 schemeFilteredModel->setFilterWildcard( |
|
733 QString("*%1*").arg(CBRules->currentText())); |
|
734 |
|
735 if (CBWeapons->currentIndex() == 0) |
|
736 weaponsFilteredModel->setFilterWildcard("*"); // "any" |
|
737 else |
|
738 weaponsFilteredModel->setFilterWildcard( |
|
739 QString("*%1*").arg(CBWeapons->currentText())); |
|
740 } |
669 } |
741 |
670 |
742 void PageRoomsList::setSettings(QSettings *settings) |
671 void PageRoomsList::setSettings(QSettings *settings) |
743 { |
672 { |
744 m_gameSettings = settings; |
673 m_gameSettings = settings; |