Changeset - r14399:3f819c0da60a
src/ai/ai_gui.cpp
Show inline comments
 
@@ -140,63 +140,52 @@ struct AIListWindow : public Window {
 
	void ChangeAI()
 
	{
 
		if (this->selected == -1) {
 
			AIConfig::GetConfig(slot)->ChangeAI(NULL);
 
		} else {
 
			AIInfoList::const_iterator it = this->ai_info_list->begin();
 
			for (int i = 0; i < this->selected; i++) it++;
 
			AIConfig::GetConfig(slot)->ChangeAI((*it).second->GetName(), (*it).second->GetVersion());
 
		}
 
		SetWindowDirty(WC_GAME_OPTIONS, 0);
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
 
	virtual void OnClick(Point pt, int widget, int click_count)
 
	{
 
		switch (widget) {
 
			case AIL_WIDGET_LIST: { // Select one of the AIs
 
				int sel = (pt.y - this->GetWidget<NWidgetBase>(AIL_WIDGET_LIST)->pos_y) / this->line_height + this->vscroll.GetPosition() - 1;
 
				if (sel < (int)this->ai_info_list->size()) {
 
					this->selected = sel;
 
					this->SetDirty();
 
					if (click_count > 1) {
 
						this->ChangeAI();
 
						delete this;
 
					}
 
				}
 
				break;
 
			}
 

	
 
			case AIL_WIDGET_ACCEPT: {
 
				this->ChangeAI();
 
				delete this;
 
				break;
 
			}
 

	
 
			case AIL_WIDGET_CANCEL:
 
				delete this;
 
				break;
 
		}
 
	}
 

	
 
	virtual void OnDoubleClick(Point pt, int widget)
 
	{
 
		switch (widget) {
 
			case AIL_WIDGET_LIST: {
 
				int sel = (pt.y - this->GetWidget<NWidgetBase>(AIL_WIDGET_LIST)->pos_y) / this->line_height + this->vscroll.GetPosition() - 1;
 
				if (sel < (int)this->ai_info_list->size()) {
 
					this->selected = sel;
 
					this->ChangeAI();
 
					delete this;
 
				}
 
				break;
 
			}
 
		}
 
	}
 

	
 
	virtual void OnResize()
 
	{
 
		NWidgetCore *nwi = this->GetWidget<NWidgetCore>(AIL_WIDGET_LIST);
 
		this->vscroll.SetCapacity(nwi->current_y / this->line_height);
 
		nwi->widget_data = (this->vscroll.GetCapacity() << MAT_ROW_START) + (1 << MAT_COL_START);
 
	}
 
};
 

	
 
static const NWidgetPart _nested_ai_list_widgets[] = {
 
	NWidget(NWID_HORIZONTAL),
 
		NWidget(WWT_CLOSEBOX, COLOUR_MAUVE),
 
		NWidget(WWT_CAPTION, COLOUR_MAUVE), SetDataTip(STR_AI_LIST_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS),
 
@@ -323,25 +312,25 @@ struct AISettingsWindow : public Window 
 
	void CheckDifficultyLevel()
 
	{
 
		if (_game_mode == GM_MENU) {
 
			if (_settings_newgame.difficulty.diff_level != 3) {
 
				_settings_newgame.difficulty.diff_level = 3;
 
				ShowErrorMessage(STR_WARNING_DIFFICULTY_TO_CUSTOM, INVALID_STRING_ID, 0, 0);
 
			}
 
		} else if (_settings_game.difficulty.diff_level != 3) {
 
			IConsoleSetSetting("difficulty.diff_level", 3);
 
		}
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
 
	virtual void OnClick(Point pt, int widget, int click_count)
 
	{
 
		switch (widget) {
 
			case AIS_WIDGET_BACKGROUND: {
 
				const NWidgetBase *wid = this->GetWidget<NWidgetBase>(AIS_WIDGET_BACKGROUND);
 
				int num = (pt.y - wid->pos_y) / this->line_height + this->vscroll.GetPosition();
 
				if (num >= (int)this->ai_config->GetConfigList()->size()) break;
 

	
 
				AIConfigItemList::const_iterator it = this->ai_config->GetConfigList()->begin();
 
				for (int i = 0; i < num; i++) it++;
 
				AIConfigItem config_item = *it;
 
				if (_game_mode != GM_MENU && (config_item.flags & AICONFIG_INGAME) == 0) return;
 

	
 
@@ -579,43 +568,44 @@ struct AIConfigWindow : public Window {
 
					} else {
 
						text = STR_AI_CONFIG_RANDOM_AI;
 
					}
 
					DrawString(r.left + 10, r.right - 10, y + WD_MATRIX_TOP, text,
 
							(this->selected_slot == i) ? TC_WHITE : ((i > _settings_newgame.difficulty.max_no_competitors || i == 0) ? TC_SILVER : TC_ORANGE));
 
					y += this->line_height;
 
				}
 
				break;
 
			}
 
		}
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
 
	virtual void OnClick(Point pt, int widget, int click_count)
 
	{
 
		switch (widget) {
 
			case AIC_WIDGET_DECREASE:
 
			case AIC_WIDGET_INCREASE: {
 
				int new_value;
 
				if (widget == AIC_WIDGET_DECREASE) {
 
					new_value = max(0, _settings_newgame.difficulty.max_no_competitors - 1);
 
				} else {
 
					new_value = min(MAX_COMPANIES - 1, _settings_newgame.difficulty.max_no_competitors + 1);
 
				}
 
				IConsoleSetSetting("difficulty.max_no_competitors", new_value);
 
				this->InvalidateData();
 
				break;
 
			}
 

	
 
			case AIC_WIDGET_LIST: { // Select a slot
 
				this->selected_slot = (CompanyID)((pt.y - this->GetWidget<NWidgetBase>(widget)->pos_y) / this->line_height + this->vscroll.GetPosition());
 
				this->InvalidateData();
 
				if (click_count > 1 && this->selected_slot != INVALID_COMPANY) ShowAIListWindow((CompanyID)this->selected_slot);
 
				break;
 
			}
 

	
 
			case AIC_WIDGET_MOVE_UP:
 
				if (this->selected_slot > 1) {
 
					Swap(_settings_newgame.ai_config[this->selected_slot], _settings_newgame.ai_config[this->selected_slot - 1]);
 
					this->selected_slot--;
 
					this->vscroll.ScrollTowards(this->selected_slot);
 
					this->InvalidateData();
 
				}
 
				break;
 

	
 
@@ -643,34 +633,24 @@ struct AIConfigWindow : public Window {
 
			case AIC_WIDGET_CONTENT_DOWNLOAD:
 
				if (!_network_available) {
 
					ShowErrorMessage(STR_NETWORK_ERROR_NOTAVAILABLE, INVALID_STRING_ID, 0, 0);
 
				} else {
 
#if defined(ENABLE_NETWORK)
 
					ShowNetworkContentListWindow(NULL, CONTENT_TYPE_AI);
 
#endif
 
				}
 
				break;
 
		}
 
	}
 

	
 
	virtual void OnDoubleClick(Point pt, int widget)
 
	{
 
		switch (widget) {
 
			case AIC_WIDGET_LIST:
 
				this->OnClick(pt, widget);
 
				if (this->selected_slot != INVALID_COMPANY) ShowAIListWindow((CompanyID)this->selected_slot);
 
				break;
 
		}
 
	}
 

	
 
	virtual void OnInvalidateData(int data)
 
	{
 
		if (this->selected_slot == 0 || this->selected_slot > _settings_newgame.difficulty.max_no_competitors) {
 
			this->selected_slot = INVALID_COMPANY;
 
		}
 

	
 
		this->SetWidgetDisabledState(AIC_WIDGET_DECREASE, _settings_newgame.difficulty.max_no_competitors == 0);
 
		this->SetWidgetDisabledState(AIC_WIDGET_INCREASE, _settings_newgame.difficulty.max_no_competitors == MAX_COMPANIES - 1);
 
		this->SetWidgetDisabledState(AIC_WIDGET_CHANGE, this->selected_slot == INVALID_COMPANY);
 
		this->SetWidgetDisabledState(AIC_WIDGET_CONFIGURE, this->selected_slot == INVALID_COMPANY);
 
		this->SetWidgetDisabledState(AIC_WIDGET_MOVE_UP, this->selected_slot == INVALID_COMPANY || this->selected_slot == 1);
 
		this->SetWidgetDisabledState(AIC_WIDGET_MOVE_DOWN, this->selected_slot == INVALID_COMPANY || this->selected_slot == _settings_newgame.difficulty.max_no_competitors);
 
@@ -902,25 +882,25 @@ struct AIDebugWindow : public Window {
 
		AILog::LogData *log = (AILog::LogData *)AIObject::GetLogPointer();
 
		_current_company = old_company;
 
		this->vscroll.SetCount((log == NULL) ? 0 : log->used);
 

	
 
		this->LowerWidget(ai_debug_company + AID_WIDGET_COMPANY_BUTTON_START);
 
		this->autoscroll = true;
 
		this->last_vscroll_pos = this->vscroll.GetPosition();
 
		this->SetDirty();
 
		/* Close AI settings window to prevent confusion */
 
		DeleteWindowByClass(WC_AI_SETTINGS);
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
 
	virtual void OnClick(Point pt, int widget, int click_count)
 
	{
 
		/* Check which button is clicked */
 
		if (IsInsideMM(widget, AID_WIDGET_COMPANY_BUTTON_START, AID_WIDGET_COMPANY_BUTTON_END + 1)) {
 
			/* Is it no on disable? */
 
			if (!this->IsWidgetDisabled(widget)) {
 
				ChangeToAI((CompanyID)(widget - AID_WIDGET_COMPANY_BUTTON_START));
 
			}
 
		}
 

	
 
		switch (widget) {
 
			case AID_WIDGET_RELOAD_TOGGLE:
 
				/* First kill the company of the AI, then start a new one. This should start the current AI again */
src/airport_gui.cpp
Show inline comments
 
@@ -81,25 +81,25 @@ struct BuildAirToolbarWindow : Window {
 
	}
 

	
 
	~BuildAirToolbarWindow()
 
	{
 
		if (_settings_client.gui.link_terraform_toolbar) DeleteWindowById(WC_SCEN_LAND_GEN, 0, false);
 
	}
 

	
 
	virtual void OnPaint()
 
	{
 
		this->DrawWidgets();
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
 
	virtual void OnClick(Point pt, int widget, int click_count)
 
	{
 
		if (!IsInsideBS(widget, ATW_AIRPORT, lengthof(_build_air_button_proc))) return;
 

	
 
		_build_air_button_proc[widget - ATW_AIRPORT](this);
 
	}
 

	
 

	
 
	virtual EventState OnKeyPress(uint16 key, uint16 keycode)
 
	{
 
		switch (keycode) {
 
			case '1': BuildAirClick_Airport(this); break;
 
			case '2': BuildAirClick_Demolish(this); break;
 
@@ -248,25 +248,25 @@ public:
 
			for (int i = 0; i < BAW_AIRPORT_COUNT; i++) {
 
				if (AirportSpec::Get(i)->IsAvailable()) {
 
					this->SelectOtherAirport(i);
 
					break;
 
				}
 
			}
 
		}
 
		for (int i = 0; i < BAW_AIRPORT_COUNT; i++) {
 
			this->SetWidgetDisabledState(i + BAW_SMALL_AIRPORT, !AirportSpec::Get(i)->IsAvailable());
 
		}
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
 
	virtual void OnClick(Point pt, int widget, int click_count)
 
	{
 
		switch (widget) {
 
			case BAW_SMALL_AIRPORT: case BAW_CITY_AIRPORT: case BAW_HELIPORT: case BAW_METRO_AIRPORT:
 
			case BAW_INTERNATIONAL_AIRPORT: case BAW_COMMUTER_AIRPORT: case BAW_HELIDEPOT:
 
			case BAW_INTERCONTINENTAL_AIRPORT: case BAW_HELISTATION:
 
				this->SelectOtherAirport(widget - BAW_SMALL_AIRPORT);
 
				SndPlayFx(SND_15_BEEP);
 
				DeleteWindowById(WC_SELECT_STATION, 0);
 
				break;
 

	
 
			case BAW_BTN_DONTHILIGHT: case BAW_BTN_DOHILIGHT:
 
				_settings_client.gui.station_show_coverage = (widget != BAW_BTN_DONTHILIGHT);
src/autoreplace_gui.cpp
Show inline comments
 
@@ -390,25 +390,25 @@ public:
 
				int text_end = DrawVehiclePurchaseInfo(nwi->pos_x + WD_FRAMETEXT_LEFT, nwi->pos_x + nwi->current_x - WD_FRAMETEXT_RIGHT,
 
						nwi->pos_y + WD_FRAMERECT_TOP, this->sel_engine[side]);
 
				needed_height = max(needed_height, text_end - (int)nwi->pos_y + WD_FRAMERECT_BOTTOM);
 
			}
 
		}
 
		if (!this->IsShaded() && needed_height != this->details_height) { // Details window are not high enough, enlarge them.
 
			this->details_height = needed_height;
 
			this->ReInit();
 
			return;
 
		}
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
 
	virtual void OnClick(Point pt, int widget, int click_count)
 
	{
 
		switch (widget) {
 
			case RVW_WIDGET_TRAIN_ENGINEWAGON_TOGGLE:
 
				this->replace_engines  = !(this->replace_engines);
 
				this->engines[0].ForceRebuild();
 
				this->reset_sel_engine = true;
 
				this->SetDirty();
 
				break;
 

	
 
			case RVW_WIDGET_TRAIN_RAILTYPE_DROPDOWN: { // Railtype selection dropdown menu
 
				const Company *c = Company::Get(_local_company);
 
				DropDownList *list = new DropDownList();
src/bridge_gui.cpp
Show inline comments
 
@@ -234,25 +234,25 @@ public:
 
	virtual EventState OnKeyPress(uint16 key, uint16 keycode)
 
	{
 
		const uint8 i = keycode - '1';
 
		if (i < 9 && i < this->bridges->Length()) {
 
			/* Build the requested bridge */
 
			this->BuildBridge(i);
 
			delete this;
 
			return ES_HANDLED;
 
		}
 
		return ES_NOT_HANDLED;
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
 
	virtual void OnClick(Point pt, int widget, int click_count)
 
	{
 
		switch (widget) {
 
			default: break;
 
			case BBSW_BRIDGE_LIST: {
 
				uint i = ((int)pt.y - this->GetWidget<NWidgetBase>(BBSW_BRIDGE_LIST)->pos_y) / this->resize.step_height;
 
				if (i < this->vscroll.GetCapacity()) {
 
					i += this->vscroll.GetPosition();
 
					if (i < this->bridges->Length()) {
 
						this->BuildBridge(i);
 
						delete this;
 
					}
 
				}
src/build_vehicle_gui.cpp
Show inline comments
 
@@ -993,39 +993,40 @@ struct BuildVehicleWindow : Window {
 
				break;
 
		}
 

	
 
		this->FilterEngineList();
 

	
 
		_internal_sort_order = this->descending_sort_order;
 
		EngList_Sort(&this->eng_list, _sorter[this->vehicle_type][this->sort_criteria]);
 

	
 
		this->eng_list.Compact();
 
		this->eng_list.RebuildDone();
 
	}
 

	
 
	void OnClick(Point pt, int widget)
 
	void OnClick(Point pt, int widget, int click_count)
 
	{
 
		switch (widget) {
 
			case BUILD_VEHICLE_WIDGET_SORT_ASSENDING_DESCENDING:
 
				this->descending_sort_order ^= true;
 
				_last_sort_order[this->vehicle_type] = this->descending_sort_order;
 
				this->eng_list.ForceRebuild();
 
				this->SetDirty();
 
				break;
 

	
 
			case BUILD_VEHICLE_WIDGET_LIST: {
 
				uint i = (pt.y - this->GetWidget<NWidgetBase>(BUILD_VEHICLE_WIDGET_LIST)->pos_y) / this->resize.step_height + this->vscroll.GetPosition();
 
				size_t num_items = this->eng_list.Length();
 
				this->sel_engine = (i < num_items) ? this->eng_list[i] : INVALID_ENGINE;
 
				this->SetDirty();
 
				if (click_count > 1) this->OnClick(pt, BUILD_VEHICLE_WIDGET_BUILD, 1);
 
				break;
 
			}
 

	
 
			case BUILD_VEHICLE_WIDGET_SORT_DROPDOWN: // Select sorting criteria dropdown menu
 
				ShowDropDownMenu(this, _sort_listing[this->vehicle_type], this->sort_criteria, BUILD_VEHICLE_WIDGET_SORT_DROPDOWN, 0, 0);
 
				break;
 

	
 
			case BUILD_VEHICLE_WIDGET_CARGO_FILTER_DROPDOWN: // Select cargo filtering criteria dropdown menu
 
				ShowDropDownMenu(this, this->cargo_filter_texts, this->cargo_filter_criteria, BUILD_VEHICLE_WIDGET_CARGO_FILTER_DROPDOWN, 0, 0);
 
				break;
 

	
 
			case BUILD_VEHICLE_WIDGET_BUILD: {
 
@@ -1119,32 +1120,24 @@ struct BuildVehicleWindow : Window {
 
							nwi->pos_y + WD_FRAMERECT_TOP, this->sel_engine);
 
					needed_height = max(needed_height, text_end - (int)nwi->pos_y + WD_FRAMERECT_BOTTOM);
 
				}
 
			}
 
			if (needed_height != this->details_height) { // Details window are not high enough, enlarge them.
 
				this->details_height = needed_height;
 
				this->ReInit();
 
				return;
 
			}
 
		}
 
	}
 

	
 
	virtual void OnDoubleClick(Point pt, int widget)
 
	{
 
		if (widget == BUILD_VEHICLE_WIDGET_LIST) {
 
			/* When double clicking, we want to buy a vehicle */
 
			this->OnClick(pt, BUILD_VEHICLE_WIDGET_BUILD);
 
		}
 
	}
 

	
 
	virtual void OnQueryTextFinished(char *str)
 
	{
 
		if (str == NULL) return;
 

	
 
		DoCommandP(0, this->rename_engine, 0, CMD_RENAME_ENGINE | CMD_MSG(STR_ERROR_CAN_T_RENAME_TRAIN_TYPE + this->vehicle_type), NULL, str);
 
	}
 

	
 
	virtual void OnDropdownSelect(int widget, int index)
 
	{
 
		switch (widget) {
 
			case BUILD_VEHICLE_WIDGET_SORT_DROPDOWN:
 
				if (this->sort_criteria != index) {
src/cheat_gui.cpp
Show inline comments
 
@@ -262,25 +262,25 @@ struct CheatWindow : Window {
 
		}
 

	
 
		size->width = width + 50 /* stuff on the left */ + 10 /* extra spacing on right */;
 
		this->header_height = GetStringHeight(STR_CHEATS_WARNING, size->width - WD_FRAMERECT_LEFT - WD_FRAMERECT_RIGHT) + WD_PAR_VSEP_WIDE;
 
		size->height = this->header_height + WD_FRAMERECT_TOP + WD_PAR_VSEP_NORMAL + WD_FRAMERECT_BOTTOM + (FONT_HEIGHT_NORMAL + WD_PAR_VSEP_NORMAL) * lengthof(_cheats_ui);
 
	}
 

	
 
	virtual void OnPaint()
 
	{
 
		this->DrawWidgets();
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
 
	virtual void OnClick(Point pt, int widget, int click_count)
 
	{
 
		const NWidgetBase *wid = this->GetWidget<NWidgetBase>(CW_PANEL);
 
		uint btn = (pt.y - wid->pos_y - WD_FRAMERECT_TOP - this->header_height) / (FONT_HEIGHT_NORMAL + WD_PAR_VSEP_NORMAL);
 
		uint x = pt.x - wid->pos_x;
 
		bool rtl = _dynlang.text_dir == TD_RTL;
 
		if (rtl) x = wid->current_x - x;
 

	
 
		/* Not clicking a button? */
 
		if (!IsInsideMM(x, 20, 40) || btn >= lengthof(_cheats_ui)) return;
 

	
 
		const CheatEntry *ce = &_cheats_ui[btn];
 
		int value = (int32)ReadValue(ce->variable, ce->type);
src/company_gui.cpp
Show inline comments
 
@@ -424,25 +424,25 @@ struct CompanyFinancesWindow : Window {
 
				this->ReInit();
 
				return;
 
			}
 

	
 
			const Company *c = Company::Get(company);
 
			this->SetWidgetDisabledState(CFW_INCREASE_LOAN, c->current_loan == _economy.max_loan); // Borrow button only shows when there is any more money to loan.
 
			this->SetWidgetDisabledState(CFW_REPAY_LOAN, company != _local_company || c->current_loan == 0); // Repay button only shows when there is any more money to repay.
 
		}
 

	
 
		this->DrawWidgets();
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
 
	virtual void OnClick(Point pt, int widget, int click_count)
 
	{
 
		switch (widget) {
 
			case CFW_TOGGLE_SIZE: // toggle size
 
				this->small = !this->small;
 
				this->SetupWidgets();
 
				if (this->IsShaded()) {
 
					/* Finances window is not resizable, so size hints given during unshading have no effect
 
					 * on the changed appearance of the window. */
 
					this->SetShaded(false);
 
				} else {
 
					this->ReInit();
 
				}
 
@@ -720,25 +720,25 @@ public:
 

	
 
				/* Text below the second dropdown. */
 
				if (sec_right > sec_left) { // Second dropdown has non-zero size.
 
					DrawSprite(SPR_SQUARE, GENERAL_SPRITE_COLOUR(c->livery[scheme].colour2), (rtl ? sec_right - TEXT_INDENT + WD_FRAMERECT_RIGHT : sec_left) + WD_FRAMERECT_LEFT, y);
 
					DrawString(sec_left + text_left, sec_right - text_right, y, STR_COLOUR_DARK_BLUE + c->livery[scheme].colour2, sel ? TC_WHITE : TC_GOLD);
 
				}
 

	
 
				y += 4 + FONT_HEIGHT_NORMAL;
 
			}
 
		}
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
 
	virtual void OnClick(Point pt, int widget, int click_count)
 
	{
 
		switch (widget) {
 
			/* Livery Class buttons */
 
			case SCLW_WIDGET_CLASS_GENERAL:
 
			case SCLW_WIDGET_CLASS_RAIL:
 
			case SCLW_WIDGET_CLASS_ROAD:
 
			case SCLW_WIDGET_CLASS_SHIP:
 
			case SCLW_WIDGET_CLASS_AIRCRAFT:
 
				this->RaiseWidget(this->livery_class + SCLW_WIDGET_CLASS_GENERAL);
 
				this->livery_class = (LiveryClass)(widget - SCLW_WIDGET_CLASS_GENERAL);
 
				this->LowerWidget(this->livery_class + SCLW_WIDGET_CLASS_GENERAL);
 

	
 
@@ -1384,25 +1384,25 @@ public:
 
				break;
 

	
 
			case SCMFW_WIDGET_COLLAR:
 
				this->DrawFaceStringLabel(SCMFW_WIDGET_COLLAR,      GetCompanyManagerFaceBits(this->face, CMFV_COLLAR,      this->ge), false);
 
				break;
 

	
 
			case SCMFM_WIDGET_FACE:
 
				DrawCompanyManagerFace(this->face, Company::Get((CompanyID)this->window_number)->colour, r.left, r.top);
 
				break;
 
		}
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
 
	virtual void OnClick(Point pt, int widget, int click_count)
 
	{
 
		switch (widget) {
 
			/* Toggle size, advanced/simple face selection */
 
			case SCMFW_WIDGET_TOGGLE_LARGE_SMALL:
 
			case SCMFW_WIDGET_TOGGLE_LARGE_SMALL_BUTTON:
 
				this->advanced = !this->advanced;
 
				this->SelectDisplayPlanes(this->advanced);
 
				this->ReInit();
 
				break;
 

	
 
			/* OK button */
 
			case SCMFW_WIDGET_ACCEPT:
 
@@ -1907,25 +1907,25 @@ struct CompanyWindow : Window
 
				break;
 

	
 
			case CW_WIDGET_DESC_INAUGURATION:
 
				SetDParam(0, Company::Get((CompanyID)this->window_number)->inaugurated_year);
 
				break;
 

	
 
			case CW_WIDGET_DESC_COMPANY_VALUE:
 
				SetDParam(0, CalculateCompanyValue(Company::Get((CompanyID)this->window_number)));
 
				break;
 
		}
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
 
	virtual void OnClick(Point pt, int widget, int click_count)
 
	{
 
		switch (widget) {
 
			case CW_WIDGET_NEW_FACE: DoSelectCompanyManagerFace(this); break;
 

	
 
			case CW_WIDGET_COLOUR_SCHEME:
 
				if (BringWindowToFrontById(WC_COMPANY_COLOUR, this->window_number)) break;
 
				new SelectCompanyLiveryWindow(&_select_company_livery_desc, (CompanyID)this->window_number);
 
				break;
 

	
 
			case CW_WIDGET_PRESIDENT_NAME:
 
				this->query_widget = CW_WIDGET_PRESIDENT_NAME;
 
				SetDParam(0, this->window_number);
 
@@ -2106,25 +2106,25 @@ struct BuyCompanyWindow : Window {
 
				DrawCompanyManagerFace(c->face, c->colour, r.left, r.top);
 
			} break;
 

	
 
			case BCW_QUESTION: {
 
				const Company *c = Company::Get((CompanyID)this->window_number);
 
				SetDParam(0, c->index);
 
				SetDParam(1, c->bankrupt_value);
 
				DrawStringMultiLine(r.left, r.right, r.top, r.bottom, STR_BUY_COMPANY_MESSAGE, TC_FROMSTRING, SA_CENTER);
 
			} break;
 
		}
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
 
	virtual void OnClick(Point pt, int widget, int click_count)
 
	{
 
		switch (widget) {
 
			case BCW_NO:
 
				delete this;
 
				break;
 

	
 
			case BCW_YES:
 
				DoCommandP(0, this->window_number, 0, CMD_BUY_COMPANY | CMD_MSG(STR_ERROR_CAN_T_BUY_COMPANY));
 
				break;
 
		}
 
	}
 
};
src/date_gui.cpp
Show inline comments
 
@@ -142,25 +142,25 @@ struct SetDateWindow : Window {
 
		switch (widget) {
 
			case SDW_DAY:   SetDParam(0, this->date.day - 1 + STR_ORDINAL_NUMBER_1ST); break;
 
			case SDW_MONTH: SetDParam(0, this->date.month + STR_MONTH_JAN); break;
 
			case SDW_YEAR:  SetDParam(0, this->date.year); break;
 
		}
 
	}
 

	
 
	virtual void OnPaint()
 
	{
 
		this->DrawWidgets();
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
 
	virtual void OnClick(Point pt, int widget, int click_count)
 
	{
 
		switch (widget) {
 
			case SDW_DAY:
 
			case SDW_MONTH:
 
			case SDW_YEAR:
 
				ShowDateDropDown(widget);
 
				break;
 

	
 
			case SDW_SET_DATE:
 
				if (this->callback != NULL) this->callback(this->parent, ConvertYMDToDate(this->date.year, this->date.month, this->date.day));
 
				delete this;
 
				break;
src/depot_gui.cpp
Show inline comments
 
@@ -702,25 +702,25 @@ struct DepotWindow : Window {
 
			DEPOT_WIDGET_START_ALL,
 
			DEPOT_WIDGET_SELL,
 
			DEPOT_WIDGET_SELL_CHAIN,
 
			DEPOT_WIDGET_SELL_ALL,
 
			DEPOT_WIDGET_BUILD,
 
			DEPOT_WIDGET_CLONE,
 
			DEPOT_WIDGET_AUTOREPLACE,
 
			WIDGET_LIST_END);
 

	
 
		this->DrawWidgets();
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
 
	virtual void OnClick(Point pt, int widget, int click_count)
 
	{
 
		switch (widget) {
 
			case DEPOT_WIDGET_MATRIX: { // List
 
				NWidgetBase *nwi = this->GetWidget<NWidgetBase>(DEPOT_WIDGET_MATRIX);
 
				this->DepotClick(pt.x - nwi->pos_x, pt.y - nwi->pos_y);
 
				break;
 
			}
 

	
 
			case DEPOT_WIDGET_BUILD: // Build vehicle
 
				ResetObjectToPlace();
 
				ShowBuildVehicleWindow(this->window_number, this->type);
 
				break;
src/dock_gui.cpp
Show inline comments
 
@@ -172,25 +172,25 @@ struct BuildDocksToolbarWindow : Window 
 

	
 
	~BuildDocksToolbarWindow()
 
	{
 
		if (_settings_client.gui.link_terraform_toolbar) DeleteWindowById(WC_SCEN_LAND_GEN, 0, false);
 
	}
 

	
 
	virtual void OnPaint()
 
	{
 
		this->SetWidgetsDisabledState(!CanBuildVehicleInfrastructure(VEH_SHIP), DTW_DEPOT, DTW_STATION, DTW_BUOY, WIDGET_LIST_END);
 
		this->DrawWidgets();
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
 
	virtual void OnClick(Point pt, int widget, int click_count)
 
	{
 
		if (widget >= DTW_BUTTONS_BEGIN) _build_docks_button_proc[widget - DTW_BUTTONS_BEGIN](this);
 
	}
 

	
 
	virtual EventState OnKeyPress(uint16 key, uint16 keycode)
 
	{
 
		switch (keycode) {
 
			case '1': BuildDocksClick_Canal(this); break;
 
			case '2': BuildDocksClick_Lock(this); break;
 
			case '3': BuildDocksClick_Demolish(this); break;
 
			case '4': BuildDocksClick_Depot(this); break;
 
			case '5': BuildDocksClick_Dock(this); break;
 
@@ -363,25 +363,25 @@ public:
 
		int top = this->GetWidget<NWidgetBase>(BDSW_LT_OFF)->pos_y + this->GetWidget<NWidgetBase>(BDSW_LT_OFF)->current_y + WD_PAR_VSEP_NORMAL;
 
		NWidgetBase *back_nwi = this->GetWidget<NWidgetBase>(BDSW_BACKGROUND);
 
		int right  = back_nwi->pos_x + back_nwi->current_x;
 
		int bottom = back_nwi->pos_y + back_nwi->current_y;
 
		top = DrawStationCoverageAreaText(back_nwi->pos_x + WD_FRAMERECT_LEFT, right - WD_FRAMERECT_RIGHT, top, SCT_ALL, rad, false) + WD_PAR_VSEP_NORMAL;
 
		top = DrawStationCoverageAreaText(back_nwi->pos_x + WD_FRAMERECT_LEFT, right - WD_FRAMERECT_RIGHT, top, SCT_ALL, rad, true) + WD_PAR_VSEP_NORMAL;
 
		/* Resize background if the text is not equally long as the window. */
 
		if (top > bottom || (top < bottom && back_nwi->current_y > back_nwi->smallest_y)) {
 
			ResizeWindow(this, 0, top - bottom);
 
		}
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
 
	virtual void OnClick(Point pt, int widget, int click_count)
 
	{
 
		switch (widget) {
 
			case BDSW_LT_OFF:
 
			case BDSW_LT_ON:
 
				this->RaiseWidget(_settings_client.gui.station_show_coverage + BDSW_LT_OFF);
 
				_settings_client.gui.station_show_coverage = (widget != BDSW_LT_OFF);
 
				this->LowerWidget(_settings_client.gui.station_show_coverage + BDSW_LT_OFF);
 
				SndPlayFx(SND_15_BEEP);
 
				this->SetDirty();
 
				break;
 
		}
 
	}
 
@@ -448,25 +448,25 @@ public:
 
	}
 

	
 
	virtual void OnPaint()
 
	{
 
		this->DrawWidgets();
 

	
 
		DrawShipDepotSprite(this->GetWidget<NWidgetBase>(BDDW_X)->pos_x + 64, this->GetWidget<NWidgetBase>(BDDW_X)->pos_y + 18, 0);
 
		DrawShipDepotSprite(this->GetWidget<NWidgetBase>(BDDW_X)->pos_x + 32, this->GetWidget<NWidgetBase>(BDDW_X)->pos_y + 34, 1);
 
		DrawShipDepotSprite(this->GetWidget<NWidgetBase>(BDDW_Y)->pos_x + 32, this->GetWidget<NWidgetBase>(BDDW_Y)->pos_y + 18, 2);
 
		DrawShipDepotSprite(this->GetWidget<NWidgetBase>(BDDW_Y)->pos_x + 64, this->GetWidget<NWidgetBase>(BDDW_Y)->pos_y + 34, 3);
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
 
	virtual void OnClick(Point pt, int widget, int click_count)
 
	{
 
		switch (widget) {
 
			case BDDW_X:
 
			case BDDW_Y:
 
				this->RaiseWidget(_ship_depot_direction + BDDW_X);
 
				_ship_depot_direction = (widget == BDDW_X ? AXIS_X : AXIS_Y);
 
				this->LowerWidget(_ship_depot_direction + BDDW_X);
 
				SndPlayFx(SND_15_BEEP);
 
				UpdateDocksDirection();
 
				this->SetDirty();
 
				break;
 
		}
src/engine_gui.cpp
Show inline comments
 
@@ -97,25 +97,25 @@ struct EnginePreviewWindow : Window {
 
		y = DrawStringMultiLine(r.left, r.right, r.top, y, STR_ENGINE_PREVIEW_MESSAGE, TC_FROMSTRING, SA_CENTER) + WD_PAR_VSEP_WIDE;
 

	
 
		SetDParam(0, engine);
 
		DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, y, STR_ENGINE_NAME, TC_BLACK, SA_CENTER);
 
		y += FONT_HEIGHT_NORMAL;
 

	
 
		DrawVehicleEngine(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, this->width >> 1, y + VEHICLE_SPACE / 2, engine, GetEnginePalette(engine, _local_company));
 

	
 
		y += VEHICLE_SPACE;
 
		DrawStringMultiLine(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, y, r.bottom, GetEngineInfoString(engine), TC_FROMSTRING, SA_CENTER);
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
 
	virtual void OnClick(Point pt, int widget, int click_count)
 
	{
 
		switch (widget) {
 
			case EPW_YES:
 
				DoCommandP(0, this->window_number, 0, CMD_WANT_ENGINE_PREVIEW);
 
				/* Fallthrough */
 
			case EPW_NO:
 
				delete this;
 
				break;
 
		}
 
	}
 
};
 

	
src/genworld_gui.cpp
Show inline comments
 
@@ -510,25 +510,25 @@ struct GenerateLandscapeWindow : public 
 
		this->SetWidgetDisabledState(GLAND_SNOW_LEVEL_UP,   _settings_newgame.game_creation.snow_line_height >= MAX_SNOWLINE_HEIGHT || _settings_newgame.game_creation.landscape != LT_ARCTIC);
 

	
 
		this->SetWidgetLoweredState(GLAND_TEMPERATE, _settings_newgame.game_creation.landscape == LT_TEMPERATE);
 
		this->SetWidgetLoweredState(GLAND_ARCTIC,    _settings_newgame.game_creation.landscape == LT_ARCTIC);
 
		this->SetWidgetLoweredState(GLAND_TROPICAL,  _settings_newgame.game_creation.landscape == LT_TROPIC);
 
		this->SetWidgetLoweredState(GLAND_TOYLAND,   _settings_newgame.game_creation.landscape == LT_TOYLAND);
 

	
 
		this->DrawWidgets();
 

	
 
		this->DrawEditBox(GLAND_RANDOM_EDITBOX);
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
 
	virtual void OnClick(Point pt, int widget, int click_count)
 
	{
 
		switch (widget) {
 
			case GLAND_TEMPERATE:
 
			case GLAND_ARCTIC:
 
			case GLAND_TROPICAL:
 
			case GLAND_TOYLAND:
 
				this->RaiseWidget(_settings_newgame.game_creation.landscape + GLAND_TEMPERATE);
 
				SetNewLandscapeType(widget - GLAND_TEMPERATE);
 
				break;
 

	
 
			case GLAND_MAPSIZE_X_PULLDOWN: // Mapsize X
 
				ShowDropDownList(this, BuildMapsizeDropDown(), _settings_newgame.game_creation.map_x, GLAND_MAPSIZE_X_PULLDOWN);
 
@@ -912,25 +912,25 @@ struct CreateScenarioWindow : public Win
 
			case CSCEN_FLAT_LAND_HEIGHT_TEXT:
 
				SetDParam(0, MAX_TILE_HEIGHT);
 
				break;
 

	
 
			default:
 
				return;
 
		}
 
		*size = GetStringBoundingBox(str);
 
		size->width += padding.width;
 
		size->height += padding.height;
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
 
	virtual void OnClick(Point pt, int widget, int click_count)
 
	{
 
		switch (widget) {
 
			case CSCEN_TEMPERATE:
 
			case CSCEN_ARCTIC:
 
			case CSCEN_TROPICAL:
 
			case CSCEN_TOYLAND:
 
				this->RaiseWidget(_settings_newgame.game_creation.landscape + CSCEN_TEMPERATE);
 
				SetNewLandscapeType(widget - CSCEN_TEMPERATE);
 
				break;
 

	
 
			case CSCEN_MAPSIZE_X_PULLDOWN: // Mapsize X
 
				ShowDropDownList(this, BuildMapsizeDropDown(), _settings_newgame.game_creation.map_x, CSCEN_MAPSIZE_X_PULLDOWN);
 
@@ -1152,25 +1152,25 @@ static void AbortGeneratingWorldCallback
 
	} else if (IsGeneratingWorld() && !IsGeneratingWorldAborted()) {
 
		SetMouseCursor(SPR_CURSOR_ZZZ, PAL_NONE);
 
	}
 
}
 

	
 
struct GenerateProgressWindow : public Window {
 

	
 
	GenerateProgressWindow() : Window()
 
	{
 
		this->InitNested(&_generate_progress_desc);
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
 
	virtual void OnClick(Point pt, int widget, int click_count)
 
	{
 
		switch (widget) {
 
			case GPWW_ABORT:
 
				if (_cursor.sprite == SPR_CURSOR_ZZZ) SetMouseCursor(SPR_CURSOR_MOUSE, PAL_NONE);
 
				ShowQuery(
 
					STR_GENERATION_ABORT_CAPTION,
 
					STR_GENERATION_ABORT_MESSAGE,
 
					this,
 
					AbortGeneratingWorldCallback
 
				);
 
				break;
 
		}
src/graph_gui.cpp
Show inline comments
 
@@ -72,25 +72,25 @@ struct GraphLegendWindow : Window {
 

	
 
		if (!Company::IsValidID(cid)) return;
 

	
 
		bool rtl = _dynlang.text_dir == TD_RTL;
 

	
 
		DrawCompanyIcon(cid, rtl ? r.right - 16 : r.left + 2, r.top + 2 + (FONT_HEIGHT_NORMAL - 10) / 2);
 

	
 
		SetDParam(0, cid);
 
		SetDParam(1, cid);
 
		DrawString(r.left + (rtl ? WD_FRAMERECT_LEFT : 19), r.right - (rtl ? 19 : WD_FRAMERECT_RIGHT), r.top + WD_FRAMERECT_TOP, STR_COMPANY_NAME_COMPANY_NUM, HasBit(_legend_excluded_companies, cid) ? TC_BLACK : TC_WHITE);
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
 
	virtual void OnClick(Point pt, int widget, int click_count)
 
	{
 
		if (!IsInsideMM(widget, GLW_FIRST_COMPANY, MAX_COMPANIES + GLW_FIRST_COMPANY)) return;
 

	
 
		ToggleBit(_legend_excluded_companies, widget - GLW_FIRST_COMPANY);
 
		this->ToggleWidgetLoweredState(widget);
 
		this->SetDirty();
 
		SetWindowDirty(WC_INCOME_GRAPH, 0);
 
		SetWindowDirty(WC_OPERATING_PROFIT, 0);
 
		SetWindowDirty(WC_DELIVERED_CARGO, 0);
 
		SetWindowDirty(WC_PERFORMANCE_HISTORY, 0);
 
		SetWindowDirty(WC_COMPANY_VALUE, 0);
 
	}
 
@@ -504,25 +504,25 @@ public:
 
	virtual void DrawWidget(const Rect &r, int widget) const
 
	{
 
		if (widget != this->graph_widget) return;
 

	
 
		DrawGraph(r);
 
	}
 

	
 
	virtual OverflowSafeInt64 GetGraphData(const Company *c, int j)
 
	{
 
		return INVALID_DATAPOINT;
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
 
	virtual void OnClick(Point pt, int widget, int click_count)
 
	{
 
		/* Clicked on legend? */
 
		if (widget == BGW_KEY_BUTTON) ShowGraphLegend();
 
	}
 

	
 
	virtual void OnTick()
 
	{
 
		this->UpdateStatistics(false);
 
	}
 

	
 
	/**
 
	 * Update the statistics.
 
@@ -716,28 +716,28 @@ enum PerformanceHistoryGraphWidgets {
 
struct PerformanceHistoryGraphWindow : BaseGraphWindow {
 
	PerformanceHistoryGraphWindow(const WindowDesc *desc, WindowNumber window_number) :
 
			BaseGraphWindow(PHW_BACKGROUND, false, STR_JUST_COMMA)
 
	{
 
		this->InitializeWindow(desc, window_number);
 
	}
 

	
 
	virtual OverflowSafeInt64 GetGraphData(const Company *c, int j)
 
	{
 
		return c->old_economy[j].performance_history;
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
 
	virtual void OnClick(Point pt, int widget, int click_count)
 
	{
 
		if (widget == PHW_DETAILED_PERFORMANCE) ShowPerformanceRatingDetail();
 
		this->BaseGraphWindow::OnClick(pt, widget);
 
		this->BaseGraphWindow::OnClick(pt, widget, click_count);
 
	}
 
};
 

	
 
static const NWidgetPart _nested_performance_history_widgets[] = {
 
	NWidget(NWID_HORIZONTAL),
 
		NWidget(WWT_CLOSEBOX, COLOUR_GREY),
 
		NWidget(WWT_CAPTION, COLOUR_GREY), SetDataTip(STR_GRAPH_COMPANY_PERFORMANCE_RATINGS_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS),
 
		NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, PHW_DETAILED_PERFORMANCE), SetMinimalSize(50, 0), SetMinimalTextLines(1, WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM + 2), SetDataTip(STR_PERFORMANCE_DETAIL_KEY, STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP),
 
		NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, PHW_KEY), SetMinimalSize(50, 0), SetMinimalTextLines(1, WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM + 2), SetDataTip(STR_GRAPH_KEY_BUTTON, STR_GRAPH_KEY_TOOLTIP),
 
		NWidget(WWT_SHADEBOX, COLOUR_GREY),
 
		NWidget(WWT_STICKYBOX, COLOUR_GREY),
 
	EndContainer(),
 
@@ -865,25 +865,25 @@ struct PaymentRatesGraphWindow : BaseGra
 
		byte clk_dif = this->IsWidgetLowered(widget) ? 1 : 0;
 
		int x = r.left + WD_FRAMERECT_LEFT;
 
		int y = r.top;
 

	
 
		int rect_x = clk_dif + (rtl ? r.right - 12 : r.left + WD_FRAMERECT_LEFT);
 

	
 
		GfxFillRect(rect_x, y + clk_dif, rect_x + 8, y + 5 + clk_dif, 0);
 
		GfxFillRect(rect_x + 1, y + 1 + clk_dif, rect_x + 7, y + 4 + clk_dif, cs->legend_colour);
 
		SetDParam(0, cs->name);
 
		DrawString(rtl ? r.left : x + 14 + clk_dif, (rtl ? r.right - 14 + clk_dif : r.right), y + clk_dif, STR_GRAPH_CARGO_PAYMENT_CARGO);
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
 
	virtual void OnClick(Point pt, int widget, int click_count)
 
	{
 
		if (widget >= CPW_CARGO_FIRST) {
 
			int i = 0;
 
			const CargoSpec *cs;
 
			FOR_ALL_CARGOSPECS(cs) {
 
				if (cs->Index() + CPW_CARGO_FIRST == widget) break;
 
				i++;
 
			}
 

	
 
			ToggleBit(_legend_excluded_cargo, i);
 
			this->ToggleWidgetLoweredState(widget);
 
			this->excluded_data = _legend_excluded_cargo;
 
@@ -1321,25 +1321,25 @@ struct PerformanceRatingDetailWindow : W
 
			case SCORE_MIN_PROFIT:
 
			case SCORE_MIN_INCOME:
 
			case SCORE_MAX_INCOME:
 
			case SCORE_MONEY:
 
			case SCORE_LOAN:
 
				DrawString(this->score_detail_left, this->score_detail_right, text_top, STR_PERFORMANCE_DETAIL_AMOUNT_CURRENCY);
 
				break;
 
			default:
 
				DrawString(this->score_detail_left, this->score_detail_right, text_top, STR_PERFORMANCE_DETAIL_AMOUNT_INT);
 
		}
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
 
	virtual void OnClick(Point pt, int widget, int click_count)
 
	{
 
		/* Check which button is clicked */
 
		if (IsInsideMM(widget, PRW_COMPANY_FIRST, PRW_COMPANY_LAST + 1)) {
 
			/* Is it no on disable? */
 
			if (!this->IsWidgetDisabled(widget)) {
 
				this->RaiseWidget(this->company + PRW_COMPANY_FIRST);
 
				this->company = (CompanyID)(widget - PRW_COMPANY_FIRST);
 
				this->LowerWidget(this->company + PRW_COMPANY_FIRST);
 
				this->SetDirty();
 
			}
 
		}
 
	}
src/group_gui.cpp
Show inline comments
 
@@ -412,25 +412,25 @@ public:
 
			}
 

	
 
			case GRP_WIDGET_SORT_BY_ORDER:
 
				this->DrawSortButtonState(GRP_WIDGET_SORT_BY_ORDER, this->vehicles.IsDescSortOrder() ? SBS_DOWN : SBS_UP);
 
				break;
 

	
 
			case GRP_WIDGET_LIST_VEHICLE:
 
				this->DrawVehicleListItems(this->vehicle_sel, this->resize.step_height, r);
 
				break;
 
		}
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
 
	virtual void OnClick(Point pt, int widget, int click_count)
 
	{
 
		switch (widget) {
 
			case GRP_WIDGET_SORT_BY_ORDER: // Flip sorting method ascending/descending
 
				this->vehicles.ToggleSortOrder();
 
				this->SetDirty();
 
				break;
 

	
 
			case GRP_WIDGET_SORT_BY_DROPDOWN: // Select sorting criteria dropdown menu
 
				ShowDropDownMenu(this, this->vehicle_sorter_names, this->vehicles.SortType(),  GRP_WIDGET_SORT_BY_DROPDOWN, 0, (this->vehicle_type == VEH_TRAIN || this->vehicle_type == VEH_ROAD) ? 0 : (1 << 10));
 
				return;
 

	
 
			case GRP_WIDGET_ALL_VEHICLES: // All vehicles button
src/highscore_gui.cpp
Show inline comments
 
@@ -50,25 +50,25 @@ struct EndGameHighScoreBaseWindow : Wind
 
		for (uint i = 0; i < 10; i++) { // the image is split into 10 50px high parts
 
			DrawSprite(this->background_img + i, PAL_NONE, pt.x, pt.y + (i * 50));
 
		}
 
	}
 

	
 
	/** Return the coordinate of the screen such that a window of 640x480 is centered at the screen. */
 
	Point GetTopLeft640x480()
 
	{
 
		Point pt = {max(0, (_screen.width  / 2) - (640 / 2)), max(0, (_screen.height / 2) - (480 / 2))};
 
		return pt;
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
 
	virtual void OnClick(Point pt, int widget, int click_count)
 
	{
 
		delete this;
 
	}
 

	
 
	virtual EventState OnKeyPress(uint16 key, uint16 keycode)
 
	{
 
		switch (keycode) {
 
			/* Keys for telling we want to go on */
 
			case WKC_RETURN:
 
			case WKC_ESC:
 
			case WKC_SPACE:
 
				delete this;
src/industry_gui.cpp
Show inline comments
 
@@ -382,52 +382,47 @@ public:
 
					SetDParam(0, str);
 
					DrawStringMultiLine(left, right, y, bottom, STR_JUST_STRING);
 
				}
 
			} break;
 
		}
 
	}
 

	
 
	virtual void OnPaint()
 
	{
 
		this->DrawWidgets();
 
	}
 

	
 
	virtual void OnDoubleClick(Point pt, int widget)
 
	{
 
		if (widget != DPIW_MATRIX_WIDGET) return;
 
		this->OnClick(pt, DPIW_FUND_WIDGET);
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
 
	virtual void OnClick(Point pt, int widget, int click_count)
 
	{
 
		switch (widget) {
 
			case DPIW_MATRIX_WIDGET: {
 
				const IndustrySpec *indsp;
 
				int y = (pt.y - this->GetWidget<NWidgetBase>(DPIW_MATRIX_WIDGET)->pos_y) / this->resize.step_height + this->vscroll.GetPosition();
 

	
 
				if (y >= 0 && y < count) { // Is it within the boundaries of available data?
 
					this->selected_index = y;
 
					this->selected_type = this->index[y];
 
					indsp = (this->selected_type == INVALID_INDUSTRYTYPE) ? NULL : GetIndustrySpec(this->selected_type);
 

	
 
					this->SetDirty();
 

	
 
					if ((_game_mode != GM_EDITOR && _settings_game.construction.raw_industry_construction == 2 && indsp != NULL && indsp->IsRawIndustry()) ||
 
							this->selected_type == INVALID_INDUSTRYTYPE) {
 
						/* Reset the button state if going to prospecting or "build many industries" */
 
						this->RaiseButtons();
 
						ResetObjectToPlace();
 
					}
 

	
 
					this->SetWidgetDisabledState(DPIW_FUND_WIDGET, !this->enabled[this->selected_index]);
 
					if (this->enabled[this->selected_index] && click_count > 1) this->OnClick(pt, DPIW_FUND_WIDGET, 1);
 
				}
 
			} break;
 

	
 
			case DPIW_FUND_WIDGET: {
 
				if (this->selected_type == INVALID_INDUSTRYTYPE) {
 
					this->HandleButtonClick(DPIW_FUND_WIDGET);
 

	
 
					if (Town::GetNumItems() == 0) {
 
						ShowErrorMessage(STR_ERROR_CAN_T_GENERATE_INDUSTRIES, STR_ERROR_MUST_FOUND_TOWN_FIRST, 0, 0);
 
					} else {
 
						extern void GenerateIndustries();
 
						_generating_world = true;
 
@@ -694,25 +689,25 @@ public:
 
	}
 

	
 
	virtual void SetStringParameters(int widget) const
 
	{
 
		if (widget== IVW_CAPTION) SetDParam(0, this->window_number);
 
	}
 

	
 
	virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize)
 
	{
 
		if (widget == IVW_INFO) size->height = this->info_height;
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
 
	virtual void OnClick(Point pt, int widget, int click_count)
 
	{
 
		Industry *i;
 

	
 
		switch (widget) {
 
			case IVW_INFO: {
 
				i = Industry::Get(this->window_number);
 

	
 
				/* We should work if needed.. */
 
				if (!IsProductionAlterable(i)) return;
 
				uint x = pt.x;
 
				int line = (pt.y - this->production_offset_y) / FONT_HEIGHT_NORMAL;
 
				if (pt.y >= this->production_offset_y && IsInsideMM(line, 0, 2) && i->produced_cargo[line] != CT_INVALID) {
 
@@ -1096,25 +1091,25 @@ public:
 
					d = maxdim(d, GetStringBoundingBox(this->GetIndustryString(this->industries[i])));
 
				}
 
				resize->height = d.height;
 
				d.width += padding.width + WD_FRAMERECT_LEFT + WD_FRAMERECT_RIGHT;
 
				d.height += padding.height + WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM;
 
				*size = maxdim(*size, d);
 
				break;
 
			}
 
		}
 
	}
 

	
 

	
 
	virtual void OnClick(Point pt, int widget)
 
	virtual void OnClick(Point pt, int widget, int click_count)
 
	{
 
		switch (widget) {
 
			case IDW_DROPDOWN_ORDER:
 
				this->industries.ToggleSortOrder();
 
				this->SetDirty();
 
				break;
 

	
 
			case IDW_DROPDOWN_CRITERIA:
 
				ShowDropDownMenu(this, IndustryDirectoryWindow::sorter_names, this->industries.SortType(), IDW_DROPDOWN_CRITERIA, 0, 0);
 
				break;
 

	
 
			case IDW_INDUSTRY_LIST: {
src/intro_gui.cpp
Show inline comments
 
@@ -88,25 +88,25 @@ struct SelectGameWindow : public Window 
 
		if (widget != SGI_DIFFICULTIES) return;
 

	
 
		Dimension textdim = {0, 0};
 
		for (uint i = STR_DIFFICULTY_LEVEL_EASY; i <= STR_DIFFICULTY_LEVEL_CUSTOM; i++) {
 
			SetDParam(0, i);
 
			textdim = maxdim(textdim, GetStringBoundingBox(STR_INTRO_DIFFICULTY));
 
		}
 
		textdim.width += padding.width;
 
		textdim.height += padding.height;
 
		*size = maxdim(*size, textdim);
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
 
	virtual void OnClick(Point pt, int widget, int click_count)
 
	{
 
#ifdef ENABLE_NETWORK
 
		/* Do not create a network server when you (just) have closed one of the game
 
		 * creation/load windows for the network server. */
 
		if (IsInsideMM(widget, SGI_GENERATE_GAME, SGI_EDIT_SCENARIO + 1)) _is_network_server = false;
 
#endif /* ENABLE_NETWORK */
 

	
 
		switch (widget) {
 
			case SGI_GENERATE_GAME:
 
				if (_ctrl_pressed) {
 
					StartNewGameWithoutGUI(GENERATE_NEW_SEED);
 
				} else {
src/misc_gui.cpp
Show inline comments
 
@@ -1276,25 +1276,25 @@ struct QueryStringWindow : public QueryS
 
		if (this->orig == NULL || strcmp(this->text.buf, this->orig) != 0) {
 
			/* If the parent is NULL, the editbox is handled by general function
 
			 * HandleOnEditText */
 
			if (this->parent != NULL) {
 
				this->parent->OnQueryTextFinished(this->text.buf);
 
			} else {
 
				HandleOnEditText(this->text.buf);
 
			}
 
			this->handled = true;
 
		}
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
 
	virtual void OnClick(Point pt, int widget, int click_count)
 
	{
 
		switch (widget) {
 
			case QUERY_STR_WIDGET_DEFAULT:
 
				this->text.buf[0] = '\0';
 
				/* Fallthrough */
 
			case QUERY_STR_WIDGET_OK:
 
				this->OnOk();
 
				/* Fallthrough */
 
			case QUERY_STR_WIDGET_CANCEL:
 
				delete this;
 
				break;
 
		}
 
@@ -1441,25 +1441,25 @@ struct QueryWindow : public Window {
 
	virtual void DrawWidget(const Rect &r, int widget) const
 
	{
 
		if (widget != QUERY_WIDGET_TEXT) return;
 

	
 
		DrawStringMultiLine(r.left, r.right, r.top, r.bottom, this->message, TC_FROMSTRING, SA_CENTER);
 
	}
 

	
 
	virtual void OnPaint()
 
	{
 
		this->DrawWidgets();
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
 
	virtual void OnClick(Point pt, int widget, int click_count)
 
	{
 
		switch (widget) {
 
			case QUERY_WIDGET_YES: {
 
				/* in the Generate New World window, clicking 'Yes' causes
 
				 * DeleteNonVitalWindows() to be called - we shouldn't be in a window then */
 
				QueryCallbackProc *proc = this->proc;
 
				Window *parent = this->parent;
 
				/* Prevent the destructor calling the callback function */
 
				this->proc = NULL;
 
				delete this;
 
				if (proc != NULL) {
 
					proc(parent, true);
 
@@ -1793,25 +1793,25 @@ public:
 
			_savegame_sort_dirty = false;
 
			MakeSortedSaveGameList();
 
		}
 

	
 
		this->vscroll.SetCount(_fios_items.Length());
 
		this->DrawWidgets();
 

	
 
		if (_saveload_mode == SLD_SAVE_GAME || _saveload_mode == SLD_SAVE_SCENARIO) {
 
			this->DrawEditBox(SLWW_SAVE_OSK_TITLE);
 
		}
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
 
	virtual void OnClick(Point pt, int widget, int click_count)
 
	{
 
		switch (widget) {
 
			case SLWW_SORT_BYNAME: // Sort save names by name
 
				_savegame_sort_order = (_savegame_sort_order == SORT_BY_NAME) ?
 
					SORT_BY_NAME | SORT_DESCENDING : SORT_BY_NAME;
 
				_savegame_sort_dirty = true;
 
				this->SetDirty();
 
				break;
 

	
 
			case SLWW_SORT_BYDATE: // Sort save names by date
 
				_savegame_sort_order = (_savegame_sort_order == SORT_BY_DATE) ?
 
					SORT_BY_DATE | SORT_DESCENDING : SORT_BY_DATE;
src/music_gui.cpp
Show inline comments
 
@@ -388,25 +388,25 @@ struct MusicTrackSelectionWindow : publi
 
					DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, y, STR_PLAYLIST_TRACK_NAME);
 
					y += FONT_HEIGHT_SMALL;
 
				}
 
			} break;
 
		}
 
	}
 

	
 
	virtual void OnPaint()
 
	{
 
		this->DrawWidgets();
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
 
	virtual void OnClick(Point pt, int widget, int click_count)
 
	{
 
		switch (widget) {
 
			case MTSW_LIST_LEFT: { // add to playlist
 
				int y = (pt.y - this->GetWidget<NWidgetBase>(widget)->pos_y) / FONT_HEIGHT_SMALL;
 

	
 
				if (msf.playlist < 4) return;
 
				if (!IsInsideMM(y, 0, BaseMusic::GetUsedSet()->num_available)) return;
 

	
 
				byte *p = _playlists[msf.playlist];
 
				for (uint i = 0; i != NUM_SONGS_PLAYLIST - 1; i++) {
 
					if (p[i] == 0) {
 
						/* Find the actual song number */
 
@@ -634,25 +634,25 @@ struct MusicWindow : public Window {
 
	{
 
		this->DrawWidgets();
 
	}
 

	
 
	virtual void OnInvalidateData(int data = 0)
 
	{
 
		for (int i = 0; i < 6; i++) {
 
			this->SetWidgetLoweredState(MW_ALL + i, i == msf.playlist);
 
		}
 
		this->SetDirty();
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
 
	virtual void OnClick(Point pt, int widget, int click_count)
 
	{
 
		switch (widget) {
 
			case MW_PREV: // skip to prev
 
				if (!_song_is_active) return;
 
				SkipToPrevSong();
 
				this->SetDirty();
 
				break;
 

	
 
			case MW_NEXT: // skip to next
 
				if (!_song_is_active) return;
 
				SkipToNextSong();
 
				this->SetDirty();
src/network/network_chat_gui.cpp
Show inline comments
 
@@ -471,25 +471,25 @@ struct NetworkChatWindow : public QueryS
 
	}
 

	
 
	virtual void DrawWidget(const Rect &r, int widget) const
 
	{
 
		if (widget != NWCW_DESTINATION) return;
 

	
 
		if (this->dtype == DESTTYPE_CLIENT) {
 
			SetDParamStr(0, NetworkFindClientInfoFromClientID((ClientID)this->dest)->client_name);
 
		}
 
		DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, r.top + WD_FRAMERECT_TOP, this->dest_string, TC_BLACK, SA_RIGHT);
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
 
	virtual void OnClick(Point pt, int widget, int click_count)
 
	{
 
		switch (widget) {
 
			/* Send */
 
			case NWCW_SENDBUTTON: SendChat(this->text.buf, this->dtype, this->dest);
 
			/* FALLTHROUGH */
 
			case NWCW_CLOSE: /* Cancel */ delete this; break;
 
		}
 
	}
 

	
 
	virtual void OnMouseLoop()
 
	{
 
		this->HandleEditBox(NWCW_TEXTBOX);
src/network/network_content_gui.cpp
Show inline comments
 
@@ -155,25 +155,25 @@ public:
 
			SetDParamStr(0, this->name);
 
			SetDParam(1, this->downloaded_files);
 
			SetDParam(2, this->total_files);
 
			str = STR_CONTENT_DOWNLOAD_FILE;
 
		} else {
 
			str = STR_CONTENT_DOWNLOAD_INITIALISE;
 
		}
 

	
 
		y += FONT_HEIGHT_NORMAL + 5;
 
		DrawStringMultiLine(r.left + 2, r.right - 2, y, y + FONT_HEIGHT_NORMAL * 2, str, TC_FROMSTRING, SA_CENTER);
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
 
	virtual void OnClick(Point pt, int widget, int click_count)
 
	{
 
		if (widget == NCDSWW_CANCELOK) {
 
			if (this->downloaded_bytes != this->total_bytes) _network_content_client.Close();
 
			delete this;
 
		}
 
	}
 

	
 
	virtual void OnDownloadProgress(const ContentInfo *ci, uint bytes)
 
	{
 
		if (ci->id != this->cur_id) {
 
			strecpy(this->name, ci->filename, lastof(this->name));
 
			this->cur_id = ci->id;
 
@@ -574,49 +574,40 @@ public:
 
				const ContentInfo *ci = *iter;
 
				if (ci == this->selected || ci->state != ContentInfo::SELECTED) continue;
 

	
 
				p += seprintf(p, lastof(buf), buf == p ? "%s" : ", %s", ci->name);
 
			}
 
			if (p != buf) {
 
				SetDParamStr(0, buf);
 
				y = DrawStringMultiLine(r.left + DETAIL_LEFT, r.right - DETAIL_RIGHT, y, max_y, STR_CONTENT_DETAIL_SELECTED_BECAUSE_OF);
 
			}
 
		}
 
	}
 

	
 
	virtual void OnDoubleClick(Point pt, int widget)
 
	{
 
		/* Double clicking on a line in the matrix toggles the state of the checkbox */
 
		if (widget != NCLWW_MATRIX) return;
 

	
 
		pt.x = this->GetWidget<NWidgetBase>(NCLWW_CHECKBOX)->pos_x;
 
		this->OnClick(pt, widget);
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
 
	virtual void OnClick(Point pt, int widget, int click_count)
 
	{
 
		switch (widget) {
 
			case NCLWW_MATRIX: {
 
				uint32 id_v = (pt.y - this->GetWidget<NWidgetBase>(NCLWW_MATRIX)->pos_y) / this->resize.step_height;
 

	
 
				if (id_v >= this->vscroll.GetCapacity()) return; // click out of bounds
 
				id_v += this->vscroll.GetPosition();
 

	
 
				if (id_v >= this->content.Length()) return; // click out of bounds
 

	
 
				this->selected = *this->content.Get(id_v);
 
				this->list_pos = id_v;
 

	
 
				const NWidgetBase *checkbox = this->GetWidget<NWidgetBase>(NCLWW_CHECKBOX);
 
				if (IsInsideBS(pt.x, checkbox->pos_x, checkbox->current_x)) {
 
				if (click_count > 1 || IsInsideBS(pt.x, checkbox->pos_x, checkbox->current_x)) {
 
					_network_content_client.ToggleSelectedState(this->selected);
 
					this->content.ForceResort();
 
				}
 

	
 
				this->InvalidateData();
 
			} break;
 

	
 
			case NCLWW_CHECKBOX:
 
			case NCLWW_TYPE:
 
			case NCLWW_NAME:
 
				if (this->content.SortType() == widget - NCLWW_CHECKBOX) {
 
					this->content.ToggleSortOrder();
src/network/network_gui.cpp
Show inline comments
 
@@ -649,25 +649,25 @@ public:
 

	
 
			if (!sel->info.compatible) {
 
				DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, y, sel->info.version_compatible ? STR_NETWORK_SERVER_LIST_GRF_MISMATCH : STR_NETWORK_SERVER_LIST_VERSION_MISMATCH, TC_FROMSTRING, SA_CENTER); // server mismatch
 
			} else if (sel->info.clients_on == sel->info.clients_max) {
 
				/* Show: server full, when clients_on == max_clients */
 
				DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, y, STR_NETWORK_SERVER_LIST_SERVER_FULL, TC_FROMSTRING, SA_CENTER); // server full
 
			} else if (sel->info.use_password) {
 
				DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, y, STR_NETWORK_SERVER_LIST_PASSWORD, TC_FROMSTRING, SA_CENTER); // password warning
 
			}
 
		}
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
 
	virtual void OnClick(Point pt, int widget, int click_count)
 
	{
 
		this->field = widget;
 
		switch (widget) {
 
			case NGWW_CANCEL: // Cancel button
 
				DeleteWindowById(WC_NETWORK_WINDOW, 0);
 
				break;
 

	
 
			case NGWW_CONN_BTN: // 'Connection' droplist
 
				ShowDropDownMenu(this, _lan_internet_types_dropdown, _settings_client.network.lan_internet, NGWW_CONN_BTN, 0, 0); // do it for widget NSSW_CONN_BTN
 
				break;
 

	
 
			case NGWW_NAME:    // Sort by name
 
@@ -688,40 +688,46 @@ public:
 
				this->SetDirty();
 
				break;
 

	
 
			case NGWW_MATRIX: { // Matrix to show networkgames
 
				uint32 id_v = (pt.y - this->GetWidget<NWidgetBase>(NGWW_MATRIX)->pos_y) / this->resize.step_height;
 

	
 
				if (id_v >= this->vscroll.GetCapacity()) return; // click out of bounds
 
				id_v += this->vscroll.GetPosition();
 

	
 
				this->server = (id_v < this->servers.Length()) ? this->servers[id_v] : NULL;
 
				this->list_pos = (server == NULL) ? SLP_INVALID : id_v;
 
				this->SetDirty();
 

	
 
				/* FIXME the disabling should go into some InvalidateData, which is called instead of the SetDirty */
 
				if (!this->IsWidgetDisabled(NGWW_JOIN)) this->OnClick(pt, NGWW_JOIN, 1);
 
			} break;
 

	
 
			case NGWW_LASTJOINED: {
 
				NetworkGameList *last_joined = NetworkGameListAddItem(NetworkAddress(_settings_client.network.last_host, _settings_client.network.last_port));
 
				if (last_joined != NULL) {
 
					this->server = last_joined;
 

	
 
					/* search the position of the newly selected server */
 
					for (uint i = 0; i < this->servers.Length(); i++) {
 
						if (this->servers[i] == this->server) {
 
							this->list_pos = i;
 
							break;
 
						}
 
					}
 
					this->ScrollToSelectedServer();
 
					this->SetDirty();
 

	
 
					/* FIXME the disabling should go into some InvalidateData, which is called instead of the SetDirty */
 
					if (!this->IsWidgetDisabled(NGWW_JOIN)) this->OnClick(pt, NGWW_JOIN, 1);
 
				}
 
			} break;
 

	
 
			case NGWW_FIND: // Find server automatically
 
				switch (_settings_client.network.lan_internet) {
 
					case 0: NetworkUDPSearchGame(); break;
 
					case 1: NetworkUDPQueryMasterServer(); break;
 
				}
 
				break;
 

	
 
			case NGWW_ADD: // Add a server
 
				SetDParamStr(0, _settings_client.network.connect_to_ip);
 
@@ -746,32 +752,24 @@ public:
 
				break;
 

	
 
			case NGWW_REFRESH: // Refresh
 
				if (this->server != NULL) NetworkUDPQueryServer(this->server->address);
 
				break;
 

	
 
			case NGWW_NEWGRF: // NewGRF Settings
 
				if (this->server != NULL) ShowNewGRFSettings(false, false, false, &this->server->info.grfconfig);
 
				break;
 
		}
 
	}
 

	
 
	virtual void OnDoubleClick(Point pt, int widget)
 
	{
 
		if (widget == NGWW_MATRIX || widget == NGWW_LASTJOINED) {
 
			/* is the Join button enabled? */
 
			if (!this->IsWidgetDisabled(NGWW_JOIN)) this->OnClick(pt, NGWW_JOIN);
 
		}
 
	}
 

	
 
	virtual void OnDropdownSelect(int widget, int index)
 
	{
 
		switch (widget) {
 
			case NGWW_CONN_BTN:
 
				_settings_client.network.lan_internet = index;
 
				break;
 

	
 
			default:
 
				NOT_REACHED();
 
		}
 

	
 
		this->SetDirty();
 
@@ -1148,25 +1146,25 @@ struct NetworkStartServerWindow : public
 

	
 
			if (pos == 0) {
 
				DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, y, STR_NETWORK_START_SERVER_SERVER_RANDOM_GAME, TC_DARK_GREEN);
 
			} else {
 
				DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, y, item->title, _fios_colours[item->type] );
 
			}
 
			y += FONT_HEIGHT_NORMAL;
 

	
 
			if (y >= this->vscroll.GetCapacity() * FONT_HEIGHT_NORMAL + r.top) break;
 
		}
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
 
	virtual void OnClick(Point pt, int widget, int click_count)
 
	{
 
		this->field = widget;
 
		switch (widget) {
 
			case NSSW_CANCEL: // Cancel button
 
				ShowNetworkGameWindow();
 
				break;
 

	
 
			case NSSW_SETPWD: // Set password button
 
				this->widget_id = NSSW_SETPWD;
 
				SetDParamStr(0, _settings_client.network.server_password);
 
				ShowQueryString(STR_JUST_RAW_STRING, STR_NETWORK_START_SERVER_SET_PASSWORD, 20, 250, this, CS_ALPHANUMERAL, QSF_NONE);
 
				break;
 
@@ -1612,71 +1610,66 @@ struct NetworkLobbyWindow : public Windo
 
		y += FONT_HEIGHT_NORMAL;
 

	
 
		for (uint i = 0; i < lengthof(this->company_info[this->company].num_station); i++) {
 
			SetDParam(i, this->company_info[this->company].num_station[i]);
 
		}
 
		DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, y, STR_NETWORK_GAME_LOBBY_STATIONS); // stations
 
		y += FONT_HEIGHT_NORMAL;
 

	
 
		SetDParamStr(0, this->company_info[this->company].clients);
 
		DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, y, STR_NETWORK_GAME_LOBBY_PLAYERS); // players
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
 
	virtual void OnClick(Point pt, int widget, int click_count)
 
	{
 
		switch (widget) {
 
			case NLWW_CANCEL:   // Cancel button
 
				ShowNetworkGameWindow();
 
				break;
 

	
 
			case NLWW_MATRIX: { // Company list
 
				uint32 id_v = (pt.y - this->GetWidget<NWidgetBase>(NLWW_MATRIX)->pos_y) / this->resize.step_height;
 

	
 
				if (id_v >= this->vscroll.GetCapacity()) break;
 

	
 
				id_v += this->vscroll.GetPosition();
 
				this->company = (id_v >= this->server->info.companies_on) ? INVALID_COMPANY : NetworkLobbyFindCompanyIndex(id_v);
 
				this->SetDirty();
 

	
 
				/* FIXME the disabling should go into some InvalidateData, which is called instead of the SetDirty */
 
				if (!this->IsWidgetDisabled(NLWW_JOIN)) this->OnClick(pt, NLWW_JOIN, 1);
 
			} break;
 

	
 
			case NLWW_JOIN:     // Join company
 
				/* Button can be clicked only when it is enabled */
 
				NetworkClientConnectGame(NetworkAddress(_settings_client.network.last_host, _settings_client.network.last_port), this->company);
 
				break;
 

	
 
			case NLWW_NEW:      // New company
 
				NetworkClientConnectGame(NetworkAddress(_settings_client.network.last_host, _settings_client.network.last_port), COMPANY_NEW_COMPANY);
 
				break;
 

	
 
			case NLWW_SPECTATE: // Spectate game
 
				NetworkClientConnectGame(NetworkAddress(_settings_client.network.last_host, _settings_client.network.last_port), COMPANY_SPECTATOR);
 
				break;
 

	
 
			case NLWW_REFRESH:  // Refresh
 
				NetworkTCPQueryServer(NetworkAddress(_settings_client.network.last_host, _settings_client.network.last_port)); // company info
 
				NetworkUDPQueryServer(NetworkAddress(_settings_client.network.last_host, _settings_client.network.last_port)); // general data
 
				/* Clear the information so removed companies don't remain */
 
				memset(this->company_info, 0, sizeof(this->company_info));
 
				break;
 
		}
 
	}
 

	
 
	virtual void OnDoubleClick(Point pt, int widget)
 
	{
 
		if (widget == NLWW_MATRIX) {
 
			/* is the Join button enabled? */
 
			if (!this->IsWidgetDisabled(NLWW_JOIN)) this->OnClick(pt, NLWW_JOIN);
 
		}
 
	}
 

	
 
	virtual void OnResize()
 
	{
 
		this->vscroll.SetCapacityFromWidget(this, NLWW_MATRIX);
 
		this->GetWidget<NWidgetCore>(NLWW_MATRIX)->widget_data = (this->vscroll.GetCapacity() << MAT_ROW_START) + (1 << MAT_COL_START);
 
	}
 
};
 

	
 
static const NWidgetPart _nested_network_lobby_window_widgets[] = {
 
	NWidget(NWID_HORIZONTAL),
 
		NWidget(WWT_CLOSEBOX, COLOUR_LIGHT_BLUE),
 
		NWidget(WWT_CAPTION, COLOUR_LIGHT_BLUE), SetDataTip(STR_NETWORK_GAME_LOBBY_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS),
 
	EndContainer(),
 
@@ -2076,25 +2069,25 @@ struct NetworkClientListWindow : Window 
 
				DrawString(type_left, type_right, y, STR_NETWORK_CLIENT, colour);
 
			}
 

	
 
			/* Filter out spectators */
 
			if (Company::IsValidID(ci->client_playas)) DrawCompanyIcon(ci->client_playas, icon_left, y + icon_y_offset);
 

	
 
			DrawString(name_left, name_right, y, ci->client_name, colour);
 

	
 
			y += FONT_HEIGHT_NORMAL;
 
		}
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
 
	virtual void OnClick(Point pt, int widget, int click_count)
 
	{
 
		/* Show the popup with option */
 
		if (this->selected_item != -1) {
 
			PopupClientList(this->selected_item, pt.x + this->left, pt.y + this->top);
 
		}
 
	}
 

	
 
	virtual void OnMouseOver(Point pt, int widget)
 
	{
 
		/* -1 means we left the current window */
 
		if (pt.y == -1) {
 
			this->selected_item = -1;
 
@@ -2209,25 +2202,25 @@ struct NetworkJoinStatusWindow : Window 
 
		SetDParam(0, 255);
 
		width = max(width, GetStringBoundingBox(STR_NETWORK_CONNECTING_WAITING).width);
 

	
 
		/* Account for downloading ~ 10 MiB */
 
		SetDParam(0, 10000000);
 
		SetDParam(1, 10000000);
 
		width = max(width, GetStringBoundingBox(STR_NETWORK_CONNECTING_DOWNLOADING).width);
 

	
 
		/* Give a bit more clearing for the widest strings than strictly needed */
 
		size->width = width + WD_FRAMERECT_LEFT + WD_FRAMERECT_BOTTOM + 10;
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
 
	virtual void OnClick(Point pt, int widget, int click_count)
 
	{
 
		if (widget == NJSW_CANCELOK) { // Disconnect button
 
			NetworkDisconnect();
 
			SwitchToMode(SM_MENU);
 
			ShowNetworkGameWindow();
 
		}
 
	}
 

	
 
	virtual void OnQueryTextFinished(char *str)
 
	{
 
		if (StrEmpty(str)) {
 
			NetworkDisconnect();
 
@@ -2295,25 +2288,25 @@ struct NetworkCompanyPasswordWindow : pu
 
		/* empty password is a '*' because of console argument */
 
		if (StrEmpty(this->edit_str_buf)) snprintf(this->edit_str_buf, this->edit_str_size, "*");
 
		char *password = this->edit_str_buf;
 
		NetworkChangeCompanyPassword(1, &password);
 
	}
 

	
 
	virtual void OnPaint()
 
	{
 
		this->DrawWidgets();
 
		this->DrawEditBox(NCPWW_PASSWORD);
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
 
	virtual void OnClick(Point pt, int widget, int click_count)
 
	{
 
		switch (widget) {
 
			case NCPWW_OK:
 
				this->OnOk();
 

	
 
			/* FALL THROUGH */
 
			case NCPWW_CANCEL:
 
				delete this;
 
				break;
 

	
 
			case NCPWW_SAVE_AS_DEFAULT_PASSWORD:
 
				this->ToggleWidgetLoweredState(NCPWW_SAVE_AS_DEFAULT_PASSWORD);
src/newgrf_gui.cpp
Show inline comments
 
@@ -335,47 +335,42 @@ public:
 
				}
 
				break;
 
			}
 

	
 
			case ANGRFW_GRF_INFO:
 
				if (this->sel != NULL) {
 
					ShowNewGRFInfo(this->sel, r.left + WD_FRAMERECT_LEFT, r.top + WD_FRAMERECT_TOP, r.right - WD_FRAMERECT_RIGHT, r.bottom - WD_FRAMERECT_BOTTOM, false);
 
				}
 
				break;
 
		}
 
	}
 

	
 
	virtual void OnDoubleClick(Point pt, int widget)
 
	{
 
		if (widget == ANGRFW_GRF_LIST) this->OnClick(pt, ANGRFW_ADD);
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
 
	virtual void OnClick(Point pt, int widget, int click_count)
 
	{
 
		switch (widget) {
 
			case ANGRFW_GRF_LIST: {
 
				/* Get row... */
 
				uint i = (pt.y - this->GetWidget<NWidgetBase>(ANGRFW_GRF_LIST)->pos_y - WD_FRAMERECT_TOP) / this->resize.step_height + this->vscroll.GetPosition();
 

	
 
				if (i < this->grfs.Length()) {
 
					this->sel = this->grfs[i];
 
					this->sel_pos = i;
 
				} else {
 
					this->sel = NULL;
 
					this->sel_pos = -1;
 
				}
 
				this->InvalidateData(1);
 
				break;
 
				if (click_count == 1) break;
 
			}
 

	
 
			/* FALL THROUGH */
 
			case ANGRFW_ADD: // Add selection to list
 
				if (this->sel != NULL) {
 
					const GRFConfig *src = this->sel;
 
					GRFConfig **list;
 

	
 
					/* Find last entry in the list, checking for duplicate grfid on the way */
 
					for (list = this->list; *list != NULL; list = &(*list)->next) {
 
						if ((*list)->grfid == src->grfid) {
 
							ShowErrorMessage(STR_NEWGRF_DUPLICATE_GRFID, INVALID_STRING_ID, 0, 0);
 
							return;
 
						}
 
					}
 
@@ -696,30 +691,25 @@ struct NewGRFWindow : public Window {
 
					}
 
				}
 
			} break;
 

	
 
			case SNGRFS_NEWGRF_INFO:
 
				if (this->sel != NULL) {
 
					ShowNewGRFInfo(this->sel, r.left + WD_FRAMERECT_LEFT, r.top + WD_FRAMERECT_TOP, r.right - WD_FRAMERECT_RIGHT, r.bottom - WD_FRAMERECT_BOTTOM, this->show_params);
 
				}
 
				break;
 
		}
 
	}
 

	
 
	virtual void OnDoubleClick(Point pt, int widget)
 
	{
 
		if (widget == SNGRFS_FILE_LIST) this->OnClick(pt, SNGRFS_SET_PARAMETERS);
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
 
	virtual void OnClick(Point pt, int widget, int click_count)
 
	{
 
		switch (widget) {
 
			case SNGRFS_PRESET_LIST: {
 
				DropDownList *list = new DropDownList();
 

	
 
				/* Add 'None' option for clearing list */
 
				list->push_back(new DropDownListStringItem(STR_NONE, -1, false));
 

	
 
				for (uint i = 0; i < _grf_preset_list.Length(); i++) {
 
					if (_grf_preset_list[i] != NULL) {
 
						list->push_back(new DropDownListPresetItem(i));
 
					}
 
@@ -812,24 +802,25 @@ struct NewGRFWindow : public Window {
 
			}
 

	
 
			case SNGRFS_FILE_LIST: { // Select a GRF
 
				GRFConfig *c;
 
				uint i = (pt.y - this->GetWidget<NWidgetBase>(SNGRFS_FILE_LIST)->pos_y) / this->resize.step_height + this->vscroll.GetPosition();
 

	
 
				for (c = this->list; c != NULL && i > 0; c = c->next, i--) {}
 

	
 
				if (this->sel != c) this->DeleteChildWindows(WC_QUERY_STRING); // Remove the parameter query window
 
				this->sel = c;
 

	
 
				this->InvalidateData();
 
				if (click_count > 1) this->OnClick(pt, SNGRFS_SET_PARAMETERS, 1);
 
				break;
 
			}
 

	
 
			case SNGRFS_APPLY_CHANGES: // Apply changes made to GRF list
 
				if (this->execute) {
 
					ShowQuery(
 
						STR_NEWGRF_POPUP_CAUTION_CAPTION,
 
						STR_NEWGRF_CONFIRMATION_TEXT,
 
						this,
 
						NewGRFConfirmationCallback
 
					);
 
				} else {
src/news_gui.cpp
Show inline comments
 
@@ -435,25 +435,25 @@ struct NewsWindow : Window {
 
				GfxFillRect(r.left, r.top, r.right, r.bottom, PALETTE_TO_STRUCT_GREY, FILLRECT_RECOLOUR);
 
				break;
 
			}
 
			case NTW_VEH_INFO: {
 
				assert(this->ni->reftype1 == NR_ENGINE);
 
				EngineID engine = this->ni->ref1;
 
				DrawStringMultiLine(r.left, r.right, r.top, r.bottom, GetEngineInfoString(engine), TC_FROMSTRING, SA_CENTER);
 
				break;
 
			}
 
		}
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
 
	virtual void OnClick(Point pt, int widget, int click_count)
 
	{
 
		switch (widget) {
 
			case NTW_CLOSEBOX:
 
				NewsWindow::duration = 0;
 
				delete this;
 
				_forced_news = NULL;
 
				break;
 

	
 
			case NTW_CAPTION:
 
			case NTW_VIEWPORT:
 
				break; // Ignore clicks
 

	
 
@@ -979,25 +979,25 @@ struct MessageHistoryWindow : Window {
 
			y += this->line_height;
 

	
 
			ni = ni->prev;
 
			if (ni == NULL) return;
 
		}
 
	}
 

	
 
	virtual void OnInvalidateData(int data)
 
	{
 
		this->vscroll.SetCount(_total_news);
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
 
	virtual void OnClick(Point pt, int widget, int click_count)
 
	{
 
		if (widget == MHW_BACKGROUND) {
 
			NewsItem *ni = _latest_news;
 
			if (ni == NULL) return;
 

	
 
			for (int n = (pt.y - this->GetWidget<NWidgetBase>(MHW_BACKGROUND)->pos_y - WD_FRAMERECT_TOP) / this->line_height + this->vscroll.GetPosition(); n > 0; n--) {
 
				ni = ni->prev;
 
				if (ni == NULL) return;
 
			}
 

	
 
			ShowNewsMessage(ni);
 
		}
 
@@ -1154,25 +1154,25 @@ struct MessageOptionsWindow : Window {
 
		}
 
	}
 

	
 
	virtual void OnInvalidateData(int data)
 
	{
 
		/* Update the dropdown value for 'set all categories'. */
 
		this->GetWidget<NWidgetCore>(WIDGET_NEWSOPT_DROP_SUMMARY)->widget_data = this->message_opt[this->state];
 

	
 
		/* Update widget to reflect the value of the #_news_ticker_sound variable. */
 
		this->SetWidgetLoweredState(WIDGET_NEWSOPT_SOUNDTICKER, _news_ticker_sound);
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
 
	virtual void OnClick(Point pt, int widget, int click_count)
 
	{
 
		switch (widget) {
 
			case WIDGET_NEWSOPT_DROP_SUMMARY: // Dropdown menu for all settings
 
				ShowDropDownMenu(this, this->message_opt, this->state, WIDGET_NEWSOPT_DROP_SUMMARY, 0, 0);
 
				break;
 

	
 
			case WIDGET_NEWSOPT_SOUNDTICKER: // Change ticker sound on/off
 
				_news_ticker_sound ^= 1;
 
				this->InvalidateData();
 
				break;
 

	
 
			default: { // Clicked on the [<] .. [>] widgets
src/order_gui.cpp
Show inline comments
 
@@ -976,25 +976,25 @@ public:
 
					if (order->GetConditionVariable() == OCV_MAX_SPEED) value = ConvertSpeedToDisplaySpeed(value);
 
					SetDParam(0, value);
 
				}
 
				break;
 
			}
 

	
 
			case ORDER_WIDGET_CAPTION:
 
				SetDParam(0, this->vehicle->index);
 
				break;
 
		}
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
 
	virtual void OnClick(Point pt, int widget, int click_count)
 
	{
 
		switch (widget) {
 
			case ORDER_WIDGET_ORDER_LIST: {
 
				ResetObjectToPlace();
 

	
 
				int sel = this->GetOrderFromPt(pt.y);
 

	
 
				if (_ctrl_pressed && sel < this->vehicle->GetNumOrders()) {
 
					const Order *ord = this->vehicle->GetOrder(sel);
 
					TileIndex xy = INVALID_TILE;
 

	
 
					switch (ord->GetType()) {
src/osk_gui.cpp
Show inline comments
 
@@ -133,25 +133,25 @@ struct OskWindow : public Window {
 
			r.left + 8,
 
			r.top + 3,
 
			TC_BLACK);
 
	}
 

	
 
	virtual void OnPaint()
 
	{
 
		this->DrawWidgets();
 

	
 
		this->qs->DrawEditBox(this, OSK_WIDGET_TEXT);
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
 
	virtual void OnClick(Point pt, int widget, int click_count)
 
	{
 
		/* clicked a letter */
 
		if (widget >= OSK_WIDGET_LETTERS) {
 
			WChar c = _keyboard[this->shift][widget - OSK_WIDGET_LETTERS];
 

	
 
			if (!IsValidChar(c, this->qs->afilter)) return;
 

	
 
			if (InsertTextBufferChar(&this->qs->text, c)) this->InvalidateParent();
 

	
 
			if (HasBit(_keystate, KEYS_SHIFT)) {
 
				ToggleBit(_keystate, KEYS_SHIFT);
 
				this->GetWidget<NWidgetCore>(OSK_WIDGET_SHIFT)->colour = HasBit(_keystate, KEYS_SHIFT) ? COLOUR_WHITE : COLOUR_GREY;
 
@@ -198,35 +198,35 @@ struct OskWindow : public Window {
 
			case OSK_WIDGET_LEFT:
 
				if (MoveTextBufferPos(&this->qs->text, WKC_LEFT)) this->InvalidateParent();
 
				break;
 

	
 
			case OSK_WIDGET_RIGHT:
 
				if (MoveTextBufferPos(&this->qs->text, WKC_RIGHT)) this->InvalidateParent();
 
				break;
 

	
 
			case OSK_WIDGET_OK:
 
				if (this->qs->orig == NULL || strcmp(this->qs->text.buf, this->qs->orig) != 0) {
 
					/* pass information by simulating a button press on parent window */
 
					if (this->ok_btn != 0) {
 
						this->parent->OnClick(pt, this->ok_btn);
 
						this->parent->OnClick(pt, this->ok_btn, 1);
 
						/* Window gets deleted when the parent window removes itself. */
 
						return;
 
					}
 
				}
 
				delete this;
 
				break;
 

	
 
			case OSK_WIDGET_CANCEL:
 
				if (this->cancel_btn != 0) { // pass a cancel event to the parent window
 
					this->parent->OnClick(pt, this->cancel_btn);
 
					this->parent->OnClick(pt, this->cancel_btn, 1);
 
					/* Window gets deleted when the parent window removes itself. */
 
					return;
 
				} else { // or reset to original string
 
					strcpy(qs->text.buf, this->orig_str_buf);
 
					UpdateTextBufferSize(&qs->text);
 
					MoveTextBufferPos(&qs->text, WKC_END);
 
					this->InvalidateParent();
 
					delete this;
 
				}
 
				break;
 
		}
 
	}
src/rail_gui.cpp
Show inline comments
 
@@ -685,25 +685,25 @@ struct BuildRailToolbarWindow : Window {
 
				 * disable the removal button */
 
				this->DisableWidget(RTW_REMOVE);
 
				this->RaiseWidget(RTW_REMOVE);
 
				break;
 
		}
 
	}
 

	
 
	virtual void OnPaint()
 
	{
 
		this->DrawWidgets();
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
 
	virtual void OnClick(Point pt, int widget, int click_count)
 
	{
 
		if (widget >= RTW_BUILD_NS) {
 
			_remove_button_clicked = false;
 
			_rail_build_button_data[widget - RTW_BUILD_NS].click_proc(this);
 
		}
 
		this->UpdateRemoveWidgetStatus(widget);
 
		if (_ctrl_pressed) RailToolbar_CtrlChanged(this);
 
	}
 

	
 
	virtual EventState OnKeyPress(uint16 key, uint16 keycode)
 
	{
 
		EventState state = ES_NOT_HANDLED;
 
@@ -1156,25 +1156,25 @@ public:
 
					y += this->line_height;
 
				}
 
				break;
 
			}
 
		}
 
	}
 

	
 
	virtual void SetStringParameters(int widget) const
 
	{
 
		if (widget == BRSW_NEWST_DROPDOWN) SetDParam(0, GetStationClassName(_railstation.station_class));
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
 
	virtual void OnClick(Point pt, int widget, int click_count)
 
	{
 
		switch (widget) {
 
			case BRSW_PLATFORM_DIR_X:
 
			case BRSW_PLATFORM_DIR_Y:
 
				this->RaiseWidget(_railstation.orientation + BRSW_PLATFORM_DIR_X);
 
				_railstation.orientation = (Axis)(widget - BRSW_PLATFORM_DIR_X);
 
				this->LowerWidget(_railstation.orientation + BRSW_PLATFORM_DIR_X);
 
				SndPlayFx(SND_15_BEEP);
 
				this->SetDirty();
 
				DeleteWindowById(WC_SELECT_STATION, 0);
 
				break;
 

	
 
@@ -1578,25 +1578,25 @@ public:
 
			const SpriteID _signal_lookup[] = {
 
				SPR_IMG_SIGNAL_SEMAPHORE_NORM,  SPR_IMG_SIGNAL_SEMAPHORE_ENTRY, SPR_IMG_SIGNAL_SEMAPHORE_EXIT,
 
				SPR_IMG_SIGNAL_SEMAPHORE_COMBO, SPR_IMG_SIGNAL_SEMAPHORE_PBS,   SPR_IMG_SIGNAL_SEMAPHORE_PBS_OWAY,
 

	
 
				SPR_IMG_SIGNAL_ELECTRIC_NORM,  SPR_IMG_SIGNAL_ELECTRIC_ENTRY, SPR_IMG_SIGNAL_ELECTRIC_EXIT,
 
				SPR_IMG_SIGNAL_ELECTRIC_COMBO, SPR_IMG_SIGNAL_ELECTRIC_PBS,   SPR_IMG_SIGNAL_ELECTRIC_PBS_OWAY
 
			};
 

	
 
			this->DrawSignalSprite(widget, _signal_lookup[widget - BSW_SEMAPHORE_NORM]);
 
		}
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
 
	virtual void OnClick(Point pt, int widget, int click_count)
 
	{
 
		switch (widget) {
 
			case BSW_SEMAPHORE_NORM:
 
			case BSW_SEMAPHORE_ENTRY:
 
			case BSW_SEMAPHORE_EXIT:
 
			case BSW_SEMAPHORE_COMBO:
 
			case BSW_SEMAPHORE_PBS:
 
			case BSW_SEMAPHORE_PBS_OWAY:
 
			case BSW_ELECTRIC_NORM:
 
			case BSW_ELECTRIC_ENTRY:
 
			case BSW_ELECTRIC_EXIT:
 
			case BSW_ELECTRIC_COMBO:
 
@@ -1714,25 +1714,25 @@ struct BuildRailDepotWindow : public Pic
 
	virtual void OnPaint()
 
	{
 
		this->DrawWidgets();
 
	}
 

	
 
	virtual void DrawWidget(const Rect &r, int widget) const
 
	{
 
		if (!IsInsideMM(widget, BRDW_DEPOT_NE, BRDW_DEPOT_NW + 1)) return;
 

	
 
		DrawTrainDepotSprite(r.left - 1, r.top, widget - BRDW_DEPOT_NE + DIAGDIR_NE, _cur_railtype);
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
 
	virtual void OnClick(Point pt, int widget, int click_count)
 
	{
 
		switch (widget) {
 
			case BRDW_DEPOT_NE:
 
			case BRDW_DEPOT_SE:
 
			case BRDW_DEPOT_SW:
 
			case BRDW_DEPOT_NW:
 
				this->RaiseWidget(_build_depot_direction + BRDW_DEPOT_NE);
 
				_build_depot_direction = (DiagDirection)(widget - BRDW_DEPOT_NE);
 
				this->LowerWidget(_build_depot_direction + BRDW_DEPOT_NE);
 
				SndPlayFx(SND_15_BEEP);
 
				this->SetDirty();
 
				break;
 
@@ -1817,25 +1817,25 @@ struct BuildRailWaypointWindow : PickerW
 
				int bottom = nw->pos_y + nw->current_y;
 
				DrawWaypointSprite(nw->pos_x + TILE_PIXELS, bottom - TILE_PIXELS, this->hscroll.GetPosition() + i, _cur_railtype);
 

	
 
				if (statspec != NULL &&
 
						HasBit(statspec->callback_mask, CBM_STATION_AVAIL) &&
 
						GB(GetStationCallback(CBID_STATION_AVAILABILITY, 0, 0, statspec, NULL, INVALID_TILE), 0, 8) == 0) {
 
					GfxFillRect(nw->pos_x + 1, nw->pos_y + 1, nw->pos_x + nw->current_x - 2, bottom - 2, 0, FILLRECT_CHECKER);
 
				}
 
			}
 
		}
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
 
	virtual void OnClick(Point pt, int widget, int click_count)
 
	{
 
		switch (widget) {
 
			case BRWW_WAYPOINT_1:
 
			case BRWW_WAYPOINT_2:
 
			case BRWW_WAYPOINT_3:
 
			case BRWW_WAYPOINT_4:
 
			case BRWW_WAYPOINT_5: {
 
				byte type = widget - BRWW_WAYPOINT_1 + this->hscroll.GetPosition();
 

	
 
				/* Check station availability callback */
 
				const StationSpec *statspec = GetCustomStationSpec(STAT_CLASS_WAYP, type);
 
				if (statspec != NULL &&
src/road_gui.cpp
Show inline comments
 
@@ -474,25 +474,25 @@ struct BuildRoadToolbarWindow : Window {
 
					RTW_REMOVE,
 
					RTW_ONE_WAY,
 
					WIDGET_LIST_END);
 
				break;
 
		}
 
	}
 

	
 
	virtual void OnPaint()
 
	{
 
		this->DrawWidgets();
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
 
	virtual void OnClick(Point pt, int widget, int click_count)
 
	{
 
		if (widget >= RTW_ROAD_X) {
 
			_remove_button_clicked = false;
 
			_one_way_button_clicked = false;
 
			_build_road_button_proc[widget - RTW_ROAD_X](this);
 
		}
 
		this->UpdateOptionWidgetStatus((RoadToolbarWidgets)widget);
 
		if (_ctrl_pressed) RoadToolbar_CtrlChanged(this);
 
	}
 

	
 
	virtual EventState OnKeyPress(uint16 key, uint16 keycode)
 
	{
 
@@ -778,25 +778,25 @@ struct BuildRoadDepotWindow : public Pic
 
	virtual void OnPaint()
 
	{
 
		this->DrawWidgets();
 
	}
 

	
 
	virtual void DrawWidget(const Rect &r, int widget) const
 
	{
 
		if (!IsInsideMM(widget, BRDW_DEPOT_NE, BRDW_DEPOT_NW + 1)) return;
 

	
 
		DrawRoadDepotSprite(r.left - 1, r.top, (DiagDirection)(widget - BRDW_DEPOT_NE + DIAGDIR_NE), _cur_roadtype);
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
 
	virtual void OnClick(Point pt, int widget, int click_count)
 
	{
 
		switch (widget) {
 
			case BRDW_DEPOT_NW:
 
			case BRDW_DEPOT_NE:
 
			case BRDW_DEPOT_SW:
 
			case BRDW_DEPOT_SE:
 
				this->RaiseWidget(_road_depot_orientation + BRDW_DEPOT_NE);
 
				_road_depot_orientation = (DiagDirection)(widget - BRDW_DEPOT_NE);
 
				this->LowerWidget(_road_depot_orientation + BRDW_DEPOT_NE);
 
				SndPlayFx(SND_15_BEEP);
 
				this->SetDirty();
 
				break;
 
@@ -920,25 +920,25 @@ struct BuildRoadStationWindow : public P
 
			ResizeWindow(this, 0, top - bottom);
 
		}
 
	}
 

	
 
	virtual void DrawWidget(const Rect &r, int widget) const
 
	{
 
		if (!IsInsideMM(widget, BRSW_STATION_NE, BRSW_STATION_Y + 1)) return;
 

	
 
		StationType st = (this->window_class == WC_BUS_STATION) ? STATION_BUS : STATION_TRUCK;
 
		StationPickerDrawSprite(r.left + TILE_PIXELS, r.bottom - TILE_PIXELS, st, INVALID_RAILTYPE, widget < BRSW_STATION_X ? ROADTYPE_ROAD : _cur_roadtype, widget - BRSW_STATION_NE);
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
 
	virtual void OnClick(Point pt, int widget, int click_count)
 
	{
 
		switch (widget) {
 
			case BRSW_STATION_NE:
 
			case BRSW_STATION_SE:
 
			case BRSW_STATION_SW:
 
			case BRSW_STATION_NW:
 
			case BRSW_STATION_X:
 
			case BRSW_STATION_Y:
 
				this->RaiseWidget(_road_station_picker_orientation + BRSW_STATION_NE);
 
				_road_station_picker_orientation = (DiagDirection)(widget - BRSW_STATION_NE);
 
				this->LowerWidget(_road_station_picker_orientation + BRSW_STATION_NE);
 
				SndPlayFx(SND_15_BEEP);
src/settings_gui.cpp
Show inline comments
 
@@ -268,25 +268,25 @@ struct GameOptionsWindow : Window {
 
				/* Find the biggest description for the default size. */
 
				for (int i = 0; i < BaseMusic::GetNumSets(); i++) {
 
					uint invalid_files = BaseMusic::GetSet(i)->GetNumInvalid();
 
					if (invalid_files == 0) continue;
 

	
 
					SetDParam(0, invalid_files);
 
					*size = maxdim(*size, GetStringBoundingBox(STR_GAME_OPTIONS_BASE_MUSIC_STATUS));
 
				}
 
				break;
 
		}
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
 
	virtual void OnClick(Point pt, int widget, int click_count)
 
	{
 
		switch (widget) {
 
			case GOW_CURRENCY_DROPDOWN: // Setup currencies dropdown
 
				ShowDropDownMenu(this, BuildCurrencyDropdown(), this->opt->locale.currency, GOW_CURRENCY_DROPDOWN, _game_mode == GM_MENU ? 0 : ~GetMaskOfAllowedCurrencies(), 0);
 
				break;
 

	
 
			case GOW_DISTANCE_DROPDOWN: // Setup distance unit dropdown
 
				ShowDropDownMenu(this, _units_dropdown, this->opt->locale.units, GOW_DISTANCE_DROPDOWN, 0, 0);
 
				break;
 

	
 
			case GOW_ROADSIDE_DROPDOWN: { // Setup road-side dropdown
 
				int i = 0;
 
@@ -616,25 +616,25 @@ public:
 
		StringID str = this->GetWidget<NWidgetCore>(widget)->widget_data;
 
		for (int32 value = sdb->min; (uint32)value <= sdb->max; value += sdb->interval) {
 
			SetDParam(0, sdb->str + value);
 
			*size = maxdim(*size, GetStringBoundingBox(str));
 
		}
 
	}
 

	
 
	virtual void OnPaint()
 
	{
 
		this->DrawWidgets();
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
 
	virtual void OnClick(Point pt, int widget, int click_count)
 
	{
 
		if (widget >= GDW_OPTIONS_START) {
 
			widget -= GDW_OPTIONS_START;
 
			if ((widget % 3) == 2) return;
 

	
 
			/* Don't allow clients to make any changes */
 
			if (_networking && !_network_server) return;
 

	
 
			uint i;
 
			const SettingDesc *sd = GetSettingFromName("difficulty.max_no_competitors", &i) + (widget / 3);
 
			const SettingDescBase *sdb = &sd->desc;
 

	
 
@@ -1530,25 +1530,25 @@ struct GameSettingsWindow : Window {
 
	{
 
		if (widget != SETTINGSEL_OPTIONSPANEL) return;
 

	
 
		_settings_main_page.Draw(settings_ptr, r.left + SETTINGTREE_LEFT_OFFSET, r.right - SETTINGTREE_RIGHT_OFFSET, r.top + SETTINGTREE_TOP_OFFSET,
 
				this->vscroll.GetPosition(), this->vscroll.GetPosition() + this->vscroll.GetCapacity());
 
	}
 

	
 
	virtual void OnPaint()
 
	{
 
		this->DrawWidgets();
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
 
	virtual void OnClick(Point pt, int widget, int click_count)
 
	{
 
		if (widget != SETTINGSEL_OPTIONSPANEL) return;
 

	
 
		int y = pt.y - this->GetWidget<NWidgetBase>(widget)->pos_y - SETTINGTREE_TOP_OFFSET;  // Shift y coordinate
 
		if (y < 0) return;  // Clicked above first entry
 

	
 
		byte btn = this->vscroll.GetPosition() + y / this->resize.step_height;  // Compute which setting is selected
 
		if (y % this->resize.step_height > this->resize.step_height - 2) return;  // Clicked too low at the setting
 

	
 
		uint cur_row = 0;
 
		SettingEntry *pe = _settings_main_page.FindEntry(btn, &cur_row);
 

	
 
@@ -1817,25 +1817,25 @@ struct CustomCurrencyWindow : Window {
 
				SetDParam(0, 1);
 
				SetDParam(1, INT32_MAX);
 
				*size = GetStringBoundingBox(STR_CURRENCY_EXCHANGE_RATE);
 
				break;
 
		}
 
	}
 

	
 
	virtual void OnPaint()
 
	{
 
		this->DrawWidgets();
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
 
	virtual void OnClick(Point pt, int widget, int click_count)
 
	{
 
		int line = 0;
 
		int len = 0;
 
		StringID str = 0;
 
		CharSetFilter afilter = CS_ALPHANUMERAL;
 

	
 
		switch (widget) {
 
			case CUSTCURR_RATE_DOWN:
 
				if (_custom_currency.rate > 1) _custom_currency.rate--;
 
				if (_custom_currency.rate == 1) this->DisableWidget(CUSTCURR_RATE_DOWN);
 
				this->EnableWidget(CUSTCURR_RATE_UP);
 
				break;
src/signs_gui.cpp
Show inline comments
 
@@ -134,25 +134,25 @@ struct SignListWindow : Window, SignList
 
					y += this->resize.step_height;
 
				}
 
				break;
 
			}
 
		}
 
	}
 

	
 
	virtual void SetStringParameters(int widget) const
 
	{
 
		if (widget == SLW_CAPTION) SetDParam(0, this->vscroll.GetCount());
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
 
	virtual void OnClick(Point pt, int widget, int click_count)
 
	{
 
		if (widget == SLW_LIST) {
 
			uint id_v = (pt.y - this->GetWidget<NWidgetBase>(SLW_LIST)->pos_y - WD_FRAMERECT_TOP) / this->resize.step_height;
 

	
 
			if (id_v >= this->vscroll.GetCapacity()) return;
 
			id_v += this->vscroll.GetPosition();
 
			if (id_v >= this->vscroll.GetCount()) return;
 

	
 
			const Sign *si = this->signs[id_v];
 
			ScrollMainWindowToTile(TileVirtXY(si->x, si->y));
 
		}
 
	}
 
@@ -319,25 +319,25 @@ struct SignWindow : QueryStringBaseWindo
 
			case QUERY_EDIT_SIGN_WIDGET_CAPTION:
 
				SetDParam(0, this->caption);
 
				break;
 
		}
 
	}
 

	
 
	virtual void OnPaint()
 
	{
 
		this->DrawWidgets();
 
		if (!this->IsShaded()) this->DrawEditBox(QUERY_EDIT_SIGN_WIDGET_TEXT);
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
 
	virtual void OnClick(Point pt, int widget, int click_count)
 
	{
 
		switch (widget) {
 
			case QUERY_EDIT_SIGN_WIDGET_PREVIOUS:
 
			case QUERY_EDIT_SIGN_WIDGET_NEXT: {
 
				const Sign *si = this->PrevNextSign(widget == QUERY_EDIT_SIGN_WIDGET_NEXT);
 

	
 
				/* Rebuild the sign list */
 
				this->signs.ForceRebuild();
 
				this->signs.NeedResort();
 
				this->BuildSignsList();
 
				this->SortSignsList();
 

	
src/smallmap_gui.cpp
Show inline comments
 
@@ -889,25 +889,25 @@ public:
 

	
 
					y += row_height;
 
				}
 
			}
 
		}
 
	}
 

	
 
	virtual void OnPaint()
 
	{
 
		this->DrawWidgets();
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
 
	virtual void OnClick(Point pt, int widget, int click_count)
 
	{
 
		switch (widget) {
 
			case SM_WIDGET_MAP: { // Map window
 
				/*
 
				 * XXX: scrolling with the left mouse button is done by subsequently
 
				 * clicking with the left mouse button; clicking once centers the
 
				 * large map at the selected point. So by unclicking the left mouse
 
				 * button here, it gets reclicked during the next inputloop, which
 
				 * would make it look like the mouse is being dragged, while it is
 
				 * actually being (virtually) clicked every inputloop.
 
				 */
 
				_left_button_clicked = false;
src/station_gui.cpp
Show inline comments
 
@@ -523,25 +523,25 @@ public:
 
				break;
 
		}
 
	}
 

	
 
	virtual void SetStringParameters(int widget) const
 
	{
 
		if (widget == SLW_CAPTION) {
 
			SetDParam(0, this->window_number);
 
			SetDParam(1, this->vscroll.GetCount());
 
		}
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
 
	virtual void OnClick(Point pt, int widget, int click_count)
 
	{
 
		switch (widget) {
 
			case SLW_LIST: {
 
				uint32 id_v = (pt.y - this->GetWidget<NWidgetBase>(SLW_LIST)->pos_y - WD_FRAMERECT_TOP) / FONT_HEIGHT_NORMAL;
 

	
 
				if (id_v >= this->vscroll.GetCapacity()) return; // click out of bounds
 

	
 
				id_v += this->vscroll.GetPosition();
 

	
 
				if (id_v >= this->stations.Length()) return; // click out of list bound
 

	
 
				const Station *st = this->stations[id_v];
 
@@ -1127,25 +1127,25 @@ struct StationViewWindow : public Window
 
	{
 
		if (row == 0) return;
 

	
 
		for (CargoID c = 0; c < NUM_CARGO; c++) {
 
			if (this->cargo_rows[c] == row) {
 
				ToggleBit(this->cargo, c);
 
				this->SetWidgetDirty(SVW_WAITING);
 
				break;
 
			}
 
		}
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
 
	virtual void OnClick(Point pt, int widget, int click_count)
 
	{
 
		switch (widget) {
 
			case SVW_WAITING:
 
				this->HandleCargoWaitingClick((pt.y - this->GetWidget<NWidgetBase>(SVW_WAITING)->pos_y - WD_FRAMERECT_TOP) / FONT_HEIGHT_NORMAL + this->vscroll.GetPosition());
 
				break;
 

	
 
			case SVW_LOCATION:
 
				if (_ctrl_pressed) {
 
					ShowExtraViewPortWindow(Station::Get(this->window_number)->xy);
 
				} else {
 
					ScrollMainWindowToTile(Station::Get(this->window_number)->xy);
 
				}
 
@@ -1412,25 +1412,25 @@ struct SelectStationWindow : Window {
 

	
 
		for (uint i = max<uint>(1, this->vscroll.GetPosition()); i <= _stations_nearby_list.Length(); ++i, y += this->resize.step_height) {
 
			/* Don't draw anything if it extends past the end of the window. */
 
			if (i - this->vscroll.GetPosition() >= this->vscroll.GetCapacity()) break;
 

	
 
			const T *st = T::Get(_stations_nearby_list[i - 1]);
 
			SetDParam(0, st->index);
 
			SetDParam(1, st->facilities);
 
			DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, y, T::EXPECTED_FACIL == FACIL_WAYPOINT ? STR_STATION_LIST_WAYPOINT : STR_STATION_LIST_STATION);
 
		}
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
 
	virtual void OnClick(Point pt, int widget, int click_count)
 
	{
 
		if (widget != JSW_PANEL) return;
 

	
 
		uint32 st_index = (pt.y - this->GetWidget<NWidgetBase>(JSW_PANEL)->pos_y - WD_FRAMERECT_TOP) / this->resize.step_height + this->vscroll.GetPosition();
 
		bool distant_join = (st_index > 0);
 
		if (distant_join) st_index--;
 

	
 
		if (distant_join && st_index >= _stations_nearby_list.Length()) return;
 

	
 
		/* Insert station to be joined into stored command */
 
		SB(this->select_station_cmd.p2, 16, 16,
 
		   (distant_join ? _stations_nearby_list[st_index] : NEW_STATION));
src/statusbar_gui.cpp
Show inline comments
 
@@ -191,25 +191,25 @@ struct StatusBarWindow : Window {
 
			default: NOT_REACHED();
 
			case SBI_SAVELOAD_START:  this->saving = true;  break;
 
			case SBI_SAVELOAD_FINISH: this->saving = false; break;
 
			case SBI_SHOW_TICKER:     this->ticker_scroll = 0; break;
 
			case SBI_SHOW_REMINDER:   this->reminder_timeout = REMINDER_START; break;
 
			case SBI_NEWS_DELETED:
 
				this->ticker_scroll    =   TICKER_STOP; // reset ticker ...
 
				this->reminder_timeout = REMINDER_STOP; // ... and reminder
 
				break;
 
		}
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
 
	virtual void OnClick(Point pt, int widget, int click_count)
 
	{
 
		switch (widget) {
 
			case SBW_MIDDLE: ShowLastNewsMessage(); break;
 
			case SBW_RIGHT:  if (_local_company != COMPANY_SPECTATOR) ShowCompanyFinances(_local_company); break;
 
			default: ResetObjectToPlace();
 
		}
 
	}
 

	
 
	virtual void OnTick()
 
	{
 
		if (_pause_mode != PM_UNPAUSED) return;
 

	
src/subsidy_gui.cpp
Show inline comments
 
@@ -28,25 +28,25 @@
 
enum SubsidyListWidgets {
 
	SLW_PANEL,
 
	SLW_SCROLLBAR,
 
};
 

	
 
struct SubsidyListWindow : Window {
 
	SubsidyListWindow(const WindowDesc *desc, WindowNumber window_number) : Window()
 
	{
 
		this->InitNested(desc, window_number);
 
		this->OnInvalidateData(0);
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
 
	virtual void OnClick(Point pt, int widget, int click_count)
 
	{
 
		if (widget != SLW_PANEL) return;
 

	
 
		int y = (pt.y - this->GetWidget<NWidgetBase>(SLW_PANEL)->pos_y - WD_FRAMERECT_TOP) / this->resize.step_height;
 
		if (!IsInsideMM(y, 0, this->vscroll.GetCapacity())) return;
 

	
 
		y += this->vscroll.GetPosition();
 

	
 
		int num = 0;
 
		const Subsidy *s;
 
		FOR_ALL_SUBSIDIES(s) {
 
			if (!s->IsAwarded()) {
src/terraform_gui.cpp
Show inline comments
 
@@ -232,25 +232,25 @@ struct TerraformToolbarWindow : Window {
 
		this->InitNested(desc, window_number);
 
	}
 

	
 
	~TerraformToolbarWindow()
 
	{
 
	}
 

	
 
	virtual void OnPaint()
 
	{
 
		this->DrawWidgets();
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
 
	virtual void OnClick(Point pt, int widget, int click_count)
 
	{
 
		if (widget >= TTW_BUTTONS_START) _terraform_button_proc[widget - TTW_BUTTONS_START](this);
 
	}
 

	
 
	virtual EventState OnKeyPress(uint16 key, uint16 keycode)
 
	{
 
		for (uint i = 0; i != lengthof(_terraform_keycodes); i++) {
 
			if (keycode == _terraform_keycodes[i]) {
 
				_terraform_button_proc[i](this);
 
				return ES_HANDLED;
 
			}
 
		}
 
@@ -664,25 +664,25 @@ struct ScenarioEditorLandscapeGeneration
 

	
 
	virtual EventState OnKeyPress(uint16 key, uint16 keycode)
 
	{
 
		for (uint i = 0; i != lengthof(_editor_terraform_keycodes); i++) {
 
			if (keycode == _editor_terraform_keycodes[i]) {
 
				_editor_terraform_button_proc[i](this);
 
				return ES_HANDLED;
 
			}
 
		}
 
		return ES_NOT_HANDLED;
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
 
	virtual void OnClick(Point pt, int widget, int click_count)
 
	{
 
		if (IsInsideMM(widget, ETTW_BUTTONS_START, ETTW_BUTTONS_END)) {
 
			_editor_terraform_button_proc[widget - ETTW_BUTTONS_START](this);
 
		} else {
 
			switch (widget) {
 
				case ETTW_INCREASE_SIZE:
 
				case ETTW_DECREASE_SIZE: { // Increase/Decrease terraform size
 
					int size = (widget == ETTW_INCREASE_SIZE) ? 1 : -1;
 
					this->HandleButtonClick(widget);
 
					size += _terraform_size;
 

	
 
					if (!IsInsideMM(size, 1, 8 + 1)) return;
src/timetable_gui.cpp
Show inline comments
 
@@ -488,25 +488,25 @@ struct TimetableWindow : Window {
 
	}
 

	
 
	static inline uint32 PackTimetableArgs(const Vehicle *v, uint selected)
 
	{
 
		uint order_number = (selected + 1) / 2;
 
		uint is_journey   = (selected % 2 == 1) ? 1 : 0;
 

	
 
		if (order_number >= v->GetNumOrders()) order_number = 0;
 

	
 
		return v->index | (order_number << 16) | (is_journey << 24);
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
 
	virtual void OnClick(Point pt, int widget, int click_count)
 
	{
 
		const Vehicle *v = this->vehicle;
 

	
 
		switch (widget) {
 
			case TTV_ORDER_VIEW: // Order view button
 
				ShowOrdersWindow(v);
 
				break;
 

	
 
			case TTV_TIMETABLE_PANEL: { // Main panel.
 
				int selected = GetOrderFromTimetableWndPt(pt.y, v);
 

	
 
				this->DeleteChildWindows();
src/toolbar_gui.cpp
Show inline comments
 
@@ -1224,25 +1224,25 @@ struct MainToolbarWindow : Window {
 
		 * ie : Build road, rail, ships, airports and landscaping
 
		 * Since enabled state is the default, just disable when needed */
 
		this->SetWidgetsDisabledState(_local_company == COMPANY_SPECTATOR, TBN_RAILS, TBN_ROADS, TBN_WATER, TBN_AIR, TBN_LANDSCAPE, WIDGET_LIST_END);
 
		/* disable company list drop downs, if there are no companies */
 
		this->SetWidgetsDisabledState(Company::GetNumItems() == 0, TBN_STATIONS, TBN_FINANCES, TBN_TRAINS, TBN_ROADVEHS, TBN_SHIPS, TBN_AIRCRAFTS, WIDGET_LIST_END);
 

	
 
		this->SetWidgetDisabledState(TBN_RAILS, !CanBuildVehicleInfrastructure(VEH_TRAIN));
 
		this->SetWidgetDisabledState(TBN_AIR, !CanBuildVehicleInfrastructure(VEH_AIRCRAFT));
 

	
 
		this->DrawWidgets();
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
 
	virtual void OnClick(Point pt, int widget, int click_count)
 
	{
 
		if (_game_mode != GM_MENU && !this->IsWidgetDisabled(widget)) _toolbar_button_procs[widget](this);
 
	}
 

	
 
	virtual void OnDropdownSelect(int widget, int index)
 
	{
 
		_menu_clicked_procs[widget](index);
 
	}
 

	
 
	virtual EventState OnKeyPress(uint16 key, uint16 keycode)
 
	{
 
		switch (keycode) {
 
@@ -1461,25 +1461,25 @@ public:
 
			case TBSE_SPACERPANEL:
 
				size->width = max(GetStringBoundingBox(STR_SCENEDIT_TOOLBAR_OPENTTD).width, GetStringBoundingBox(STR_SCENEDIT_TOOLBAR_SCENARIO_EDITOR).width) + WD_FRAMERECT_LEFT + WD_FRAMERECT_RIGHT;
 
				break;
 

	
 
			case TBSE_DATEPANEL:
 
				SetDParam(0, ConvertYMDToDate(MAX_YEAR, 0, 1));
 
				*size = GetStringBoundingBox(STR_WHITE_DATE_LONG);
 
				size->height = max(size->height, GetSpriteSize(SPR_IMG_SAVE).height + WD_IMGBTN_TOP + WD_IMGBTN_BOTTOM);
 
				break;
 
		}
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
 
	virtual void OnClick(Point pt, int widget, int click_count)
 
	{
 
		if (_game_mode == GM_MENU) return;
 
		_scen_toolbar_button_procs[widget](this);
 
	}
 

	
 
	virtual void OnDropdownSelect(int widget, int index)
 
	{
 
		/* The map button is in a different location on the scenario
 
		 * editor toolbar, so we need to adjust for it. */
 
		if (widget == TBSE_SMALLMAP) widget = TBN_SMALLMAP;
 
		_menu_clicked_procs[widget](index);
 
		SndPlayFx(SND_15_BEEP);
src/town_gui.cpp
Show inline comments
 
@@ -242,42 +242,39 @@ public:
 
					size->width = max(size->width, GetStringBoundingBox(STR_LOCAL_AUTHORITY_ACTION_SMALL_ADVERTISING_CAMPAIGN + i).width);
 
				}
 
				size->width += WD_FRAMERECT_LEFT + WD_FRAMERECT_RIGHT;
 
				break;
 

	
 
			case TWA_RATING_INFO:
 
				resize->height = FONT_HEIGHT_NORMAL;
 
				size->height = WD_FRAMERECT_TOP + 9 * FONT_HEIGHT_NORMAL + WD_FRAMERECT_BOTTOM;
 
				break;
 
		}
 
	}
 

	
 
	virtual void OnDoubleClick(Point pt, int widget) { HandleClick(pt, widget, true); }
 
	virtual void OnClick(Point pt, int widget) { HandleClick(pt, widget, false); }
 

	
 
	void HandleClick(Point pt, int widget, bool double_click)
 
	virtual void OnClick(Point pt, int widget, int click_count)
 
	{
 
		switch (widget) {
 
			case TWA_COMMAND_LIST: {
 
				int y = (pt.y - this->GetWidget<NWidgetBase>(TWA_COMMAND_LIST)->pos_y - 1) / FONT_HEIGHT_NORMAL;
 

	
 
				if (!IsInsideMM(y, 0, 5)) return;
 

	
 
				y = GetNthSetBit(GetMaskOfTownActions(NULL, _local_company, this->town), y + this->vscroll.GetPosition() - 1);
 
				if (y >= 0) {
 
					this->sel_index = y;
 
					this->SetDirty();
 
				}
 
				/* Fall through to clicking in case we are double-clicked */
 
				if (!double_click || y < 0) break;
 
				if (click_count == 1 || y < 0) break;
 
			}
 

	
 
			case TWA_EXECUTE:
 
				DoCommandP(this->town->xy, this->window_number, this->sel_index, CMD_DO_TOWN_ACTION | CMD_MSG(STR_ERROR_CAN_T_DO_THIS));
 
				break;
 
		}
 
	}
 

	
 
	virtual void OnHundredthTick()
 
	{
 
		this->SetDirty();
 
	}
 
@@ -426,25 +423,25 @@ public:
 
				}
 
			}
 
		}
 

	
 
		/* only show the town noise, if the noise option is activated. */
 
		if (_settings_game.economy.station_noise_level) {
 
			SetDParam(0, this->town->noise_reached);
 
			SetDParam(1, this->town->MaxTownNoise());
 
			DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_LEFT, y += FONT_HEIGHT_NORMAL, STR_TOWN_VIEW_NOISE_IN_TOWN);
 
		}
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
 
	virtual void OnClick(Point pt, int widget, int click_count)
 
	{
 
		switch (widget) {
 
			case TVW_CENTERVIEW: // scroll to location
 
				if (_ctrl_pressed) {
 
					ShowExtraViewPortWindow(this->town->xy);
 
				} else {
 
					ScrollMainWindowToTile(this->town->xy);
 
				}
 
				break;
 

	
 
			case TVW_SHOWAUTHORITY: // town authority
 
				ShowTownAuthorityWindow(this->window_number);
 
@@ -788,25 +785,25 @@ public:
 
			}
 
			case TDW_BOTTOM_TEXT: {
 
				SetDParam(0, 1000000000); // 10^9
 
				Dimension d = GetStringBoundingBox(STR_TOWN_POPULATION);
 
				d.width += padding.width;
 
				d.height += padding.height;
 
				*size = maxdim(*size, d);
 
				break;
 
			}
 
		}
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
 
	virtual void OnClick(Point pt, int widget, int click_count)
 
	{
 
		switch (widget) {
 
			case TDW_SORTNAME: // Sort by Name ascending/descending
 
				if (this->towns.SortType() == 0) {
 
					this->towns.ToggleSortOrder();
 
				} else {
 
					this->towns.SetSortType(0);
 
				}
 
				this->BuildSortTownList();
 
				this->SetDirty();
 
				break;
 

	
 
@@ -1064,25 +1061,25 @@ public:
 
		bool success = DoCommandP(tile, this->town_size | this->city << 2 | this->town_layout << 3 | random << 6,
 
				townnameparts, CMD_FOUND_TOWN | CMD_MSG(errstr), cc, name);
 

	
 
		if (success) this->RandomTownName();
 
	}
 

	
 
	virtual void OnPaint()
 
	{
 
		this->DrawWidgets();
 
		if (!this->IsShaded()) this->DrawEditBox(TSEW_TOWNNAME_EDITBOX);
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
 
	virtual void OnClick(Point pt, int widget, int click_count)
 
	{
 
		switch (widget) {
 
			case TSEW_NEWTOWN:
 
				HandlePlacePushButton(this, TSEW_NEWTOWN, SPR_CURSOR_TOWN, HT_RECT, NULL);
 
				break;
 

	
 
			case TSEW_RANDOMTOWN:
 
				this->HandleButtonClick(TSEW_RANDOMTOWN);
 
				this->ExecuteFoundTownCommand(0, true, STR_ERROR_CAN_T_GENERATE_TOWN, CcFoundRandomTown);
 
				break;
 

	
 
			case TSEW_TOWNNAME_RANDOM:
src/transparency_gui.cpp
Show inline comments
 
@@ -73,25 +73,25 @@ public:
 
			case TTW_WIDGET_BUTTONS:
 
				for (uint i = TTW_WIDGET_BEGIN; i < TTW_WIDGET_END; i++) {
 
					if (i == TTW_WIDGET_LOADING) continue; // Do not draw button for invisible loading indicators.
 

	
 
					const NWidgetBase *wi = this->GetWidget<NWidgetBase>(i);
 
					DrawFrameRect(wi->pos_x + 1, r.top + 2, wi->pos_x + wi->current_x - 2, r.bottom - 2, COLOUR_PALE_GREEN,
 
							HasBit(_invisibility_opt, i - TTW_WIDGET_BEGIN) ? FR_LOWERED : FR_NONE);
 
				}
 
				break;
 
		}
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
 
	virtual void OnClick(Point pt, int widget, int click_count)
 
	{
 
		if (widget >= TTW_WIDGET_BEGIN && widget < TTW_WIDGET_END) {
 
			if (_ctrl_pressed) {
 
				/* toggle the bit of the transparencies lock variable */
 
				ToggleTransparencyLock((TransparencyOption)(widget - TTW_WIDGET_BEGIN));
 
				this->SetDirty();
 
			} else {
 
				/* toggle the bit of the transparencies variable and play a sound */
 
				ToggleTransparency((TransparencyOption)(widget - TTW_WIDGET_BEGIN));
 
				SndPlayFx(SND_15_BEEP);
 
				MarkWholeScreenDirty();
 
			}
src/tree_gui.cpp
Show inline comments
 
@@ -87,25 +87,25 @@ public:
 
			{ 0x76B, PAL_NONE }, { 0x78F, PAL_NONE }, { 0x788, PAL_NONE }, { 0x77B, PAL_NONE },
 
			{ 0x75F, PAL_NONE }, { 0x774, PAL_NONE }, { 0x720, PAL_NONE }, { 0x797, PAL_NONE },
 
			{ 0x79E, PAL_NONE }, { 0x7A5, PALETTE_TO_GREEN }, { 0x7AC, PALETTE_TO_RED }, { 0x7B3, PAL_NONE },
 
			{ 0x7BA, PAL_NONE }, { 0x7C1, PALETTE_TO_RED, }, { 0x7C8, PALETTE_TO_PALE_GREEN }, { 0x7CF, PALETTE_TO_YELLOW }, { 0x7D6, PALETTE_TO_RED }
 
		};
 

	
 
		if (widget < BTW_TYPE_11 || widget > BTW_TYPE_34 || widget - BTW_TYPE_11 >= this->count) return;
 

	
 
		int i = this->base + widget - BTW_TYPE_11;
 
		DrawSprite(tree_sprites[i].sprite, tree_sprites[i].pal, (r.left + r.right) / 2, r.bottom - 7);
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
 
	virtual void OnClick(Point pt, int widget, int click_count)
 
	{
 
		switch (widget) {
 
			case BTW_TYPE_11: case BTW_TYPE_12: case BTW_TYPE_13: case BTW_TYPE_14:
 
			case BTW_TYPE_21: case BTW_TYPE_22: case BTW_TYPE_23: case BTW_TYPE_24:
 
			case BTW_TYPE_31: case BTW_TYPE_32: case BTW_TYPE_33: case BTW_TYPE_34:
 
				if (widget - BTW_TYPE_11 >= this->count) break;
 

	
 
				if (HandlePlacePushButton(this, widget, SPR_CURSOR_TREE, HT_RECT, NULL)) {
 
					this->tree_to_plant = this->base + widget - BTW_TYPE_11;
 
				}
 
				break;
 

	
src/vehicle_gui.cpp
Show inline comments
 
@@ -429,41 +429,37 @@ struct RefitWindow : public Window {
 
					if (cost.Succeeded()) {
 
						SetDParam(0, this->cargo->cargo);
 
						SetDParam(1, _returned_refit_capacity);
 
						SetDParam(2, cost.GetCost());
 
						DrawStringMultiLine(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT,
 
								r.top + WD_FRAMERECT_TOP, r.bottom - WD_FRAMERECT_BOTTOM, STR_REFIT_NEW_CAPACITY_COST_OF_REFIT);
 
					}
 
				}
 
				break;
 
		}
 
	}
 

	
 
	virtual void OnDoubleClick(Point pt, int widget)
 
	{
 
		if (widget == VRW_MATRIX) this->OnClick(pt, VRW_REFITBUTTON);
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
 
	virtual void OnClick(Point pt, int widget, int click_count)
 
	{
 
		switch (widget) {
 
			case VRW_MATRIX: { // listbox
 
				int y = pt.y - this->GetWidget<NWidgetBase>(VRW_MATRIX)->pos_y;
 
				if (y >= 0) {
 
					this->sel = (y / (int)this->resize.step_height) + this->vscroll.GetPosition();
 
					this->SetDirty();
 
				}
 
				break;
 
				/* FIXME We need to call some InvalidateData to make this->cargo valid */
 
				if (click_count == 1) break;
 
			}
 

	
 
			/* FALL THROUGH */
 
			case VRW_REFITBUTTON: // refit button
 
				if (this->cargo != NULL) {
 
					const Vehicle *v = Vehicle::Get(this->window_number);
 

	
 
					if (this->order == INVALID_VEH_ORDER_ID) {
 
						if (DoCommandP(v->tile, v->index, this->cargo->cargo | this->cargo->subtype << 8, GetCmdRefitVeh(v))) delete this;
 
					} else {
 
						if (DoCommandP(v->tile, v->index, this->cargo->cargo | this->cargo->subtype << 8 | this->order << 16, CMD_ORDER_REFIT)) delete this;
 
					}
 
				}
 
				break;
 
		}
 
@@ -1107,25 +1103,25 @@ public:
 
				VLW_WIDGET_MANAGE_VEHICLES_DROPDOWN,
 
				VLW_WIDGET_STOP_ALL,
 
				VLW_WIDGET_START_ALL,
 
				WIDGET_LIST_END);
 
		}
 

	
 
		/* Set text of sort by dropdown widget. */
 
		this->GetWidget<NWidgetCore>(VLW_WIDGET_SORT_BY_PULLDOWN)->widget_data = this->vehicle_sorter_names[this->vehicles.SortType()];
 

	
 
		this->DrawWidgets();
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
 
	virtual void OnClick(Point pt, int widget, int click_count)
 
	{
 
		switch (widget) {
 
			case VLW_WIDGET_SORT_ORDER: // Flip sorting method ascending/descending
 
				this->vehicles.ToggleSortOrder();
 
				this->SetDirty();
 
				break;
 

	
 
			case VLW_WIDGET_SORT_BY_PULLDOWN:// Select sorting criteria dropdown menu
 
				ShowDropDownMenu(this, this->vehicle_sorter_names, this->vehicles.SortType(), VLW_WIDGET_SORT_BY_PULLDOWN, 0,
 
						(this->vehicle_type == VEH_TRAIN || this->vehicle_type == VEH_ROAD) ? 0 : (1 << 10));
 
				return;
 

	
 
@@ -1602,25 +1598,25 @@ struct VehicleDetailsWindow : Window {
 
			this->vscroll.SetCount(GetTrainDetailsWndVScroll(v->index, this->tab));
 
		}
 

	
 
		/* Disable service-scroller when interval is set to disabled */
 
		this->SetWidgetsDisabledState(!IsVehicleServiceIntervalEnabled(v->type, v->owner),
 
			VLD_WIDGET_INCREASE_SERVICING_INTERVAL,
 
			VLD_WIDGET_DECREASE_SERVICING_INTERVAL,
 
			WIDGET_LIST_END);
 

	
 
		this->DrawWidgets();
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
 
	virtual void OnClick(Point pt, int widget, int click_count)
 
	{
 
		switch (widget) {
 
			case VLD_WIDGET_RENAME_VEHICLE: { // rename
 
				const Vehicle *v = Vehicle::Get(this->window_number);
 
				SetDParam(0, v->index);
 
				ShowQueryString(STR_VEHICLE_NAME, STR_QUERY_RENAME_TRAIN_CAPTION + v->type,
 
						MAX_LENGTH_VEHICLE_NAME_BYTES, MAX_LENGTH_VEHICLE_NAME_PIXELS, this, CS_ALPHANUMERAL, QSF_ENABLE_DEFAULT);
 
			} break;
 

	
 
			case VLD_WIDGET_INCREASE_SERVICING_INTERVAL:   // increase int
 
			case VLD_WIDGET_DECREASE_SERVICING_INTERVAL: { // decrease int
 
				int mod = _ctrl_pressed ? 5 : 10;
 
@@ -2032,25 +2028,25 @@ public:
 
					} else {
 
						str = STR_EMPTY;
 
					}
 
					break;
 
			}
 
		}
 

	
 
		/* draw the flag plus orders */
 
		DrawSprite(v->vehstatus & VS_STOPPED ? SPR_FLAG_VEH_STOPPED : SPR_FLAG_VEH_RUNNING, PAL_NONE, WD_FRAMERECT_LEFT, r.top + WD_FRAMERECT_TOP);
 
		DrawString(r.left + WD_FRAMERECT_LEFT + 6, r.right - WD_FRAMERECT_RIGHT, r.top + WD_FRAMERECT_TOP, str, TC_FROMSTRING, SA_CENTER);
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
 
	virtual void OnClick(Point pt, int widget, int click_count)
 
	{
 
		const Vehicle *v = Vehicle::Get(this->window_number);
 

	
 
		switch (widget) {
 
			case VVW_WIDGET_START_STOP_VEH: // start stop
 
				DoCommandP(v->tile, v->index, 0,
 
										_vehicle_command_translation_table[VCT_CMD_START_STOP][v->type]);
 
				break;
 
			case VVW_WIDGET_CENTER_MAIN_VIEH: {// center main view
 
				const Window *mainwindow = FindWindowById(WC_MAIN_WINDOW, 0);
 
				/* code to allow the main window to 'follow' the vehicle if the ctrl key is pressed */
 
				if (_ctrl_pressed && mainwindow->viewport->zoom == ZOOM_LVL_NORMAL) {
src/viewport_gui.cpp
Show inline comments
 
@@ -92,25 +92,25 @@ public:
 
			case EVW_CAPTION:
 
				/* set the number in the title bar */
 
				SetDParam(0, this->window_number + 1);
 
				break;
 
		}
 
	}
 

	
 
	virtual void OnPaint()
 
	{
 
		this->DrawWidgets();
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
 
	virtual void OnClick(Point pt, int widget, int click_count)
 
	{
 
		switch (widget) {
 
			case EVW_ZOOMIN: DoZoomInOutWindow(ZOOM_IN,  this); break;
 
			case EVW_ZOOMOUT: DoZoomInOutWindow(ZOOM_OUT, this); break;
 

	
 
			case EVW_MAIN_TO_VIEW: { // location button (move main view to same spot as this view) 'Paste Location'
 
				Window *w = FindWindowById(WC_MAIN_WINDOW, 0);
 
				int x = this->viewport->scrollpos_x; // Where is the main looking at
 
				int y = this->viewport->scrollpos_y;
 

	
 
				/* set this view to same location. Based on the center, adjusting for zoom */
 
				w->viewport->dest_scrollpos_x =  x - (w->viewport->virtual_width -  this->viewport->virtual_width) / 2;
src/waypoint_gui.cpp
Show inline comments
 
@@ -66,25 +66,25 @@ public:
 
	}
 

	
 
	virtual void SetStringParameters(int widget) const
 
	{
 
		if (widget == WAYPVW_CAPTION) SetDParam(0, this->wp->index);
 
	}
 

	
 
	virtual void OnPaint()
 
	{
 
		this->DrawWidgets();
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
 
	virtual void OnClick(Point pt, int widget, int click_count)
 
	{
 
		switch (widget) {
 
			case WAYPVW_CENTERVIEW: // scroll to location
 
				if (_ctrl_pressed) {
 
					ShowExtraViewPortWindow(this->wp->xy);
 
				} else {
 
					ScrollMainWindowToTile(this->wp->xy);
 
				}
 
				break;
 

	
 
			case WAYPVW_RENAME: // rename
 
				SetDParam(0, this->wp->index);
src/widgets/dropdown.cpp
Show inline comments
 
@@ -238,25 +238,25 @@ struct DropdownWindow : Window {
 
				if (selected) GfxFillRect(r.left + 2, y, r.right - 1, y + item_height - 1, 0);
 

	
 
				item->Draw(r.left, r.right, y, r.bottom, selected, colour);
 

	
 
				if (item->masked) {
 
					GfxFillRect(r.left + 1, y, r.right - 1, y + item_height - 1, _colour_gradient[colour][5], FILLRECT_CHECKER);
 
				}
 
			}
 
			y += item_height;
 
		}
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
 
	virtual void OnClick(Point pt, int widget, int click_count)
 
	{
 
		if (widget != DDM_ITEMS) return;
 
		int item;
 
		if (this->GetDropDownItem(item)) {
 
			this->click_delay = 4;
 
			this->selected_index = item;
 
			this->SetDirty();
 
		}
 
	}
 

	
 
	virtual void OnTick()
 
	{
src/window.cpp
Show inline comments
 
@@ -244,27 +244,27 @@ void Window::HandleButtonClick(byte widg
 
	this->flags4 |= WF_TIMEOUT_BEGIN;
 
	this->SetWidgetDirty(widget);
 
}
 

	
 
static void StartWindowDrag(Window *w);
 
static void StartWindowSizing(Window *w, bool to_left);
 

	
 
/**
 
 * Dispatch left mouse-button (possibly double) click in window.
 
 * @param w Window to dispatch event in
 
 * @param x X coordinate of the click
 
 * @param y Y coordinate of the click
 
 * @param double_click Was it a double click?
 
 * @param click_count Number of fast consecutive clicks at same position
 
 */
 
static void DispatchLeftClickEvent(Window *w, int x, int y, bool double_click)
 
static void DispatchLeftClickEvent(Window *w, int x, int y, int click_count)
 
{
 
	const NWidgetCore *nw = w->nested_root->GetWidgetFromPos(x, y);
 
	WidgetType widget_type = (nw != NULL) ? nw->type : WWT_EMPTY;
 

	
 
	bool focused_widget_changed = false;
 
	/* If clicked on a window that previously did dot have focus */
 
	if (_focused_window != w &&                 // We already have focus, right?
 
			(w->desc_flags & WDF_NO_FOCUS) == 0 &&  // Don't lose focus to toolbars
 
			widget_type != WWT_CLOSEBOX) {          // Don't change focused window if 'X' (close button) was clicked
 
		focused_widget_changed = true;
 
		if (_focused_window != NULL) {
 
			_focused_window->OnFocusLost();
 
@@ -274,114 +274,106 @@ static void DispatchLeftClickEvent(Windo
 
		}
 
		SetFocusedWindow(w);
 
		w->OnFocus();
 
	}
 

	
 
	if (nw == NULL) return; // exit if clicked outside of widgets
 

	
 
	/* don't allow any interaction if the button has been disabled */
 
	if (nw->IsDisabled()) return;
 

	
 
	int widget_index = nw->index; ///< Index of the widget
 

	
 
	/* Process special buttons (only single clicks) */
 
	if (!double_click) {
 
		/* Clicked on a widget that is not disabled.
 
		 * So unless the clicked widget is the caption bar, change focus to this widget */
 
		if (widget_type != WWT_CAPTION) {
 
			/* Close the OSK window if a edit box loses focus */
 
			if (w->nested_focus != NULL &&  w->nested_focus->type == WWT_EDITBOX && w->nested_focus != nw && w->window_class != WC_OSK) {
 
				DeleteWindowById(WC_OSK, 0);
 
			}
 

	
 
			/* focused_widget_changed is 'now' only true if the window this widget
 
			 * is in gained focus. In that case it must remain true, also if the
 
			 * local widget focus did not change. As such it's the logical-or of
 
			 * both changed states.
 
			 *
 
			 * If this is not preserved, then the OSK window would be opened when
 
			 * a user has the edit box focused and then click on another window and
 
			 * then back again on the edit box (to type some text).
 
			 */
 
			focused_widget_changed |= w->SetFocusedWidget(widget_index);
 
	/* Clicked on a widget that is not disabled.
 
	 * So unless the clicked widget is the caption bar, change focus to this widget */
 
	if (widget_type != WWT_CAPTION) {
 
		/* Close the OSK window if a edit box loses focus */
 
		if (w->nested_focus != NULL &&  w->nested_focus->type == WWT_EDITBOX && w->nested_focus != nw && w->window_class != WC_OSK) {
 
			DeleteWindowById(WC_OSK, 0);
 
		}
 

	
 
		/* Close any child drop down menus. If the button pressed was the drop down
 
		 * list's own button, then we should not process the click any further. */
 
		if (HideDropDownMenu(w) == widget_index && widget_index >= 0) return;
 

	
 
		switch (widget_type) {
 
			/* special widget handling for buttons*/
 
			case WWT_PANEL   | WWB_PUSHBUTTON: // WWT_PUSHBTN
 
			case WWT_IMGBTN  | WWB_PUSHBUTTON: // WWT_PUSHIMGBTN
 
			case WWT_TEXTBTN | WWB_PUSHBUTTON: // WWT_PUSHTXTBTN
 
				w->HandleButtonClick(widget_index);
 
				break;
 
		/* focused_widget_changed is 'now' only true if the window this widget
 
		 * is in gained focus. In that case it must remain true, also if the
 
		 * local widget focus did not change. As such it's the logical-or of
 
		 * both changed states.
 
		 *
 
		 * If this is not preserved, then the OSK window would be opened when
 
		 * a user has the edit box focused and then click on another window and
 
		 * then back again on the edit box (to type some text).
 
		 */
 
		focused_widget_changed |= w->SetFocusedWidget(widget_index);
 
	}
 

	
 
			case WWT_SCROLLBAR:
 
			case WWT_SCROLL2BAR:
 
			case WWT_HSCROLLBAR:
 
				ScrollbarClickHandler(w, nw, x, y);
 
				break;
 
	/* Close any child drop down menus. If the button pressed was the drop down
 
	 * list's own button, then we should not process the click any further. */
 
	if (HideDropDownMenu(w) == widget_index && widget_index >= 0) return;
 

	
 
			case WWT_EDITBOX:
 
				if (!focused_widget_changed) { // Only open the OSK window if clicking on an already focused edit box
 
					/* Open the OSK window if clicked on an edit box */
 
					QueryStringBaseWindow *qs = dynamic_cast<QueryStringBaseWindow *>(w);
 
					if (qs != NULL) {
 
						qs->OnOpenOSKWindow(widget_index);
 
					}
 
				}
 
				break;
 
	switch (widget_type) {
 
		/* special widget handling for buttons*/
 
		case WWT_PANEL   | WWB_PUSHBUTTON: // WWT_PUSHBTN
 
		case WWT_IMGBTN  | WWB_PUSHBUTTON: // WWT_PUSHIMGBTN
 
		case WWT_TEXTBTN | WWB_PUSHBUTTON: // WWT_PUSHTXTBTN
 
			w->HandleButtonClick(widget_index);
 
			break;
 

	
 
		case WWT_SCROLLBAR:
 
		case WWT_SCROLL2BAR:
 
		case WWT_HSCROLLBAR:
 
			ScrollbarClickHandler(w, nw, x, y);
 
			break;
 

	
 
			case WWT_CLOSEBOX: // 'X'
 
				delete w;
 
				return;
 
		case WWT_EDITBOX:
 
			if (!focused_widget_changed) { // Only open the OSK window if clicking on an already focused edit box
 
				/* Open the OSK window if clicked on an edit box */
 
				QueryStringBaseWindow *qs = dynamic_cast<QueryStringBaseWindow *>(w);
 
				if (qs != NULL) {
 
					qs->OnOpenOSKWindow(widget_index);
 
				}
 
			}
 
			break;
 

	
 
			case WWT_CAPTION: // 'Title bar'
 
				StartWindowDrag(w);
 
				return;
 
		case WWT_CLOSEBOX: // 'X'
 
			delete w;
 
			return;
 

	
 
		case WWT_CAPTION: // 'Title bar'
 
			StartWindowDrag(w);
 
			return;
 

	
 
			case WWT_RESIZEBOX:
 
				/* When the resize widget is on the left size of the window
 
				 * we assume that that button is used to resize to the left. */
 
				StartWindowSizing(w, (int)nw->pos_x < (w->width / 2));
 
				nw->SetDirty(w);
 
				return;
 
		case WWT_RESIZEBOX:
 
			/* When the resize widget is on the left size of the window
 
			 * we assume that that button is used to resize to the left. */
 
			StartWindowSizing(w, (int)nw->pos_x < (w->width / 2));
 
			nw->SetDirty(w);
 
			return;
 

	
 
			case WWT_SHADEBOX:
 
				nw->SetDirty(w);
 
				w->SetShaded(!w->IsShaded());
 
				return;
 
		case WWT_SHADEBOX:
 
			nw->SetDirty(w);
 
			w->SetShaded(!w->IsShaded());
 
			return;
 

	
 
			case WWT_STICKYBOX:
 
				w->flags4 ^= WF_STICKY;
 
				nw->SetDirty(w);
 
				return;
 
		case WWT_STICKYBOX:
 
			w->flags4 ^= WF_STICKY;
 
			nw->SetDirty(w);
 
			return;
 

	
 
			default:
 
				break;
 
		}
 
		default:
 
			break;
 
	}
 

	
 
	/* Widget has no index, so the window is not interested in it. */
 
	if (widget_index < 0) return;
 

	
 
	Point pt = { x, y };
 

	
 
	if (double_click) {
 
		w->OnDoubleClick(pt, widget_index);
 
	} else {
 
		w->OnClick(pt, widget_index);
 
	}
 
	w->OnClick(pt, widget_index, click_count);
 
}
 

	
 
/**
 
 * Dispatch right mouse-button click in window.
 
 * @param w Window to dispatch event in
 
 * @param x X coordinate of the click
 
 * @param y Y coordinate of the click
 
 */
 
static void DispatchRightClickEvent(Window *w, int x, int y)
 
{
 
	NWidgetCore *wid = w->nested_root->GetWidgetFromPos(x, y);
 

	
 
@@ -2118,29 +2110,25 @@ static void MouseLoop(MouseClick click, 
 
					_scrolling_viewport = true;
 
					_cursor.fix_at = true;
 
				}
 
				break;
 

	
 
			default:
 
				break;
 
		}
 
	} else {
 
		switch (click) {
 
			case MC_LEFT:
 
			case MC_DOUBLE_LEFT:
 
				DispatchLeftClickEvent(w, x - w->left, y - w->top, false);
 
				if (click == MC_DOUBLE_LEFT && _mouseover_last_w != NULL) {
 
					/* Issue the doubleclick, if the window was not removed */
 
					DispatchLeftClickEvent(w, x - w->left, y - w->top, true);
 
				}
 
				DispatchLeftClickEvent(w, x - w->left, y - w->top, click == MC_DOUBLE_LEFT ? 2 : 1);
 
				break;
 

	
 
			default:
 
				if (!scrollwheel_scrolling || w == NULL || w->window_class != WC_SMALLMAP) break;
 
				/* We try to use the scrollwheel to scroll since we didn't touch any of the buttons.
 
				 * Simulate a right button click so we can get started. */
 

	
 
				/* fallthough */
 
			case MC_RIGHT: DispatchRightClickEvent(w, x - w->left, y - w->top); break;
 
		}
 
	}
 
}
src/window_gui.h
Show inline comments
 
@@ -629,33 +629,27 @@ public:
 
	/**
 
	 * The state of the control key has changed
 
	 * @return #ES_HANDLED if the change has been handled and no other
 
	 *         window should receive the event.
 
	 */
 
	virtual EventState OnCTRLStateChange() { return ES_NOT_HANDLED; }
 

	
 

	
 
	/**
 
	 * A click with the left mouse button has been made on the window.
 
	 * @param pt     the point inside the window that has been clicked.
 
	 * @param widget the clicked widget.
 
	 * @param click_count Number of fast consecutive clicks at same position
 
	 */
 
	virtual void OnClick(Point pt, int widget) {}
 

	
 
	/**
 
	 * A double click with the left mouse button has been made on the window.
 
	 * @param pt     the point inside the window that has been clicked.
 
	 * @param widget the clicked widget.
 
	 */
 
	virtual void OnDoubleClick(Point pt, int widget) {}
 
	virtual void OnClick(Point pt, int widget, int click_count) {}
 

	
 
	/**
 
	 * A click with the right mouse button has been made on the window.
 
	 * @param pt     the point inside the window that has been clicked.
 
	 * @param widget the clicked widget.
 
	 */
 
	virtual void OnRightClick(Point pt, int widget) {}
 

	
 
	/**
 
	 * A dragged 'object' has been released.
 
	 * @param pt     the point inside the window where the release took place.
 
	 * @param widget the widget where the release took place.
0 comments (0 inline, 0 general)