QTfrontend/ui/page/pageroomslist.cpp
changeset 9702 27006953d901
parent 9549 ac5c1f691ce2
child 9738 18bb6d1fc9d9
equal deleted inserted replaced
9700:3034605a4604 9702:27006953d901
   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;