OpenTTD Source  12.0-beta2
network_gui.cpp File Reference
#include "../stdafx.h"
#include "../strings_func.h"
#include "../date_func.h"
#include "../fios.h"
#include "network_client.h"
#include "network_gui.h"
#include "network_gamelist.h"
#include "network.h"
#include "network_base.h"
#include "network_content.h"
#include "network_server.h"
#include "network_coordinator.h"
#include "../gui.h"
#include "network_udp.h"
#include "../window_func.h"
#include "../gfx_func.h"
#include "../widgets/dropdown_type.h"
#include "../widgets/dropdown_func.h"
#include "../querystring_gui.h"
#include "../sortlist_type.h"
#include "../company_func.h"
#include "../command_func.h"
#include "../core/geometry_func.hpp"
#include "../genworld.h"
#include "../map_type.h"
#include "../guitimer_func.h"
#include "../zoom_func.h"
#include "../sprite.h"
#include "../settings_internal.h"
#include "../widgets/network_widget.h"
#include "table/strings.h"
#include "../table/sprites.h"
#include "../stringfilter_type.h"
#include <map>
#include "../safeguards.h"

Go to the source code of this file.

Data Structures

class  NWidgetServerListHeader
 Full blown container to make it behave exactly as we want :) More...
 
class  NetworkGameWindow
 
struct  NetworkStartServerWindow
 
class  ButtonCommon
 Button shown for either a company or client in the client-list. More...
 
class  Button< T >
 Template version of Button, with callback support. More...
 
struct  NetworkClientListWindow
 Main handle for clientlist. More...
 
struct  NetworkJoinStatusWindow
 
struct  NetworkCompanyPasswordWindow
 
struct  NetworkAskRelayWindow
 Window used for asking the user if he is okay using a relay server. More...
 

Typedefs

typedef GUIList< NetworkGameList *, StringFilter & > GUIGameServerList
 
typedef int ServerListPosition
 
using CompanyButton = Button< CompanyID >
 
using ClientButton = Button< ClientID >
 

Enumerations

enum  DropDownAdmin { DD_CLIENT_ADMIN_KICK, DD_CLIENT_ADMIN_BAN, DD_COMPANY_ADMIN_RESET, DD_COMPANY_ADMIN_UNLOCK }
 The possibly entries in a DropDown for an admin. More...
 

Functions

static void ShowNetworkStartServerWindow ()
 
void UpdateNetworkGameWindow ()
 Update the network new window because a new server is found on the network.
 
static DropDownList BuildVisibilityDropDownList ()
 
static NWidgetBaseMakeResizableHeader (int *biggest_index)
 
void ShowNetworkGameWindow ()
 
void DrawCompanyIcon (CompanyID cid, int x, int y)
 Draw the icon of a company. More...
 
static void AdminClientKickCallback (Window *w, bool confirmed)
 Callback function for admin command to kick client. More...
 
static void AdminClientBanCallback (Window *w, bool confirmed)
 Callback function for admin command to ban client. More...
 
static void AdminCompanyResetCallback (Window *w, bool confirmed)
 Callback function for admin command to reset company. More...
 
static void AdminCompanyUnlockCallback (Window *w, bool confirmed)
 Callback function for admin command to unlock company. More...
 
void ShowClientList ()
 
void ShowJoinStatusWindow ()
 
void ShowNetworkNeedPassword (NetworkPasswordType npt)
 
void ShowNetworkCompanyPasswordWindow (Window *parent)
 
void ShowNetworkAskRelay (const std::string &server_connection_string, const std::string &relay_connection_string, const std::string &token)
 Show a modal confirmation window with "no" / "yes, once" / "yes, always" buttons. More...
 

Variables

static const int NETWORK_LIST_REFRESH_DELAY = 30
 Time, in seconds, between updates of the network list.
 
static ClientID _admin_client_id = INVALID_CLIENT_ID
 For what client a confirmation window is open.
 
static CompanyID _admin_company_id = INVALID_COMPANY
 For what company a confirmation window is open.
 
static const ServerListPosition SLP_INVALID = -1
 
static const NWidgetPart _nested_network_game_widgets []
 
static WindowDesc _network_game_window_desc (WDP_CENTER, "list_servers", 1000, 730, WC_NETWORK_WINDOW, WC_NONE, 0, _nested_network_game_widgets, lengthof(_nested_network_game_widgets))
 
