aboutsummaryrefslogtreecommitdiff
path: root/src/lobby.h
blob: 0221b5f5c60b85b159130d01c7a1c6ce7b8480f3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#pragma once

#include <QLabel>
#include <QLineEdit>
#include <QPushButton>
#include <QTextBrowser>
#include <QTreeWidget>
#include <QTreeWidgetItem>

#include "file_functions.h"
#include "networkmanager.h"
#include <QMainWindow>

#ifdef ANDROID
#include <QtAndroidExtras/QtAndroid>
#endif

class AOApplication;

class Lobby : public QMainWindow
{
  Q_OBJECT

public:
  Lobby(AOApplication *p_ao_app, NetworkManager *p_net_man = nullptr);
  ~Lobby();

  void set_player_count(int players_online, int max_players);
  void set_server_description(const QString &server_description);
  void list_servers();
  int get_selected_server();
  int pageSelected();

protected:
  void closeEvent(QCloseEvent *event) override;

private:
  AOApplication *ao_app;
  NetworkManager *net_manager;

  const QString DEFAULT_UI = "lobby.ui";

  void list_favorites();
  void list_demos();
  void get_motd();
  void check_for_updates();
  void reset_selection();

  int last_index = -1;

  enum TabPage
  {
    SERVER,
    FAVORITES,
    DEMOS
  };

  // UI-file Lobby

  // Top Row
  QLabel *ui_game_version_lbl;
  QPushButton *ui_settings_button;
  QPushButton *ui_about_button;

  // Server, Favs and Demo lists
  QTabWidget *ui_connections_tabview;

  QTreeWidget *ui_serverlist_tree;
  QLineEdit *ui_serverlist_search;

  QTreeWidget *ui_favorites_tree;
  QLineEdit *ui_favorites_search;

  QTreeWidget *ui_demo_tree;
  QLineEdit *ui_demo_search;

  QPushButton *ui_add_to_favorite_button;
  QPushButton *ui_add_server_button;
  QPushButton *ui_remove_from_favorites_button;
  QPushButton *ui_edit_favorite_button;
  QPushButton *ui_direct_connect_button;
  QPushButton *ui_refresh_button;

  // Serverinfo / MOTD Horizontal Row
  QPointer<QTextBrowser> ui_motd_text;

  QLabel *ui_server_player_count_lbl;
  QTextBrowser *ui_server_description_text;
  QPushButton *ui_connect_button;

  // Optional Widget
  QTextBrowser *ui_game_changelog_text;

  void loadUI();
  void reloadUi();

  TabPage current_page = SERVER;

private Q_SLOTS:
  void on_tab_changed(int index);
  void on_refresh_released();
  void on_direct_connect_released();
  void on_add_to_fav_released();
  void on_add_server_to_fave_released();
  void on_edit_favorite_released();
  void on_remove_from_fav_released();
  void on_about_clicked();
  void on_server_list_clicked(QTreeWidgetItem *p_item, int column);
  void on_list_doubleclicked(QTreeWidgetItem *p_item, int column);
  void on_favorite_tree_clicked(QTreeWidgetItem *p_item, int column);
  void on_server_search_edited(QString p_text);
  void on_demo_clicked(QTreeWidgetItem *item, int column);
  void onReloadThemeRequested(); // Oh boy.
  void onSettingsRequested();
};