Files @ r14895:fb237f7e7f5b
Branch filter:

Location: cpp/openttd-patchpack/source/src/waypoint_gui.cpp - annotation

peter1138
(svn r19502) -Codechange: During NewGRF loading, store rail type labels in temporary data and process after loading has finished. This avoids deactivated rail vehicles being reactivated if the climate property is set after the rail type property.
r9953:8c469baed535
r9953:8c469baed535
r12768:980ae0491352
r12768:980ae0491352
r12768:980ae0491352
r12768:980ae0491352
r12768:980ae0491352
r12768:980ae0491352
r12768:980ae0491352
r9953:8c469baed535
r9953:8c469baed535
r9953:8c469baed535
r9953:8c469baed535
r9953:8c469baed535
r9953:8c469baed535
r9953:8c469baed535
r9953:8c469baed535
r9953:8c469baed535
r9953:8c469baed535
r11058:03ccd99b7533
r10120:b4e83b1335af
r12465:c1b760a56db7
r9953:8c469baed535
r9953:8c469baed535
r9953:8c469baed535
r11487:9f589d1f7929
r11487:9f589d1f7929
r11487:9f589d1f7929
r12575:7a6d47e4fe35
r11487:9f589d1f7929
r11487:9f589d1f7929
r12456:451e8e6b0dc4
r11487:9f589d1f7929
r11487:9f589d1f7929
r9953:8c469baed535
r9953:8c469baed535
r12456:451e8e6b0dc4
r9953:8c469baed535
r9953:8c469baed535
r9953:8c469baed535
r12575:7a6d47e4fe35
r9953:8c469baed535
r12575:7a6d47e4fe35
r12462:a7cb564c6c56
r12456:451e8e6b0dc4
r11235:a53af700581a
r9953:8c469baed535
r12575:7a6d47e4fe35
r12580:d40855379543
r13062:680961bd134a
r13062:680961bd134a
r13062:680961bd134a
r12580:d40855379543
r12575:7a6d47e4fe35
r9953:8c469baed535
r12575:7a6d47e4fe35
r13062:680961bd134a
r12575:7a6d47e4fe35
r12456:451e8e6b0dc4
r12575:7a6d47e4fe35
r9953:8c469baed535
r9953:8c469baed535
r10120:b4e83b1335af
r10120:b4e83b1335af
r12938:e34cdaba54c1
r10120:b4e83b1335af
r10120:b4e83b1335af
r12575:7a6d47e4fe35
r12575:7a6d47e4fe35
r12575:7a6d47e4fe35
r12575:7a6d47e4fe35
r12575:7a6d47e4fe35
r9953:8c469baed535
r9953:8c469baed535
r9953:8c469baed535
r9953:8c469baed535
r9953:8c469baed535
r14399:3f819c0da60a
r9953:8c469baed535
r9953:8c469baed535
r11363:6906c490a00e
r9953:8c469baed535
r9953:8c469baed535
r9953:8c469baed535
r9953:8c469baed535
r9953:8c469baed535
r9953:8c469baed535
r9953:8c469baed535
r11363:6906c490a00e
r9953:8c469baed535
r12528:f4d1c0776108
r9953:8c469baed535
r9953:8c469baed535
r12456:451e8e6b0dc4
r12456:451e8e6b0dc4
r9953:8c469baed535
r9953:8c469baed535
r9953:8c469baed535
r9953:8c469baed535
r9986:70a888f9bda9
r9986:70a888f9bda9
r12575:7a6d47e4fe35
r12575:7a6d47e4fe35
r12575:7a6d47e4fe35
r12575:7a6d47e4fe35
r12575:7a6d47e4fe35
r9986:70a888f9bda9
r9986:70a888f9bda9
r11370:6df9331ca497
r9986:70a888f9bda9
r9986:70a888f9bda9
r13745:49505a0400d8
r13745:49505a0400d8
r13745:49505a0400d8
r13745:49505a0400d8
r13745:49505a0400d8
r13745:49505a0400d8
r13745:49505a0400d8
r13745:49505a0400d8
r9953:8c469baed535
r9953:8c469baed535
r10148:ec65442a5187
r10148:ec65442a5187
r12622:202e83a6cee7
r9953:8c469baed535
r9953:8c469baed535
r9953:8c469baed535
r9953:8c469baed535
r11487:9f589d1f7929
r11487:9f589d1f7929
r13742:180ad925befc
r13591:48a163a06543
r14035:4f06488d5a62
r13742:180ad925befc
r11487:9f589d1f7929
r13745:49505a0400d8
r13745:49505a0400d8
r13745:49505a0400d8
r11487:9f589d1f7929
r11487:9f589d1f7929
r11487:9f589d1f7929
r13745:49505a0400d8
r13745:49505a0400d8
r12622:202e83a6cee7
r13745:49505a0400d8
r11487:9f589d1f7929
r11487:9f589d1f7929
r11487:9f589d1f7929
r11368:058349c3a02c
r13786:6205ecbdf2fa
r9953:8c469baed535
r13739:747ed1f003e3
r13554:d1964ead02ee
r11368:058349c3a02c
r9953:8c469baed535
r9953:8c469baed535
r9953:8c469baed535
r9953:8c469baed535
r9953:8c469baed535
/* $Id$ */