static const NWidgetPart _nested_network_start_server_window_widgets []
 
static WindowDesc _network_start_server_window_desc (WDP_CENTER, nullptr, 0, 0, WC_NETWORK_WINDOW, WC_NONE, 0, _nested_network_start_server_window_widgets, lengthof(_nested_network_start_server_window_widgets))
 
static const NWidgetPart _nested_client_list_widgets []
 
static WindowDesc _client_list_desc (WDP_AUTO, "list_clients", 220, 300, WC_CLIENT_LIST, WC_NONE, 0, _nested_client_list_widgets, lengthof(_nested_client_list_widgets))
 
NetworkJoinStatus _network_join_status
 The status of joining.
 
uint8 _network_join_waiting
 The number of clients waiting in front of us.
 
uint32 _network_join_bytes
 The number of bytes we already downloaded.
 
uint32 _network_join_bytes_total
 The total number of bytes to download.
 
static const NWidgetPart _nested_network_join_status_window_widgets []
 
static WindowDesc _network_join_status_window_desc (WDP_CENTER, nullptr, 0, 0, WC_NETWORK_STATUS_WINDOW, WC_NONE, WDF_MODAL, _nested_network_join_status_window_widgets, lengthof(_nested_network_join_status_window_widgets))
 
static const NWidgetPart _nested_network_company_password_window_widgets []
 
static WindowDesc _network_company_password_window_desc (WDP_AUTO, nullptr, 0, 0, WC_COMPANY_PASSWORD_WINDOW, WC_NONE, 0, _nested_network_company_password_window_widgets, lengthof(_nested_network_company_password_window_widgets))
 
static const NWidgetPart _nested_network_ask_relay_widgets []
 
static WindowDesc _network_ask_relay_desc (WDP_CENTER, nullptr, 0, 0, WC_NETWORK_ASK_RELAY, WC_NONE, WDF_MODAL, _nested_network_ask_relay_widgets, lengthof(_nested_network_ask_relay_widgets))
 

Detailed Description

Implementation of the Network related GUIs.

Definition in file network_gui.cpp.

Enumeration Type Documentation

◆ DropDownAdmin

The possibly entries in a DropDown for an admin.

Client and companies are mixed; they just have to be unique.

Definition at line 1343 of file network_gui.cpp.

Function Documentation

◆ AdminClientBanCallback()

static void AdminClientBanCallback ( Window w,
bool  confirmed 
)
static

Callback function for admin command to ban client.

Parameters
wThe window which initiated the confirmation dialog.
confirmedIff the user pressed Yes.

Definition at line 1365 of file network_gui.cpp.

References _admin_client_id, and NetworkServerKickOrBanIP().

◆ AdminClientKickCallback()

static void AdminClientKickCallback ( Window w,
bool  confirmed 
)
static

Callback function for admin command to kick client.

Parameters
wThe window which initiated the confirmation dialog.
confirmedIff the user pressed Yes.

Definition at line 1355 of file network_gui.cpp.

References _admin_client_id, and NetworkServerKickClient().

◆ AdminCompanyResetCallback()

static void AdminCompanyResetCallback ( Window w,
bool  confirmed 
)
static

Callback function for admin command to reset company.

Parameters
wThe window which initiated the confirmation dialog.
confirmedIff the user pressed Yes.

Definition at line 1375 of file network_gui.cpp.

References _admin_company_id, CCA_DELETE, CMD_COMPANY_CTRL, CRR_MANUAL, DoCommandP(), and NetworkCompanyHasClients().

◆ AdminCompanyUnlockCallback()

static void AdminCompanyUnlockCallback ( Window w,
bool  confirmed 
)
static

Callback function for admin command to unlock company.

Parameters
wThe window which initiated the confirmation dialog.
confirmedIff the user pressed Yes.

Definition at line 1388 of file network_gui.cpp.

References _admin_company_id, and NetworkServerSetCompanyPassword().

◆ DrawCompanyIcon()

void DrawCompanyIcon ( CompanyID  c,
int  x,
int  y 
)

Draw the icon of a company.

Parameters
cCompany that needs its icon drawn.
xHorizontal coordinate of the icon.
yVertical coordinate of the icon.

