diff --git a/include/lobby.h b/include/lobby.h index e0cd03d..4b95fb2 100644 --- a/include/lobby.h +++ b/include/lobby.h @@ -8,6 +8,7 @@ #include #include +#include #include #include #include @@ -64,7 +65,7 @@ private: QLabel *ui_version; AOButton *ui_about; - QListWidget *ui_server_list; + QTreeWidget *ui_server_list; QLabel *ui_player_count; AOTextArea *ui_description; @@ -79,7 +80,7 @@ private: QProgressBar *ui_progress_bar; AOButton *ui_cancel; - QModelIndex last_model; + int last_index; void set_size_and_pos(QWidget *p_widget, QString p_identifier); @@ -94,8 +95,8 @@ private slots: void on_connect_pressed(); void on_connect_released(); void on_about_clicked(); - void on_server_list_clicked(QModelIndex p_model); - void on_server_list_doubleclicked(QModelIndex p_model); + void on_server_list_clicked(QTreeWidgetItem* p_item, int column); + void on_server_list_doubleclicked(QTreeWidgetItem* p_item, int column); void on_chatfield_return_pressed(); }; diff --git a/src/lobby.cpp b/src/lobby.cpp index 7c61aa7..2203337 100644 --- a/src/lobby.cpp +++ b/src/lobby.cpp @@ -20,7 +20,11 @@ Lobby::Lobby(AOApplication *p_ao_app) : QMainWindow() ui_connect = new AOButton(this, ao_app); ui_version = new QLabel(this); ui_about = new AOButton(this, ao_app); - ui_server_list = new QListWidget(this); + + ui_server_list = new QTreeWidget(this); + ui_server_list->setHeaderLabels({"#", "Name"});//, "Players"}); + ui_server_list->hideColumn(0); + ui_player_count = new QLabel(this); ui_description = new AOTextArea(this); ui_description->setOpenExternalLinks(true); @@ -47,8 +51,8 @@ Lobby::Lobby(AOApplication *p_ao_app) : QMainWindow() connect(ui_connect, SIGNAL(pressed()), this, SLOT(on_connect_pressed())); connect(ui_connect, SIGNAL(released()), this, SLOT(on_connect_released())); connect(ui_about, SIGNAL(clicked()), this, SLOT(on_about_clicked())); - connect(ui_server_list, SIGNAL(clicked(QModelIndex)), this, SLOT(on_server_list_clicked(QModelIndex))); - connect(ui_server_list, SIGNAL(activated(QModelIndex)), this, SLOT(on_server_list_doubleclicked(QModelIndex))); + connect(ui_server_list, SIGNAL(itemClicked(QTreeWidgetItem*, int)), this, SLOT(on_server_list_clicked(QTreeWidgetItem*, int))); + connect(ui_server_list, SIGNAL(itemDoubleClicked(QTreeWidgetItem*, int)), this, SLOT(on_server_list_doubleclicked(QTreeWidgetItem*, int))); connect(ui_chatmessage, SIGNAL(returnPressed()), this, SLOT(on_chatfield_return_pressed())); connect(ui_cancel, SIGNAL(clicked()), ao_app, SLOT(loading_cancelled())); @@ -252,7 +256,7 @@ QString Lobby::get_chatlog() int Lobby::get_selected_server() { - return ui_server_list->currentRow(); + return ui_server_list->currentItem()->text(0).toInt(); } void Lobby::set_loading_value(int p_value) @@ -310,7 +314,7 @@ void Lobby::on_add_to_fav_released() if (!public_servers_selected) return; - ao_app->add_favorite_server(ui_server_list->currentRow()); + ao_app->add_favorite_server(get_selected_server()); } void Lobby::on_connect_pressed() @@ -355,32 +359,33 @@ void Lobby::on_about_clicked() } //clicked on an item in the serverlist -void Lobby::on_server_list_clicked(QModelIndex p_model) +void Lobby::on_server_list_clicked(QTreeWidgetItem* p_item, int column) { - if (p_model != last_model) + column = 0; + if (p_item->text(column).toInt() != last_index) { - server_type f_server; - last_model = p_model; - int n_server = p_model.row(); + server_type f_server; + int n_server = p_item->text(column).toInt(); + last_index = n_server; - if (n_server < 0) - return; - - if (public_servers_selected) - { - QVector f_server_list = ao_app->get_server_list(); - - if (n_server >= f_server_list.size()) + if (n_server < 0) return; - f_server = f_server_list.at(p_model.row()); - } - else - { - if (n_server >= ao_app->get_favorite_list().size()) - return; + if (public_servers_selected) + { + QVector f_server_list = ao_app->get_server_list(); - f_server = ao_app->get_favorite_list().at(p_model.row()); + if (n_server >= f_server_list.size()) + return; + + f_server = f_server_list.at(n_server); + } + else + { + if (n_server >= ao_app->get_favorite_list().size()) + return; + + f_server = ao_app->get_favorite_list().at(n_server); } ui_description->clear(); @@ -398,9 +403,9 @@ void Lobby::on_server_list_clicked(QModelIndex p_model) } //doubleclicked on an item in the serverlist so we'll connect right away -void Lobby::on_server_list_doubleclicked(QModelIndex p_model) +void Lobby::on_server_list_doubleclicked(QTreeWidgetItem* p_item, int column) { - on_server_list_clicked(p_model); + on_server_list_clicked(p_item, column); on_connect_released(); } @@ -427,22 +432,36 @@ void Lobby::list_servers() ui_favorites->set_image("favorites"); ui_public_servers->set_image("publicservers_selected"); + ui_server_list->setSortingEnabled(false); ui_server_list->clear(); + int i = 0; for (server_type i_server : ao_app->get_server_list()) { - ui_server_list->addItem(i_server.name); + QTreeWidgetItem *treeItem = new QTreeWidgetItem(ui_server_list); + treeItem->setText(0, QString::number(i)); + treeItem->setText(1, i_server.name); +// treeItem->setText(2, "-"); + i++; } + ui_server_list->setSortingEnabled(true); } void Lobby::list_favorites() { + ui_server_list->setSortingEnabled(false); ui_server_list->clear(); + int i = 0; for (server_type i_server : ao_app->get_favorite_list()) { - ui_server_list->addItem(i_server.name); + QTreeWidgetItem *treeItem = new QTreeWidgetItem(ui_server_list); + treeItem->setText(0, QString(i)); + treeItem->setText(1, i_server.name); +// treeItem->setText(2, "-"); + i++; } + ui_server_list->setSortingEnabled(true); } void Lobby::append_chatmessage(QString f_name, QString f_message)