src/network/network_gui.cpp
changeset 9451 0d6806ba5504
parent 9441 6f3d3595b42c
child 9462 8c8bcb29604d
equal deleted inserted replaced
9450:9e7d05b0b1e5 9451:0d6806ba5504
   381 			y += 2;
   381 			y += 2;
   382 
   382 
   383 			if (!sel->info.compatible) {
   383 			if (!sel->info.compatible) {
   384 				DrawStringCentered(this->widget[NGWW_DETAILS].left + 115, y, sel->info.version_compatible ? STR_NETWORK_GRF_MISMATCH : STR_NETWORK_VERSION_MISMATCH, TC_FROMSTRING); // server mismatch
   384 				DrawStringCentered(this->widget[NGWW_DETAILS].left + 115, y, sel->info.version_compatible ? STR_NETWORK_GRF_MISMATCH : STR_NETWORK_VERSION_MISMATCH, TC_FROMSTRING); // server mismatch
   385 			} else if (sel->info.clients_on == sel->info.clients_max) {
   385 			} else if (sel->info.clients_on == sel->info.clients_max) {
   386 				/* Show: server full, when clients_on == clients_max */
   386 				/* Show: server full, when clients_on == max_clients */
   387 				DrawStringCentered(this->widget[NGWW_DETAILS].left + 115, y, STR_NETWORK_SERVER_FULL, TC_FROMSTRING); // server full
   387 				DrawStringCentered(this->widget[NGWW_DETAILS].left + 115, y, STR_NETWORK_SERVER_FULL, TC_FROMSTRING); // server full
   388 			} else if (sel->info.use_password) {
   388 			} else if (sel->info.use_password) {
   389 				DrawStringCentered(this->widget[NGWW_DETAILS].left + 115, y, STR_NETWORK_PASSWORD, TC_FROMSTRING); // password warning
   389 				DrawStringCentered(this->widget[NGWW_DETAILS].left + 115, y, STR_NETWORK_PASSWORD, TC_FROMSTRING); // password warning
   390 			}
   390 			}
   391 
   391 
   674 
   674 
   675 		this->afilter = CS_ALPHANUMERAL;
   675 		this->afilter = CS_ALPHANUMERAL;
   676 		InitializeTextBuffer(&this->text, this->edit_str_buf, lengthof(this->edit_str_buf), 160);
   676 		InitializeTextBuffer(&this->text, this->edit_str_buf, lengthof(this->edit_str_buf), 160);
   677 
   677 
   678 		this->field = NSSW_GAMENAME;
   678 		this->field = NSSW_GAMENAME;
   679 		_network_game_info.use_password = !StrEmpty(_settings_client.network.server_password);
       
   680 
   679 
   681 		this->FindWindowPlacementAndResize(desc);
   680 		this->FindWindowPlacementAndResize(desc);
   682 	}
   681 	}
   683 
   682 
   684 	virtual void OnPaint()
   683 	virtual void OnPaint()
   686 		int y = NSSWND_START;
   685 		int y = NSSWND_START;
   687 		const FiosItem *item;
   686 		const FiosItem *item;
   688 
   687 
   689 		/* draw basic widgets */
   688 		/* draw basic widgets */
   690 		SetDParam(1, _connection_types_dropdown[_network_advertise]);
   689 		SetDParam(1, _connection_types_dropdown[_network_advertise]);
   691 		SetDParam(2, _network_game_info.clients_max);
   690 		SetDParam(2, _settings_client.network.max_clients);
   692 		SetDParam(3, _network_game_info.companies_max);
   691 		SetDParam(3, _settings_client.network.max_companies);
   693 		SetDParam(4, _network_game_info.spectators_max);
   692 		SetDParam(4, _settings_client.network.max_spectators);
   694 		SetDParam(5, STR_NETWORK_LANG_ANY + _network_game_info.server_lang);
   693 		SetDParam(5, STR_NETWORK_LANG_ANY + _settings_client.network.server_lang);
   695 		this->DrawWidgets();
   694 		this->DrawWidgets();
   696 
   695 
   697 		/* editbox to set game name */
   696 		/* editbox to set game name */
   698 		this->DrawEditBox(NSSW_GAMENAME);
   697 		this->DrawEditBox(NSSW_GAMENAME);
   699 
   698 
   700 		/* if password is set, draw red '*' next to 'Set password' button */
   699 		/* if password is set, draw red '*' next to 'Set password' button */
   701 		if (_network_game_info.use_password) DoDrawString("*", 408, 23, TC_RED);
   700 		if (!StrEmpty(_settings_client.network.server_password)) DoDrawString("*", 408, 23, TC_RED);
   702 
   701 
   703 		/* draw list of maps */
   702 		/* draw list of maps */
   704 		GfxFillRect(11, 63, 258, 215, 0xD7);  // black background of maps list
   703 		GfxFillRect(11, 63, 258, 215, 0xD7);  // black background of maps list
   705 
   704 
   706 		for (uint pos = this->vscroll.pos; pos < _fios_items.Length() + 1; pos++) {
   705 		for (uint pos = this->vscroll.pos; pos < _fios_items.Length() + 1; pos++) {
   760 					this->HandleButtonClick(widget);
   759 					this->HandleButtonClick(widget);
   761 					this->SetDirty();
   760 					this->SetDirty();
   762 					switch (widget) {
   761 					switch (widget) {
   763 						default: NOT_REACHED();
   762 						default: NOT_REACHED();
   764 						case NSSW_CLIENTS_BTND: case NSSW_CLIENTS_BTNU:
   763 						case NSSW_CLIENTS_BTND: case NSSW_CLIENTS_BTNU:
   765 							_network_game_info.clients_max    = Clamp(_network_game_info.clients_max    + widget - NSSW_CLIENTS_TXT,    2, MAX_CLIENTS);
   764 							_settings_client.network.max_clients    = Clamp(_settings_client.network.max_clients    + widget - NSSW_CLIENTS_TXT,    2, MAX_CLIENTS);
   766 							break;
   765 							break;
   767 						case NSSW_COMPANIES_BTND: case NSSW_COMPANIES_BTNU:
   766 						case NSSW_COMPANIES_BTND: case NSSW_COMPANIES_BTNU:
   768 							_network_game_info.companies_max  = Clamp(_network_game_info.companies_max  + widget - NSSW_COMPANIES_TXT,  1, MAX_PLAYERS);
   767 							_settings_client.network.max_companies  = Clamp(_settings_client.network.max_companies  + widget - NSSW_COMPANIES_TXT,  1, MAX_PLAYERS);
   769 							break;
   768 							break;
   770 						case NSSW_SPECTATORS_BTND: case NSSW_SPECTATORS_BTNU:
   769 						case NSSW_SPECTATORS_BTND: case NSSW_SPECTATORS_BTNU:
   771 							_network_game_info.spectators_max = Clamp(_network_game_info.spectators_max + widget - NSSW_SPECTATORS_TXT, 0, MAX_CLIENTS);
   770 							_settings_client.network.max_spectators = Clamp(_settings_client.network.max_spectators + widget - NSSW_SPECTATORS_TXT, 0, MAX_CLIENTS);
   772 							break;
   771 							break;
   773 					}
   772 					}
   774 				}
   773 				}
   775 				_left_button_clicked = false;
   774 				_left_button_clicked = false;
   776 				break;
   775 				break;
   777 
   776 
   778 			case NSSW_CLIENTS_TXT:    // Click on number of players
   777 			case NSSW_CLIENTS_TXT:    // Click on number of players
   779 				this->widget_id = NSSW_CLIENTS_TXT;
   778 				this->widget_id = NSSW_CLIENTS_TXT;
   780 				SetDParam(0, _network_game_info.clients_max);
   779 				SetDParam(0, _settings_client.network.max_clients);
   781 				ShowQueryString(STR_CONFIG_PATCHES_INT32, STR_NETWORK_NUMBER_OF_CLIENTS,    3, 50, this, CS_NUMERAL);
   780 				ShowQueryString(STR_CONFIG_PATCHES_INT32, STR_NETWORK_NUMBER_OF_CLIENTS,    3, 50, this, CS_NUMERAL);
   782 				break;
   781 				break;
   783 
   782 
   784 			case NSSW_COMPANIES_TXT:  // Click on number of companies
   783 			case NSSW_COMPANIES_TXT:  // Click on number of companies
   785 				this->widget_id = NSSW_COMPANIES_TXT;
   784 				this->widget_id = NSSW_COMPANIES_TXT;
   786 				SetDParam(0, _network_game_info.companies_max);
   785 				SetDParam(0, _settings_client.network.max_companies);
   787 				ShowQueryString(STR_CONFIG_PATCHES_INT32, STR_NETWORK_NUMBER_OF_COMPANIES,  3, 50, this, CS_NUMERAL);
   786 				ShowQueryString(STR_CONFIG_PATCHES_INT32, STR_NETWORK_NUMBER_OF_COMPANIES,  3, 50, this, CS_NUMERAL);
   788 				break;
   787 				break;
   789 
   788 
   790 			case NSSW_SPECTATORS_TXT: // Click on number of spectators
   789 			case NSSW_SPECTATORS_TXT: // Click on number of spectators
   791 				this->widget_id = NSSW_SPECTATORS_TXT;
   790 				this->widget_id = NSSW_SPECTATORS_TXT;
   792 				SetDParam(0, _network_game_info.spectators_max);
   791 				SetDParam(0, _settings_client.network.max_spectators);
   793 				ShowQueryString(STR_CONFIG_PATCHES_INT32, STR_NETWORK_NUMBER_OF_SPECTATORS, 3, 50, this, CS_NUMERAL);
   792 				ShowQueryString(STR_CONFIG_PATCHES_INT32, STR_NETWORK_NUMBER_OF_SPECTATORS, 3, 50, this, CS_NUMERAL);
   794 				break;
   793 				break;
   795 
   794 
   796 			case NSSW_LANGUAGE_BTN: { // Language
   795 			case NSSW_LANGUAGE_BTN: { // Language
   797 				uint sel = 0;
   796 				uint sel = 0;
   798 				for (uint i = 0; i < lengthof(_language_dropdown) - 1; i++) {
   797 				for (uint i = 0; i < lengthof(_language_dropdown) - 1; i++) {
   799 					if (_language_dropdown[i] == STR_NETWORK_LANG_ANY + _network_game_info.server_lang) {
   798 					if (_language_dropdown[i] == STR_NETWORK_LANG_ANY + _settings_client.network.server_lang) {
   800 						sel = i;
   799 						sel = i;
   801 						break;
   800 						break;
   802 					}
   801 					}
   803 				}
   802 				}
   804 				ShowDropDownMenu(this, _language_dropdown, sel, NSSW_LANGUAGE_BTN, 0, 0);
   803 				ShowDropDownMenu(this, _language_dropdown, sel, NSSW_LANGUAGE_BTN, 0, 0);
   838 		switch (widget) {
   837 		switch (widget) {
   839 			case NSSW_CONNTYPE_BTN:
   838 			case NSSW_CONNTYPE_BTN:
   840 				_network_advertise = (index != 0);
   839 				_network_advertise = (index != 0);
   841 				break;
   840 				break;
   842 			case NSSW_LANGUAGE_BTN:
   841 			case NSSW_LANGUAGE_BTN:
   843 				_network_game_info.server_lang = _language_dropdown[index] - STR_NETWORK_LANG_ANY;
   842 				_settings_client.network.server_lang = _language_dropdown[index] - STR_NETWORK_LANG_ANY;
   844 				break;
   843 				break;
   845 			default:
   844 			default:
   846 				NOT_REACHED();
   845 				NOT_REACHED();
   847 		}
   846 		}
   848 
   847 
   870 	{
   869 	{
   871 		if (str == NULL) return;
   870 		if (str == NULL) return;
   872 
   871 
   873 		if (this->widget_id == NSSW_SETPWD) {
   872 		if (this->widget_id == NSSW_SETPWD) {
   874 			ttd_strlcpy(_settings_client.network.server_password, str, lengthof(_settings_client.network.server_password));
   873 			ttd_strlcpy(_settings_client.network.server_password, str, lengthof(_settings_client.network.server_password));
   875 			_network_game_info.use_password = !StrEmpty(_settings_client.network.server_password);
       
   876 		} else {
   874 		} else {
   877 			int32 value = atoi(str);
   875 			int32 value = atoi(str);
   878 			this->InvalidateWidget(this->widget_id);
   876 			this->InvalidateWidget(this->widget_id);
   879 			switch (this->widget_id) {
   877 			switch (this->widget_id) {
   880 				default: NOT_REACHED();
   878 				default: NOT_REACHED();
   881 				case NSSW_CLIENTS_TXT:    _network_game_info.clients_max    = Clamp(value, 2, MAX_CLIENTS); break;
   879 				case NSSW_CLIENTS_TXT:    _settings_client.network.max_clients    = Clamp(value, 2, MAX_CLIENTS); break;
   882 				case NSSW_COMPANIES_TXT:  _network_game_info.companies_max  = Clamp(value, 1, MAX_PLAYERS); break;
   880 				case NSSW_COMPANIES_TXT:  _settings_client.network.max_companies  = Clamp(value, 1, MAX_PLAYERS); break;
   883 				case NSSW_SPECTATORS_TXT: _network_game_info.spectators_max = Clamp(value, 0, MAX_CLIENTS); break;
   881 				case NSSW_SPECTATORS_TXT: _settings_client.network.max_spectators = Clamp(value, 0, MAX_CLIENTS); break;
   884 			}
   882 			}
   885 		}
   883 		}
   886 
   884 
   887 		this->SetDirty();
   885 		this->SetDirty();
   888 	}
   886 	}