Definition at line 143 of file company_cmd.cpp.

Referenced by AIDebugWindow::OnPaint().

◆ ShowNetworkAskRelay()

void ShowNetworkAskRelay ( const std::string &  server_connection_string,
const std::string &  relay_connection_string,
const std::string &  token 
)

Show a modal confirmation window with "no" / "yes, once" / "yes, always" buttons.

Parameters
server_connection_stringThe game server we want to connect to.
relay_connection_stringThe relay server we want to connect to.
tokenThe token for this connection.

Definition at line 2464 of file network_gui.cpp.

References CloseWindowByClass(), FindWindowById(), WC_MAIN_WINDOW, and WC_NETWORK_ASK_RELAY.

Variable Documentation

◆ _nested_network_ask_relay_widgets

const NWidgetPart _nested_network_ask_relay_widgets[]
static
Initial value:
= {
NWidget(WWT_CLOSEBOX, COLOUR_RED),
NWidget(WWT_CAPTION, COLOUR_RED, WID_NAR_CAPTION), SetDataTip(STR_NETWORK_ASK_RELAY_CAPTION, STR_NULL),
NWidget(WWT_PANEL, COLOUR_RED), SetPIP(0, 0, 8),
NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_NAR_NO), SetMinimalSize(71, 12), SetFill(1, 1), SetDataTip(STR_NETWORK_ASK_RELAY_NO, STR_NULL),
NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_NAR_YES_ONCE), SetMinimalSize(71, 12), SetFill(1, 1), SetDataTip(STR_NETWORK_ASK_RELAY_YES_ONCE, STR_NULL),
NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_NAR_YES_ALWAYS), SetMinimalSize(71, 12), SetFill(1, 1), SetDataTip(STR_NETWORK_ASK_RELAY_YES_ALWAYS, STR_NULL),
}

Definition at line 2436 of file network_gui.cpp.

◆ _nested_network_company_password_window_widgets

const NWidgetPart _nested_network_company_password_window_widgets[]
static
Initial value:
= {
NWidget(WWT_CLOSEBOX, COLOUR_GREY),
NWidget(WWT_CAPTION, COLOUR_GREY), SetDataTip(STR_COMPANY_PASSWORD_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS),
NWidget(WWT_TEXT, COLOUR_GREY, WID_NCP_LABEL), SetDataTip(STR_COMPANY_VIEW_PASSWORD, STR_NULL),
NWidget(WWT_EDITBOX, COLOUR_GREY, WID_NCP_PASSWORD), SetFill(1, 0), SetMinimalSize(194, 12), SetDataTip(STR_COMPANY_VIEW_SET_PASSWORD, STR_NULL),
SetDataTip(STR_COMPANY_PASSWORD_MAKE_DEFAULT, STR_COMPANY_PASSWORD_MAKE_DEFAULT_TOOLTIP),
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_NCP_CANCEL), SetFill(1, 0), SetDataTip(STR_BUTTON_CANCEL, STR_COMPANY_PASSWORD_CANCEL),
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_NCP_OK), SetFill(1, 0), SetDataTip(STR_BUTTON_OK, STR_COMPANY_PASSWORD_OK),
}

Definition at line 2324 of file network_gui.cpp.

◆ _nested_network_join_status_window_widgets

const NWidgetPart _nested_network_join_status_window_widgets[]
static
Initial value:
= {
NWidget(WWT_CAPTION, COLOUR_GREY), SetDataTip(STR_NETWORK_CONNECTING_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS),
NWidget(WWT_PANEL, COLOUR_GREY),
NWidget(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NJS_CANCELOK), SetMinimalSize(101, 12), SetDataTip(STR_NETWORK_CONNECTION_DISCONNECT, STR_NULL),
}

Definition at line 2213 of file network_gui.cpp.