/*
 * This file is part of OpenTTD.
 * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
 * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
 */

/** @file waypoint_gui.cpp Handling of waypoints gui. */

#include "stdafx.h"
#include "window_gui.h"
#include "gui.h"
#include "textbuf_gui.h"
#include "vehicle_gui.h"
#include "viewport_func.h"
#include "strings_func.h"
#include "command_func.h"
#include "company_func.h"
#include "window_func.h"
#include "waypoint_base.h"

#include "table/strings.h"

/** Widget definitions for the waypoint window. */
enum WaypointWindowWidgets {
	WAYPVW_CAPTION,
	WAYPVW_VIEWPORT,
	WAYPVW_CENTERVIEW,
	WAYPVW_RENAME,
	WAYPVW_SHOW_VEHICLES,
};

struct WaypointWindow : Window {
private:
	VehicleType vt;
	Waypoint *wp;

public:
	WaypointWindow(const WindowDesc *desc, WindowNumber window_number) : Window()
	{
		this->wp = Waypoint::Get(window_number);
		this->vt = (wp->string_id == STR_SV_STNAME_WAYPOINT) ? VEH_TRAIN : VEH_SHIP;

		if (this->wp->owner != OWNER_NONE) this->owner = this->wp->owner;

		this->CreateNestedTree(desc);
		if (this->vt == VEH_TRAIN) {
			this->GetWidget<NWidgetCore>(WAYPVW_SHOW_VEHICLES)->SetDataTip(STR_TRAIN, STR_STATION_VIEW_SCHEDULED_TRAINS_TOOLTIP);
			this->GetWidget<NWidgetCore>(WAYPVW_CENTERVIEW)->tool_tip = STR_WAYPOINT_VIEW_CENTER_TOOLTIP;
			this->GetWidget<NWidgetCore>(WAYPVW_RENAME)->tool_tip = STR_WAYPOINT_VIEW_CHANGE_WAYPOINT_NAME;
		}
		this->FinishInitNested(desc, window_number);

		this->flags4 |= WF_DISABLE_VP_SCROLL;
		NWidgetViewport *nvp = this->GetWidget<NWidgetViewport>(WAYPVW_VIEWPORT);
		nvp->InitializeViewport(this, this->wp->xy, ZOOM_LVL_MIN);

		this->OnInvalidateData(0);
	}