WWT_CAPTION
@ WWT_CAPTION
Window caption (window title between closebox and stickybox)
Definition: widget_type.h:59
WID_NAR_TEXT
@ WID_NAR_TEXT
Text in the window.
Definition: network_widget.h:115
WID_NJS_CANCELOK
@ WID_NJS_CANCELOK
Cancel / OK button.
Definition: network_widget.h:98
NWID_HORIZONTAL
@ NWID_HORIZONTAL
Horizontal container.
Definition: widget_type.h:73
WID_NAR_YES_ONCE
@ WID_NAR_YES_ONCE
"Yes, once" button.
Definition: network_widget.h:117
WWT_EMPTY
@ WWT_EMPTY
Empty widget, place holder to reserve space in widget array.
Definition: widget_type.h:46
SetDataTip
static NWidgetPart SetDataTip(uint32 data, StringID tip)
Widget part function for setting the data and tooltip.
Definition: widget_type.h:1107
WID_NCP_SAVE_AS_DEFAULT_PASSWORD
@ WID_NCP_SAVE_AS_DEFAULT_PASSWORD
Toggle 'button' for saving the current password as default password.
Definition: network_widget.h:106
NC_EQUALSIZE
@ NC_EQUALSIZE
Value of the NCB_EQUALSIZE flag.
Definition: widget_type.h:463
WWT_EDITBOX
@ WWT_EDITBOX
a textbox for typing
Definition: widget_type.h:69
WID_NCP_WARNING
@ WID_NCP_WARNING
Warning text about password security.
Definition: network_widget.h:107
WID_NAR_YES_ALWAYS
@ WID_NAR_YES_ALWAYS
"Yes, always" button.
Definition: network_widget.h:118
WWT_PUSHTXTBTN
@ WWT_PUSHTXTBTN
Normal push-button (no toggle button) with text caption.
Definition: widget_type.h:104
WID_NJS_BACKGROUND
@ WID_NJS_BACKGROUND
Background of the window.
Definition: network_widget.h:97
WID_NCP_CANCEL
@ WID_NCP_CANCEL
Close the window without changing anything.
Definition: network_widget.h:108
WID_NCP_LABEL
@ WID_NCP_LABEL
Label in front of the password field.
Definition: network_widget.h:104
WID_NAR_NO
@ WID_NAR_NO
"No" button.
Definition: network_widget.h:116
SA_HOR_CENTER
@ SA_HOR_CENTER
Horizontally center the text.
Definition: gfx_type.h:329
NWID_VERTICAL
@ NWID_VERTICAL
Vertical container.
Definition: widget_type.h:75
WWT_CLOSEBOX
@ WWT_CLOSEBOX
Close box (at top-left of a window)
Definition: widget_type.h:67
WID_NCP_BACKGROUND
@ WID_NCP_BACKGROUND
Background of the window.
Definition: network_widget.h:103
EndContainer
static NWidgetPart EndContainer()
Widget part function for denoting the end of a container (horizontal, vertical, WWT_FRAME,...
Definition: widget_type.h:1092
WWT_TEXT
@ WWT_TEXT
Pure simple text.
Definition: widget_type.h:56
WID_NCP_PASSWORD
@ WID_NCP_PASSWORD
Input field for the password.
Definition: network_widget.h:105
NWidget
static NWidgetPart NWidget(WidgetType tp, Colours col, int16 idx=-1)
Widget part function for starting a new 'real' widget.
Definition: widget_type.h:1207
SetMinimalSize
static NWidgetPart SetMinimalSize(int16 x, int16 y)
Widget part function for setting the minimal size.
Definition: widget_type.h:1010
WWT_PANEL
@ WWT_PANEL
Simple depressed panel.
Definition: widget_type.h:48
NWID_SPACER
@ NWID_SPACER
Invisible widget that takes some space.
Definition: widget_type.h:77
SetAlignment
static NWidgetPart SetAlignment(StringAlignment align)
Widget part function for setting the alignment of text/images.
Definition: widget_type.h:1060
SetPIP
static NWidgetPart SetPIP(uint8 pre, uint8 inter, uint8 post)
Widget part function for setting a pre/inter/post spaces.
Definition: widget_type.h:1169
SetFill
static NWidgetPart SetFill(uint fill_x, uint fill_y)
Widget part function for setting filling.
Definition: widget_type.h:1076
WID_NCP_OK
@ WID_NCP_OK
Safe the password etc.
Definition: network_widget.h:109
WWT_TEXTBTN
@ WWT_TEXTBTN
(Toggle) Button with text
Definition: widget_type.h:53
WID_NAR_CAPTION
@ WID_NAR_CAPTION
Caption of the window.
Definition: network_widget.h:114