	~WaypointWindow()
	{
		DeleteWindowById(GetWindowClassForVehicleType(this->vt), (this->window_number << 16) | (this->vt << 11) | VLW_WAYPOINT_LIST | this->wp->owner);
	}

	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, 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);
				ShowQueryString(STR_WAYPOINT_NAME, STR_EDIT_WAYPOINT_NAME, MAX_LENGTH_STATION_NAME_BYTES, MAX_LENGTH_STATION_NAME_PIXELS, this, CS_ALPHANUMERAL, QSF_ENABLE_DEFAULT);
				break;

			case WAYPVW_SHOW_VEHICLES: // show list of vehicles having this waypoint in their orders
				ShowVehicleListWindow((this->wp->owner == OWNER_NONE) ? _local_company : this->wp->owner, this->vt, this->wp);
				break;
		}
	}

	virtual void OnInvalidateData(int data)
	{
		/* You can only change your own waypoints */
		this->SetWidgetDisabledState(WAYPVW_RENAME, !this->wp->IsInUse() || (this->wp->owner != _local_company && this->wp->owner != OWNER_NONE));
		/* Disable the widget for waypoints with no use */
		this->SetWidgetDisabledState(WAYPVW_SHOW_VEHICLES, !this->wp->IsInUse());

		int x = TileX(this->wp->xy) * TILE_SIZE;
		int y = TileY(this->wp->xy) * TILE_SIZE;
		ScrollWindowTo(x, y, -1, this);
	}

	virtual void OnResize()
	{
		if (this->viewport != NULL) {
			NWidgetViewport *nvp = this->GetWidget<NWidgetViewport>(WAYPVW_VIEWPORT);
			nvp->UpdateViewportCoordinates(this);
		}
	}

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

		DoCommandP(0, this->window_number, 0, CMD_RENAME_WAYPOINT | CMD_MSG(STR_ERROR_CAN_T_CHANGE_WAYPOINT_NAME), NULL, str);
	}

};

static const NWidgetPart _nested_waypoint_view_widgets[] = {
	NWidget(NWID_HORIZONTAL),
		NWidget(WWT_CLOSEBOX, COLOUR_GREY),
		NWidget(WWT_CAPTION, COLOUR_GREY, WAYPVW_CAPTION), SetDataTip(STR_WAYPOINT_VIEW_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS),
		NWidget(WWT_SHADEBOX, COLOUR_GREY),
		NWidget(WWT_STICKYBOX, COLOUR_GREY),
	EndContainer(),
	NWidget(WWT_PANEL, COLOUR_GREY),
		NWidget(WWT_INSET, COLOUR_GREY), SetPadding(2, 2, 2, 2),
			NWidget(NWID_VIEWPORT, COLOUR_GREY, WAYPVW_VIEWPORT), SetMinimalSize(256, 88), SetPadding(1, 1, 1, 1), SetResize(1, 1),
		EndContainer(),
	EndContainer(),
	NWidget(NWID_HORIZONTAL),
		NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WAYPVW_CENTERVIEW), SetMinimalSize(100, 12), SetResize(1, 0), SetFill(1, 0), SetDataTip(STR_BUTTON_LOCATION, STR_BUOY_VIEW_CENTER_TOOLTIP),
		NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WAYPVW_RENAME), SetMinimalSize(100, 12), SetResize(1, 0), SetFill(1, 0), SetDataTip(STR_BUTTON_RENAME, STR_BUOY_VIEW_CHANGE_BUOY_NAME),
		NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WAYPVW_SHOW_VEHICLES), SetMinimalSize(15, 12), SetDataTip(STR_SHIP, STR_STATION_VIEW_SCHEDULED_SHIPS_TOOLTIP),
		NWidget(WWT_RESIZEBOX, COLOUR_GREY),
	EndContainer(),
};

static const WindowDesc _waypoint_view_desc(
	WDP_AUTO, 260, 118,
	WC_WAYPOINT_VIEW, WC_NONE,
	WDF_UNCLICK_BUTTONS,
	_nested_waypoint_view_widgets, lengthof(_nested_waypoint_view_widgets)
);

void ShowWaypointWindow(const Waypoint *wp)
{
	AllocateWindowDescFront<WaypointWindow>(&_waypoint_view_desc, wp->index);
}