Merge branch 'master' into jgrpp

# Conflicts:
#	.github/workflows/ci-build.yml
#	.github/workflows/release-linux.yml
#	.github/workflows/release-macos.yml
#	.github/workflows/release-windows.yml
#	.gitignore
#	COMPILING.md
#	src/company_gui.cpp
#	src/date_gui.cpp
#	src/engine.cpp
#	src/engine_func.h
#	src/fileio.cpp
#	src/linkgraph/linkgraph_gui.h
#	src/newgrf_debug_gui.cpp
#	src/newgrf_gui.cpp
#	src/order_gui.cpp
#	src/osk_gui.cpp
#	src/rail_gui.cpp
#	src/road_gui.cpp
#	src/script/api/script_event_types.hpp
#	src/sl/oldloader_sl.cpp
#	src/smallmap_gui.cpp
#	src/station_cmd.cpp
#	src/toolbar_gui.cpp
#	src/town_gui.cpp
#	src/transparency_gui.cpp
#	src/vehicle_gui.cpp
#	src/widget.cpp
#	src/widget_type.h
#	src/widgets/dropdown.cpp
#	src/widgets/dropdown_func.h
#	src/widgets/dropdown_type.h
#	src/widgets/group_widget.h
#	src/widgets/vehicle_widget.h
#	src/window.cpp
#	src/window_gui.h
#	src/window_type.h
wip-string
Jonathan G Rennison 4 months ago
commit 42c8f50551

@ -112,7 +112,7 @@ jobs:
name: Linux (${{ matrix.name }}) name: Linux (${{ matrix.name }})
runs-on: ubuntu-20.04 runs-on: ubuntu-latest
env: env:
CC: ${{ matrix.compiler }} CC: ${{ matrix.compiler }}
CXX: ${{ matrix.cxxcompiler }} CXX: ${{ matrix.cxxcompiler }}
@ -128,6 +128,14 @@ jobs:
with: with:
ref: ${{ github.event.inputs.ref }} ref: ${{ github.event.inputs.ref }}
- name: Setup vcpkg caching
uses: actions/github-script@v6
with:
script: |
core.exportVariable('ACTIONS_CACHE_URL', process.env.ACTIONS_CACHE_URL || '');
core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || '');
core.exportVariable('VCPKG_BINARY_SOURCES', 'clear;x-gha,readwrite')
- name: Install dependencies - name: Install dependencies
run: | run: |
echo "::group::Update apt" echo "::group::Update apt"
@ -147,6 +155,16 @@ jobs:
${{ matrix.libraries }} \ ${{ matrix.libraries }} \
zlib1g-dev \ zlib1g-dev \
# EOF # EOF
echo "::group::Install vcpkg dependencies"
# Disable vcpkg integration, as we mostly use system libraries.
mv vcpkg.json vcpkg-disabled.json
# We only use breakpad from vcpkg, as its CMake files
# are a bit special. So the Ubuntu's variant doesn't work.
#vcpkg install breakpad
echo "::endgroup::" echo "::endgroup::"
env: env:
DEBIAN_FRONTEND: noninteractive DEBIAN_FRONTEND: noninteractive
@ -185,10 +203,15 @@ jobs:
- name: Test - name: Test
run: | run: |
cd build (
ctest -j $(nproc) --timeout 120 cd build
ctest -j $(nproc) --timeout 120
)
# Re-enable vcpkg.
mv vcpkg-disabled.json vcpkg.json
# Check no tracked files have been modified # Check no tracked files have been modified.
git diff --exit-code git diff --exit-code
macos: macos:
@ -216,38 +239,13 @@ jobs:
with: with:
ref: ${{ github.event.inputs.ref }} ref: ${{ github.event.inputs.ref }}
- name: Install dependencies - name: Setup vcpkg caching
env: uses: actions/github-script@v6
HOMEBREW_NO_AUTO_UPDATE: 1
HOMEBREW_NO_INSTALL_CLEANUP: 1
run: |
brew install \
pkg-config \
# EOF
- name: Prepare cache key
id: key
run: |
echo "image=$ImageOS-$ImageVersion" >> $GITHUB_OUTPUT
- name: Enable vcpkg cache
uses: actions/cache@v3
with: with:
path: /usr/local/share/vcpkg/installed script: |
key: ${{ steps.key.outputs.image }}-vcpkg-${{ matrix.arch }}-1 # Increase the number whenever dependencies are modified core.exportVariable('ACTIONS_CACHE_URL', process.env.ACTIONS_CACHE_URL || '');
restore-keys: | core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || '');
${{ steps.key.outputs.image }}-vcpkg-${{ matrix.arch }} core.exportVariable('VCPKG_BINARY_SOURCES', 'clear;x-gha,readwrite')
- name: Prepare vcpkg
run: |
vcpkg install --triplet=${{ matrix.arch }}-osx \
curl \
liblzma \
libpng \
lzo \
zlib \
zstd \
# EOF
- name: Install OpenGFX - name: Install OpenGFX
run: | run: |
@ -312,33 +310,13 @@ jobs:
with: with:
ref: ${{ github.event.inputs.ref }} ref: ${{ github.event.inputs.ref }}
- name: Prepare cache key - name: Setup vcpkg caching
id: key uses: actions/github-script@v6
shell: powershell
run: |
# Work around caching failure with GNU tar
New-Item -Type Junction -Path vcpkg -Target c:\vcpkg
Write-Output "image=$env:ImageOS-$env:ImageVersion" >> $env:GITHUB_OUTPUT
- name: Enable vcpkg cache
uses: actions/cache@v3
with: with:
path: vcpkg/installed script: |
key: ${{ steps.key.outputs.image }}-vcpkg-${{ matrix.arch }}-1 # Increase the number whenever dependencies are modified core.exportVariable('ACTIONS_CACHE_URL', process.env.ACTIONS_CACHE_URL || '');
restore-keys: | core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || '');
${{ steps.key.outputs.image }}-vcpkg-${{ matrix.arch }} core.exportVariable('VCPKG_BINARY_SOURCES', 'clear;x-gha,readwrite')
- name: Prepare vcpkg
shell: bash
run: |
vcpkg install --triplet=${{ matrix.arch }}-windows-static \
liblzma \
libpng \
lzo \
zlib \
zstd \
# EOF
- name: Install OpenGFX - name: Install OpenGFX
shell: bash shell: bash

@ -12,16 +12,11 @@ jobs:
linux: linux:
name: Linux (Generic) name: Linux (Generic)
runs-on: ubuntu-20.04 runs-on: ubuntu-latest
container: container:
# manylinux2014 is based on CentOS 7, but already has a lot of things # manylinux2014 is based on CentOS 7, but already has a lot of things
# installed and preconfigured. It makes it easier to build OpenTTD. # installed and preconfigured. It makes it easier to build OpenTTD.
image: quay.io/pypa/manylinux2014_x86_64 image: quay.io/pypa/manylinux2014_x86_64
volumes:
- /usr/local/share/vcpkg:/vcpkg
env:
ImageOS: ${{ env.ImageOS }}
ImageVersion: ${{ env.ImageVersion }}
steps: steps:
- name: Download source - name: Download source
@ -33,18 +28,37 @@ jobs:
run: | run: |
tar -xf source.tar.gz --strip-components=1 tar -xf source.tar.gz --strip-components=1
- name: Prepare cache key # curl is too old for most of the tools to work properly. For example,
id: key # rust-toolchain doesn't work properly, neither vcpkg caching.
# The easier solution here is to upgrade curl.
- name: Update curl
run: | run: |
echo "image=$ImageOS-$ImageVersion" >> $GITHUB_OUTPUT yum install -y \
openssl-devel \
# EOF
mkdir /curl
cd /curl
curl -o curl-7.81.0.zip https://curl.se/download/curl-7.81.0.zip
unzip curl-7.81.0.zip
cd curl-7.81.0
./configure --with-ssl --with-zlib --prefix=/usr --libdir=/usr/lib64
make -j $(nproc)
make install
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable
- name: Enable vcpkg cache - name: Enable Rust cache
uses: actions/cache@v3 uses: Swatinem/rust-cache@v2
- name: Setup vcpkg caching
uses: actions/github-script@v6
with: with:
path: /vcpkg/installed script: |
key: ${{ steps.key.outputs.image }}-vcpkg-release-1 # Increase the number whenever dependencies are modified core.exportVariable('ACTIONS_CACHE_URL', process.env.ACTIONS_CACHE_URL || '');
restore-keys: | core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || '');
${{ steps.key.outputs.image }}-vcpkg-release core.exportVariable('VCPKG_BINARY_SOURCES', 'clear;x-gha,readwrite')
- name: Install dependencies - name: Install dependencies
run: | run: |
@ -84,6 +98,14 @@ jobs:
cmake --build . -j $(nproc) cmake --build . -j $(nproc)
cmake --install . cmake --install .
) )
# The container we use is old enough, that it doesn't know SHF_COMPRESSED.
# But, breakpad needs this symbol to exist. So we patch it in our system
# libraries.
(
cd /
patch -p1 < ${GITHUB_WORKSPACE}/os/linux/shf-compressed.patch
)
echo "::endgroup::" echo "::endgroup::"
echo "::group::Install audio drivers" echo "::group::Install audio drivers"
@ -100,29 +122,22 @@ jobs:
# We use vcpkg for our dependencies, to get more up-to-date version. # We use vcpkg for our dependencies, to get more up-to-date version.
echo "::group::Install vcpkg and dependencies" echo "::group::Install vcpkg and dependencies"
# Make Python3 available for other packages. git clone https://github.com/microsoft/vcpkg /vcpkg
/vcpkg/vcpkg install python3
ln -sf /vcpkg/installed/x64-linux/tools/python3/python3.[0-9][0-9] /usr/bin/python3 (
cd /vcpkg
# SDL2 needs dbus, but dbus default install comes with libsystemd ./bootstrap-vcpkg.sh -disableMetrics
# and some of libsystemd deps fail to build on our quite old linux. )
# So just install basic dbus without any extra deps.
/vcpkg/vcpkg install dbus[core] # Make Python3 available for other packages. This needs to be done
# first, as otherwise dependencies fail to build because Python3 is
# Now we can install OpenTTD dependencies # not available.
/vcpkg/vcpkg install \ (
curl[http2] \ cd /
fontconfig \
freetype \ /vcpkg/vcpkg install python3
harfbuzz \ ln -sf /vcpkg/installed/x64-linux/tools/python3/python3.[0-9][0-9] /usr/bin/python3
icu \ )
liblzma \
libpng \
lzo \
sdl2 \
zlib \
zstd \
# EOF
echo "::endgroup::" echo "::endgroup::"
- name: Install GCC problem matcher - name: Install GCC problem matcher

@ -12,7 +12,7 @@ jobs:
macos: macos:
name: MacOS name: MacOS
runs-on: macos-12 runs-on: macos-latest
env: env:
MACOSX_DEPLOYMENT_TARGET: 10.13 MACOSX_DEPLOYMENT_TARGET: 10.13
@ -26,6 +26,20 @@ jobs:
run: | run: |
tar -xf source.tar.gz --strip-components=1 tar -xf source.tar.gz --strip-components=1
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable
- name: Enable Rust cache
uses: Swatinem/rust-cache@v2
- name: Setup vcpkg caching
uses: actions/github-script@v6
with:
script: |
core.exportVariable('ACTIONS_CACHE_URL', process.env.ACTIONS_CACHE_URL || '');
core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || '');
core.exportVariable('VCPKG_BINARY_SOURCES', 'clear;x-gha,readwrite')
- name: Install dependencies - name: Install dependencies
env: env:
HOMEBREW_NO_AUTO_UPDATE: 1 HOMEBREW_NO_AUTO_UPDATE: 1
@ -33,38 +47,6 @@ jobs:
run: | run: |
brew install \ brew install \
pandoc \ pandoc \
pkg-config \
# EOF
- name: Prepare cache key
id: key
run: |
echo "image=$ImageOS-$ImageVersion" >> $GITHUB_OUTPUT
- name: Enable vcpkg cache
uses: actions/cache@v3
with:
path: /usr/local/share/vcpkg/installed
key: ${{ steps.key.outputs.image }}-vcpkg-release-1 # Increase the number whenever dependencies are modified
restore-keys: |
${{ steps.key.outputs.image }}-vcpkg-release
${{ steps.key.outputs.image }}-vcpkg-x64
- name: Prepare vcpkg
run: |
vcpkg install \
curl:x64-osx \
curl:arm64-osx \
liblzma:x64-osx \
liblzma:arm64-osx \
libpng:x64-osx \
libpng:arm64-osx \
lzo:x64-osx \
lzo:arm64-osx \
zlib:x64-osx \
zlib:arm64-osx \
zstd:x64-osx \
zstd:arm64-osx \
# EOF # EOF
- name: Install GCC problem matcher - name: Install GCC problem matcher

@ -39,45 +39,24 @@ jobs:
run: | run: |
tar -xf source.tar.gz --strip-components=1 tar -xf source.tar.gz --strip-components=1
- name: Install dependencies - name: Install Rust toolchain
shell: bash uses: dtolnay/rust-toolchain@stable
run: |
choco install pandoc
- name: Prepare cache key - name: Enable Rust cache
id: key uses: Swatinem/rust-cache@v2
shell: powershell
run: |
# Work around caching failure with GNU tar
New-Item -Type Junction -Path vcpkg -Target c:\vcpkg
Write-Output "image=$env:ImageOS-$env:ImageVersion" >> $env:GITHUB_OUTPUT - name: Setup vcpkg caching
uses: actions/github-script@v6
- name: Enable vcpkg cache
uses: actions/cache@v3
with: with:
path: vcpkg/installed script: |
key: ${{ steps.key.outputs.image }}-vcpkg-${{ matrix.arch }}-1 # Increase the number whenever dependencies are modified core.exportVariable('ACTIONS_CACHE_URL', process.env.ACTIONS_CACHE_URL || '');
restore-keys: | core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || '');
${{ steps.key.outputs.image }}-vcpkg-${{ matrix.arch }} core.exportVariable('VCPKG_BINARY_SOURCES', 'clear;x-gha,readwrite')
- name: Prepare vcpkg - name: Install dependencies
shell: bash shell: bash
run: | run: |
vcpkg install --triplet=${{ matrix.arch }}-windows-static \ choco install pandoc
liblzma \
libpng \
lzo \
zlib \
zstd \
# EOF
# arm64-windows-static is not (yet) supported for breakpad.
if [ "${{ matrix.arch }}" != "arm64" ]; then
vcpkg install --triplet=${{ matrix.arch }}-windows-static \
breakpad \
# EOF
fi
- name: Install MSVC problem matcher - name: Install MSVC problem matcher
uses: ammaraskar/msvc-problem-matcher@master uses: ammaraskar/msvc-problem-matcher@master

1
.gitignore vendored

@ -5,4 +5,5 @@ docs/aidocs/*
docs/gamedocs/* docs/gamedocs/*
docs/source/* docs/source/*
/out /out
/vcpkg_installed
*.tmp *.tmp

@ -59,8 +59,8 @@ the `static` versions, and OpenTTD currently needs the following dependencies:
To install both the x64 (64bit) and x86 (32bit) variants (though only one is necessary), you can use: To install both the x64 (64bit) and x86 (32bit) variants (though only one is necessary), you can use:
```ps ```ps
.\vcpkg install liblzma:x64-windows-static zstd:x64-windows-static libpng:x64-windows-static lzo:x64-windows-static zlib:x64-windows-static .\vcpkg install --triplet=x64-windows-static
.\vcpkg install liblzma:x86-windows-static zstd:x86-windows-static libpng:x86-windows-static lzo:x86-windows-static zlib:x86-windows-static .\vcpkg install --triplet=x86-windows-static
``` ```
You can open the folder (as a CMake project). CMake will be detected, and you can compile from there. You can open the folder (as a CMake project). CMake will be detected, and you can compile from there.

@ -0,0 +1,10 @@
--- a/usr/include/elf.h 2023-12-30 13:46:27.038645199 +0100
+++ b/usr/include/elf.h 2023-12-30 13:46:42.278641893 +0100
@@ -365,6 +365,7 @@
required */
#define SHF_GROUP (1 << 9) /* Section is member of a group. */
#define SHF_TLS (1 << 10) /* Section hold thread-local data. */
+#define SHF_COMPRESSED (1 << 11) /* Section with compressed data. */
#define SHF_MASKOS 0x0ff00000 /* OS-specific. */
#define SHF_MASKPROC 0xf0000000 /* Processor-specific */
#define SHF_ORDERED (1 << 30) /* Special ordering requirement

@ -1812,10 +1812,17 @@ function Regression::Vehicle()
print(" GetLastErrorString(): " + AIError.GetLastErrorString()); print(" GetLastErrorString(): " + AIError.GetLastErrorString());
local list = AIVehicleList(); local list = AIVehicleList();
local in_depot = AIVehicleList(AIVehicle.IsInDepot);
local IsType = function(vehicle_id, type) {
return AIVehicle.GetVehicleType(vehicle_id) == type;
}
local rv_list = AIVehicleList(IsType, AIVehicle.VT_ROAD);
print(""); print("");
print("--VehicleList--"); print("--VehicleList--");
print(" Count(): " + list.Count()); print(" Count(): " + list.Count());
print(" InDepot Count(): " + in_depot.Count());
print(" RoadVehicle Count(): " + rv_list.Count());
list.Valuate(AIVehicle.GetLocation); list.Valuate(AIVehicle.GetLocation);
print(" Location ListDump:"); print(" Location ListDump:");
for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) {

@ -9389,6 +9389,8 @@ ERROR: IsEnd() is invalid as Begin() is never called
--VehicleList-- --VehicleList--
Count(): 5 Count(): 5
InDepot Count(): 4
RoadVehicle Count(): 2
Location ListDump: Location ListDump:
13 => 33417 13 => 33417
12 => 33417 12 => 33417

@ -114,7 +114,7 @@ struct AIConfigWindow : public Window {
this->Window::Close(); this->Window::Close();
} }
void SetStringParameters(int widget) const override void SetStringParameters(WidgetID widget) const override
{ {
switch (widget) { switch (widget) {
case WID_AIC_NUMBER: case WID_AIC_NUMBER:
@ -127,7 +127,7 @@ struct AIConfigWindow : public Window {
} }
} }
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{ {
switch (widget) { switch (widget) {
case WID_AIC_DECREASE_NUMBER: case WID_AIC_DECREASE_NUMBER:
@ -164,7 +164,7 @@ struct AIConfigWindow : public Window {
return slot < max_slot; return slot < max_slot;
} }
void DrawWidget(const Rect &r, int widget) const override void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
switch (widget) { switch (widget) {
case WID_AIC_LIST: { case WID_AIC_LIST: {
@ -189,7 +189,7 @@ struct AIConfigWindow : public Window {
} }
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
if (widget >= WID_AIC_TEXTFILE && widget < WID_AIC_TEXTFILE + TFT_CONTENT_END) { if (widget >= WID_AIC_TEXTFILE && widget < WID_AIC_TEXTFILE + TFT_CONTENT_END) {
if (this->selected_slot == INVALID_COMPANY || AIConfig::GetConfig(this->selected_slot) == nullptr) return; if (this->selected_slot == INVALID_COMPANY || AIConfig::GetConfig(this->selected_slot) == nullptr) return;

@ -106,7 +106,7 @@ struct BuildAirToolbarWindow : Window {
} }
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
switch (widget) { switch (widget) {
case WID_AT_AIRPORT: case WID_AT_AIRPORT:
@ -283,7 +283,7 @@ public:
this->PickerWindowBase::Close(); this->PickerWindowBase::Close();
} }
void SetStringParameters(int widget) const override void SetStringParameters(WidgetID widget) const override
{ {
switch (widget) { switch (widget) {
case WID_AP_CLASS_DROPDOWN: case WID_AP_CLASS_DROPDOWN:
@ -308,7 +308,7 @@ public:
} }
} }
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{ {
switch (widget) { switch (widget) {
case WID_AP_CLASS_DROPDOWN: { case WID_AP_CLASS_DROPDOWN: {
@ -369,7 +369,7 @@ public:
} }
} }
void DrawWidget(const Rect &r, int widget) const override void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
switch (widget) { switch (widget) {
case WID_AP_AIRPORT_LIST: { case WID_AP_AIRPORT_LIST: {
@ -479,7 +479,7 @@ public:
} }
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
switch (widget) { switch (widget) {
case WID_AP_CLASS_DROPDOWN: case WID_AP_CLASS_DROPDOWN:
@ -554,7 +554,7 @@ public:
this->SelectOtherAirport(-1); this->SelectOtherAirport(-1);
} }
void OnDropdownSelect(int widget, int index) override void OnDropdownSelect(WidgetID widget, int index) override
{ {
if (widget == WID_AP_CLASS_DROPDOWN) { if (widget == WID_AP_CLASS_DROPDOWN) {
_selected_airport_class = (AirportClassID)index; _selected_airport_class = (AirportClassID)index;

@ -315,7 +315,7 @@ public:
this->sel_group = id_g; this->sel_group = id_g;
} }
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{ {
switch (widget) { switch (widget) {
case WID_RV_SORT_ASCENDING_DESCENDING: { case WID_RV_SORT_ASCENDING_DESCENDING: {
@ -402,7 +402,7 @@ public:
} }
} }
void SetStringParameters(int widget) const override void SetStringParameters(WidgetID widget) const override
{ {
switch (widget) { switch (widget) {
case WID_RV_CAPTION: case WID_RV_CAPTION:
@ -457,7 +457,7 @@ public:
} }
} }
void DrawWidget(const Rect &r, int widget) const override void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
switch (widget) { switch (widget) {
case WID_RV_SORT_ASCENDING_DESCENDING: case WID_RV_SORT_ASCENDING_DESCENDING:
@ -541,7 +541,7 @@ public:
} }
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
switch (widget) { switch (widget) {
case WID_RV_SORT_ASCENDING_DESCENDING: case WID_RV_SORT_ASCENDING_DESCENDING:
@ -656,7 +656,7 @@ public:
} }
} }
void OnDropdownSelect(int widget, int index) override void OnDropdownSelect(WidgetID widget, int index) override
{ {
switch (widget) { switch (widget) {
case WID_RV_SORT_DROPDOWN: case WID_RV_SORT_DROPDOWN:
@ -698,7 +698,7 @@ public:
} }
} }
bool OnTooltip([[maybe_unused]] Point pt, int widget, TooltipCloseCondition close_cond) override bool OnTooltip([[maybe_unused]] Point pt, WidgetID widget, TooltipCloseCondition close_cond) override
{ {
if (widget != WID_RV_TRAIN_WAGONREMOVE_TOGGLE) return false; if (widget != WID_RV_TRAIN_WAGONREMOVE_TOGGLE) return false;

@ -56,7 +56,7 @@ public:
ResizeWindow(this, _screen.width, _screen.height); ResizeWindow(this, _screen.width, _screen.height);
} }
void DrawWidget(const Rect &r, int) const override void DrawWidget(const Rect &r, WidgetID) const override
{ {
GfxFillRect(r.left, r.top, r.right, r.bottom, 4, FILLRECT_OPAQUE); GfxFillRect(r.left, r.top, r.right, r.bottom, 4, FILLRECT_OPAQUE);
GfxFillRect(r.left, r.top, r.right, r.bottom, 0, FILLRECT_CHECKER); GfxFillRect(r.left, r.top, r.right, r.bottom, 0, FILLRECT_CHECKER);
@ -96,7 +96,7 @@ public:
this->Window::Close(); this->Window::Close();
} }
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{ {
if (widget == WID_BEM_MESSAGE) { if (widget == WID_BEM_MESSAGE) {
*size = GetStringBoundingBox(STR_MISSING_GRAPHICS_ERROR); *size = GetStringBoundingBox(STR_MISSING_GRAPHICS_ERROR);
@ -105,14 +105,14 @@ public:
} }
} }
void DrawWidget(const Rect &r, int widget) const override void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
if (widget == WID_BEM_MESSAGE) { if (widget == WID_BEM_MESSAGE) {
DrawStringMultiLine(r.Shrink(WidgetDimensions::scaled.frametext), STR_MISSING_GRAPHICS_ERROR, TC_FROMSTRING, SA_CENTER); DrawStringMultiLine(r.Shrink(WidgetDimensions::scaled.frametext), STR_MISSING_GRAPHICS_ERROR, TC_FROMSTRING, SA_CENTER);
} }
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
if (widget == WID_BEM_QUIT) { if (widget == WID_BEM_QUIT) {
_exit_game = true; _exit_game = true;
@ -210,7 +210,7 @@ public:
this->Window::Close(); this->Window::Close();
} }
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{ {
/* We cache the button size. This is safe as no reinit can happen here. */ /* We cache the button size. This is safe as no reinit can happen here. */
if (this->button_size.width == 0) { if (this->button_size.width == 0) {
@ -233,14 +233,14 @@ public:
} }
} }
void DrawWidget(const Rect &r, int widget) const override void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
if (widget != WID_BAFD_QUESTION) return; if (widget != WID_BAFD_QUESTION) return;
DrawStringMultiLine(r.Shrink(WidgetDimensions::scaled.frametext), STR_MISSING_GRAPHICS_SET_MESSAGE, TC_FROMSTRING, SA_CENTER); DrawStringMultiLine(r.Shrink(WidgetDimensions::scaled.frametext), STR_MISSING_GRAPHICS_SET_MESSAGE, TC_FROMSTRING, SA_CENTER);
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
switch (widget) { switch (widget) {
case WID_BAFD_YES: case WID_BAFD_YES:

@ -189,7 +189,7 @@ public:
this->Window::Close(); this->Window::Close();
} }
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{ {
switch (widget) { switch (widget) {
case WID_BBS_DROPDOWN_ORDER: { case WID_BBS_DROPDOWN_ORDER: {
@ -236,7 +236,7 @@ public:
return corner; return corner;
} }
void DrawWidget(const Rect &r, int widget) const override void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
switch (widget) { switch (widget) {
case WID_BBS_DROPDOWN_ORDER: case WID_BBS_DROPDOWN_ORDER:
@ -270,7 +270,7 @@ public:
return ES_NOT_HANDLED; return ES_NOT_HANDLED;
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
switch (widget) { switch (widget) {
default: break; default: break;
@ -294,7 +294,7 @@ public:
} }
} }
void OnDropdownSelect(int widget, int index) override void OnDropdownSelect(WidgetID widget, int index) override
{ {
if (widget == WID_BBS_DROPDOWN_CRITERIA && this->bridges.SortType() != index) { if (widget == WID_BBS_DROPDOWN_CRITERIA && this->bridges.SortType() != index) {
this->bridges.SetSortType(index); this->bridges.SetSortType(index);

@ -1858,7 +1858,7 @@ struct BuildVehicleWindow : BuildVehicleWindowBase {
return list; return list;
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
switch (widget) { switch (widget) {
case WID_BV_SORT_ASCENDING_DESCENDING: case WID_BV_SORT_ASCENDING_DESCENDING:
@ -1987,7 +1987,7 @@ struct BuildVehicleWindow : BuildVehicleWindowBase {
this->eng_list.ForceRebuild(); this->eng_list.ForceRebuild();
} }
void SetStringParameters(int widget) const override void SetStringParameters(WidgetID widget) const override
{ {
switch (widget) { switch (widget) {
case WID_BV_CAPTION: case WID_BV_CAPTION:
@ -2022,7 +2022,7 @@ struct BuildVehicleWindow : BuildVehicleWindowBase {
} }
} }
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{ {
switch (widget) { switch (widget) {
case WID_BV_LIST: case WID_BV_LIST:
@ -2063,7 +2063,7 @@ struct BuildVehicleWindow : BuildVehicleWindowBase {
} }
} }
void DrawWidget(const Rect &r, int widget) const override void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
switch (widget) { switch (widget) {
case WID_BV_LIST: case WID_BV_LIST:
@ -2124,7 +2124,7 @@ struct BuildVehicleWindow : BuildVehicleWindowBase {
DoCommandP(0, this->rename_engine, 0, CMD_RENAME_ENGINE | CMD_MSG(STR_ERROR_CAN_T_RENAME_TRAIN_TYPE + this->vehicle_type), nullptr, str); DoCommandP(0, this->rename_engine, 0, CMD_RENAME_ENGINE | CMD_MSG(STR_ERROR_CAN_T_RENAME_TRAIN_TYPE + this->vehicle_type), nullptr, str);
} }
void OnDropdownSelect(int widget, int index) override void OnDropdownSelect(WidgetID widget, int index) override
{ {
switch (widget) { switch (widget) {
case WID_BV_SORT_DROPDOWN: case WID_BV_SORT_DROPDOWN:
@ -2154,7 +2154,7 @@ struct BuildVehicleWindow : BuildVehicleWindowBase {
this->vscroll->SetCapacityFromWidget(this, WID_BV_LIST); this->vscroll->SetCapacityFromWidget(this, WID_BV_LIST);
} }
void OnEditboxChanged(int wid) override void OnEditboxChanged(WidgetID wid) override
{ {
if (wid == WID_BV_FILTER) { if (wid == WID_BV_FILTER) {
this->string_filter.SetFilterTerm(this->vehicle_editbox.text.buf); this->string_filter.SetFilterTerm(this->vehicle_editbox.text.buf);
@ -2730,7 +2730,7 @@ struct BuildVehicleWindowTrainAdvanced final : BuildVehicleWindowBase {
} }
} }
bool OnClickList(Point pt, int widget, PanelState &state, bool column) bool OnClickList(Point pt, WidgetID widget, PanelState &state, bool column)
{ {
const uint i = state.vscroll->GetScrolledRowFromWidget(pt.y, this, widget); const uint i = state.vscroll->GetScrolledRowFromWidget(pt.y, this, widget);
const size_t num_items = state.eng_list.size(); const size_t num_items = state.eng_list.size();
@ -2757,7 +2757,7 @@ struct BuildVehicleWindowTrainAdvanced final : BuildVehicleWindowBase {
return false; return false;
} }
void OnClick(Point pt, int widget, int click_count) override void OnClick(Point pt, WidgetID widget, int click_count) override
{ {
if (widget == WID_BV_COMB_BUILD) { if (widget == WID_BV_COMB_BUILD) {
widget = !this->wagon_selected ? WID_BV_BUILD_LOCO : WID_BV_BUILD_WAGON; widget = !this->wagon_selected ? WID_BV_BUILD_LOCO : WID_BV_BUILD_WAGON;
@ -2918,7 +2918,7 @@ struct BuildVehicleWindowTrainAdvanced final : BuildVehicleWindowBase {
} }
} }
void SetStringParameters(int widget) const override void SetStringParameters(WidgetID widget) const override
{ {
switch (widget) { switch (widget) {
case WID_BV_CAPTION: { case WID_BV_CAPTION: {
@ -2994,7 +2994,7 @@ struct BuildVehicleWindowTrainAdvanced final : BuildVehicleWindowBase {
} }
} }
void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override
{ {
switch (widget) { switch (widget) {
case WID_BV_LIST_LOCO: { case WID_BV_LIST_LOCO: {
@ -3052,7 +3052,7 @@ struct BuildVehicleWindowTrainAdvanced final : BuildVehicleWindowBase {
} }
} }
void DrawWidget(const Rect &r, int widget) const override void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
switch (widget) { switch (widget) {
case WID_BV_LIST_LOCO: { case WID_BV_LIST_LOCO: {
@ -3146,7 +3146,7 @@ struct BuildVehicleWindowTrainAdvanced final : BuildVehicleWindowBase {
} }
} }
void OnDropdownSelect(int widget, int index) override void OnDropdownSelect(WidgetID widget, int index) override
{ {
switch (widget) { switch (widget) {
case WID_BV_SORT_DROPDOWN_LOCO: { case WID_BV_SORT_DROPDOWN_LOCO: {
@ -3199,7 +3199,7 @@ struct BuildVehicleWindowTrainAdvanced final : BuildVehicleWindowBase {
this->wagon.vscroll->SetCapacityFromWidget(this, WID_BV_LIST_WAGON); this->wagon.vscroll->SetCapacityFromWidget(this, WID_BV_LIST_WAGON);
} }
void OnEditboxChanged(int wid) override void OnEditboxChanged(WidgetID wid) override
{ {
if (wid == WID_BV_FILTER_LOCO) { if (wid == WID_BV_FILTER_LOCO) {
this->loco.string_filter.SetFilterTerm(this->loco.vehicle_editbox.text.buf); this->loco.string_filter.SetFilterTerm(this->loco.vehicle_editbox.text.buf);

@ -251,7 +251,7 @@ struct CheatWindow : Window {
this->icon = GetSpriteSize(SPR_COMPANY_ICON); this->icon = GetSpriteSize(SPR_COMPANY_ICON);
} }
void DrawWidget(const Rect &r, int widget) const override void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
if (widget != WID_C_PANEL) return; if (widget != WID_C_PANEL) return;
@ -326,7 +326,7 @@ struct CheatWindow : Window {
} }
} }
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{ {
if (widget != WID_C_PANEL) return; if (widget != WID_C_PANEL) return;
@ -379,7 +379,7 @@ struct CheatWindow : Window {
size->height = WidgetDimensions::scaled.framerect.Vertical() + this->line_height * lines; size->height = WidgetDimensions::scaled.framerect.Vertical() + this->line_height * lines;
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
if (widget != WID_C_PANEL) return; if (widget != WID_C_PANEL) return;

@ -344,7 +344,7 @@ struct CompanyFinancesWindow : Window {
this->owner = (Owner)this->window_number; this->owner = (Owner)this->window_number;
} }
void SetStringParameters(int widget) const override void SetStringParameters(WidgetID widget) const override
{ {
switch (widget) { switch (widget) {
case WID_CF_CAPTION: case WID_CF_CAPTION:
@ -385,7 +385,7 @@ struct CompanyFinancesWindow : Window {
} }
} }
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{ {
switch (widget) { switch (widget) {
case WID_CF_EXPS_CATEGORY: case WID_CF_EXPS_CATEGORY:
@ -412,7 +412,7 @@ struct CompanyFinancesWindow : Window {
} }
} }
void DrawWidget(const Rect &r, int widget) const override void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
switch (widget) { switch (widget) {
case WID_CF_EXPS_CATEGORY: case WID_CF_EXPS_CATEGORY:
@ -481,7 +481,7 @@ struct CompanyFinancesWindow : Window {
this->DrawWidgets(); this->DrawWidgets();
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
switch (widget) { switch (widget) {
case WID_CF_TOGGLE_SIZE: // toggle size case WID_CF_TOGGLE_SIZE: // toggle size
@ -550,7 +550,7 @@ struct CompanyFinancesWindow : Window {
} }
} }
bool OnTooltip(Point pt, int widget, TooltipCloseCondition close_cond) override bool OnTooltip(Point pt, WidgetID widget, TooltipCloseCondition close_cond) override
{ {
switch (widget) { switch (widget) {
case WID_CF_INCREASE_LOAN: { case WID_CF_INCREASE_LOAN: {
@ -796,7 +796,7 @@ public:
} }
} }
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{ {
switch (widget) { switch (widget) {
case WID_SCL_SPACER_DROPDOWN: { case WID_SCL_SPACER_DROPDOWN: {
@ -862,7 +862,7 @@ public:
this->DrawWidgets(); this->DrawWidgets();
} }
void SetStringParameters(int widget) const override void SetStringParameters(WidgetID widget) const override
{ {
switch (widget) { switch (widget) {
case WID_SCL_CAPTION: case WID_SCL_CAPTION:
@ -902,7 +902,7 @@ public:
} }
} }
void DrawWidget(const Rect &r, int widget) const override void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
if (widget != WID_SCL_MATRIX) return; if (widget != WID_SCL_MATRIX) return;
@ -974,7 +974,7 @@ public:
} }
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
switch (widget) { switch (widget) {
/* Livery Class buttons */ /* Livery Class buttons */
@ -1053,7 +1053,7 @@ public:
this->vscroll->SetCapacityFromWidget(this, WID_SCL_MATRIX); this->vscroll->SetCapacityFromWidget(this, WID_SCL_MATRIX);
} }
void OnDropdownSelect(int widget, int index) override void OnDropdownSelect(WidgetID widget, int index) override
{ {
bool local = (CompanyID)this->window_number == _local_company; bool local = (CompanyID)this->window_number == _local_company;
if (!local) return; if (!local) return;
@ -1392,7 +1392,7 @@ class SelectCompanyManagerFaceWindow : public Window
* @param val the value which will be displayed * @param val the value which will be displayed
* @param is_bool_widget is it a bool button * @param is_bool_widget is it a bool button
*/ */
void SetFaceStringParameters(byte widget_index, uint8 val, bool is_bool_widget) const void SetFaceStringParameters(WidgetID widget_index, uint8_t val, bool is_bool_widget) const
{ {
const NWidgetCore *nwi_widget = this->GetWidget<NWidgetCore>(widget_index); const NWidgetCore *nwi_widget = this->GetWidget<NWidgetCore>(widget_index);
if (nwi_widget->IsDisabled()) { if (nwi_widget->IsDisabled()) {
@ -1476,7 +1476,7 @@ public:
this->number_dim = number_dim; this->number_dim = number_dim;
} }
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{ {
switch (widget) { switch (widget) {
case WID_SCMF_HAS_MOUSTACHE_EARRING_TEXT: case WID_SCMF_HAS_MOUSTACHE_EARRING_TEXT:
@ -1579,7 +1579,7 @@ public:
this->DrawWidgets(); this->DrawWidgets();
} }
void SetStringParameters(int widget) const override void SetStringParameters(WidgetID widget) const override
{ {
switch (widget) { switch (widget) {
case WID_SCMF_HAS_MOUSTACHE_EARRING: case WID_SCMF_HAS_MOUSTACHE_EARRING:
@ -1640,7 +1640,7 @@ public:
} }
} }
void DrawWidget(const Rect &r, int widget) const override void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
switch (widget) { switch (widget) {
case WID_SCMF_FACE: case WID_SCMF_FACE:
@ -1649,7 +1649,7 @@ public:
} }
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
switch (widget) { switch (widget) {
/* Toggle size, advanced/simple face selection */ /* Toggle size, advanced/simple face selection */
@ -1895,7 +1895,7 @@ struct CompanyInfrastructureWindow : Window
return total; return total;
} }
void SetStringParameters(int widget) const override void SetStringParameters(WidgetID widget) const override
{ {
switch (widget) { switch (widget) {
case WID_CI_CAPTION: case WID_CI_CAPTION:
@ -1904,7 +1904,7 @@ struct CompanyInfrastructureWindow : Window
} }
} }
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{ {
const Company *c = Company::Get((CompanyID)this->window_number); const Company *c = Company::Get((CompanyID)this->window_number);
@ -2026,7 +2026,7 @@ struct CompanyInfrastructureWindow : Window
} }
} }
void DrawWidget(const Rect &r, int widget) const override void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
if (widget != WID_CI_DESC && widget != WID_CI_COUNT) return; if (widget != WID_CI_DESC && widget != WID_CI_COUNT) return;
@ -2384,7 +2384,7 @@ struct CompanyWindow : Window
this->DrawWidgets(); this->DrawWidgets();
} }
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{ {
switch (widget) { switch (widget) {
case WID_C_FACE: case WID_C_FACE:
@ -2523,7 +2523,7 @@ struct CompanyWindow : Window
} }
} }
void DrawWidget(const Rect &r, int widget) const override void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
const Company *c = Company::Get((CompanyID)this->window_number); const Company *c = Company::Get((CompanyID)this->window_number);
switch (widget) { switch (widget) {
@ -2576,7 +2576,7 @@ struct CompanyWindow : Window
} }
} }
void SetStringParameters(int widget) const override void SetStringParameters(WidgetID widget) const override
{ {
switch (widget) { switch (widget) {
case WID_C_CAPTION: case WID_C_CAPTION:
@ -2594,7 +2594,7 @@ struct CompanyWindow : Window
} }
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
switch (widget) { switch (widget) {
case WID_C_NEW_FACE: DoSelectCompanyManagerFace(this); break; case WID_C_NEW_FACE: DoSelectCompanyManagerFace(this); break;
@ -2823,7 +2823,7 @@ struct BuyCompanyWindow : Window {
this->Window::Close(); this->Window::Close();
} }
void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override
{ {
switch (widget) { switch (widget) {
case WID_BC_FACE: case WID_BC_FACE:
@ -2839,7 +2839,7 @@ struct BuyCompanyWindow : Window {
} }
} }
void SetStringParameters(int widget) const override void SetStringParameters(WidgetID widget) const override
{ {
switch (widget) { switch (widget) {
case WID_BC_CAPTION: case WID_BC_CAPTION:
@ -2849,7 +2849,7 @@ struct BuyCompanyWindow : Window {
} }
} }
void DrawWidget(const Rect &r, int widget) const override void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
switch (widget) { switch (widget) {
case WID_BC_FACE: { case WID_BC_FACE: {
@ -2868,7 +2868,7 @@ struct BuyCompanyWindow : Window {
} }
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
switch (widget) { switch (widget) {
case WID_BC_NO: case WID_BC_NO:

@ -281,7 +281,7 @@ struct IConsoleWindow : Window
return ES_HANDLED; return ES_HANDLED;
} }
void InsertTextString(int, const char *str, bool marked, const char *caret, const char *insert_location, const char *replacement_end) override void InsertTextString(WidgetID, const char *str, bool marked, const char *caret, const char *insert_location, const char *replacement_end) override
{ {
if (_iconsole_cmdline.InsertString(str, marked, caret, insert_location, replacement_end)) { if (_iconsole_cmdline.InsertString(str, marked, caret, insert_location, replacement_end)) {
IConsoleWindow::scroll = 0; IConsoleWindow::scroll = 0;

@ -71,7 +71,7 @@ struct SetDateWindow : Window {
* Helper function to construct the dropdown. * Helper function to construct the dropdown.
* @param widget the dropdown widget to create the dropdown for * @param widget the dropdown widget to create the dropdown for
*/ */
virtual void ShowDateDropDown(int widget) virtual void ShowDateDropDown(WidgetID widget)
{ {
int selected; int selected;
DropDownList list; DropDownList list;
@ -105,7 +105,7 @@ struct SetDateWindow : Window {
ShowDropDownList(this, std::move(list), selected, widget); ShowDropDownList(this, std::move(list), selected, widget);
} }
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{ {
Dimension d = {0, 0}; Dimension d = {0, 0};
switch (widget) { switch (widget) {
@ -134,7 +134,7 @@ struct SetDateWindow : Window {
*size = d; *size = d;
} }
void SetStringParameters(int widget) const override void SetStringParameters(WidgetID widget) const override
{ {
switch (widget) { switch (widget) {
case WID_SD_DAY: SetDParam(0, this->date.day - 1 + STR_DAY_NUMBER_1ST); break; case WID_SD_DAY: SetDParam(0, this->date.day - 1 + STR_DAY_NUMBER_1ST); break;
@ -143,7 +143,7 @@ struct SetDateWindow : Window {
} }
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
switch (widget) { switch (widget) {
case WID_SD_DAY: case WID_SD_DAY:
@ -160,7 +160,7 @@ struct SetDateWindow : Window {
} }
} }
void OnDropdownSelect(int widget, int index) override void OnDropdownSelect(WidgetID widget, int index) override
{ {
switch (widget) { switch (widget) {
case WID_SD_DAY: case WID_SD_DAY:
@ -195,7 +195,7 @@ struct SetMinutesWindow : SetDateWindow
* Helper function to construct the dropdown. * Helper function to construct the dropdown.
* @param widget the dropdown widget to create the dropdown for * @param widget the dropdown widget to create the dropdown for
*/ */
virtual void ShowDateDropDown(int widget) override virtual void ShowDateDropDown(WidgetID widget) override
{ {
int selected; int selected;
DropDownList list; DropDownList list;
@ -224,7 +224,7 @@ struct SetMinutesWindow : SetDateWindow
ShowDropDownList(this, std::move(list), selected, widget); ShowDropDownList(this, std::move(list), selected, widget);
} }
virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override virtual void UpdateWidgetSize(WidgetID widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override
{ {
Dimension d = {0, 0}; Dimension d = {0, 0};
switch (widget) { switch (widget) {
@ -250,7 +250,7 @@ struct SetMinutesWindow : SetDateWindow
*size = d; *size = d;
} }
virtual void SetStringParameters(int widget) const override virtual void SetStringParameters(WidgetID widget) const override
{ {
switch (widget) { switch (widget) {
case WID_SD_DAY: SetDParam(0, this->minutes.ClockMinute()); break; case WID_SD_DAY: SetDParam(0, this->minutes.ClockMinute()); break;
@ -258,7 +258,7 @@ struct SetMinutesWindow : SetDateWindow
} }
} }
virtual void OnClick(Point pt, int widget, int click_count) override virtual void OnClick(Point pt, WidgetID widget, int click_count) override
{ {
switch (widget) { switch (widget) {
case WID_SD_DAY: case WID_SD_DAY:
@ -276,7 +276,7 @@ struct SetMinutesWindow : SetDateWindow
} }
} }
virtual void OnDropdownSelect(int widget, int index) override virtual void OnDropdownSelect(WidgetID widget, int index) override
{ {
const TickMinutes now = _settings_time.NowInTickMinutes(); const TickMinutes now = _settings_time.NowInTickMinutes();
TickMinutes current = 0; TickMinutes current = 0;

@ -116,7 +116,7 @@ protected:
virtual void DrawDeparturesListItems(const Rect &r) const; virtual void DrawDeparturesListItems(const Rect &r) const;
void DeleteDeparturesList(DepartureList* list); void DeleteDeparturesList(DepartureList* list);
void ToggleCargoFilter(int widget, bool &flag) void ToggleCargoFilter(WidgetID widget, bool &flag)
{ {
flag = !flag; flag = !flag;
this->SetWidgetLoweredState(widget, flag); this->SetWidgetLoweredState(widget, flag);
@ -302,7 +302,7 @@ public:
} }
} }
virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override virtual void UpdateWidgetSize(WidgetID widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override
{ {
switch (widget) { switch (widget) {
case WID_DB_LIST: case WID_DB_LIST:
@ -313,7 +313,7 @@ public:
} }
} }
virtual void SetStringParameters(int widget) const override virtual void SetStringParameters(WidgetID widget) const override
{ {
if (widget == WID_DB_CAPTION) { if (widget == WID_DB_CAPTION) {
const Station *st = Station::Get(this->station); const Station *st = Station::Get(this->station);
@ -321,7 +321,7 @@ public:
} }
} }
virtual bool OnTooltip(Point pt, int widget, TooltipCloseCondition close_cond) override virtual bool OnTooltip(Point pt, WidgetID widget, TooltipCloseCondition close_cond) override
{ {
switch (widget) { switch (widget) {
case WID_DB_SHOW_TRAINS: case WID_DB_SHOW_TRAINS:
@ -337,7 +337,7 @@ public:
} }
} }
virtual void OnClick(Point pt, int widget, int click_count) override virtual void OnClick(Point pt, WidgetID widget, int click_count) override
{ {
switch (widget) { switch (widget) {
case WID_DB_SHOW_TRAINS: // Show trains to this station case WID_DB_SHOW_TRAINS: // Show trains to this station
@ -532,7 +532,7 @@ public:
this->DrawWidgets(); this->DrawWidgets();
} }
virtual void DrawWidget(const Rect &r, int widget) const override virtual void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
switch (widget) { switch (widget) {
case WID_DB_LIST: case WID_DB_LIST:

@ -260,7 +260,7 @@ struct DepotWindow : Window {
VehicleID vehicle_over; ///< Rail vehicle over which another one is dragged, \c INVALID_VEHICLE if none. VehicleID vehicle_over; ///< Rail vehicle over which another one is dragged, \c INVALID_VEHICLE if none.
VehicleType type; VehicleType type;
bool generate_list; bool generate_list;
int hovered_widget; ///< Index of the widget being hovered during drag/drop. -1 if no drag is in progress. WidgetID hovered_widget; ///< Index of the widget being hovered during drag/drop. -1 if no drag is in progress.
VehicleList vehicle_list; VehicleList vehicle_list;
VehicleList wagon_list; VehicleList wagon_list;
uint unitnumber_digits; uint unitnumber_digits;
@ -365,7 +365,7 @@ struct DepotWindow : Window {
} }
} }
void DrawWidget(const Rect &r, int widget) const override void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
if (widget != WID_D_MATRIX) return; if (widget != WID_D_MATRIX) return;
@ -423,7 +423,7 @@ struct DepotWindow : Window {
} }
} }
void SetStringParameters(int widget) const override void SetStringParameters(WidgetID widget) const override
{ {
if (widget != WID_D_CAPTION) return; if (widget != WID_D_CAPTION) return;
@ -655,7 +655,7 @@ struct DepotWindow : Window {
this->flag_size = maxdim(GetScaledSpriteSize(SPR_FLAG_VEH_STOPPED), GetScaledSpriteSize(SPR_FLAG_VEH_RUNNING)); this->flag_size = maxdim(GetScaledSpriteSize(SPR_FLAG_VEH_STOPPED), GetScaledSpriteSize(SPR_FLAG_VEH_RUNNING));
} }
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{ {
switch (widget) { switch (widget) {
case WID_D_MATRIX: { case WID_D_MATRIX: {
@ -759,7 +759,7 @@ struct DepotWindow : Window {
this->DrawWidgets(); this->DrawWidgets();
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
switch (widget) { switch (widget) {
case WID_D_MATRIX: // List case WID_D_MATRIX: // List
@ -841,7 +841,7 @@ struct DepotWindow : Window {
DoCommandP(0, this->GetDepotIndex(), 0, CMD_RENAME_DEPOT | CMD_MSG(STR_ERROR_CAN_T_RENAME_DEPOT), nullptr, str); DoCommandP(0, this->GetDepotIndex(), 0, CMD_RENAME_DEPOT | CMD_MSG(STR_ERROR_CAN_T_RENAME_DEPOT), nullptr, str);
} }
bool OnRightClick([[maybe_unused]] Point pt, int widget) override bool OnRightClick([[maybe_unused]] Point pt, WidgetID widget) override
{ {
if (widget != WID_D_MATRIX) return false; if (widget != WID_D_MATRIX) return false;
@ -991,7 +991,7 @@ struct DepotWindow : Window {
} }
} }
void OnMouseDrag(Point pt, int widget) override void OnMouseDrag(Point pt, WidgetID widget) override
{ {
if (this->sel == INVALID_VEHICLE) return; if (this->sel == INVALID_VEHICLE) return;
if (widget != this->hovered_widget) { if (widget != this->hovered_widget) {
@ -1042,7 +1042,7 @@ struct DepotWindow : Window {
this->SetWidgetDirty(widget); this->SetWidgetDirty(widget);
} }
void OnDragDrop(Point pt, int widget) override void OnDragDrop(Point pt, WidgetID widget) override
{ {
switch (widget) { switch (widget) {
case WID_D_MATRIX: { case WID_D_MATRIX: {

@ -146,7 +146,7 @@ struct BuildDocksToolbarWindow : Window {
} }
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
switch (widget) { switch (widget) {
case WID_DT_CANAL: // Build canal button case WID_DT_CANAL: // Build canal button
@ -457,7 +457,7 @@ public:
} }
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
switch (widget) { switch (widget) {
case BDSW_LT_OFF: case BDSW_LT_OFF:
@ -529,7 +529,7 @@ public:
UpdateDocksDirection(); UpdateDocksDirection();
} }
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{ {
switch (widget) { switch (widget) {
case WID_BDD_X: case WID_BDD_X:
@ -540,7 +540,7 @@ public:
} }
} }
void DrawWidget(const Rect &r, int widget) const override void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
DrawPixelInfo tmp_dpi; DrawPixelInfo tmp_dpi;
@ -564,7 +564,7 @@ public:
} }
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
switch (widget) { switch (widget) {
case WID_BDD_X: case WID_BDD_X:

@ -736,7 +736,7 @@ void SetYearEngineAgingStops()
* @param aging_date The date used for age calculations. * @param aging_date The date used for age calculations.
* @param seed Random seed. * @param seed Random seed.
*/ */
void StartupOneEngine(Engine *e, Date aging_date, uint32 seed, Date no_introduce_after_date) void StartupOneEngine(Engine *e, Date aging_date, const YearMonthDay &aging_ymd, uint32 seed, Date no_introduce_after_date)
{ {
const EngineInfo *ei = &e->info; const EngineInfo *ei = &e->info;
@ -760,7 +760,11 @@ void StartupOneEngine(Engine *e, Date aging_date, uint32 seed, Date no_introduce
* Note: TTDP uses fixed 1922 */ * Note: TTDP uses fixed 1922 */
e->intro_date = ei->base_intro <= ConvertYMDToDate(_settings_game.game_creation.starting_year + 2, 0, 1) ? ei->base_intro : (DateDelta)GB(r, 0, 9) + ei->base_intro; e->intro_date = ei->base_intro <= ConvertYMDToDate(_settings_game.game_creation.starting_year + 2, 0, 1) ? ei->base_intro : (DateDelta)GB(r, 0, 9) + ei->base_intro;
if (e->intro_date <= _date && e->intro_date <= no_introduce_after_date) { if (e->intro_date <= _date && e->intro_date <= no_introduce_after_date) {
e->age = (aging_date - e->intro_date).base() >> 5; YearMonthDay intro_ymd = ConvertDateToYMD(e->intro_date);
int aging_months = aging_ymd.year * 12 + aging_ymd.month;
int intro_months = intro_ymd.year * 12 + intro_ymd.month;
if (intro_ymd.day > 1) intro_months++; // Engines are introduced at the first month start at/after intro date.
e->age = aging_months - intro_months;
e->company_avail = MAX_UVALUE(CompanyMask); e->company_avail = MAX_UVALUE(CompanyMask);
e->flags |= ENGINE_AVAILABLE; e->flags |= ENGINE_AVAILABLE;
} }
@ -821,6 +825,7 @@ void StartupEngines()
aging_stop_year = std::min<Year>(aging_stop_year, std::max<Year>(_settings_game.vehicle.no_introduce_vehicles_after, _settings_game.vehicle.no_expire_vehicles_after)); aging_stop_year = std::min<Year>(aging_stop_year, std::max<Year>(_settings_game.vehicle.no_introduce_vehicles_after, _settings_game.vehicle.no_expire_vehicles_after));
} }
const Date aging_date = std::min(_date, ConvertYMDToDate(aging_stop_year, 0, 1)); const Date aging_date = std::min(_date, ConvertYMDToDate(aging_stop_year, 0, 1));
const YearMonthDay aging_ymd = ConvertDateToYMD(aging_date);
Date no_introduce_after_date = INT_MAX; Date no_introduce_after_date = INT_MAX;
if (_settings_game.vehicle.no_introduce_vehicles_after > 0) { if (_settings_game.vehicle.no_introduce_vehicles_after > 0) {
@ -830,7 +835,7 @@ void StartupEngines()
uint32 seed = Random(); uint32 seed = Random();
for (Engine *e : Engine::Iterate()) { for (Engine *e : Engine::Iterate()) {
StartupOneEngine(e, aging_date, seed, no_introduce_after_date); StartupOneEngine(e, aging_date, aging_ymd, seed, no_introduce_after_date);
} }
for (Engine *e : Engine::Iterate()) { for (Engine *e : Engine::Iterate()) {
CalcEngineReliability(e, false); CalcEngineReliability(e, false);

@ -27,7 +27,7 @@ bool IsEngineBuildable(EngineID engine, VehicleType type, CompanyID company);
bool IsEngineRefittable(EngineID engine); bool IsEngineRefittable(EngineID engine);
void SetYearEngineAgingStops(); void SetYearEngineAgingStops();
void CalcEngineReliability(Engine *e, bool new_month); void CalcEngineReliability(Engine *e, bool new_month);
void StartupOneEngine(Engine *e, Date aging_date, uint32 seed, Date no_introduce_after_date); void StartupOneEngine(Engine *e, Date aging_date, const YearMonthDay &aging_ymd, uint32 seed, Date no_introduce_after_date);
uint GetTotalCapacityOfArticulatedParts(EngineID engine); uint GetTotalCapacityOfArticulatedParts(EngineID engine);

@ -77,7 +77,7 @@ struct EnginePreviewWindow : Window {
this->flags |= WF_STICKY; this->flags |= WF_STICKY;
} }
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{ {
if (widget != WID_EP_QUESTION) return; if (widget != WID_EP_QUESTION) return;
@ -104,7 +104,7 @@ struct EnginePreviewWindow : Window {
size->height += GetStringHeight(GetEngineInfoString(engine), size->width); size->height += GetStringHeight(GetEngineInfoString(engine), size->width);
} }
void DrawWidget(const Rect &r, int widget) const override void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
if (widget != WID_EP_QUESTION) return; if (widget != WID_EP_QUESTION) return;
@ -122,7 +122,7 @@ struct EnginePreviewWindow : Window {
DrawStringMultiLine(r.left, r.right, y, r.bottom, GetEngineInfoString(engine), TC_FROMSTRING, SA_CENTER); DrawStringMultiLine(r.left, r.right, y, r.bottom, GetEngineInfoString(engine), TC_FROMSTRING, SA_CENTER);
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
switch (widget) { switch (widget) {
case WID_EP_YES: case WID_EP_YES:

@ -178,7 +178,7 @@ public:
this->InitNested(); this->InitNested();
} }
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{ {
switch (widget) { switch (widget) {
case WID_EM_MESSAGE: { case WID_EM_MESSAGE: {
@ -245,12 +245,12 @@ public:
if (this->face != INVALID_COMPANY && !Company::IsValidID(this->face)) this->Close(); if (this->face != INVALID_COMPANY && !Company::IsValidID(this->face)) this->Close();
} }
void SetStringParameters(int widget) const override void SetStringParameters(WidgetID widget) const override
{ {
if (widget == WID_EM_CAPTION) CopyInDParam(this->params); if (widget == WID_EM_CAPTION) CopyInDParam(this->params);
} }
void DrawWidget(const Rect &r, int widget) const override void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
switch (widget) { switch (widget) {
case WID_EM_FACE: { case WID_EM_FACE: {

@ -418,7 +418,7 @@ public:
this->Window::Close(); this->Window::Close();
} }
void DrawWidget(const Rect &r, int widget) const override void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
switch (widget) { switch (widget) {
case WID_SL_SORT_BYNAME: case WID_SL_SORT_BYNAME:
@ -587,7 +587,7 @@ public:
} }
} }
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{ {
switch (widget) { switch (widget) {
case WID_SL_BACKGROUND: case WID_SL_BACKGROUND:
@ -620,7 +620,7 @@ public:
this->DrawWidgets(); this->DrawWidgets();
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
switch (widget) { switch (widget) {
case WID_SL_SORT_BYNAME: // Sort save names by name case WID_SL_SORT_BYNAME: // Sort save names by name
@ -742,7 +742,7 @@ public:
} }
} }
void OnMouseOver([[maybe_unused]] Point pt, int widget) override void OnMouseOver([[maybe_unused]] Point pt, WidgetID widget) override
{ {
if (widget == WID_SL_DRIVES_DIRECTORIES_LIST) { if (widget == WID_SL_DRIVES_DIRECTORIES_LIST) {
auto it = this->vscroll->GetScrolledItemFromWidget(this->display_list, pt.y, this, WID_SL_DRIVES_DIRECTORIES_LIST, WidgetDimensions::scaled.inset.top); auto it = this->vscroll->GetScrolledItemFromWidget(this->display_list, pt.y, this, WID_SL_DRIVES_DIRECTORIES_LIST, WidgetDimensions::scaled.inset.top);
@ -920,7 +920,7 @@ public:
} }
} }
void OnEditboxChanged(int wid) override void OnEditboxChanged(WidgetID wid) override
{ {
if (wid == WID_SL_FILTER) { if (wid == WID_SL_FILTER) {
this->string_filter.SetFilterTerm(this->filter_editbox.text.buf); this->string_filter.SetFilterTerm(this->filter_editbox.text.buf);

@ -507,7 +507,7 @@ struct FramerateWindow : Window {
} }
} }
void SetStringParameters(int widget) const override void SetStringParameters(WidgetID widget) const override
{ {
switch (widget) { switch (widget) {
case WID_FRW_CAPTION: case WID_FRW_CAPTION:
@ -535,7 +535,7 @@ struct FramerateWindow : Window {
} }
} }
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{ {
switch (widget) { switch (widget) {
case WID_FRW_RATE_GAMELOOP: case WID_FRW_RATE_GAMELOOP:
@ -646,7 +646,7 @@ struct FramerateWindow : Window {
} }
} }
void DrawWidget(const Rect &r, int widget) const override void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
switch (widget) { switch (widget) {
case WID_FRW_TIMES_NAMES: { case WID_FRW_TIMES_NAMES: {
@ -688,7 +688,7 @@ struct FramerateWindow : Window {
} }
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
switch (widget) { switch (widget) {
case WID_FRW_TIMES_NAMES: case WID_FRW_TIMES_NAMES:
@ -761,7 +761,7 @@ struct FrametimeGraphWindow : Window {
this->InitNested(number); this->InitNested(number);
} }
void SetStringParameters(int widget) const override void SetStringParameters(WidgetID widget) const override
{ {
switch (widget) { switch (widget) {
case WID_FGW_CAPTION: case WID_FGW_CAPTION:
@ -776,7 +776,7 @@ struct FrametimeGraphWindow : Window {
} }
} }
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{ {
if (widget == WID_FGW_GRAPH) { if (widget == WID_FGW_GRAPH) {
SetDParam(0, 100); SetDParam(0, 100);
@ -893,7 +893,7 @@ struct FrametimeGraphWindow : Window {
return (value - src_min) * dst_diff / src_diff + dst_min; return (value - src_min) * dst_diff / src_diff + dst_min;
} }
void DrawWidget(const Rect &r, int widget) const override void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
if (widget == WID_FGW_GRAPH) { if (widget == WID_FGW_GRAPH) {
const TimingMeasurement *durations = _pf_data[this->element].durations; const TimingMeasurement *durations = _pf_data[this->element].durations;

@ -142,7 +142,7 @@ struct GSConfigWindow : public Window {
this->vscroll->SetCount(this->visible_settings.size()); this->vscroll->SetCount(this->visible_settings.size());
} }
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{ {
switch (widget) { switch (widget) {
case WID_GSC_SETTINGS: case WID_GSC_SETTINGS:
@ -168,7 +168,7 @@ struct GSConfigWindow : public Window {
return UserIsAllowedToChangeGameScript() || Game::GetInstance() != nullptr; return UserIsAllowedToChangeGameScript() || Game::GetInstance() != nullptr;
} }
void DrawWidget(const Rect &r, int widget) const override void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
switch (widget) { switch (widget) {
case WID_GSC_GSLIST: { case WID_GSC_GSLIST: {
@ -250,7 +250,7 @@ struct GSConfigWindow : public Window {
this->DrawWidgets(); this->DrawWidgets();
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
if (widget >= WID_GSC_TEXTFILE && widget < WID_GSC_TEXTFILE + TFT_CONTENT_END) { if (widget >= WID_GSC_TEXTFILE && widget < WID_GSC_TEXTFILE + TFT_CONTENT_END) {
if (GameConfig::GetConfig() == nullptr) return; if (GameConfig::GetConfig() == nullptr) return;
@ -380,14 +380,14 @@ struct GSConfigWindow : public Window {
SetValue(value); SetValue(value);
} }
void OnDropdownSelect(int widget, int index) override void OnDropdownSelect(WidgetID widget, int index) override
{ {
if (widget != WID_GSC_SETTING_DROPDOWN) return; if (widget != WID_GSC_SETTING_DROPDOWN) return;
assert(this->clicked_dropdown); assert(this->clicked_dropdown);
SetValue(index); SetValue(index);
} }
void OnDropdownClose(Point, int widget, int, bool) override void OnDropdownClose(Point, WidgetID widget, int, bool) override
{ {
if (widget != WID_GSC_SETTING_DROPDOWN) return; if (widget != WID_GSC_SETTING_DROPDOWN) return;
/* We cannot raise the dropdown button just yet. OnClick needs some hint, whether /* We cannot raise the dropdown button just yet. OnClick needs some hint, whether

@ -438,7 +438,7 @@ static const StringID _variety[] = {STR_VARIETY_NONE, STR_VARIETY_VERY_LOW,
static_assert(lengthof(_num_inds) == ID_END + 1); static_assert(lengthof(_num_inds) == ID_END + 1);
struct GenerateLandscapeWindow : public Window { struct GenerateLandscapeWindow : public Window {
uint widget_id; WidgetID widget_id;
uint x; uint x;
uint y; uint y;
std::string name; std::string name;
@ -479,7 +479,7 @@ struct GenerateLandscapeWindow : public Window {
} }
void SetStringParameters(int widget) const override void SetStringParameters(WidgetID widget) const override
{ {
switch (widget) { switch (widget) {
case WID_GL_START_DATE_TEXT: SetDParam(0, ConvertYMDToDate(_settings_newgame.game_creation.starting_year, 0, 1)); break; case WID_GL_START_DATE_TEXT: SetDParam(0, ConvertYMDToDate(_settings_newgame.game_creation.starting_year, 0, 1)); break;
@ -643,7 +643,7 @@ struct GenerateLandscapeWindow : public Window {
this->SetDirty(); this->SetDirty();
} }
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{ {
Dimension d{0, (uint)GetCharacterHeight(FS_NORMAL)}; Dimension d{0, (uint)GetCharacterHeight(FS_NORMAL)};
const StringID *strs = nullptr; const StringID *strs = nullptr;
@ -752,7 +752,7 @@ struct GenerateLandscapeWindow : public Window {
*size = maxdim(*size, d); *size = maxdim(*size, d);
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
switch (widget) { switch (widget) {
case WID_GL_TEMPERATE: case WID_GL_TEMPERATE:
@ -1002,7 +1002,7 @@ struct GenerateLandscapeWindow : public Window {
} }
} }
void OnDropdownSelect(int widget, int index) override void OnDropdownSelect(WidgetID widget, int index) override
{ {
switch (widget) { switch (widget) {
case WID_GL_MAPSIZE_X_PULLDOWN: case WID_GL_MAPSIZE_X_PULLDOWN:
@ -1217,7 +1217,7 @@ void StartNewGameWithoutGUI(uint32 seed)
struct CreateScenarioWindow : public Window struct CreateScenarioWindow : public Window
{ {
uint widget_id; WidgetID widget_id;
void SetDropDownColor() void SetDropDownColor()
{ {
@ -1234,7 +1234,7 @@ struct CreateScenarioWindow : public Window
SetDropDownColor(); SetDropDownColor();
} }
void SetStringParameters(int widget) const override void SetStringParameters(WidgetID widget) const override
{ {
switch (widget) { switch (widget) {
case WID_CS_START_DATE_TEXT: case WID_CS_START_DATE_TEXT:
@ -1270,7 +1270,7 @@ struct CreateScenarioWindow : public Window
this->DrawWidgets(); this->DrawWidgets();
} }
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{ {
StringID str = STR_JUST_INT; StringID str = STR_JUST_INT;
switch (widget) { switch (widget) {
@ -1303,7 +1303,7 @@ struct CreateScenarioWindow : public Window
*size = maxdim(*size, d); *size = maxdim(*size, d);
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
switch (widget) { switch (widget) {
case WID_CS_TEMPERATE: case WID_CS_TEMPERATE:
@ -1375,7 +1375,7 @@ struct CreateScenarioWindow : public Window
this->RaiseWidgetsWhenLowered(WID_CS_START_DATE_DOWN, WID_CS_START_DATE_UP, WID_CS_FLAT_LAND_HEIGHT_DOWN, WID_CS_FLAT_LAND_HEIGHT_UP); this->RaiseWidgetsWhenLowered(WID_CS_START_DATE_DOWN, WID_CS_START_DATE_UP, WID_CS_FLAT_LAND_HEIGHT_DOWN, WID_CS_FLAT_LAND_HEIGHT_UP);
} }
void OnDropdownSelect(int widget, int index) override void OnDropdownSelect(WidgetID widget, int index) override
{ {
switch (widget) { switch (widget) {
case WID_CS_MAPSIZE_X_PULLDOWN: _settings_newgame.game_creation.map_x = index; break; case WID_CS_MAPSIZE_X_PULLDOWN: _settings_newgame.game_creation.map_x = index; break;
@ -1544,7 +1544,7 @@ struct GenerateProgressWindow : public Window {
this->InitNested(); this->InitNested();
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
switch (widget) { switch (widget) {
case WID_GP_ABORT: case WID_GP_ABORT:
@ -1559,7 +1559,7 @@ struct GenerateProgressWindow : public Window {
} }
} }
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{ {
switch (widget) { switch (widget) {
case WID_GP_PROGRESS_BAR: { case WID_GP_PROGRESS_BAR: {
@ -1580,7 +1580,7 @@ struct GenerateProgressWindow : public Window {
} }
} }
void DrawWidget(const Rect &r, int widget) const override void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
switch (widget) { switch (widget) {
case WID_GP_PROGRESS_BAR: { case WID_GP_PROGRESS_BAR: {

@ -51,7 +51,7 @@ struct GoalListWindow : public Window {
this->OnInvalidateData(0); this->OnInvalidateData(0);
} }
void SetStringParameters(int widget) const override void SetStringParameters(WidgetID widget) const override
{ {
if (widget != WID_GOAL_CAPTION) return; if (widget != WID_GOAL_CAPTION) return;
@ -63,7 +63,7 @@ struct GoalListWindow : public Window {
} }
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
switch (widget) { switch (widget) {
case WID_GOAL_GLOBAL_BUTTON: case WID_GOAL_GLOBAL_BUTTON:
@ -168,7 +168,7 @@ struct GoalListWindow : public Window {
return num; return num;
} }
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{ {
if (widget != WID_GOAL_LIST) return; if (widget != WID_GOAL_LIST) return;
Dimension d = GetStringBoundingBox(STR_GOALS_NONE); Dimension d = GetStringBoundingBox(STR_GOALS_NONE);
@ -351,7 +351,7 @@ struct GoalQuestionWindow : public Window {
} }
void SetStringParameters(int widget) const override void SetStringParameters(WidgetID widget) const override
{ {
switch (widget) { switch (widget) {
case WID_GQ_BUTTON_1: case WID_GQ_BUTTON_1:
@ -368,7 +368,7 @@ struct GoalQuestionWindow : public Window {
} }
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
switch (widget) { switch (widget) {
case WID_GQ_BUTTON_1: case WID_GQ_BUTTON_1:
@ -388,7 +388,7 @@ struct GoalQuestionWindow : public Window {
} }
} }
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{ {
if (widget != WID_GQ_QUESTION) return; if (widget != WID_GQ_QUESTION) return;
@ -396,7 +396,7 @@ struct GoalQuestionWindow : public Window {
size->height = GetStringHeight(STR_JUST_RAW_STRING, size->width); size->height = GetStringHeight(STR_JUST_RAW_STRING, size->width);
} }
void DrawWidget(const Rect &r, int widget) const override void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
if (widget != WID_GQ_QUESTION) return; if (widget != WID_GQ_QUESTION) return;

@ -59,7 +59,7 @@ struct GraphLegendWindow : Window {
} }
} }
void DrawWidget(const Rect &r, int widget) const override void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
if (!IsInsideMM(widget, WID_GL_FIRST_COMPANY, MAX_COMPANIES + WID_GL_FIRST_COMPANY)) return; if (!IsInsideMM(widget, WID_GL_FIRST_COMPANY, MAX_COMPANIES + WID_GL_FIRST_COMPANY)) return;
@ -79,7 +79,7 @@ struct GraphLegendWindow : Window {
DrawString(tr.left, tr.right, CenterBounds(tr.top, tr.bottom, GetCharacterHeight(FS_NORMAL)), STR_COMPANY_NAME_COMPANY_NUM, HasBit(_legend_excluded_companies, cid) ? TC_BLACK : TC_WHITE); DrawString(tr.left, tr.right, CenterBounds(tr.top, tr.bottom, GetCharacterHeight(FS_NORMAL)), STR_COMPANY_NAME_COMPANY_NUM, HasBit(_legend_excluded_companies, cid) ? TC_BLACK : TC_WHITE);
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
if (!IsInsideMM(widget, WID_GL_FIRST_COMPANY, MAX_COMPANIES + WID_GL_FIRST_COMPANY)) return; if (!IsInsideMM(widget, WID_GL_FIRST_COMPANY, MAX_COMPANIES + WID_GL_FIRST_COMPANY)) return;
@ -110,25 +110,22 @@ struct GraphLegendWindow : Window {
/** /**
* Construct a vertical list of buttons, one for each company. * Construct a vertical list of buttons, one for each company.
* @param biggest_index Storage for collecting the biggest index used in the returned tree.
* @return Panel with company buttons. * @return Panel with company buttons.
* @post \c *biggest_index contains the largest used index in the tree.
*/ */
static NWidgetBase *MakeNWidgetCompanyLines(int *biggest_index) static std::unique_ptr<NWidgetBase> MakeNWidgetCompanyLines()
{ {
NWidgetVertical *vert = new NWidgetVertical(NC_EQUALSIZE); auto vert = std::make_unique<NWidgetVertical>(NC_EQUALSIZE);
vert->SetPadding(2, 2, 2, 2); vert->SetPadding(2, 2, 2, 2);
uint sprite_height = GetSpriteSize(SPR_COMPANY_ICON, nullptr, ZOOM_LVL_OUT_4X).height; uint sprite_height = GetSpriteSize(SPR_COMPANY_ICON, nullptr, ZOOM_LVL_OUT_4X).height;
for (int widnum = WID_GL_FIRST_COMPANY; widnum <= WID_GL_LAST_COMPANY; widnum++) { for (WidgetID widnum = WID_GL_FIRST_COMPANY; widnum <= WID_GL_LAST_COMPANY; widnum++) {
NWidgetBackground *panel = new NWidgetBackground(WWT_PANEL, COLOUR_BROWN, widnum); auto panel = std::make_unique<NWidgetBackground>(WWT_PANEL, COLOUR_BROWN, widnum);
panel->SetMinimalSize(246, sprite_height + WidgetDimensions::unscaled.framerect.Vertical()); panel->SetMinimalSize(246, sprite_height + WidgetDimensions::unscaled.framerect.Vertical());
panel->SetMinimalTextLines(1, WidgetDimensions::unscaled.framerect.Vertical(), FS_NORMAL); panel->SetMinimalTextLines(1, WidgetDimensions::unscaled.framerect.Vertical(), FS_NORMAL);
panel->SetFill(1, 1); panel->SetFill(1, 1);
panel->SetDataTip(0x0, STR_GRAPH_KEY_COMPANY_SELECTION_TOOLTIP); panel->SetDataTip(0x0, STR_GRAPH_KEY_COMPANY_SELECTION_TOOLTIP);
vert->Add(panel); vert->Add(std::move(panel));
} }
*biggest_index = WID_GL_LAST_COMPANY;
return vert; return vert;
} }
@ -197,7 +194,7 @@ protected:
uint16 x_values_start; uint16 x_values_start;
uint16 x_values_increment; uint16 x_values_increment;
int graph_widget; WidgetID graph_widget;
StringID format_str_y_axis; StringID format_str_y_axis;
byte colours[GRAPH_MAX_DATASETS]; byte colours[GRAPH_MAX_DATASETS];
OverflowSafeInt64 cost[GRAPH_MAX_DATASETS][GRAPH_NUM_MONTHS]; ///< Stored costs for the last #GRAPH_NUM_MONTHS months OverflowSafeInt64 cost[GRAPH_MAX_DATASETS][GRAPH_NUM_MONTHS]; ///< Stored costs for the last #GRAPH_NUM_MONTHS months
@ -489,7 +486,7 @@ protected:
} }
BaseGraphWindow(WindowDesc *desc, int widget, StringID format_str_y_axis) : BaseGraphWindow(WindowDesc *desc, WidgetID widget, StringID format_str_y_axis) :
Window(desc), Window(desc),
format_str_y_axis(format_str_y_axis) format_str_y_axis(format_str_y_axis)
{ {
@ -513,7 +510,7 @@ protected:
} }
public: public:
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{ {
if (widget != this->graph_widget) return; if (widget != this->graph_widget) return;
@ -549,7 +546,7 @@ public:
size->height = std::max<uint>(size->height, size->width / 3); size->height = std::max<uint>(size->height, size->width / 3);
} }
void DrawWidget(const Rect &r, int widget) const override void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
if (widget != this->graph_widget) return; if (widget != this->graph_widget) return;
@ -561,7 +558,7 @@ public:
return INVALID_DATAPOINT; return INVALID_DATAPOINT;
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
/* Clicked on legend? */ /* Clicked on legend? */
if (widget == WID_CV_KEY_BUTTON) ShowGraphLegend(); if (widget == WID_CV_KEY_BUTTON) ShowGraphLegend();
@ -747,7 +744,7 @@ struct ExcludingCargoBaseGraphWindow : BaseGraphWindow {
Scrollbar *vscroll; ///< Cargo list scrollbar. Scrollbar *vscroll; ///< Cargo list scrollbar.
uint legend_width; ///< Width of legend 'blob'. uint legend_width; ///< Width of legend 'blob'.
ExcludingCargoBaseGraphWindow(WindowDesc *desc, int widget, StringID format_str_y_axis): ExcludingCargoBaseGraphWindow(WindowDesc *desc, WidgetID widget, StringID format_str_y_axis):
BaseGraphWindow(desc, widget, format_str_y_axis) BaseGraphWindow(desc, widget, format_str_y_axis)
{} {}
@ -757,7 +754,7 @@ struct ExcludingCargoBaseGraphWindow : BaseGraphWindow {
this->legend_width = (GetCharacterHeight(FS_SMALL) - ScaleGUITrad(1)) * 9 / 6; this->legend_width = (GetCharacterHeight(FS_SMALL) - ScaleGUITrad(1)) * 9 / 6;
} }
virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override virtual void UpdateWidgetSize(WidgetID widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override
{ {
if (widget != WID_ECBG_MATRIX) { if (widget != WID_ECBG_MATRIX) {
BaseGraphWindow::UpdateWidgetSize(widget, size, padding, fill, resize); BaseGraphWindow::UpdateWidgetSize(widget, size, padding, fill, resize);
@ -779,7 +776,7 @@ struct ExcludingCargoBaseGraphWindow : BaseGraphWindow {
resize->height = this->line_height; resize->height = this->line_height;
} }
virtual void DrawWidget(const Rect &r, int widget) const override virtual void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
if (widget != WID_ECBG_MATRIX) { if (widget != WID_ECBG_MATRIX) {
BaseGraphWindow::DrawWidget(r, widget); BaseGraphWindow::DrawWidget(r, widget);
@ -816,7 +813,7 @@ struct ExcludingCargoBaseGraphWindow : BaseGraphWindow {
} }
} }
virtual void OnClick(Point pt, int widget, int click_count) override virtual void OnClick(Point pt, WidgetID widget, int click_count) override
{ {
switch (widget) { switch (widget) {
case WID_CV_KEY_BUTTON: case WID_CV_KEY_BUTTON:
@ -897,7 +894,7 @@ struct DeliveredCargoGraphWindow : ExcludingCargoBaseGraphWindow {
this->SetDirty(); this->SetDirty();
} }
virtual void OnClick(Point pt, int widget, int click_count) override virtual void OnClick(Point pt, WidgetID widget, int click_count) override
{ {
switch (widget) { switch (widget) {
case WID_DCG_BY_COMPANY: case WID_DCG_BY_COMPANY:
@ -1060,7 +1057,7 @@ struct PerformanceHistoryGraphWindow : BaseGraphWindow {
return c->old_economy[j].performance_history; return c->old_economy[j].performance_history;
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
if (widget == WID_PHG_DETAILED_PERFORMANCE) ShowPerformanceRatingDetail(); if (widget == WID_PHG_DETAILED_PERFORMANCE) ShowPerformanceRatingDetail();
this->BaseGraphWindow::OnClick(pt, widget, click_count); this->BaseGraphWindow::OnClick(pt, widget, click_count);
@ -1266,7 +1263,7 @@ struct PaymentRatesGraphWindow : BaseGraphWindow {
} }
} }
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{ {
if (widget != WID_CPR_MATRIX) { if (widget != WID_CPR_MATRIX) {
BaseGraphWindow::UpdateWidgetSize(widget, size, padding, fill, resize); BaseGraphWindow::UpdateWidgetSize(widget, size, padding, fill, resize);
@ -1290,7 +1287,7 @@ struct PaymentRatesGraphWindow : BaseGraphWindow {
resize->height = this->line_height; resize->height = this->line_height;
} }
void DrawWidget(const Rect &r, int widget) const override void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
if (widget != WID_CPR_MATRIX) { if (widget != WID_CPR_MATRIX) {
BaseGraphWindow::DrawWidget(r, widget); BaseGraphWindow::DrawWidget(r, widget);
@ -1327,7 +1324,7 @@ struct PaymentRatesGraphWindow : BaseGraphWindow {
} }
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
switch (widget) { switch (widget) {
case WID_CPR_ENABLE_CARGOES: case WID_CPR_ENABLE_CARGOES:
@ -1412,7 +1409,7 @@ struct PaymentRatesGraphWindow : BaseGraphWindow {
this->num_dataset = i; this->num_dataset = i;
} }
void SetStringParameters(int widget) const override void SetStringParameters(WidgetID widget) const override
{ {
switch (widget) { switch (widget) {
case WID_CPR_FOOTER: case WID_CPR_FOOTER:
@ -1534,7 +1531,7 @@ struct PerformanceRatingDetailWindow : Window {
uint score_detail_left; uint score_detail_left;
uint score_detail_right; uint score_detail_right;
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{ {
switch (widget) { switch (widget) {
case WID_PRD_SCORE_FIRST: case WID_PRD_SCORE_FIRST:
@ -1592,7 +1589,7 @@ struct PerformanceRatingDetailWindow : Window {
} }
} }
void DrawWidget(const Rect &r, int widget) const override void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
/* No need to draw when there's nothing to draw */ /* No need to draw when there's nothing to draw */
if (this->company == INVALID_COMPANY) return; if (this->company == INVALID_COMPANY) return;
@ -1670,7 +1667,7 @@ struct PerformanceRatingDetailWindow : Window {
} }
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
/* Check which button is clicked */ /* Check which button is clicked */
if (IsInsideMM(widget, WID_PRD_COMPANY_FIRST, WID_PRD_COMPANY_LAST + 1)) { if (IsInsideMM(widget, WID_PRD_COMPANY_FIRST, WID_PRD_COMPANY_LAST + 1)) {
@ -1729,11 +1726,9 @@ CompanyID PerformanceRatingDetailWindow::company = INVALID_COMPANY;
/** /**
* Make a vertical list of panels for outputting score details. * Make a vertical list of panels for outputting score details.
* @param biggest_index Storage for collecting the biggest index used in the returned tree.
* @return Panel with performance details. * @return Panel with performance details.
* @post \c *biggest_index contains the largest used index in the tree.
*/ */
static NWidgetBase *MakePerformanceDetailPanels(int *biggest_index) static std::unique_ptr<NWidgetBase> MakePerformanceDetailPanels()
{ {
const StringID performance_tips[] = { const StringID performance_tips[] = {
STR_PERFORMANCE_DETAIL_VEHICLES_TOOLTIP, STR_PERFORMANCE_DETAIL_VEHICLES_TOOLTIP,
@ -1750,21 +1745,20 @@ static NWidgetBase *MakePerformanceDetailPanels(int *biggest_index)
static_assert(lengthof(performance_tips) == SCORE_END - SCORE_BEGIN); static_assert(lengthof(performance_tips) == SCORE_END - SCORE_BEGIN);
NWidgetVertical *vert = new NWidgetVertical(NC_EQUALSIZE); auto vert = std::make_unique<NWidgetVertical>(NC_EQUALSIZE);
for (int widnum = WID_PRD_SCORE_FIRST; widnum <= WID_PRD_SCORE_LAST; widnum++) { for (WidgetID widnum = WID_PRD_SCORE_FIRST; widnum <= WID_PRD_SCORE_LAST; widnum++) {
NWidgetBackground *panel = new NWidgetBackground(WWT_PANEL, COLOUR_BROWN, widnum); auto panel = std::make_unique<NWidgetBackground>(WWT_PANEL, COLOUR_BROWN, widnum);
panel->SetFill(1, 1); panel->SetFill(1, 1);
panel->SetDataTip(0x0, performance_tips[widnum - WID_PRD_SCORE_FIRST]); panel->SetDataTip(0x0, performance_tips[widnum - WID_PRD_SCORE_FIRST]);
vert->Add(panel); vert->Add(std::move(panel));
} }
*biggest_index = WID_PRD_SCORE_LAST;
return vert; return vert;
} }
/** Make a number of rows with buttons for each company for the performance rating detail window. */ /** Make a number of rows with buttons for each company for the performance rating detail window. */
NWidgetBase *MakeCompanyButtonRowsGraphGUI(int *biggest_index) std::unique_ptr<NWidgetBase> MakeCompanyButtonRowsGraphGUI()
{ {
return MakeCompanyButtonRows(biggest_index, WID_PRD_COMPANY_FIRST, WID_PRD_COMPANY_LAST, COLOUR_BROWN, 8, STR_PERFORMANCE_DETAIL_SELECT_COMPANY_TOOLTIP); return MakeCompanyButtonRows(WID_PRD_COMPANY_FIRST, WID_PRD_COMPANY_LAST, COLOUR_BROWN, 8, STR_PERFORMANCE_DETAIL_SELECT_COMPANY_TOOLTIP);
} }
static const NWidgetPart _nested_performance_rating_detail_widgets[] = { static const NWidgetPart _nested_performance_rating_detail_widgets[] = {
@ -1836,7 +1830,7 @@ struct StationCargoGraphWindow final : BaseGraphWindow {
this->legend_excluded_cargo = 0; this->legend_excluded_cargo = 0;
} }
void SetStringParameters(int widget) const override void SetStringParameters(WidgetID widget) const override
{ {
if (widget == WID_SCG_CAPTION) { if (widget == WID_SCG_CAPTION) {
SetDParam(0, this->station_id); SetDParam(0, this->station_id);
@ -1858,7 +1852,7 @@ struct StationCargoGraphWindow final : BaseGraphWindow {
} }
} }
void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override
{ {
if (widget < WID_SCG_MATRIX) { if (widget < WID_SCG_MATRIX) {
BaseGraphWindow::UpdateWidgetSize(widget, size, padding, fill, resize); BaseGraphWindow::UpdateWidgetSize(widget, size, padding, fill, resize);
@ -1880,7 +1874,7 @@ struct StationCargoGraphWindow final : BaseGraphWindow {
resize->height = this->line_height; resize->height = this->line_height;
} }
void DrawWidget(const Rect &r, int widget) const override void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
if (widget < WID_SCG_MATRIX) { if (widget < WID_SCG_MATRIX) {
BaseGraphWindow::DrawWidget(r, widget); BaseGraphWindow::DrawWidget(r, widget);
@ -1921,7 +1915,7 @@ struct StationCargoGraphWindow final : BaseGraphWindow {
} }
} }
void OnClick(Point pt, int widget, int click_count) override void OnClick(Point pt, WidgetID widget, int click_count) override
{ {
switch (widget) { switch (widget) {
case WID_SCG_ENABLE_CARGOES: case WID_SCG_ENABLE_CARGOES:

@ -450,7 +450,7 @@ public:
this->Window::Close(); this->Window::Close();
} }
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{ {
switch (widget) { switch (widget) {
case WID_GL_LIST_GROUP: case WID_GL_LIST_GROUP:
@ -533,7 +533,7 @@ public:
this->SetDirty(); this->SetDirty();
} }
void SetStringParameters(int widget) const override void SetStringParameters(WidgetID widget) const override
{ {
switch (widget) { switch (widget) {
@ -622,7 +622,7 @@ public:
this->DrawWidgets(); this->DrawWidgets();
} }
void DrawWidget(const Rect &r, int widget) const override void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
switch (widget) { switch (widget) {
case WID_GL_ALL_VEHICLES: case WID_GL_ALL_VEHICLES:
@ -707,7 +707,7 @@ public:
} }
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
switch (widget) { switch (widget) {
case WID_GL_SORT_BY_ORDER: // Flip sorting method ascending/descending case WID_GL_SORT_BY_ORDER: // Flip sorting method ascending/descending
@ -899,7 +899,7 @@ public:
} }
} }
void OnDragDrop_Group(Point pt, int widget) void OnDragDrop_Group(Point pt, WidgetID widget)
{ {
const Group *g = Group::GetIfValid(this->group_sel); const Group *g = Group::GetIfValid(this->group_sel);
if (g == nullptr) { if (g == nullptr) {
@ -937,7 +937,7 @@ public:
} }
} }
void OnDragDrop_Vehicle(Point pt, int widget) void OnDragDrop_Vehicle(Point pt, WidgetID widget)
{ {
switch (widget) { switch (widget) {
case WID_GL_DEFAULT_VEHICLES: // Ungrouped vehicles case WID_GL_DEFAULT_VEHICLES: // Ungrouped vehicles
@ -1016,7 +1016,7 @@ public:
} }
} }
void OnDragDrop(Point pt, int widget) override void OnDragDrop(Point pt, WidgetID widget) override
{ {
if (this->vehicle_sel != INVALID_VEHICLE) OnDragDrop_Vehicle(pt, widget); if (this->vehicle_sel != INVALID_VEHICLE) OnDragDrop_Vehicle(pt, widget);
if (this->group_sel != INVALID_GROUP) OnDragDrop_Group(pt, widget); if (this->group_sel != INVALID_GROUP) OnDragDrop_Group(pt, widget);
@ -1036,7 +1036,7 @@ public:
this->vscroll->SetCapacityFromWidget(this, WID_GL_LIST_VEHICLE); this->vscroll->SetCapacityFromWidget(this, WID_GL_LIST_VEHICLE);
} }
void OnDropdownSelect(int widget, int index) override void OnDropdownSelect(WidgetID widget, int index) override
{ {
switch (widget) { switch (widget) {
case WID_GL_GROUP_BY_DROPDOWN: case WID_GL_GROUP_BY_DROPDOWN:
@ -1142,7 +1142,7 @@ public:
} }
} }
void OnMouseDrag(Point pt, int widget) override void OnMouseDrag(Point pt, WidgetID widget) override
{ {
if (this->vehicle_sel == INVALID_VEHICLE && this->group_sel == INVALID_GROUP) return; if (this->vehicle_sel == INVALID_VEHICLE && this->group_sel == INVALID_GROUP) return;

@ -73,7 +73,7 @@ struct GameManualTextfileWindow : public TextfileWindow {
this->OnClick({ 0, 0 }, WID_TF_WRAPTEXT, 1); this->OnClick({ 0, 0 }, WID_TF_WRAPTEXT, 1);
} }
void SetStringParameters(int widget) const override void SetStringParameters(WidgetID widget) const override
{ {
if (widget == WID_TF_CAPTION) { if (widget == WID_TF_CAPTION) {
SetDParamStr(0, this->filename); SetDParamStr(0, this->filename);
@ -85,7 +85,7 @@ struct GameManualTextfileWindow : public TextfileWindow {
if (this->filename == CHANGELOG_FILENAME) { if (this->filename == CHANGELOG_FILENAME) {
this->link_anchors.clear(); this->link_anchors.clear();
this->AfterLoadChangelog(); this->AfterLoadChangelog();
this->GetWidget<NWidgetStacked>(WID_TF_SEL_JUMPLIST)->SetDisplayedPlane(this->jumplist.empty() ? SZSP_HORIZONTAL : 0); if (this->GetWidget<NWidgetStacked>(WID_TF_SEL_JUMPLIST)->SetDisplayedPlane(this->jumplist.empty() ? SZSP_HORIZONTAL : 0)) this->ReInit();
} else { } else {
this->TextfileWindow::AfterLoadText(); this->TextfileWindow::AfterLoadText();
} }
@ -129,7 +129,7 @@ struct HelpWindow : public Window {
this->EnableTextfileButton(LICENSE_FILENAME, WID_HW_LICENSE); this->EnableTextfileButton(LICENSE_FILENAME, WID_HW_LICENSE);
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
switch (widget) { switch (widget) {
case WID_HW_README: case WID_HW_README:

@ -62,7 +62,7 @@ struct EndGameHighScoreBaseWindow : Window {
return pt; return pt;
} }
void OnClick([[maybe_unused]] Point pt, [[maybe_unused]] int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, [[maybe_unused]] WidgetID widget, [[maybe_unused]] int click_count) override
{ {
this->Close(); this->Close();
} }

@ -428,7 +428,7 @@ public:
this->SetupArrays(); this->SetupArrays();
} }
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{ {
switch (widget) { switch (widget) {
case WID_DPI_MATRIX_WIDGET: { case WID_DPI_MATRIX_WIDGET: {
@ -500,7 +500,7 @@ public:
} }
} }
void SetStringParameters(int widget) const override void SetStringParameters(WidgetID widget) const override
{ {
switch (widget) { switch (widget) {
case WID_DPI_FUND_WIDGET: case WID_DPI_FUND_WIDGET:
@ -521,7 +521,7 @@ public:
} }
} }
void DrawWidget(const Rect &r, int widget) const override void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
switch (widget) { switch (widget) {
case WID_DPI_MATRIX_WIDGET: { case WID_DPI_MATRIX_WIDGET: {
@ -632,7 +632,7 @@ public:
MarkWholeScreenDirty(); MarkWholeScreenDirty();
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
switch (widget) { switch (widget) {
case WID_DPI_CREATE_RANDOM_INDUSTRIES_WIDGET: { case WID_DPI_CREATE_RANDOM_INDUSTRIES_WIDGET: {
@ -985,17 +985,17 @@ public:
return ir.top - 1 + WidgetDimensions::scaled.framerect.bottom; return ir.top - 1 + WidgetDimensions::scaled.framerect.bottom;
} }
void SetStringParameters(int widget) const override void SetStringParameters(WidgetID widget) const override
{ {
if (widget == WID_IV_CAPTION) SetDParam(0, this->window_number); if (widget == WID_IV_CAPTION) SetDParam(0, this->window_number);
} }
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{ {
if (widget == WID_IV_INFO) size->height = this->info_height; if (widget == WID_IV_INFO) size->height = this->info_height;
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
switch (widget) { switch (widget) {
case WID_IV_INFO: { case WID_IV_INFO: {
@ -1651,7 +1651,7 @@ public:
this->SetCargoFilterArray(); this->SetCargoFilterArray();
} }
void SetStringParameters(int widget) const override void SetStringParameters(WidgetID widget) const override
{ {
switch (widget) { switch (widget) {
case WID_ID_DROPDOWN_CRITERIA: case WID_ID_DROPDOWN_CRITERIA:
@ -1668,7 +1668,7 @@ public:
} }
} }
void DrawWidget(const Rect &r, int widget) const override void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
switch (widget) { switch (widget) {
case WID_ID_DROPDOWN_ORDER: case WID_ID_DROPDOWN_ORDER:
@ -1714,7 +1714,7 @@ public:
} }
} }
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{ {
switch (widget) { switch (widget) {
case WID_ID_DROPDOWN_ORDER: { case WID_ID_DROPDOWN_ORDER: {
@ -1766,7 +1766,7 @@ public:
return list; return list;
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
switch (widget) { switch (widget) {
case WID_ID_DROPDOWN_ORDER: case WID_ID_DROPDOWN_ORDER:
@ -1800,7 +1800,7 @@ public:
} }
} }
void OnDropdownSelect(int widget, int index) override void OnDropdownSelect(WidgetID widget, int index) override
{ {
switch (widget) { switch (widget) {
case WID_ID_DROPDOWN_CRITERIA: { case WID_ID_DROPDOWN_CRITERIA: {
@ -1831,7 +1831,7 @@ public:
this->hscroll->SetCapacityFromWidget(this, WID_ID_INDUSTRY_LIST); this->hscroll->SetCapacityFromWidget(this, WID_ID_INDUSTRY_LIST);
} }
void OnEditboxChanged(int wid) override void OnEditboxChanged(WidgetID wid) override
{ {
if (wid == WID_ID_FILTER) { if (wid == WID_ID_FILTER) {
this->string_filter.SetFilterTerm(this->industry_editbox.text.buf); this->string_filter.SetFilterTerm(this->industry_editbox.text.buf);
@ -2644,7 +2644,7 @@ struct IndustryCargoesWindow : public Window {
CargoesField::cargo_field_width = CargoesField::cargo_border.width * 2 + CargoesField::cargo_line.width * CargoesField::max_cargoes + CargoesField::cargo_space.width * (CargoesField::max_cargoes - 1); CargoesField::cargo_field_width = CargoesField::cargo_border.width * 2 + CargoesField::cargo_line.width * CargoesField::max_cargoes + CargoesField::cargo_space.width * (CargoesField::max_cargoes - 1);
} }
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{ {
switch (widget) { switch (widget) {
case WID_IC_PANEL: case WID_IC_PANEL:
@ -2665,7 +2665,7 @@ struct IndustryCargoesWindow : public Window {
CargoesFieldType type; ///< Type of field. CargoesFieldType type; ///< Type of field.
void SetStringParameters (int widget) const override void SetStringParameters (WidgetID widget) const override
{ {
if (widget != WID_IC_CAPTION) return; if (widget != WID_IC_CAPTION) return;
@ -3002,7 +3002,7 @@ struct IndustryCargoesWindow : public Window {
this->ComputeIndustryDisplay(data); this->ComputeIndustryDisplay(data);
} }
void DrawWidget(const Rect &r, int widget) const override void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
if (widget != WID_IC_PANEL) return; if (widget != WID_IC_PANEL) return;
@ -3087,7 +3087,7 @@ struct IndustryCargoesWindow : public Window {
return true; return true;
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
switch (widget) { switch (widget) {
case WID_IC_PANEL: { case WID_IC_PANEL: {
@ -3175,7 +3175,7 @@ struct IndustryCargoesWindow : public Window {
} }
} }
void OnDropdownSelect(int widget, int index) override void OnDropdownSelect(WidgetID widget, int index) override
{ {
if (index < 0) return; if (index < 0) return;
@ -3198,7 +3198,7 @@ struct IndustryCargoesWindow : public Window {
} }
} }
bool OnTooltip([[maybe_unused]] Point pt, int widget, TooltipCloseCondition close_cond) override bool OnTooltip([[maybe_unused]] Point pt, WidgetID widget, TooltipCloseCondition close_cond) override
{ {
if (widget != WID_IC_PANEL) return false; if (widget != WID_IC_PANEL) return false;

@ -283,7 +283,7 @@ struct SelectGameWindow : public Window {
this->GetWidget<NWidgetStacked>(WID_SGI_TRANSLATION_SELECTION)->SetDisplayedPlane(missing_lang ? 0 : SZSP_NONE); this->GetWidget<NWidgetStacked>(WID_SGI_TRANSLATION_SELECTION)->SetDisplayedPlane(missing_lang ? 0 : SZSP_NONE);
} }
void DrawWidget(const Rect &r, int widget) const override void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
switch (widget) { switch (widget) {
case WID_SGI_BASESET: case WID_SGI_BASESET:
@ -298,7 +298,7 @@ struct SelectGameWindow : public Window {
} }
} }
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{ {
switch (widget) { switch (widget) {
case WID_SGI_TEMPERATE_LANDSCAPE: case WID_SGI_ARCTIC_LANDSCAPE: case WID_SGI_TEMPERATE_LANDSCAPE: case WID_SGI_ARCTIC_LANDSCAPE:
@ -326,7 +326,7 @@ struct SelectGameWindow : public Window {
if (changed) this->ReInit(0, 0, this->flags & WF_CENTERED); if (changed) this->ReInit(0, 0, this->flags & WF_CENTERED);
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
/* Do not create a network server when you (just) have closed one of the game /* Do not create a network server when you (just) have closed one of the game
* creation/load windows for the network server. */ * creation/load windows for the network server. */

@ -256,6 +256,9 @@ STR_UNITS_HEIGHT_IMPERIAL :{DECIMAL}{NBSP}
STR_UNITS_HEIGHT_METRIC :{DECIMAL}{NBSP}m STR_UNITS_HEIGHT_METRIC :{DECIMAL}{NBSP}m
STR_UNITS_HEIGHT_SI :{G=Masculin}{DECIMAL}{NBSP}m STR_UNITS_HEIGHT_SI :{G=Masculin}{DECIMAL}{NBSP}m
STR_UNITS_DAYS :{COMMA}{NBSP}di{P a es}
STR_UNITS_SECONDS :{COMMA}{NBSP}segon{P "" s}
STR_UNITS_TICKS :{COMMA}{NBSP}tic{P "" s}
# Common window strings # Common window strings
STR_LIST_FILTER_TITLE :{BLACK}Filtre: STR_LIST_FILTER_TITLE :{BLACK}Filtre:
@ -720,6 +723,7 @@ STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Clica la
STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Clica la pista de música per treure-la de la llista actual (només en llistes personalitzables) STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Clica la pista de música per treure-la de la llista actual (només en llistes personalitzables)
# Highscore window # Highscore window
STR_HIGHSCORE_TOP_COMPANIES :{BIG_FONT}{BLACK}Millors companyies
STR_HIGHSCORE_POSITION :{BIG_FONT}{BLACK}{COMMA}. STR_HIGHSCORE_POSITION :{BIG_FONT}{BLACK}{COMMA}.
STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :Empresari STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :Empresari
STR_HIGHSCORE_PERFORMANCE_TITLE_ENTREPRENEUR :Emprenedor STR_HIGHSCORE_PERFORMANCE_TITLE_ENTREPRENEUR :Emprenedor
@ -1488,7 +1492,7 @@ STR_CONFIG_SETTING_LAND_GENERATOR_ORIGINAL :Original
STR_CONFIG_SETTING_LAND_GENERATOR_TERRA_GENESIS :TerraGenesis STR_CONFIG_SETTING_LAND_GENERATOR_TERRA_GENESIS :TerraGenesis
STR_CONFIG_SETTING_TERRAIN_TYPE :Tipus de terreny: {STRING} STR_CONFIG_SETTING_TERRAIN_TYPE :Tipus de terreny: {STRING}
STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT :(Només TerraGenesis) Escollir el tipus de terreny: des de molt pla fins a escarpat STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT :Escolliu l'altura dels turons i muntanyes del paisatge.
STR_CONFIG_SETTING_INDUSTRY_DENSITY :Densitat d'indústries: {STRING} STR_CONFIG_SETTING_INDUSTRY_DENSITY :Densitat d'indústries: {STRING}
STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Fixa el nombre d'indústries que s'haurien de generar i mantenir durant la partida STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Fixa el nombre d'indústries que s'haurien de generar i mantenir durant la partida
@ -1497,18 +1501,18 @@ STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Distància màx
STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Limita a quina distància del mapa es poden construir refineries de petroli i plataformes petrolíferes. En mapes amb illes, serveix per assegurar que estan prop de la costa. En mapes de més de 256 caselles, aquest valor s'escala automàticament. STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Limita a quina distància del mapa es poden construir refineries de petroli i plataformes petrolíferes. En mapes amb illes, serveix per assegurar que estan prop de la costa. En mapes de més de 256 caselles, aquest valor s'escala automàticament.
STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Alçada dels estatges amb neu: {STRING} STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Alçada dels estatges amb neu: {STRING}
STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Controla a partir de quina alçada apareix la neu en el paisatge subàrtic. La neu també afecta la generació d'indústries i els requisits per al creixement de les poblacions. Només es pot modificar a l'editor d'escenaris; altrament, es calcula fent servir la proporció de terreny nevat. STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Tria a quina altura comença a aparèixer neu al paisatge subàrtic. La neu també afecta a la generació d'indústries i els requisits per al creixement de les poblacions. Només es pot modificar a l'editor d'escenaris; altrament, es calcula fent servir la proporció de terreny nevat.
STR_CONFIG_SETTING_SNOW_COVERAGE :Terreny nevat: {STRING} STR_CONFIG_SETTING_SNOW_COVERAGE :Terreny nevat: {STRING}
STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Controla la quantitat aproximada de terreny nevat que hi ha en els paisatges subàrtics. La neu afecta a la generació d'indústries i el creixement de les poblacions. Només s'usa durant la generació de mapes. El terreny d'alçada propera al nivell del mar mai està nevat. STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Escolliu la quantitat aproximada de neu als paisatges subàrtics. La neu també afecta a la generació d'indústries i els requisits per al creixement de les poblacions. Només es fa servir durant la generació de mapes. A nivell de mar i a les caselles costeres mai hi haurà neu.
STR_CONFIG_SETTING_SNOW_COVERAGE_VALUE :{NUM}{NBSP}% STR_CONFIG_SETTING_SNOW_COVERAGE_VALUE :{NUM}{NBSP}%
STR_CONFIG_SETTING_DESERT_COVERAGE :Terreny desèrtic: {STRING} STR_CONFIG_SETTING_DESERT_COVERAGE :Terreny desèrtic: {STRING}
STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :Controla la quantitat aproximada de terreny desèrtic que hi ha en els paisatges tropicals. Els deserts afecten a la generació d'indústries. Només s'usa durant la generació de mapes. STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :Escolliu la quantitat aproximada de desert dels paisatges tropicals. El desert afecta a la generació d'indústries i els requisits de creixement de les poblacions. Només es fa servir durant la generació de mapes.
STR_CONFIG_SETTING_DESERT_COVERAGE_VALUE :{NUM}{NBSP}% STR_CONFIG_SETTING_DESERT_COVERAGE_VALUE :{NUM}{NBSP}%
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :Geografia del terreny: {STRING} STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :Geografia del terreny: {STRING}
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :(Només TerraGenesis) Escollir la suavitat del paisatge: els terrenys suaus tenen menys turons i són regulars; els terrenys més rugosos són irregulars i tenen molts turons STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :Trieu la forma i quantitat de turons. Els terrenys més suaus tenen menys turons i són més amples, mentre que els terrenys més irregulars tenen més turons i són més petits.
###length 4 ###length 4
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :Molt suau STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :Molt suau
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_SMOOTH :Suau STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_SMOOTH :Suau
@ -1516,7 +1520,7 @@ STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_ROUGH :Escarpat
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_ROUGH :Molt escarpat STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_ROUGH :Molt escarpat
STR_CONFIG_SETTING_VARIETY :Varietat: {STRING} STR_CONFIG_SETTING_VARIETY :Varietat: {STRING}
STR_CONFIG_SETTING_VARIETY_HELPTEXT :(Només TerraGenesis) Controla la varietat en la distribució de les zones muntanyoses i planes. Aquesta opció controla la distribució d'aquestes zones; si es vol modificar si el terreny és més o menys muntanyós s'han de modificar altres opcions STR_CONFIG_SETTING_VARIETY_HELPTEXT :Trieu si el mapa ha de contenir muntanyes o àrees planes. Com més varietat, més diferències hi haurà entre l'elevació de les àrees muntanyoses i planes.
STR_CONFIG_SETTING_RIVER_AMOUNT :Quantitat de rius: {STRING} STR_CONFIG_SETTING_RIVER_AMOUNT :Quantitat de rius: {STRING}
STR_CONFIG_SETTING_RIVER_AMOUNT_HELPTEXT :Escollir la quantitat de rius a generar STR_CONFIG_SETTING_RIVER_AMOUNT_HELPTEXT :Escollir la quantitat de rius a generar
@ -1536,6 +1540,7 @@ STR_CONFIG_SETTING_ROAD_SIDE_LEFT :Conducció per
STR_CONFIG_SETTING_ROAD_SIDE_RIGHT :Conducció per la dreta STR_CONFIG_SETTING_ROAD_SIDE_RIGHT :Conducció per la dreta
STR_CONFIG_SETTING_HEIGHTMAP_ROTATION :Rotació del mapa d'alçades: {STRING} STR_CONFIG_SETTING_HEIGHTMAP_ROTATION :Rotació del mapa d'alçades: {STRING}
STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_TOOLTIP :Escolliu de quina manera s'ha de rotar el mapa d'alçades per a encaixar-lo al món de la partida.
###length 2 ###length 2
STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_COUNTER_CLOCKWISE :Antihorari STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_COUNTER_CLOCKWISE :Antihorari
STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_CLOCKWISE :Horari STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_CLOCKWISE :Horari
@ -1656,7 +1661,12 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Activa la utili
STR_CONFIG_SETTING_LOADING_INDICATORS :Utilitza indicadors de càrrega: {STRING} STR_CONFIG_SETTING_LOADING_INDICATORS :Utilitza indicadors de càrrega: {STRING}
STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :Selecciona si els indicadors de càrrega seran mostrats sobre els vehicles en càrrega o descàrrega STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :Selecciona si els indicadors de càrrega seran mostrats sobre els vehicles en càrrega o descàrrega
STR_CONFIG_SETTING_TIMETABLE_MODE :Unitats de temps per als horaris: {STRING}
STR_CONFIG_SETTING_TIMETABLE_MODE_HELPTEXT :Seleccioneu les unitats de temps que es faran servir per als horaris.
###length 3 ###length 3
STR_CONFIG_SETTING_TIMETABLE_MODE_DAYS :Dies
STR_CONFIG_SETTING_TIMETABLE_MODE_SECONDS :Segons
STR_CONFIG_SETTING_TIMETABLE_MODE_TICKS :Tics
STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Mostra l'arribada i la sortida als horaris: {STRING} STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Mostra l'arribada i la sortida als horaris: {STRING}
STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Mostra als horaris l'arribada anticipadament i les hores de sortida STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Mostra als horaris l'arribada anticipadament i les hores de sortida
@ -2187,12 +2197,20 @@ STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Mostra e
STR_LIVERY_ROAD_VEHICLE_TOOLTIP :{BLACK}Mostra els esquemes de colors dels automòbils STR_LIVERY_ROAD_VEHICLE_TOOLTIP :{BLACK}Mostra els esquemes de colors dels automòbils
STR_LIVERY_SHIP_TOOLTIP :{BLACK}Mostra els esquemes de colors dels vaixells STR_LIVERY_SHIP_TOOLTIP :{BLACK}Mostra els esquemes de colors dels vaixells
STR_LIVERY_AIRCRAFT_TOOLTIP :{BLACK}Mostra esquemes de colors dels avions STR_LIVERY_AIRCRAFT_TOOLTIP :{BLACK}Mostra esquemes de colors dels avions
STR_LIVERY_TRAIN_GROUP_TOOLTIP :{BLACK}Mostra els colors dels grups de trens.
STR_LIVERY_ROAD_VEHICLE_GROUP_TOOLTIP :{BLACK}Mostra els colors dels grups de vehicles de carretera.
STR_LIVERY_SHIP_GROUP_TOOLTIP :{BLACK}Mostra els colors dels grups de vaixells.
STR_LIVERY_AIRCRAFT_GROUP_TOOLTIP :{BLACK}Mostra els colors dels grups d'aeronaus
STR_LIVERY_PRIMARY_TOOLTIP :{BLACK}Escolleix el color primari per l'esquema triat. Ctr+Click establirà el color per a cada esquema STR_LIVERY_PRIMARY_TOOLTIP :{BLACK}Escolleix el color primari per l'esquema triat. Ctr+Click establirà el color per a cada esquema
STR_LIVERY_SECONDARY_TOOLTIP :{BLACK}Escolleix el color secundari per l'esquema triat. Ctrl+Click establirà el color per a cada esquema STR_LIVERY_SECONDARY_TOOLTIP :{BLACK}Escolleix el color secundari per l'esquema triat. Ctrl+Click establirà el color per a cada esquema
STR_LIVERY_PANEL_TOOLTIP :{BLACK}Selecciona un esquema de colors per canviar-lo, o diversos esquemes amb CTRL+Clic. Clica a la casella per canviar l'esquema STR_LIVERY_PANEL_TOOLTIP :{BLACK}Selecciona un esquema de colors per canviar-lo, o diversos esquemes amb CTRL+Clic. Clica a la casella per canviar l'esquema
STR_LIVERY_TRAIN_GROUP_EMPTY :No hi ha grups de trens establerts
STR_LIVERY_ROAD_VEHICLE_GROUP_EMPTY :No hi ha grups de vehicles de carretera establerts
STR_LIVERY_SHIP_GROUP_EMPTY :No hi ha grups de vaixells establerts
STR_LIVERY_AIRCRAFT_GROUP_EMPTY :No hi ha grups d'aeronaus establerts
###length 23 ###length 23
STR_LIVERY_DEFAULT :Decoració estàndard STR_LIVERY_DEFAULT :Decoració per defecte
STR_LIVERY_STEAM :Locomotora a Vapor STR_LIVERY_STEAM :Locomotora a Vapor
STR_LIVERY_DIESEL :Locomotora Dièsel STR_LIVERY_DIESEL :Locomotora Dièsel
STR_LIVERY_ELECTRIC :Locomotora Elèctrica STR_LIVERY_ELECTRIC :Locomotora Elèctrica
@ -2345,7 +2363,7 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}El nom d
STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Posa una contrasenya STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Posa una contrasenya
STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Protegeix la teva partida amb una contrasenya si no vols que sigui accessible a desconeguts STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Protegeix la teva partida amb una contrasenya si no vols que sigui accessible a desconeguts
STR_NETWORK_START_SERVER_VISIBILITY_LABEL :{BLACK}Visibilitat STR_NETWORK_START_SERVER_VISIBILITY_LABEL :{BLACK}Visibilitat:
STR_NETWORK_START_SERVER_VISIBILITY_TOOLTIP :{BLACK}Permet establir si altres persones poden veure el vostre servidor a la llista pública. STR_NETWORK_START_SERVER_VISIBILITY_TOOLTIP :{BLACK}Permet establir si altres persones poden veure el vostre servidor a la llista pública.
STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} client{P "" s} STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} client{P "" s}
STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Màxim nombre de clients: STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Màxim nombre de clients:
@ -3200,11 +3218,15 @@ STR_MAPGEN_MAPSIZE :{BLACK}Mida del
STR_MAPGEN_MAPSIZE_TOOLTIP :{BLACK}Selecciona la mida del mapa en cel·les. El nombre de cel·les disponibles serà lleugerament més petit STR_MAPGEN_MAPSIZE_TOOLTIP :{BLACK}Selecciona la mida del mapa en cel·les. El nombre de cel·les disponibles serà lleugerament més petit
STR_MAPGEN_BY :{BLACK}* STR_MAPGEN_BY :{BLACK}*
STR_MAPGEN_NUMBER_OF_TOWNS :{BLACK}Nombre de poblacions: STR_MAPGEN_NUMBER_OF_TOWNS :{BLACK}Nombre de poblacions:
STR_MAPGEN_NUMBER_OF_TOWNS_TOOLTIP :{BLACK}Trieu la densitat de les poblacions o un nombre personalitzat.
STR_MAPGEN_TOWN_NAME_LABEL :{BLACK}Estil dels noms de les poblacions: STR_MAPGEN_TOWN_NAME_LABEL :{BLACK}Estil dels noms de les poblacions:
STR_MAPGEN_TOWN_NAME_DROPDOWN_TOOLTIP :{BLACK}Selecciona l'estil dels noms de poblacions STR_MAPGEN_TOWN_NAME_DROPDOWN_TOOLTIP :{BLACK}Selecciona l'estil dels noms de poblacions
STR_MAPGEN_DATE :{BLACK}Data: STR_MAPGEN_DATE :{BLACK}Data:
STR_MAPGEN_DATE_TOOLTIP :{BLACK}Trieu la data d'inici.
STR_MAPGEN_NUMBER_OF_INDUSTRIES :{BLACK}Nombre d'indústries: STR_MAPGEN_NUMBER_OF_INDUSTRIES :{BLACK}Nombre d'indústries:
STR_MAPGEN_NUMBER_OF_INDUSTRIES_TOOLTIP :{BLACK}Trieu la densitat de les indústries o un nombre personalitzat.
STR_MAPGEN_HEIGHTMAP_HEIGHT :{BLACK}Alçada del cim més alt: STR_MAPGEN_HEIGHTMAP_HEIGHT :{BLACK}Alçada del cim més alt:
STR_MAPGEN_HEIGHTMAP_HEIGHT_TOOLTIP :{BLACK}Trieu l'altura del cim més alt que el joc mirarà de crear, mesurat respecte el nivell de mar.
STR_MAPGEN_HEIGHTMAP_HEIGHT_UP :{BLACK}Augmenta l'alçada màxima o l'alçada màxima dels cims en una unitat STR_MAPGEN_HEIGHTMAP_HEIGHT_UP :{BLACK}Augmenta l'alçada màxima o l'alçada màxima dels cims en una unitat
STR_MAPGEN_HEIGHTMAP_HEIGHT_DOWN :{BLACK}Redueix l'alçada màxima o l'alçada màxima dels cims en una unitat STR_MAPGEN_HEIGHTMAP_HEIGHT_DOWN :{BLACK}Redueix l'alçada màxima o l'alçada màxima dels cims en una unitat
STR_MAPGEN_SNOW_COVERAGE :{BLACK}Proporció de terreny nevat: STR_MAPGEN_SNOW_COVERAGE :{BLACK}Proporció de terreny nevat:
@ -3217,10 +3239,12 @@ STR_MAPGEN_DESERT_COVERAGE_DOWN :{BLACK}Redueix
STR_MAPGEN_DESERT_COVERAGE_TEXT :{BLACK}{NUM}{NBSP}% STR_MAPGEN_DESERT_COVERAGE_TEXT :{BLACK}{NUM}{NBSP}%
STR_MAPGEN_TERRAIN_TYPE :{BLACK}Tipus de terreny: STR_MAPGEN_TERRAIN_TYPE :{BLACK}Tipus de terreny:
STR_MAPGEN_SEA_LEVEL :{BLACK}Nivell de mar: STR_MAPGEN_SEA_LEVEL :{BLACK}Nivell de mar:
STR_MAPGEN_SEA_LEVEL_TOOLTIP :{BLACK}Seleccioneu el nivell de la mar
STR_MAPGEN_QUANTITY_OF_RIVERS :{BLACK}Quantitat de rius: STR_MAPGEN_QUANTITY_OF_RIVERS :{BLACK}Quantitat de rius:
STR_MAPGEN_SMOOTHNESS :{BLACK}Suavitat: STR_MAPGEN_SMOOTHNESS :{BLACK}Suavitat:
STR_MAPGEN_VARIETY :{BLACK}Varietat: STR_MAPGEN_VARIETY :{BLACK}Varietat:
STR_MAPGEN_GENERATE :{WHITE}Genera STR_MAPGEN_GENERATE :{WHITE}Genera
STR_MAPGEN_GENERATE_TOOLTIP :{BLACK}Creeu el món i jugueu a l'OpenTTD!
STR_MAPGEN_NEWGRF_SETTINGS :{BLACK}Configuració del NewGRF STR_MAPGEN_NEWGRF_SETTINGS :{BLACK}Configuració del NewGRF
STR_MAPGEN_NEWGRF_SETTINGS_TOOLTIP :{BLACK}Mostra la configuració de NewGRF STR_MAPGEN_NEWGRF_SETTINGS_TOOLTIP :{BLACK}Mostra la configuració de NewGRF
STR_MAPGEN_AI_SETTINGS :{BLACK}Configuració d'IA STR_MAPGEN_AI_SETTINGS :{BLACK}Configuració d'IA
@ -3253,6 +3277,7 @@ STR_MAPGEN_TOWN_NAME_CATALAN :Català
# Strings for map borders at game generation # Strings for map borders at game generation
STR_MAPGEN_BORDER_TYPE :{BLACK}Vores del mapa: STR_MAPGEN_BORDER_TYPE :{BLACK}Vores del mapa:
STR_MAPGEN_BORDER_TYPE_TOOLTIP :{BLACK}Escolliu les vores del món de la partida.
STR_MAPGEN_NORTHWEST :{BLACK}Nord-oest STR_MAPGEN_NORTHWEST :{BLACK}Nord-oest
STR_MAPGEN_NORTHEAST :{BLACK}Nord-est STR_MAPGEN_NORTHEAST :{BLACK}Nord-est
STR_MAPGEN_SOUTHEAST :{BLACK}Sud-est STR_MAPGEN_SOUTHEAST :{BLACK}Sud-est
@ -3265,7 +3290,9 @@ STR_MAPGEN_BORDER_MANUAL :{BLACK}Manual
STR_MAPGEN_HEIGHTMAP_ROTATION :{BLACK}Rotació del mapa d'alçades: STR_MAPGEN_HEIGHTMAP_ROTATION :{BLACK}Rotació del mapa d'alçades:
STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}Nom del mapa d'alçades: STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}Nom del mapa d'alçades:
STR_MAPGEN_HEIGHTMAP_NAME_TOOLTIP :{BLACK}El nom del fitxer imatge del mapa d'alçades
STR_MAPGEN_HEIGHTMAP_SIZE_LABEL :{BLACK}Mida: STR_MAPGEN_HEIGHTMAP_SIZE_LABEL :{BLACK}Mida:
STR_MAPGEN_HEIGHTMAP_SIZE_LABEL_TOOLTIP :{BLACK}La mida de la imatge d'origen del mapa d'alçades. Per a obtenir bons resultats, cada costat hauria de coincidir amb una mida disponible de l'OpenTTD, com ara 256, 512 o 1024.
STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM} x {NUM} STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM} x {NUM}
STR_MAPGEN_TERRAIN_TYPE_QUERY_CAPT :{WHITE}Alçada desitjada dels cims STR_MAPGEN_TERRAIN_TYPE_QUERY_CAPT :{WHITE}Alçada desitjada dels cims
@ -3280,6 +3307,7 @@ STR_SE_MAPGEN_FLAT_WORLD :{WHITE}Terreny
STR_SE_MAPGEN_FLAT_WORLD_TOOLTIP :{BLACK}Generar un terreny pla STR_SE_MAPGEN_FLAT_WORLD_TOOLTIP :{BLACK}Generar un terreny pla
STR_SE_MAPGEN_RANDOM_LAND :{WHITE}Terreny aleatori STR_SE_MAPGEN_RANDOM_LAND :{WHITE}Terreny aleatori
STR_SE_MAPGEN_FLAT_WORLD_HEIGHT :{BLACK}Alçada del terreny pla: STR_SE_MAPGEN_FLAT_WORLD_HEIGHT :{BLACK}Alçada del terreny pla:
STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_TOOLTIP :{BLACK}Trieu l'altura de la terra per damunt del nivell de la mar.
STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_DOWN :{BLACK}Mou l'alçada del terreny pla un pas avall STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_DOWN :{BLACK}Mou l'alçada del terreny pla un pas avall
STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_UP :{BLACK}Mou l'alçada del terreny pla un pas amunt STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_UP :{BLACK}Mou l'alçada del terreny pla un pas amunt
@ -4573,8 +4601,13 @@ STR_TIMETABLE_STATUS_ON_TIME :{BLACK}Actualme
STR_TIMETABLE_STATUS_LATE :{BLACK}Actualment aquest vehicle va {STRING} tard STR_TIMETABLE_STATUS_LATE :{BLACK}Actualment aquest vehicle va {STRING} tard
STR_TIMETABLE_STATUS_EARLY :{BLACK}Actualment aquest vehicle va {STRING} d'hora STR_TIMETABLE_STATUS_EARLY :{BLACK}Actualment aquest vehicle va {STRING} d'hora
STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}Aquest horari encara no ha començat STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}Aquest horari encara no ha començat
STR_TIMETABLE_STATUS_START_AT_DATE :{BLACK}Aquest horari començarà a {STRING}
STR_TIMETABLE_STATUS_START_IN_SECONDS :{BLACK}Aquest horari començarà en {COMMA}{NBSP}segons
STR_TIMETABLE_START :{BLACK}Comença l'horari
STR_TIMETABLE_START_TOOLTIP :{BLACK}Trieu quan ha de començar l'horari. Amb Ctrl+clic es distribuirà l'inici de tots els vehicles que comparteixen les ordres segons el seu ordre relatiu, si s'ha establert completament l'horari.
STR_TIMETABLE_START_SECONDS_QUERY :Segons fins que comenci l'horari
STR_TIMETABLE_CHANGE_TIME :{BLACK}Canvia Temps STR_TIMETABLE_CHANGE_TIME :{BLACK}Canvia Temps
STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Canvia el emps que l'ordre marcada hauria de prendre. Amb Ctrl+clic estableix el temps per a totes les ordres. STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Canvia el emps que l'ordre marcada hauria de prendre. Amb Ctrl+clic estableix el temps per a totes les ordres.
@ -4598,6 +4631,10 @@ STR_TIMETABLE_EXPECTED :{BLACK}Esperat
STR_TIMETABLE_SCHEDULED :{BLACK}Planificat STR_TIMETABLE_SCHEDULED :{BLACK}Planificat
STR_TIMETABLE_EXPECTED_TOOLTIP :{BLACK}Canvia entre esperat i planificat STR_TIMETABLE_EXPECTED_TOOLTIP :{BLACK}Canvia entre esperat i planificat
STR_TIMETABLE_ARRIVAL_DATE :A: {COLOUR}{DATE_TINY}
STR_TIMETABLE_DEPARTURE_DATE :S: {COLOUR}{DATE_TINY}
STR_TIMETABLE_ARRIVAL_SECONDS_IN_FUTURE :A: {COLOUR}{COMMA}{NBSP}s
STR_TIMETABLE_DEPARTURE_SECONDS_IN_FUTURE :S: {COLOUR}{COMMA}{NBSP}s
# Date window (for timetable) # Date window (for timetable)
@ -4625,9 +4662,9 @@ STR_AI_DEBUG_MATCH_CASE :{BLACK}Distinge
STR_AI_DEBUG_MATCH_CASE_TOOLTIP :{BLACK}Commuta la distinció entre majúscules i minúscules quan es comparin els missatges de registre d'IA amb la cadena de parada. STR_AI_DEBUG_MATCH_CASE_TOOLTIP :{BLACK}Commuta la distinció entre majúscules i minúscules quan es comparin els missatges de registre d'IA amb la cadena de parada.
STR_AI_DEBUG_CONTINUE :{BLACK}Continua STR_AI_DEBUG_CONTINUE :{BLACK}Continua
STR_AI_DEBUG_CONTINUE_TOOLTIP :{BLACK}Reprèn i continua l'execució de la IA. STR_AI_DEBUG_CONTINUE_TOOLTIP :{BLACK}Reprèn i continua l'execució de la IA.
STR_AI_DEBUG_SELECT_AI_TOOLTIP :{BLACK}Mostra la sortida de depuració d'aquesta IA. STR_AI_DEBUG_SELECT_AI_TOOLTIP :{BLACK}Mostra la sortida de depuració d'aquesta IA. Feu Ctrl+clic per a mostrar-la en una finestra nova.
STR_AI_GAME_SCRIPT :{BLACK}Script de partida STR_AI_GAME_SCRIPT :{BLACK}Script de partida
STR_AI_GAME_SCRIPT_TOOLTIP :{BLACK}Mostra el registre de l'script de partida. STR_AI_GAME_SCRIPT_TOOLTIP :{BLACK}Mostra el registre de l'script de partida. Feu Ctrl+clic per a obrir-lo en una finestra nova.
STR_ERROR_AI_NO_AI_FOUND :No s'ha trobat una IA adequada per carregar.{}Aquesta IA és una IA que no fa res.{}Podeu descarregar diverses IA via el sistema de «Contingut en línia». STR_ERROR_AI_NO_AI_FOUND :No s'ha trobat una IA adequada per carregar.{}Aquesta IA és una IA que no fa res.{}Podeu descarregar diverses IA via el sistema de «Contingut en línia».
STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}Un dels scripts que s'executava ha fallat. Si us plau, informeu l'autor de l'script amb una captura de pantalla de la finestra de depuració de l'script d'IA/partida. STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}Un dels scripts que s'executava ha fallat. Si us plau, informeu l'autor de l'script amb una captura de pantalla de la finestra de depuració de l'script d'IA/partida.

@ -257,6 +257,7 @@ STR_UNITS_HEIGHT_SI :{DECIMAL} m
STR_UNITS_DAYS :{COMMA}{NBSP}dag{P "" s} STR_UNITS_DAYS :{COMMA}{NBSP}dag{P "" s}
STR_UNITS_SECONDS :{COMMA}{NBSP}sekund{P "" er} STR_UNITS_SECONDS :{COMMA}{NBSP}sekund{P "" er}
STR_UNITS_TICKS :{COMMA}{NBSP}tick{P "" s}
# Common window strings # Common window strings
STR_LIST_FILTER_TITLE :{BLACK}Filtrer udtryk: STR_LIST_FILTER_TITLE :{BLACK}Filtrer udtryk:
@ -1664,6 +1665,7 @@ STR_CONFIG_SETTING_TIMETABLE_MODE_HELPTEXT :Vælg de tidsen
###length 3 ###length 3
STR_CONFIG_SETTING_TIMETABLE_MODE_DAYS :Dage STR_CONFIG_SETTING_TIMETABLE_MODE_DAYS :Dage
STR_CONFIG_SETTING_TIMETABLE_MODE_SECONDS :Sekunder STR_CONFIG_SETTING_TIMETABLE_MODE_SECONDS :Sekunder
STR_CONFIG_SETTING_TIMETABLE_MODE_TICKS :Ticks
STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Vis ankomst og afgang i tidsplaner: {STRING} STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Vis ankomst og afgang i tidsplaner: {STRING}
STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Vis forventede ankomst-og afgangstider i tidsplaner STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Vis forventede ankomst-og afgangstider i tidsplaner
@ -2201,6 +2203,7 @@ STR_LIVERY_AIRCRAFT_GROUP_TOOLTIP :{BLACK}Vis farv
STR_LIVERY_PRIMARY_TOOLTIP :{BLACK}Vælg den primære farve for det valgte farveskema. Ctrl+Click vil sætte denne farve for alle farveskemaer STR_LIVERY_PRIMARY_TOOLTIP :{BLACK}Vælg den primære farve for det valgte farveskema. Ctrl+Click vil sætte denne farve for alle farveskemaer
STR_LIVERY_SECONDARY_TOOLTIP :{BLACK}Vælg den sekundære farve for det valgte farveskema. Ctrl+Click vil sætte denne farve for alle farveskemaer STR_LIVERY_SECONDARY_TOOLTIP :{BLACK}Vælg den sekundære farve for det valgte farveskema. Ctrl+Click vil sætte denne farve for alle farveskemaer
STR_LIVERY_PANEL_TOOLTIP :{BLACK}Vælg et farveskema, som skal ændres, eller flere farveskemaer vha. CTRL+klik. Klik på boksen for at slå brug af farveskemaet til/fra STR_LIVERY_PANEL_TOOLTIP :{BLACK}Vælg et farveskema, som skal ændres, eller flere farveskemaer vha. CTRL+klik. Klik på boksen for at slå brug af farveskemaet til/fra
STR_LIVERY_TRAIN_GROUP_EMPTY :Der er ikke oprettet toggrupper
STR_LIVERY_ROAD_VEHICLE_GROUP_EMPTY :Der er ikke oprettet grupper af vejkøretøjer STR_LIVERY_ROAD_VEHICLE_GROUP_EMPTY :Der er ikke oprettet grupper af vejkøretøjer
STR_LIVERY_SHIP_GROUP_EMPTY :Der er ikke oprettet skibsgrupper STR_LIVERY_SHIP_GROUP_EMPTY :Der er ikke oprettet skibsgrupper
STR_LIVERY_AIRCRAFT_GROUP_EMPTY :Der er ikke oprettet flygrupper STR_LIVERY_AIRCRAFT_GROUP_EMPTY :Der er ikke oprettet flygrupper

@ -2196,9 +2196,17 @@ STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Kleurens
STR_LIVERY_ROAD_VEHICLE_TOOLTIP :{BLACK}Kleurenschema's voor wegvoertuigen weergeven STR_LIVERY_ROAD_VEHICLE_TOOLTIP :{BLACK}Kleurenschema's voor wegvoertuigen weergeven
STR_LIVERY_SHIP_TOOLTIP :{BLACK}Kleurenschema's voor schepen weergeven STR_LIVERY_SHIP_TOOLTIP :{BLACK}Kleurenschema's voor schepen weergeven
STR_LIVERY_AIRCRAFT_TOOLTIP :{BLACK}Kleurenschema's voor vliegtuigen weergeven STR_LIVERY_AIRCRAFT_TOOLTIP :{BLACK}Kleurenschema's voor vliegtuigen weergeven
STR_LIVERY_TRAIN_GROUP_TOOLTIP :{BLACK}Kleuren van treingroepen weergeven
STR_LIVERY_ROAD_VEHICLE_GROUP_TOOLTIP :{BLACK}Kleuren van wegvoertuiggroepen weergeven
STR_LIVERY_SHIP_GROUP_TOOLTIP :{BLACK}Kleuren van scheepsgroepen weergeven
STR_LIVERY_AIRCRAFT_GROUP_TOOLTIP :{BLACK}Kleuren van vliegtuiggroepen weergeven
STR_LIVERY_PRIMARY_TOOLTIP :{BLACK}Selecteer de hoofdkleur voor het geselecteerde schema. Ctrl+klik zal deze kleur instellen voor elk schema STR_LIVERY_PRIMARY_TOOLTIP :{BLACK}Selecteer de hoofdkleur voor het geselecteerde schema. Ctrl+klik zal deze kleur instellen voor elk schema
STR_LIVERY_SECONDARY_TOOLTIP :{BLACK}Selecteer de secundaire kleur voor het geselecteerde schema. Met Ctrl+klik stel je deze kleur in voor alle schema's STR_LIVERY_SECONDARY_TOOLTIP :{BLACK}Selecteer de secundaire kleur voor het geselecteerde schema. Met Ctrl+klik stel je deze kleur in voor alle schema's
STR_LIVERY_PANEL_TOOLTIP :{BLACK}Selecteer een kleurenschema om te wijzigen of meerdere schema's met Ctrl+klik. Vink de keuzevakjes aan-uit om het schema aan-uit te zetten STR_LIVERY_PANEL_TOOLTIP :{BLACK}Selecteer een kleurenschema om te wijzigen of meerdere schema's met Ctrl+klik. Vink de keuzevakjes aan-uit om het schema aan-uit te zetten
STR_LIVERY_TRAIN_GROUP_EMPTY :Geen treingroepen ingesteld
STR_LIVERY_ROAD_VEHICLE_GROUP_EMPTY :Geen wegvoertuiggroepen ingesteld
STR_LIVERY_SHIP_GROUP_EMPTY :Geen scheepsgroepen ingesteld
STR_LIVERY_AIRCRAFT_GROUP_EMPTY :Geen vliegtuiggroepen ingesteld
###length 23 ###length 23
STR_LIVERY_DEFAULT :Standaard kleurenschema STR_LIVERY_DEFAULT :Standaard kleurenschema
@ -4653,9 +4661,9 @@ STR_AI_DEBUG_MATCH_CASE :{BLACK}Hoofdlet
STR_AI_DEBUG_MATCH_CASE_TOOLTIP :{BLACK}Hoofdlettergevoeligheid aan-uitzetten bij het vergelijken van AI-logberichten t.o.v. de afbreektekst STR_AI_DEBUG_MATCH_CASE_TOOLTIP :{BLACK}Hoofdlettergevoeligheid aan-uitzetten bij het vergelijken van AI-logberichten t.o.v. de afbreektekst
STR_AI_DEBUG_CONTINUE :{BLACK}Doorgaan STR_AI_DEBUG_CONTINUE :{BLACK}Doorgaan
STR_AI_DEBUG_CONTINUE_TOOLTIP :{BLACK}Het spel vervolgen en de AI voortzetten STR_AI_DEBUG_CONTINUE_TOOLTIP :{BLACK}Het spel vervolgen en de AI voortzetten
STR_AI_DEBUG_SELECT_AI_TOOLTIP :{BLACK}Probleemgegevens van deze AI weergeven STR_AI_DEBUG_SELECT_AI_TOOLTIP :{BLACK}Probleemgegevens van deze AI weergeven. Ctrl+klik opent in een nieuw venster
STR_AI_GAME_SCRIPT :{BLACK}Spelscript STR_AI_GAME_SCRIPT :{BLACK}Spelscript
STR_AI_GAME_SCRIPT_TOOLTIP :{BLACK}Controleer het logboek van het spelscript STR_AI_GAME_SCRIPT_TOOLTIP :{BLACK}Controleer het logboek van het spelscript. Ctrl+klik opent in een nieuw venster
STR_ERROR_AI_NO_AI_FOUND :Geen geschikte AI gevonden.{} Deze AI is een 'dummy' en voert niets uit.{}Verschillende AI's kunnen worden gedownload via het 'Online Content' systeem STR_ERROR_AI_NO_AI_FOUND :Geen geschikte AI gevonden.{} Deze AI is een 'dummy' en voert niets uit.{}Verschillende AI's kunnen worden gedownload via het 'Online Content' systeem
STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}Eén van de actieve scripts is vastgelopen. Meld dit a.u.b. bij de auteur van dit script met een schermafdruk van het AI-/spelscript-probleemvenster. STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}Eén van de actieve scripts is vastgelopen. Meld dit a.u.b. bij de auteur van dit script met een schermafdruk van het AI-/spelscript-probleemvenster.

@ -2196,12 +2196,20 @@ STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Show tra
STR_LIVERY_ROAD_VEHICLE_TOOLTIP :{BLACK}Show road vehicle color schemes STR_LIVERY_ROAD_VEHICLE_TOOLTIP :{BLACK}Show road vehicle color schemes
STR_LIVERY_SHIP_TOOLTIP :{BLACK}Show ship color schemes STR_LIVERY_SHIP_TOOLTIP :{BLACK}Show ship color schemes
STR_LIVERY_AIRCRAFT_TOOLTIP :{BLACK}Show aircraft color schemes STR_LIVERY_AIRCRAFT_TOOLTIP :{BLACK}Show aircraft color schemes
STR_LIVERY_TRAIN_GROUP_TOOLTIP :{BLACK}Show colors of train groups
STR_LIVERY_ROAD_VEHICLE_GROUP_TOOLTIP :{BLACK}Show colors of road vehicle groups
STR_LIVERY_SHIP_GROUP_TOOLTIP :{BLACK}Show colors of ship groups
STR_LIVERY_AIRCRAFT_GROUP_TOOLTIP :{BLACK}Show colors of aircraft groups
STR_LIVERY_PRIMARY_TOOLTIP :{BLACK}Choose the primary color for the selected scheme. Ctrl+Click will set this color for every scheme STR_LIVERY_PRIMARY_TOOLTIP :{BLACK}Choose the primary color for the selected scheme. Ctrl+Click will set this color for every scheme
STR_LIVERY_SECONDARY_TOOLTIP :{BLACK}Choose the secondary color for the selected scheme. Ctrl+Click will set this color for every scheme STR_LIVERY_SECONDARY_TOOLTIP :{BLACK}Choose the secondary color for the selected scheme. Ctrl+Click will set this color for every scheme
STR_LIVERY_PANEL_TOOLTIP :{BLACK}Select a color scheme to change, or multiple schemes with Ctrl+Click. Click on the box to toggle use of the scheme STR_LIVERY_PANEL_TOOLTIP :{BLACK}Select a color scheme to change, or multiple schemes with Ctrl+Click. Click on the box to toggle use of the scheme
STR_LIVERY_TRAIN_GROUP_EMPTY :No train groups are set up
STR_LIVERY_ROAD_VEHICLE_GROUP_EMPTY :No road vehicle groups are set up
STR_LIVERY_SHIP_GROUP_EMPTY :No ship groups are set up
STR_LIVERY_AIRCRAFT_GROUP_EMPTY :No aircraft groups are set up
###length 23 ###length 23
STR_LIVERY_DEFAULT :Standard Livery STR_LIVERY_DEFAULT :Default Livery
STR_LIVERY_STEAM :Steam Engine STR_LIVERY_STEAM :Steam Engine
STR_LIVERY_DIESEL :Diesel Engine STR_LIVERY_DIESEL :Diesel Engine
STR_LIVERY_ELECTRIC :Electric Engine STR_LIVERY_ELECTRIC :Electric Engine
@ -4653,9 +4661,9 @@ STR_AI_DEBUG_MATCH_CASE :{BLACK}Match ca
STR_AI_DEBUG_MATCH_CASE_TOOLTIP :{BLACK}Toggle matching case when comparing AI log messages against the break string STR_AI_DEBUG_MATCH_CASE_TOOLTIP :{BLACK}Toggle matching case when comparing AI log messages against the break string
STR_AI_DEBUG_CONTINUE :{BLACK}Continue STR_AI_DEBUG_CONTINUE :{BLACK}Continue
STR_AI_DEBUG_CONTINUE_TOOLTIP :{BLACK}Unpause and continue the AI STR_AI_DEBUG_CONTINUE_TOOLTIP :{BLACK}Unpause and continue the AI
STR_AI_DEBUG_SELECT_AI_TOOLTIP :{BLACK}View debug output of this AI STR_AI_DEBUG_SELECT_AI_TOOLTIP :{BLACK}View debug output of this AI. Ctrl-Click to open in a new window
STR_AI_GAME_SCRIPT :{BLACK}Game Script STR_AI_GAME_SCRIPT :{BLACK}Game Script
STR_AI_GAME_SCRIPT_TOOLTIP :{BLACK}Check the Game Script log STR_AI_GAME_SCRIPT_TOOLTIP :{BLACK}Check the Game Script log. Ctrl-Click to open in a new window
STR_ERROR_AI_NO_AI_FOUND :No suitable AI found to load.{}This AI is a dummy AI and won't do anything.{}You can download several AIs via the 'Online Content' system STR_ERROR_AI_NO_AI_FOUND :No suitable AI found to load.{}This AI is a dummy AI and won't do anything.{}You can download several AIs via the 'Online Content' system
STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}One of the running scripts crashed. Please report this to the script author with a screenshot of the AI/Game Script Debug Window STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}One of the running scripts crashed. Please report this to the script author with a screenshot of the AI/Game Script Debug Window

@ -2196,12 +2196,20 @@ STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Näytä
STR_LIVERY_ROAD_VEHICLE_TOOLTIP :{BLACK}Näytä tieajoneuvojen väriteemat STR_LIVERY_ROAD_VEHICLE_TOOLTIP :{BLACK}Näytä tieajoneuvojen väriteemat
STR_LIVERY_SHIP_TOOLTIP :{BLACK}Näytä laivojen väriteemat STR_LIVERY_SHIP_TOOLTIP :{BLACK}Näytä laivojen väriteemat
STR_LIVERY_AIRCRAFT_TOOLTIP :{BLACK}Näytä ilma-alusten väriteemat STR_LIVERY_AIRCRAFT_TOOLTIP :{BLACK}Näytä ilma-alusten väriteemat
STR_LIVERY_TRAIN_GROUP_TOOLTIP :{BLACK}Näytä junaryhmien värit
STR_LIVERY_ROAD_VEHICLE_GROUP_TOOLTIP :{BLACK}Näytä ajoneuvoryhmien värit
STR_LIVERY_SHIP_GROUP_TOOLTIP :{BLACK}Näytä laivaryhmien värit
STR_LIVERY_AIRCRAFT_GROUP_TOOLTIP :{BLACK}Näytä ilma-alusryhmien värit
STR_LIVERY_PRIMARY_TOOLTIP :{BLACK}Valitse valitun kaavan ensisijainen väri. Ctrl+napsautus asettaa tämän värin kaikille kaavoille. STR_LIVERY_PRIMARY_TOOLTIP :{BLACK}Valitse valitun kaavan ensisijainen väri. Ctrl+napsautus asettaa tämän värin kaikille kaavoille.
STR_LIVERY_SECONDARY_TOOLTIP :{BLACK}Valitse valitun kaavan toissijainen väri. Ctrl+napsautus asettaa tämän värin kaikille kaavoille. STR_LIVERY_SECONDARY_TOOLTIP :{BLACK}Valitse valitun kaavan toissijainen väri. Ctrl+napsautus asettaa tämän värin kaikille kaavoille.
STR_LIVERY_PANEL_TOOLTIP :{BLACK}Valitse muutettava väriteema, tai valitse useita Ctrl pohjassa. Paina valintalaatikkoa valitaksesi teeman STR_LIVERY_PANEL_TOOLTIP :{BLACK}Valitse muutettava väriteema, tai valitse useita Ctrl pohjassa. Paina valintalaatikkoa valitaksesi teeman
STR_LIVERY_TRAIN_GROUP_EMPTY :Junaryhmiä ei ole muodostettu
STR_LIVERY_ROAD_VEHICLE_GROUP_EMPTY :Ajoneuvoryhmiä ei ole muodostettu
STR_LIVERY_SHIP_GROUP_EMPTY :Laivaryhmiä ei ole muodostettu
STR_LIVERY_AIRCRAFT_GROUP_EMPTY :Ilma-alusryhmiä ei ole muodostettu
###length 23 ###length 23
STR_LIVERY_DEFAULT :Normaalit tunnusvärit STR_LIVERY_DEFAULT :Oletusväritys
STR_LIVERY_STEAM :Höyryveturi STR_LIVERY_STEAM :Höyryveturi
STR_LIVERY_DIESEL :Dieselveturi STR_LIVERY_DIESEL :Dieselveturi
STR_LIVERY_ELECTRIC :Sähköveturi STR_LIVERY_ELECTRIC :Sähköveturi
@ -2711,7 +2719,7 @@ STR_RAIL_TOOLBAR_TOOLTIP_BUILD_AUTORAIL :{BLACK}Rakenna
STR_RAIL_TOOLBAR_TOOLTIP_BUILD_TRAIN_DEPOT_FOR_BUILDING :{BLACK}Rakenna veturitalli (junien ostamista ja huoltoa varten). Shift vaihtaa rakennustilan ja kustannusarvion välillä STR_RAIL_TOOLBAR_TOOLTIP_BUILD_TRAIN_DEPOT_FOR_BUILDING :{BLACK}Rakenna veturitalli (junien ostamista ja huoltoa varten). Shift vaihtaa rakennustilan ja kustannusarvion välillä
STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL_TO_WAYPOINT :{BLACK}Muunna raide reittipisteeksi. Ctrl liittää reittipisteet. Shift vaihtaa muuntotilan ja kustannusarvion välillä STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL_TO_WAYPOINT :{BLACK}Muunna raide reittipisteeksi. Ctrl liittää reittipisteet. Shift vaihtaa muuntotilan ja kustannusarvion välillä
STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_STATION :{BLACK}Rakenna rautatieasema. Ctrl liittää asemat. Shift vaihtaa rakennustilan ja kustannusarvion välillä STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_STATION :{BLACK}Rakenna rautatieasema. Ctrl liittää asemat. Shift vaihtaa rakennustilan ja kustannusarvion välillä
STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_SIGNALS :{BLACK}Rakenna opastimia. Ctrl vaihtaa joko siipiopastimet tai valo-opastimet{}Vetäminen rakentaa opastimia suoralle rautatielle. Ctrl rakentaa opastimia seuraavaan risteykseen saakka{}Ctrl+Click avaa opastimenvalintaikkunan. Shift vaihtaa rakennustilan ja kustannusarvion välillä STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_SIGNALS :{BLACK}Rakenna opastimia. Ctrl vaihtaa siipi- ja valo-opastimien välillä{}Vetäminen rakentaa opastimia suoralle rataosuudelle. Ctrl rakentaa opastimia seuraavaan risteykseen tai opastimeen saakka{}Ctrl+napsautus avaa opastimenvalintaikkunan. Shift vaihtaa rakennustilan ja kustannusarvion välillä
STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_BRIDGE :{BLACK}Rakenna rautatiesilta. Shift vaihtaa rakennustilan ja kustannusarvion välillä STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_BRIDGE :{BLACK}Rakenna rautatiesilta. Shift vaihtaa rakennustilan ja kustannusarvion välillä
STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TUNNEL :{BLACK}Rakenna rautatietunneli. Shift vaihtaa rakennustilan ja kustannusarvion välillä STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TUNNEL :{BLACK}Rakenna rautatietunneli. Shift vaihtaa rakennustilan ja kustannusarvion välillä
STR_RAIL_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Rautatien, opastimien, reittipisteiden ja asemien rakentaminen/poisto päälle/pois. Pidä pohjassa Ctrl-näppäintä poistaaksesi myös aseman tai reittipisteen alla olevat raiteet STR_RAIL_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Rautatien, opastimien, reittipisteiden ja asemien rakentaminen/poisto päälle/pois. Pidä pohjassa Ctrl-näppäintä poistaaksesi myös aseman tai reittipisteen alla olevat raiteet
@ -4653,9 +4661,9 @@ STR_AI_DEBUG_MATCH_CASE :{BLACK}Kirjaink
STR_AI_DEBUG_MATCH_CASE_TOOLTIP :{BLACK}Kytke kirjainkoon täsmäys, kun verrataan tekoälyn viestejä pysäytysmerkkijonoon STR_AI_DEBUG_MATCH_CASE_TOOLTIP :{BLACK}Kytke kirjainkoon täsmäys, kun verrataan tekoälyn viestejä pysäytysmerkkijonoon
STR_AI_DEBUG_CONTINUE :{BLACK}Jatka STR_AI_DEBUG_CONTINUE :{BLACK}Jatka
STR_AI_DEBUG_CONTINUE_TOOLTIP :{BLACK}Jatka tekoälyn suorittamista STR_AI_DEBUG_CONTINUE_TOOLTIP :{BLACK}Jatka tekoälyn suorittamista
STR_AI_DEBUG_SELECT_AI_TOOLTIP :{BLACK}Näytä tämän tekoälyn virheenkorjaustiedot STR_AI_DEBUG_SELECT_AI_TOOLTIP :{BLACK}Näytä tämän tekoälyn virheenkorjaustiedot. Ctrl+napsautus avaa uuteen ikkunaan
STR_AI_GAME_SCRIPT :{BLACK}Peliskripti STR_AI_GAME_SCRIPT :{BLACK}Peliskripti
STR_AI_GAME_SCRIPT_TOOLTIP :{BLACK}Tarkista peliskriptin loki STR_AI_GAME_SCRIPT_TOOLTIP :{BLACK}Tarkista peliskriptin loki. Ctrl+napsautus avaa uuteen ikkunaan
STR_ERROR_AI_NO_AI_FOUND :Sopivaa tekoälyä ei löydetty.{}Tämä tekoäly ei tee mitään.{}Voit ladata useita tekoälyjä ”online-sisältö” -järjestelmän kautta STR_ERROR_AI_NO_AI_FOUND :Sopivaa tekoälyä ei löydetty.{}Tämä tekoäly ei tee mitään.{}Voit ladata useita tekoälyjä ”online-sisältö” -järjestelmän kautta
STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}Yksi käynnissä olevista skripteistä kaatui. Ilmoita tästä skriptin kehittäjälle liittäen mukaan kuvankaappaus Tekoälyn/peliskriptin virheenjäljitys -ikkunasta STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}Yksi käynnissä olevista skripteistä kaatui. Ilmoita tästä skriptin kehittäjälle liittäen mukaan kuvankaappaus Tekoälyn/peliskriptin virheenjäljitys -ikkunasta

@ -2197,12 +2197,20 @@ STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Montrer
STR_LIVERY_ROAD_VEHICLE_TOOLTIP :{BLACK}Montrer les livrées de véhicules routiers STR_LIVERY_ROAD_VEHICLE_TOOLTIP :{BLACK}Montrer les livrées de véhicules routiers
STR_LIVERY_SHIP_TOOLTIP :{BLACK}Montrer les livrées de navires STR_LIVERY_SHIP_TOOLTIP :{BLACK}Montrer les livrées de navires
STR_LIVERY_AIRCRAFT_TOOLTIP :{BLACK}Montrer les livrées d'aéronefs STR_LIVERY_AIRCRAFT_TOOLTIP :{BLACK}Montrer les livrées d'aéronefs
STR_LIVERY_TRAIN_GROUP_TOOLTIP :{BLACK}Afficher les couleurs des groupes de trains
STR_LIVERY_ROAD_VEHICLE_GROUP_TOOLTIP :{BLACK}Afficher les couleurs des groupes de véhicules
STR_LIVERY_SHIP_GROUP_TOOLTIP :{BLACK}Afficher les couleurs des groupes de bateaux
STR_LIVERY_AIRCRAFT_GROUP_TOOLTIP :{BLACK}Afficher les couleurs des groupes d'avions
STR_LIVERY_PRIMARY_TOOLTIP :{BLACK}Choisir la couleur primaire de la livrée sélectionnée. Ctrl-clic appliquera cette couleur à toutes les livrées. STR_LIVERY_PRIMARY_TOOLTIP :{BLACK}Choisir la couleur primaire de la livrée sélectionnée. Ctrl-clic appliquera cette couleur à toutes les livrées.
STR_LIVERY_SECONDARY_TOOLTIP :{BLACK}Choisir la couleur secondaire de la livrée sélectionnée. Ctrl-clic appliquera cette couleur à toutes les livrées. STR_LIVERY_SECONDARY_TOOLTIP :{BLACK}Choisir la couleur secondaire de la livrée sélectionnée. Ctrl-clic appliquera cette couleur à toutes les livrées.
STR_LIVERY_PANEL_TOOLTIP :{BLACK}Sélectionner la livrée à modifier ou plusieurs d'entre elles par Ctrl-clic. Cliquer sur la case à cocher pour en activer l'utilisation ou non. STR_LIVERY_PANEL_TOOLTIP :{BLACK}Sélectionner la livrée à modifier ou plusieurs d'entre elles par Ctrl-clic. Cliquer sur la case à cocher pour en activer l'utilisation ou non.
STR_LIVERY_TRAIN_GROUP_EMPTY :Aucun groupe de trains
STR_LIVERY_ROAD_VEHICLE_GROUP_EMPTY :Aucun groupe de véhicules
STR_LIVERY_SHIP_GROUP_EMPTY :Aucun groupe de bateaux
STR_LIVERY_AIRCRAFT_GROUP_EMPTY :Aucun groupe d'avions
###length 23 ###length 23
STR_LIVERY_DEFAULT :Livrée standard STR_LIVERY_DEFAULT :Livrée par défaut
STR_LIVERY_STEAM :Locomotive à vapeur STR_LIVERY_STEAM :Locomotive à vapeur
STR_LIVERY_DIESEL :Locomotive Diesel STR_LIVERY_DIESEL :Locomotive Diesel
STR_LIVERY_ELECTRIC :Locomotive électrique STR_LIVERY_ELECTRIC :Locomotive électrique
@ -4654,9 +4662,9 @@ STR_AI_DEBUG_MATCH_CASE :{BLACK}Respecte
STR_AI_DEBUG_MATCH_CASE_TOOLTIP :{BLACK}Activer/Désactiver le respect de la casse pour comparer les messages d'IA avec la chaîne d'arrêt STR_AI_DEBUG_MATCH_CASE_TOOLTIP :{BLACK}Activer/Désactiver le respect de la casse pour comparer les messages d'IA avec la chaîne d'arrêt
STR_AI_DEBUG_CONTINUE :{BLACK}Continuer STR_AI_DEBUG_CONTINUE :{BLACK}Continuer
STR_AI_DEBUG_CONTINUE_TOOLTIP :{BLACK}Reprendre la partie et continuer l'IA STR_AI_DEBUG_CONTINUE_TOOLTIP :{BLACK}Reprendre la partie et continuer l'IA
STR_AI_DEBUG_SELECT_AI_TOOLTIP :{BLACK}Afficher la sortie de débogage de cette IA STR_AI_DEBUG_SELECT_AI_TOOLTIP :{BLACK}Afficher la sortie de débogage de cette IA. Ctrl+Click pour ouvrir dans une nouvelle fenêtre
STR_AI_GAME_SCRIPT :{BLACK}Script de jeu STR_AI_GAME_SCRIPT :{BLACK}Script de jeu
STR_AI_GAME_SCRIPT_TOOLTIP :{BLACK}Examiner le journal du script de jeu STR_AI_GAME_SCRIPT_TOOLTIP :{BLACK}Examiner le journal du script de jeu. Ctrl+Click pour ouvrir dans une nouvelle fenêtre
STR_ERROR_AI_NO_AI_FOUND :Aucune IA n'a été trouvée.{}Cette IA est factice et ne fera rien.{}Vous pouvez télécharger diverses IA via le système de «{NBSP}Contenu en ligne{NBSP}». STR_ERROR_AI_NO_AI_FOUND :Aucune IA n'a été trouvée.{}Cette IA est factice et ne fera rien.{}Vous pouvez télécharger diverses IA via le système de «{NBSP}Contenu en ligne{NBSP}».
STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}L'un des scripts a rencontré un problème. Merci de rapporter ceci à l'auteur du script avec une capture d'écran de la fenêtre de débogage de scripts. STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}L'un des scripts a rencontré un problème. Merci de rapporter ceci à l'auteur du script avec une capture d'écran de la fenêtre de débogage de scripts.

@ -256,6 +256,7 @@ STR_UNITS_HEIGHT_IMPERIAL :{DECIMAL} pés
STR_UNITS_HEIGHT_METRIC :{DECIMAL} m STR_UNITS_HEIGHT_METRIC :{DECIMAL} m
STR_UNITS_HEIGHT_SI :{DECIMAL} m STR_UNITS_HEIGHT_SI :{DECIMAL} m
STR_UNITS_TICKS :{COMMA}{NBSP}tick{P "" s}
# Common window strings # Common window strings
STR_LIST_FILTER_TITLE :{BLACK}Filtrar: STR_LIST_FILTER_TITLE :{BLACK}Filtrar:
@ -1657,6 +1658,8 @@ STR_CONFIG_SETTING_LOADING_INDICATORS :Usar indicadore
STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :Escolle se os indicadores de carga se amosan sobre os vehículos en carga/descarga STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :Escolle se os indicadores de carga se amosan sobre os vehículos en carga/descarga
###length 3 ###length 3
STR_CONFIG_SETTING_TIMETABLE_MODE_DAYS :Días
STR_CONFIG_SETTING_TIMETABLE_MODE_SECONDS :Segundos
STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Mostrar chegada e saída nos horarios: {STRING} STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Mostrar chegada e saída nos horarios: {STRING}
STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Amosar chegadas e saídas anticipadas nos horarios STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Amosar chegadas e saídas anticipadas nos horarios
@ -2187,9 +2190,14 @@ STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Mostra-l
STR_LIVERY_ROAD_VEHICLE_TOOLTIP :{BLACK}Mostra-los esquemas de cor dos vehículos de estrada STR_LIVERY_ROAD_VEHICLE_TOOLTIP :{BLACK}Mostra-los esquemas de cor dos vehículos de estrada
STR_LIVERY_SHIP_TOOLTIP :{BLACK}Mostra-los esquemas de cor dos barcos STR_LIVERY_SHIP_TOOLTIP :{BLACK}Mostra-los esquemas de cor dos barcos
STR_LIVERY_AIRCRAFT_TOOLTIP :{BLACK}Mostra-los esquemas de cor das aeronaves STR_LIVERY_AIRCRAFT_TOOLTIP :{BLACK}Mostra-los esquemas de cor das aeronaves
STR_LIVERY_TRAIN_GROUP_TOOLTIP :Amosa as cores dos grupos de trens
STR_LIVERY_SHIP_GROUP_TOOLTIP :Amosa as cores dos grupos de barcos
STR_LIVERY_PRIMARY_TOOLTIP :{BLACK}Elixe a cor primaria para o esquema seleccionado. Ctrl+Click aplicará esta cor a tódolos esquemas STR_LIVERY_PRIMARY_TOOLTIP :{BLACK}Elixe a cor primaria para o esquema seleccionado. Ctrl+Click aplicará esta cor a tódolos esquemas
STR_LIVERY_SECONDARY_TOOLTIP :{BLACK}Elixe a cor secundaria para o esquema seleccionado. Ctrl+Click aplicará esta cor a tódolos esquemas STR_LIVERY_SECONDARY_TOOLTIP :{BLACK}Elixe a cor secundaria para o esquema seleccionado. Ctrl+Click aplicará esta cor a tódolos esquemas
STR_LIVERY_PANEL_TOOLTIP :{BLACK}Selecciona un esquema de cor para cambialo, ou múltiples esquemas con CTRL+click. Pincha na caixa para cambia lo uso do esquema STR_LIVERY_PANEL_TOOLTIP :{BLACK}Selecciona un esquema de cor para cambialo, ou múltiples esquemas con CTRL+click. Pincha na caixa para cambia lo uso do esquema
STR_LIVERY_TRAIN_GROUP_EMPTY :Non se creou ningún grupo de trens
STR_LIVERY_SHIP_GROUP_EMPTY :Non se creou ningún grupo de barcos
STR_LIVERY_AIRCRAFT_GROUP_EMPTY :Non se crearon grupos de aeronaves
###length 23 ###length 23
STR_LIVERY_DEFAULT :Esquemas de cor estándar STR_LIVERY_DEFAULT :Esquemas de cor estándar
@ -3200,6 +3208,7 @@ STR_MAPGEN_MAPSIZE :{BLACK}Tamaño
STR_MAPGEN_MAPSIZE_TOOLTIP :{BLACK} Selecciona o tamaño do mapa en cadros. O número de cadros dispoñíbeis será sensiblemente menor STR_MAPGEN_MAPSIZE_TOOLTIP :{BLACK} Selecciona o tamaño do mapa en cadros. O número de cadros dispoñíbeis será sensiblemente menor
STR_MAPGEN_BY :{BLACK}* STR_MAPGEN_BY :{BLACK}*
STR_MAPGEN_NUMBER_OF_TOWNS :{BLACK}Nº de cidades: STR_MAPGEN_NUMBER_OF_TOWNS :{BLACK}Nº de cidades:
STR_MAPGEN_NUMBER_OF_TOWNS_TOOLTIP :Selecciona a densidade das cidades ou un número á túa escolla
STR_MAPGEN_TOWN_NAME_LABEL :{BLACK}Nomes das localidades: STR_MAPGEN_TOWN_NAME_LABEL :{BLACK}Nomes das localidades:
STR_MAPGEN_TOWN_NAME_DROPDOWN_TOOLTIP :{BLACK}Selecciona o estilo dos nomes das cidades STR_MAPGEN_TOWN_NAME_DROPDOWN_TOOLTIP :{BLACK}Selecciona o estilo dos nomes das cidades
STR_MAPGEN_DATE :{BLACK}Data: STR_MAPGEN_DATE :{BLACK}Data:
@ -3265,6 +3274,7 @@ STR_MAPGEN_BORDER_MANUAL :{BLACK}Manual
STR_MAPGEN_HEIGHTMAP_ROTATION :{BLACK}Rotación do mapa de alturas: STR_MAPGEN_HEIGHTMAP_ROTATION :{BLACK}Rotación do mapa de alturas:
STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}Nome do mapa de alturas: STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}Nome do mapa de alturas:
STR_MAPGEN_HEIGHTMAP_NAME_TOOLTIP :O nome do arquivo de imaxe do mapa de alturas.
STR_MAPGEN_HEIGHTMAP_SIZE_LABEL :{BLACK}Tamaño: STR_MAPGEN_HEIGHTMAP_SIZE_LABEL :{BLACK}Tamaño:
STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM} x {NUM} STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM} x {NUM}
@ -4573,8 +4583,11 @@ STR_TIMETABLE_STATUS_ON_TIME :{BLACK}Este veh
STR_TIMETABLE_STATUS_LATE :{BLACK}Este vehículo está retrasado {STRING} STR_TIMETABLE_STATUS_LATE :{BLACK}Este vehículo está retrasado {STRING}
STR_TIMETABLE_STATUS_EARLY :{BLACK}Este vehículo vai adiantado {STRING} STR_TIMETABLE_STATUS_EARLY :{BLACK}Este vehículo vai adiantado {STRING}
STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}Este horario aínda non comezóu STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}Este horario aínda non comezóu
STR_TIMETABLE_STATUS_START_AT_DATE :{BLACK}Este horario comezará no seguinte horario{STRING}
STR_TIMETABLE_START :Empezar táboa de horarios
STR_TIMETABLE_START_SECONDS_QUERY :Segundos até empezar a táboa de horarios
STR_TIMETABLE_CHANGE_TIME :{BLACK}Cambiar Tempo STR_TIMETABLE_CHANGE_TIME :{BLACK}Cambiar Tempo
STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Cambiar o tempo que debería levar a orde seleccionada. Ctrl+Click cambia o tempo para todas as ordes STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Cambiar o tempo que debería levar a orde seleccionada. Ctrl+Click cambia o tempo para todas as ordes

@ -403,8 +403,8 @@ STR_TOOLBAR_TOOLTIP_SWITCH_TOOLBAR :{BLACK}툴바
STR_SCENEDIT_TOOLBAR_TOOLTIP_SAVE_SCENARIO_LOAD_SCENARIO :{BLACK}시나리오를 저장하거나, 불러오거나, 시나리오 에디터를 종료하거나, 게임을 종료합니다 STR_SCENEDIT_TOOLBAR_TOOLTIP_SAVE_SCENARIO_LOAD_SCENARIO :{BLACK}시나리오를 저장하거나, 불러오거나, 시나리오 에디터를 종료하거나, 게임을 종료합니다
STR_SCENEDIT_TOOLBAR_OPENTTD :{YELLOW}OpenTTD STR_SCENEDIT_TOOLBAR_OPENTTD :{YELLOW}OpenTTD
STR_SCENEDIT_TOOLBAR_SCENARIO_EDITOR :{YELLOW}시나리오 에디터 STR_SCENEDIT_TOOLBAR_SCENARIO_EDITOR :{YELLOW}시나리오 에디터
STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_BACKWARD :{BLACK}시작년도를 1년 앞당깁니다. STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_BACKWARD :{BLACK}시작 일시를 1년 앞당깁니다.
STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_FORWARD :{BLACK}시작년도를 1년 늦춥니다. STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_FORWARD :{BLACK}시작 일시를 1년 늦춥니다.
STR_SCENEDIT_TOOLBAR_TOOLTIP_SET_DATE :{BLACK}시작 연도를 입력하세요. STR_SCENEDIT_TOOLBAR_TOOLTIP_SET_DATE :{BLACK}시작 연도를 입력하세요.
STR_SCENEDIT_TOOLBAR_TOOLTIP_DISPLAY_MAP_TOWN_DIRECTORY :{BLACK}지도, 도시 목록 보여주기 STR_SCENEDIT_TOOLBAR_TOOLTIP_DISPLAY_MAP_TOWN_DIRECTORY :{BLACK}지도, 도시 목록 보여주기
STR_SCENEDIT_TOOLBAR_LANDSCAPE_GENERATION :{BLACK}지형을 생성합니다. STR_SCENEDIT_TOOLBAR_LANDSCAPE_GENERATION :{BLACK}지형을 생성합니다.
@ -1492,7 +1492,7 @@ STR_CONFIG_SETTING_LAND_GENERATOR_ORIGINAL :오리지널
STR_CONFIG_SETTING_LAND_GENERATOR_TERRA_GENESIS :천지창조 STR_CONFIG_SETTING_LAND_GENERATOR_TERRA_GENESIS :천지창조
STR_CONFIG_SETTING_TERRAIN_TYPE :지형 종류: {STRING} STR_CONFIG_SETTING_TERRAIN_TYPE :지형 종류: {STRING}
STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT :(천지창조 전용) 지형의 언덕 모양을 결정합니다. STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT :지형의 언덕과 산지 모양을 결정합니다
STR_CONFIG_SETTING_INDUSTRY_DENSITY :산업시설 수: {STRING} STR_CONFIG_SETTING_INDUSTRY_DENSITY :산업시설 수: {STRING}
STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :게임을 플레이하는 동안 얼마나 많은 산업시설이 생성되고 유지되어야 할 지를 설정합니다. STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :게임을 플레이하는 동안 얼마나 많은 산업시설이 생성되고 유지되어야 할 지를 설정합니다.
@ -1501,18 +1501,18 @@ STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :석유 관련
STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :정유 공장과 유전이 맵 가장자리에서 얼마나 멀리 떨어진 곳까지 건설될 수 있는지를 나타냅니다. 섬 맵에서는 이 설정을 이용해서 해당 산업시설이 해안에 가까이 있도록 조정할 수 있습니다. 256칸보다 큰 맵의 경우에는 이 값은 더 크게 조정됩니다. STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :정유 공장과 유전이 맵 가장자리에서 얼마나 멀리 떨어진 곳까지 건설될 수 있는지를 나타냅니다. 섬 맵에서는 이 설정을 이용해서 해당 산업시설이 해안에 가까이 있도록 조정할 수 있습니다. 256칸보다 큰 맵의 경우에는 이 값은 더 크게 조정됩니다.
STR_CONFIG_SETTING_SNOWLINE_HEIGHT :설선 고도: {STRING} STR_CONFIG_SETTING_SNOWLINE_HEIGHT :설선 고도: {STRING}
STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :아한대 기후의 설선 고도를 조절합니다. 눈은 산업시설의 생성과 도시 성장에 영향을 미칩니다. 시나리오 에디터에서 수정할 수 있고 설정하지 않은 경우 "눈 비율" 설정을 따릅니다. STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :아한대 기후의 설선 고도를 선택합니다. 눈은 산업시설의 생성과 도시 성장에 영향을 미칩니다. 시나리오 에디터에서 수정할 수 있고 설정하지 않은 경우 "눈 비율" 설정을 따릅니다.
STR_CONFIG_SETTING_SNOW_COVERAGE :눈 비율: {STRING} STR_CONFIG_SETTING_SNOW_COVERAGE :눈 비율: {STRING}
STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :아한대 기후에서 눈 지역의 양을 대략적으로 조절할 수 있습니다. 눈은 산업시설 생성과 도시 성장 요구사항에도 영향을 미칩니다. 지도를 생성할 때에만 사용하는 설정입니다. 해수면 바로 위에 있는 땅은 무조건 눈이 없을 것입니다. STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :아한대 기후에서 눈 지역의 양을 대략적으로 선택합니다. 눈은 산업시설 생성과 도시 성장 요구 조건에도 영향을 미칩니다. 지도를 생성할 때에만 사용하는 설정입니다. 해수면 바로 위에 있는 땅은 무조건 눈이 없을 것입니다.
STR_CONFIG_SETTING_SNOW_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_SNOW_COVERAGE_VALUE :{NUM}%
STR_CONFIG_SETTING_DESERT_COVERAGE :사막 비율: {STRING} STR_CONFIG_SETTING_DESERT_COVERAGE :사막 비율: {STRING}
STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :아열대 기후에서 사막 지역의 양을 대략적으로 조절할 수 있습니다. 사막은 산업시설 생성에도 영향을 미칩니다. 지도를 생성할 때에만 사용하는 설정입니다 STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :아열대 기후에서 사막 지역의 양을 대략적으로 선택합니다. 사막은 산업시설 생성과 도시 성장 요구 조건에도 영향을 미칩니다. 지도를 생성할 때에만 사용하는 설정입니다
STR_CONFIG_SETTING_DESERT_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_DESERT_COVERAGE_VALUE :{NUM}%
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :지형의 거친 정도: {STRING} STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :지형의 거친 정도: {STRING}
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :(천지창조 전용) 언덕의 빈도수를 선택합니다. 평탄한 지형은 개수가 적고 넓게 퍼진 언덕을 만듭니다. 거친 지형은 똑같아 보일 수 있는 많은 언덕이 생기게 됩니다. STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :언덕의 모양과 빈도 수를 선택합니다. 평탄한 지형은 개수가 적고 넓게 퍼진 언덕을 만들고, 거친 지형은 작은 언덕이 많이 만듭니다.
###length 4 ###length 4
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :매우 부드럽게 STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :매우 부드럽게
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_SMOOTH :부드럽게 STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_SMOOTH :부드럽게
@ -1520,7 +1520,7 @@ STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_ROUGH :거칠게
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_ROUGH :매우 거칠게 STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_ROUGH :매우 거칠게
STR_CONFIG_SETTING_VARIETY :산세 험준도: {STRING} STR_CONFIG_SETTING_VARIETY :산세 험준도: {STRING}
STR_CONFIG_SETTING_VARIETY_HELPTEXT :(천지창조 전용) 지도가 산지와 평지를 모두 갖도록 만들 것인 지를 결정합니다. 이 설정은 지형을 더 평평하게 만드므로, 다른 설정은 '산'으로 설정하시기 바랍니다. STR_CONFIG_SETTING_VARIETY_HELPTEXT :지도가 산지와 평지를 모두 갖도록 만들 것인 지를 결정합니다. 더 높은 값을 사용할 수록, 산지와 평지 사이의 고도 차이가 더 많아집니다.
STR_CONFIG_SETTING_RIVER_AMOUNT :강의 양: {STRING} STR_CONFIG_SETTING_RIVER_AMOUNT :강의 양: {STRING}
STR_CONFIG_SETTING_RIVER_AMOUNT_HELPTEXT :강을 얼마나 만들지 선택하세요 STR_CONFIG_SETTING_RIVER_AMOUNT_HELPTEXT :강을 얼마나 만들지 선택하세요
@ -1540,6 +1540,7 @@ STR_CONFIG_SETTING_ROAD_SIDE_LEFT :좌측통행
STR_CONFIG_SETTING_ROAD_SIDE_RIGHT :우측통행 STR_CONFIG_SETTING_ROAD_SIDE_RIGHT :우측통행
STR_CONFIG_SETTING_HEIGHTMAP_ROTATION :높이맵 회전: {STRING} STR_CONFIG_SETTING_HEIGHTMAP_ROTATION :높이맵 회전: {STRING}
STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_TOOLTIP :높이맵을 게임 세계에 맞추기 위해 어느 방향으로 회전시킬지 선택합니다
###length 2 ###length 2
STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_COUNTER_CLOCKWISE :반시계방향 STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_COUNTER_CLOCKWISE :반시계방향
STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_CLOCKWISE :시계방향 STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_CLOCKWISE :시계방향
@ -2196,9 +2197,17 @@ STR_LIVERY_TRAIN_TOOLTIP :{BLACK}열차
STR_LIVERY_ROAD_VEHICLE_TOOLTIP :{BLACK}차량 색상 선택 STR_LIVERY_ROAD_VEHICLE_TOOLTIP :{BLACK}차량 색상 선택
STR_LIVERY_SHIP_TOOLTIP :{BLACK}선박 색상 선택 STR_LIVERY_SHIP_TOOLTIP :{BLACK}선박 색상 선택
STR_LIVERY_AIRCRAFT_TOOLTIP :{BLACK}항공기 색상 선택 STR_LIVERY_AIRCRAFT_TOOLTIP :{BLACK}항공기 색상 선택
STR_LIVERY_TRAIN_GROUP_TOOLTIP :{BLACK}열차 그룹 색상 선택
STR_LIVERY_ROAD_VEHICLE_GROUP_TOOLTIP :{BLACK}자동차 그룹 색상 선택
STR_LIVERY_SHIP_GROUP_TOOLTIP :{BLACK}선박 그룹 색상 선택
STR_LIVERY_AIRCRAFT_GROUP_TOOLTIP :{BLACK}항공기 그룹 색상 선택
STR_LIVERY_PRIMARY_TOOLTIP :{BLACK}선택한 색상을 1차 색상으로 선택합니다. CTRL+클릭하면 모든 항목에 적용됩니다 STR_LIVERY_PRIMARY_TOOLTIP :{BLACK}선택한 색상을 1차 색상으로 선택합니다. CTRL+클릭하면 모든 항목에 적용됩니다
STR_LIVERY_SECONDARY_TOOLTIP :{BLACK}선택한 색상을 2차 색상으로 선택합니다. CTRL+클릭하면 모든 항목에 적용됩니다 STR_LIVERY_SECONDARY_TOOLTIP :{BLACK}선택한 색상을 2차 색상으로 선택합니다. CTRL+클릭하면 모든 항목에 적용됩니다
STR_LIVERY_PANEL_TOOLTIP :{BLACK}색상 조합을 바꾸려면 선택하세요. 2개 이상 선택하려면 CTRL+클릭하세요. 네모를 클릭하여 체크하면 해당 색상 조합을 사용하게 됩니다 STR_LIVERY_PANEL_TOOLTIP :{BLACK}색상 조합을 바꾸려면 선택하세요. 2개 이상 선택하려면 CTRL+클릭하세요. 네모를 클릭하여 체크하면 해당 색상 조합을 사용하게 됩니다
STR_LIVERY_TRAIN_GROUP_EMPTY :열차 그룹을 설정하지 않았습니다
STR_LIVERY_ROAD_VEHICLE_GROUP_EMPTY :자동차 그룹을 설정하지 않았습니다
STR_LIVERY_SHIP_GROUP_EMPTY :선박 그룹을 설정하지 않았습니다
STR_LIVERY_AIRCRAFT_GROUP_EMPTY :항공기 그룹을 설정하지 않았습니다
###length 23 ###length 23
STR_LIVERY_DEFAULT :기본 색상 STR_LIVERY_DEFAULT :기본 색상
@ -3209,11 +3218,15 @@ STR_MAPGEN_MAPSIZE :{BLACK}지도
STR_MAPGEN_MAPSIZE_TOOLTIP :{BLACK}지도의 크기를 칸 수 기준으로 선택하세요. 사용 가능한 지도의 칸 수는 설정한 값보다 조금 작을 것입니다 STR_MAPGEN_MAPSIZE_TOOLTIP :{BLACK}지도의 크기를 칸 수 기준으로 선택하세요. 사용 가능한 지도의 칸 수는 설정한 값보다 조금 작을 것입니다
STR_MAPGEN_BY :{BLACK}x STR_MAPGEN_BY :{BLACK}x
STR_MAPGEN_NUMBER_OF_TOWNS :{BLACK}도시의 수: STR_MAPGEN_NUMBER_OF_TOWNS :{BLACK}도시의 수:
STR_MAPGEN_NUMBER_OF_TOWNS_TOOLTIP :{BLACK}도시의 수를 선택하거나, 직접 그 개수를 입력합니다
STR_MAPGEN_TOWN_NAME_LABEL :{BLACK}도시 이름: STR_MAPGEN_TOWN_NAME_LABEL :{BLACK}도시 이름:
STR_MAPGEN_TOWN_NAME_DROPDOWN_TOOLTIP :{BLACK}도시 이름 스타일을 선택하세요 STR_MAPGEN_TOWN_NAME_DROPDOWN_TOOLTIP :{BLACK}도시 이름 스타일을 선택하세요
STR_MAPGEN_DATE :{BLACK}날짜: STR_MAPGEN_DATE :{BLACK}날짜:
STR_MAPGEN_DATE_TOOLTIP :{BLACK}시작 일시를 선택합니다.
STR_MAPGEN_NUMBER_OF_INDUSTRIES :{BLACK}산업시설 수: STR_MAPGEN_NUMBER_OF_INDUSTRIES :{BLACK}산업시설 수:
STR_MAPGEN_NUMBER_OF_INDUSTRIES_TOOLTIP :{BLACK}산업 시설의 수를 선택하거나, 직접 그 개수를 입력합니다
STR_MAPGEN_HEIGHTMAP_HEIGHT :{BLACK}가장 높은 지점의 높이: STR_MAPGEN_HEIGHTMAP_HEIGHT :{BLACK}가장 높은 지점의 높이:
STR_MAPGEN_HEIGHTMAP_HEIGHT_TOOLTIP :{BLACK}해수면을 기준으로, 게임이 생성하려고 하는 가장 높은 곳의 높이를 선택합니다.
STR_MAPGEN_HEIGHTMAP_HEIGHT_UP :{BLACK}지도에서 가장 높은 지점의 최대 높이를 1만큼 높입니다 STR_MAPGEN_HEIGHTMAP_HEIGHT_UP :{BLACK}지도에서 가장 높은 지점의 최대 높이를 1만큼 높입니다
STR_MAPGEN_HEIGHTMAP_HEIGHT_DOWN :{BLACK}지도에서 가장 높은 지점의 최대 높이를 1만큼 낮춥니다 STR_MAPGEN_HEIGHTMAP_HEIGHT_DOWN :{BLACK}지도에서 가장 높은 지점의 최대 높이를 1만큼 낮춥니다
STR_MAPGEN_SNOW_COVERAGE :{BLACK}눈 비율: STR_MAPGEN_SNOW_COVERAGE :{BLACK}눈 비율:
@ -3226,10 +3239,12 @@ STR_MAPGEN_DESERT_COVERAGE_DOWN :{BLACK}사막
STR_MAPGEN_DESERT_COVERAGE_TEXT :{BLACK}{NUM}% STR_MAPGEN_DESERT_COVERAGE_TEXT :{BLACK}{NUM}%
STR_MAPGEN_TERRAIN_TYPE :{BLACK}지형 종류: STR_MAPGEN_TERRAIN_TYPE :{BLACK}지형 종류:
STR_MAPGEN_SEA_LEVEL :{BLACK}해수면: STR_MAPGEN_SEA_LEVEL :{BLACK}해수면:
STR_MAPGEN_SEA_LEVEL_TOOLTIP :{BLACK}해수면 높이를 선택합니다
STR_MAPGEN_QUANTITY_OF_RIVERS :{BLACK}강: STR_MAPGEN_QUANTITY_OF_RIVERS :{BLACK}강:
STR_MAPGEN_SMOOTHNESS :{BLACK}지표면을 깎는 방식: STR_MAPGEN_SMOOTHNESS :{BLACK}지표면을 깎는 방식:
STR_MAPGEN_VARIETY :{BLACK}산세 험준도: STR_MAPGEN_VARIETY :{BLACK}산세 험준도:
STR_MAPGEN_GENERATE :{WHITE}만들기 STR_MAPGEN_GENERATE :{WHITE}만들기
STR_MAPGEN_GENERATE_TOOLTIP :{BLACK}세계를 만들고 OpenTTD를 플레이해보세요!
STR_MAPGEN_NEWGRF_SETTINGS :{BLACK}NewGRF 설정 STR_MAPGEN_NEWGRF_SETTINGS :{BLACK}NewGRF 설정
STR_MAPGEN_NEWGRF_SETTINGS_TOOLTIP :{BLACK}NewGRF 설정 창을 엽니다 STR_MAPGEN_NEWGRF_SETTINGS_TOOLTIP :{BLACK}NewGRF 설정 창을 엽니다
STR_MAPGEN_AI_SETTINGS :{BLACK}인공지능 설정 STR_MAPGEN_AI_SETTINGS :{BLACK}인공지능 설정
@ -3262,6 +3277,7 @@ STR_MAPGEN_TOWN_NAME_CATALAN :카탈로니아
# Strings for map borders at game generation # Strings for map borders at game generation
STR_MAPGEN_BORDER_TYPE :{BLACK}지도 가장자리: STR_MAPGEN_BORDER_TYPE :{BLACK}지도 가장자리:
STR_MAPGEN_BORDER_TYPE_TOOLTIP :{BLACK}게임 세계의 지도 가장자리를 선택합니다
STR_MAPGEN_NORTHWEST :{BLACK}북서 STR_MAPGEN_NORTHWEST :{BLACK}북서
STR_MAPGEN_NORTHEAST :{BLACK}북동 STR_MAPGEN_NORTHEAST :{BLACK}북동
STR_MAPGEN_SOUTHEAST :{BLACK}남동 STR_MAPGEN_SOUTHEAST :{BLACK}남동
@ -3274,7 +3290,9 @@ STR_MAPGEN_BORDER_MANUAL :{BLACK}사용
STR_MAPGEN_HEIGHTMAP_ROTATION :{BLACK}높이맵 방향: STR_MAPGEN_HEIGHTMAP_ROTATION :{BLACK}높이맵 방향:
STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}높이맵 이름: STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}높이맵 이름:
STR_MAPGEN_HEIGHTMAP_NAME_TOOLTIP :{BLACK}높이맵 이미지 파일의 이름입니다
STR_MAPGEN_HEIGHTMAP_SIZE_LABEL :{BLACK}크기: STR_MAPGEN_HEIGHTMAP_SIZE_LABEL :{BLACK}크기:
STR_MAPGEN_HEIGHTMAP_SIZE_LABEL_TOOLTIP :{BLACK}원본 높이맵 이미지의 크기입니다. 최상의 조건을 위해서는, 이미지의 가로/세로 크기를 OpenTTD의 지도 크기와 같은 256, 512, 1024 등으로 맞추는 것이 좋습니다.
STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM} x {NUM} STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM} x {NUM}
STR_MAPGEN_TERRAIN_TYPE_QUERY_CAPT :{WHITE}목표 정상 높이 STR_MAPGEN_TERRAIN_TYPE_QUERY_CAPT :{WHITE}목표 정상 높이
@ -3289,6 +3307,7 @@ STR_SE_MAPGEN_FLAT_WORLD :{WHITE}평평
STR_SE_MAPGEN_FLAT_WORLD_TOOLTIP :{BLACK}평평한 땅 만들기 STR_SE_MAPGEN_FLAT_WORLD_TOOLTIP :{BLACK}평평한 땅 만들기
STR_SE_MAPGEN_RANDOM_LAND :{WHITE}무작위 지형 STR_SE_MAPGEN_RANDOM_LAND :{WHITE}무작위 지형
STR_SE_MAPGEN_FLAT_WORLD_HEIGHT :{BLACK}평지의 높이: STR_SE_MAPGEN_FLAT_WORLD_HEIGHT :{BLACK}평지의 높이:
STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_TOOLTIP :{BLACK}해수면 위의 땅 높이를 선택합니다
STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_DOWN :{BLACK}평지의 높이를 1칸 낮춥니다 STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_DOWN :{BLACK}평지의 높이를 1칸 낮춥니다
STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_UP :{BLACK}평지의 높이를 1칸 높입니다 STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_UP :{BLACK}평지의 높이를 1칸 높입니다
@ -4643,9 +4662,9 @@ STR_AI_DEBUG_MATCH_CASE :{BLACK}대소
STR_AI_DEBUG_MATCH_CASE_TOOLTIP :{BLACK}인공지능 기록 메시지에서 중단 문구를 검색할 때 대소문자를 구분할지 여부를 선택합니다 STR_AI_DEBUG_MATCH_CASE_TOOLTIP :{BLACK}인공지능 기록 메시지에서 중단 문구를 검색할 때 대소문자를 구분할지 여부를 선택합니다
STR_AI_DEBUG_CONTINUE :{BLACK}계속 STR_AI_DEBUG_CONTINUE :{BLACK}계속
STR_AI_DEBUG_CONTINUE_TOOLTIP :{BLACK}중단된 인공지능의 연산을 재개합니다 STR_AI_DEBUG_CONTINUE_TOOLTIP :{BLACK}중단된 인공지능의 연산을 재개합니다
STR_AI_DEBUG_SELECT_AI_TOOLTIP :{BLACK}이 인공지능에서 출력된 기록 메시지를 보여줍니다 STR_AI_DEBUG_SELECT_AI_TOOLTIP :{BLACK}이 인공지능에서 출력된 기록 메시지를 보여줍니다. CTRL + 클릭하면 새 창으로 엽니다
STR_AI_GAME_SCRIPT :{BLACK}게임 스크립트 STR_AI_GAME_SCRIPT :{BLACK}게임 스크립트
STR_AI_GAME_SCRIPT_TOOLTIP :{BLACK}게임 스크립트 기록 체크 STR_AI_GAME_SCRIPT_TOOLTIP :{BLACK}게임 스크립트 기록을 확인합니다. CTRL + 클릭하면 새 창으로 엽니다
STR_ERROR_AI_NO_AI_FOUND :사용할 수 있는 인공지능이 없습니다.{}따라서 이 경쟁사는 아무 것도 하지 못하는 회사입니다.{}'온라인 컨텐츠 다운로드'에서 새로운 인공지능을 다운로드받으세요 STR_ERROR_AI_NO_AI_FOUND :사용할 수 있는 인공지능이 없습니다.{}따라서 이 경쟁사는 아무 것도 하지 못하는 회사입니다.{}'온라인 컨텐츠 다운로드'에서 새로운 인공지능을 다운로드받으세요
STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}작동 중이던 스크립트 중 하나에서 오류가 발생하여 중단되었습니다. 인공지능/게임 스크립트 디버그 창에서 스크린샷을 찍어 스크립트 제작자에게 보고하십시오 STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}작동 중이던 스크립트 중 하나에서 오류가 발생하여 중단되었습니다. 인공지능/게임 스크립트 디버그 창에서 스크린샷을 찍어 스크립트 제작자에게 보고하십시오

@ -176,7 +176,7 @@ STR_COLOUR_DEFAULT :Noklusējuma
###length 17 ###length 17
STR_COLOUR_DARK_BLUE :Tumši zila STR_COLOUR_DARK_BLUE :Tumši zila
STR_COLOUR_PALE_GREEN :Gaiši zaļa STR_COLOUR_PALE_GREEN :Gaiši zaļa
STR_COLOUR_PINK :Sārta STR_COLOUR_PINK :Rozā
STR_COLOUR_YELLOW :Dzeltena STR_COLOUR_YELLOW :Dzeltena
STR_COLOUR_RED :Sarkana STR_COLOUR_RED :Sarkana
STR_COLOUR_LIGHT_BLUE :Gaiši zila STR_COLOUR_LIGHT_BLUE :Gaiši zila
@ -185,7 +185,7 @@ STR_COLOUR_DARK_GREEN :Tumši zaļa
STR_COLOUR_BLUE :Zila STR_COLOUR_BLUE :Zila
STR_COLOUR_CREAM :Krēmkrāsa STR_COLOUR_CREAM :Krēmkrāsa
STR_COLOUR_MAUVE :Gaišsārti violeta STR_COLOUR_MAUVE :Gaišsārti violeta
STR_COLOUR_PURPLE :Purpura STR_COLOUR_PURPLE :Violets
STR_COLOUR_ORANGE :Oranža STR_COLOUR_ORANGE :Oranža
STR_COLOUR_BROWN :Brūna STR_COLOUR_BROWN :Brūna
STR_COLOUR_GREY :Pelēka STR_COLOUR_GREY :Pelēka
@ -193,6 +193,23 @@ STR_COLOUR_WHITE :Balta
STR_COLOUR_RANDOM :Nejaušs STR_COLOUR_RANDOM :Nejaušs
###length 17 ###length 17
STR_COLOUR_SECONDARY_DARK_BLUE :Tumši Zila
STR_COLOUR_SECONDARY_PALE_GREEN :Gaiši Zaļa
STR_COLOUR_SECONDARY_SECONDARY_PINK :Rozā
STR_COLOUR_SECONDARY_YELLOW :Dzeltena
STR_COLOUR_SECONDARY_RED :Sarkana
STR_COLOUR_SECONDARY_LIGHT_BLUE :Gaiši Zila
STR_COLOUR_SECONDARY_GREEN :Zaļa
STR_COLOUR_SECONDARY_DARK_GREEN :Tumši zaļa
STR_COLOUR_SECONDARY_BLUE :Zila
STR_COLOUR_SECONDARY_CREAM :Krēmkrāsa
STR_COLOUR_SECONDARY_MAUVE :Purpursarkana
STR_COLOUR_SECONDARY_PURPLE :Violets
STR_COLOUR_SECONDARY_ORANGE :Oranžs
STR_COLOUR_SECONDARY_BROWN :Brūna
STR_COLOUR_SECONDARY_GREY :Pelēka
STR_COLOUR_SECONDARY_WHITE :Balta
STR_COLOUR_SECONDARY_SAME_AS_PRIMARY :Tāds, ka primārais
# Units used in OpenTTD # Units used in OpenTTD
@ -200,6 +217,7 @@ STR_UNITS_VELOCITY_IMPERIAL :{DECIMAL}{NBSP}
STR_UNITS_VELOCITY_METRIC :{DECIMAL}{NBSP}km/h STR_UNITS_VELOCITY_METRIC :{DECIMAL}{NBSP}km/h
STR_UNITS_VELOCITY_SI :{DECIMAL}{NBSP}m/s STR_UNITS_VELOCITY_SI :{DECIMAL}{NBSP}m/s
STR_UNITS_VELOCITY_GAMEUNITS :{DECIMAL}{NBSP}lauciņi/diena STR_UNITS_VELOCITY_GAMEUNITS :{DECIMAL}{NBSP}lauciņi/diena
STR_UNITS_VELOCITY_KNOTS :{DECIMAL}{NBSP}mezgli
STR_UNITS_POWER_IMPERIAL :{DECIMAL}{NBSP}ZS STR_UNITS_POWER_IMPERIAL :{DECIMAL}{NBSP}ZS
STR_UNITS_POWER_METRIC :{DECIMAL}{NBSP}ZS STR_UNITS_POWER_METRIC :{DECIMAL}{NBSP}ZS
@ -239,6 +257,9 @@ STR_UNITS_HEIGHT_IMPERIAL :{DECIMAL}{NBSP}
STR_UNITS_HEIGHT_METRIC :{DECIMAL}{NBSP}m STR_UNITS_HEIGHT_METRIC :{DECIMAL}{NBSP}m
STR_UNITS_HEIGHT_SI :{DECIMAL}{NBSP}m STR_UNITS_HEIGHT_SI :{DECIMAL}{NBSP}m
STR_UNITS_DAYS :{COMMA}{NBSP}dien{P a as ""}
STR_UNITS_SECONDS :{COMMA}{NBSP}sekund{P e s ''''}
STR_UNITS_TICKS :{COMMA}{NBSP}tick{P šķi šķi s}
# Common window strings # Common window strings
STR_LIST_FILTER_TITLE :{BLACK}Filters: STR_LIST_FILTER_TITLE :{BLACK}Filters:
@ -279,7 +300,7 @@ STR_SHOW_HIDDEN_ENGINES_VEHICLE_SHIP_TOOLTIP :{BLACK}Ieslēdz
STR_SHOW_HIDDEN_ENGINES_VEHICLE_AIRCRAFT_TOOLTIP :{BLACK}Ieslēdzot šo iestatījumu tiks parādīti arī paslēptie lidaparāti STR_SHOW_HIDDEN_ENGINES_VEHICLE_AIRCRAFT_TOOLTIP :{BLACK}Ieslēdzot šo iestatījumu tiks parādīti arī paslēptie lidaparāti
# Query window # Query window
STR_BUTTON_DEFAULT :{BLACK}Noklusējums STR_BUTTON_DEFAULT :{BLACK}Noklusējuma
STR_BUTTON_CANCEL :{BLACK}Atcelt STR_BUTTON_CANCEL :{BLACK}Atcelt
STR_BUTTON_OK :{BLACK}Labi STR_BUTTON_OK :{BLACK}Labi
STR_WARNING_PASSWORD_SECURITY :{YELLOW}Brīdinājums: servera administrators var izlasīt jebkuru tekstu, kas šeit tiek ievadīts. STR_WARNING_PASSWORD_SECURITY :{YELLOW}Brīdinājums: servera administrators var izlasīt jebkuru tekstu, kas šeit tiek ievadīts.
@ -349,9 +370,9 @@ STR_GOTO_ORDER_VIEW_TOOLTIP :{BLACK}Atvērt
###length 31 ###length 31
STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Pauzēt spēli STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Pauzēt spēli
STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Paātrināta spēle STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Paātrināta spēle
STR_TOOLBAR_TOOLTIP_OPTIONS :{BLACK}Opcijas STR_TOOLBAR_TOOLTIP_OPTIONS :{BLACK}Opcijas un iestatījumi
STR_TOOLBAR_TOOLTIP_SAVE_GAME_ABANDON_GAME :{BLACK}Saglabāt spēli, pamest spēli, iziet STR_TOOLBAR_TOOLTIP_SAVE_GAME_ABANDON_GAME :{BLACK}Saglabājiet, ielādējiet vai pametiet spēli, iziet no programmas
STR_TOOLBAR_TOOLTIP_DISPLAY_MAP :{BLACK}Rādīt karti, papildu skatvietu vai zīmju sarakstu STR_TOOLBAR_TOOLTIP_DISPLAY_MAP :{BLACK}Rādīt karti, papildu skata logu, kravas plūsmu vai zīmju sarakstu
STR_TOOLBAR_TOOLTIP_DISPLAY_TOWN_DIRECTORY :{BLACK}Rādīt pilsētu sarakstu STR_TOOLBAR_TOOLTIP_DISPLAY_TOWN_DIRECTORY :{BLACK}Rādīt pilsētu sarakstu
STR_TOOLBAR_TOOLTIP_DISPLAY_SUBSIDIES :{BLACK}Rādīt subsīdijas STR_TOOLBAR_TOOLTIP_DISPLAY_SUBSIDIES :{BLACK}Rādīt subsīdijas
STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_STATIONS :{BLACK}Rādīt uzņēmuma staciju sarakstu STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_STATIONS :{BLACK}Rādīt uzņēmuma staciju sarakstu
@ -359,9 +380,9 @@ STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_FINANCES :{BLACK}Rādīt
STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_GENERAL :{BLACK}Rādīt uzņēmuma vispārējo informāciju STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_GENERAL :{BLACK}Rādīt uzņēmuma vispārējo informāciju
STR_TOOLBAR_TOOLTIP_DISPLAY_STORY_BOOK :{BLACK}Rādīt stāstu grāmatu STR_TOOLBAR_TOOLTIP_DISPLAY_STORY_BOOK :{BLACK}Rādīt stāstu grāmatu
STR_TOOLBAR_TOOLTIP_DISPLAY_GOALS_LIST :{BLACK}Rādīt mērķu sarakstu STR_TOOLBAR_TOOLTIP_DISPLAY_GOALS_LIST :{BLACK}Rādīt mērķu sarakstu
STR_TOOLBAR_TOOLTIP_DISPLAY_GRAPHS :{BLACK}Rādīt diagrammas STR_TOOLBAR_TOOLTIP_DISPLAY_GRAPHS :{BLACK}Rādīt uzņēmumu grafikus un kravas maksājumu likmes
STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_LEAGUE :{BLACK}Rādīt uzņēmumu rangu sarakstu STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_LEAGUE :{BLACK}Rādīt uzņēmumu rangu sarakstu
STR_TOOLBAR_TOOLTIP_FUND_CONSTRUCTION_OF_NEW :{BLACK}Finansēt jaunas ražotnes būvniecību vai uzskaitīt visas ražotnes STR_TOOLBAR_TOOLTIP_FUND_CONSTRUCTION_OF_NEW :{BLACK}Izpētiet nozares vai finansējiet jaunas nozares celtniecību
STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_TRAINS :{BLACK}Rādīt uzņēmuma vilcienu sarakstu. Ctrl+klikšķis pārslēdz grupu/transportlīdzekļu saraksta atvēršanu STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_TRAINS :{BLACK}Rādīt uzņēmuma vilcienu sarakstu. Ctrl+klikšķis pārslēdz grupu/transportlīdzekļu saraksta atvēršanu
STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_ROAD_VEHICLES :{BLACK}Rādīt uzņēmuma autotransporta sarakstu. Ctrl+klikšķis pārslēdz grupu/transportlīdzekļu saraksta atvēršanu STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_ROAD_VEHICLES :{BLACK}Rādīt uzņēmuma autotransporta sarakstu. Ctrl+klikšķis pārslēdz grupu/transportlīdzekļu saraksta atvēršanu
STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_SHIPS :{BLACK}Rādīt uzņēmuma kuģu sarakstu. Ctrl+klikšķis pārslēdz grupu/transportlīdzekļu saraksta atvēršanu STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_SHIPS :{BLACK}Rādīt uzņēmuma kuģu sarakstu. Ctrl+klikšķis pārslēdz grupu/transportlīdzekļu saraksta atvēršanu
@ -375,8 +396,8 @@ STR_TOOLBAR_TOOLTIP_BUILD_SHIP_DOCKS :{BLACK}Būvēt
STR_TOOLBAR_TOOLTIP_BUILD_AIRPORTS :{BLACK}Būvēt lidostas STR_TOOLBAR_TOOLTIP_BUILD_AIRPORTS :{BLACK}Būvēt lidostas
STR_TOOLBAR_TOOLTIP_LANDSCAPING :{BLACK}Atvērt ainavas rīkjoslu, lai paceltu/nolaistu zemes līmeni, stādītu kokus utt. STR_TOOLBAR_TOOLTIP_LANDSCAPING :{BLACK}Atvērt ainavas rīkjoslu, lai paceltu/nolaistu zemes līmeni, stādītu kokus utt.
STR_TOOLBAR_TOOLTIP_SHOW_SOUND_MUSIC_WINDOW :{BLACK}Rādīt skaņas/mūzikas logu STR_TOOLBAR_TOOLTIP_SHOW_SOUND_MUSIC_WINDOW :{BLACK}Rādīt skaņas/mūzikas logu
STR_TOOLBAR_TOOLTIP_SHOW_LAST_MESSAGE_NEWS :{BLACK}Rādīt pēdējos ziņojumus/avīžu ziņas, ziņojumu rādīšanas opcijas STR_TOOLBAR_TOOLTIP_SHOW_LAST_MESSAGE_NEWS :{BLACK}Rādīt pēdējo ziņojumu/ziņu pārskatu, ziņojumu vēsturi vai dzēst visus ziņojumus
STR_TOOLBAR_TOOLTIP_LAND_BLOCK_INFORMATION :{BLACK}Informācija par zemes platību, konsole, skriptu atkļūdošana, ekrānuzņēmumi, par OpenTTD STR_TOOLBAR_TOOLTIP_LAND_BLOCK_INFORMATION :{BLACK}Informācija par zemi, ekrānuzņēmums par OpenTTD un izstrādātāju rīkiem
STR_TOOLBAR_TOOLTIP_SWITCH_TOOLBAR :{BLACK}Pārslēgt rīkjoslas STR_TOOLBAR_TOOLTIP_SWITCH_TOOLBAR :{BLACK}Pārslēgt rīkjoslas
# Extra tooltips for the scenario editor toolbar # Extra tooltips for the scenario editor toolbar
@ -392,7 +413,7 @@ STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Pilsētu
STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}Ražotņu radīšana STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}Ražotņu radīšana
STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}Ceļu būvēšana STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}Ceļu būvēšana
STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION :{BLACK}Tramvaju sliežu ceļu būvniecība STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION :{BLACK}Tramvaju sliežu ceļu būvniecība
STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Stādīt kokus. Shift pārslēdz būvēšanu/izmaksu tāmes rādīšanu STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Iestādiet kokus. Ctrl atlasa apgabalu pa diagonāli. Shift pārslēdz celt/parādīt izmaksas
STR_SCENEDIT_TOOLBAR_PLACE_SIGN :{BLACK}Novietot zīmi STR_SCENEDIT_TOOLBAR_PLACE_SIGN :{BLACK}Novietot zīmi
STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Novietojiet objektu. Ctrl atlasa apgabalu pa diagonāli. Shift pārslēdz ēku/rāda izmaksu tāmi STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Novietojiet objektu. Ctrl atlasa apgabalu pa diagonāli. Shift pārslēdz ēku/rāda izmaksu tāmi
@ -433,7 +454,7 @@ STR_FILE_MENU_EXIT :Iziet
# Map menu # Map menu
STR_MAP_MENU_MAP_OF_WORLD :Pasaules karte STR_MAP_MENU_MAP_OF_WORLD :Pasaules karte
STR_MAP_MENU_EXTRA_VIEWPORT :Papildu skatvieta STR_MAP_MENU_EXTRA_VIEWPORT :Papildu skatvieta
STR_MAP_MENU_LINGRAPH_LEGEND :Kravu plūsmas apzīmējumi STR_MAP_MENU_LINGRAPH_LEGEND :Kravas plūsmas apzīmējums
STR_MAP_MENU_SIGN_LIST :Zīmju saraksts STR_MAP_MENU_SIGN_LIST :Zīmju saraksts
# Town menu # Town menu
@ -492,6 +513,7 @@ STR_NEWS_MENU_DELETE_ALL_MESSAGES :Dzēst visus zi
# About menu # About menu
STR_ABOUT_MENU_LAND_BLOCK_INFO :Zemes platības informācija STR_ABOUT_MENU_LAND_BLOCK_INFO :Zemes platības informācija
STR_ABOUT_MENU_HELP :Palīdzība un rokasgrāmatas
STR_ABOUT_MENU_TOGGLE_CONSOLE :Atvērt/aizvērt konsoli STR_ABOUT_MENU_TOGGLE_CONSOLE :Atvērt/aizvērt konsoli
STR_ABOUT_MENU_AI_DEBUG :MI/spēles skriptu atkļūdošana STR_ABOUT_MENU_AI_DEBUG :MI/spēles skriptu atkļūdošana
STR_ABOUT_MENU_SCREENSHOT :Ekrānuzņēmums STR_ABOUT_MENU_SCREENSHOT :Ekrānuzņēmums
@ -500,6 +522,7 @@ STR_ABOUT_MENU_ABOUT_OPENTTD :Par 'OpenTTD'
STR_ABOUT_MENU_SPRITE_ALIGNER :Gariņu līdzinātājs STR_ABOUT_MENU_SPRITE_ALIGNER :Gariņu līdzinātājs
STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Pārslēgt saistītās kastes STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Pārslēgt saistītās kastes
STR_ABOUT_MENU_TOGGLE_DIRTY_BLOCKS :Pārslēgt netīru bloku krāsojumu STR_ABOUT_MENU_TOGGLE_DIRTY_BLOCKS :Pārslēgt netīru bloku krāsojumu
STR_ABOUT_MENU_TOGGLE_WIDGET_OUTLINES :Pārslēgt logrīku kontūras
# Place in highscore window # Place in highscore window
###length 15 ###length 15
@ -592,7 +615,7 @@ STR_GRAPH_OPERATING_PROFIT_CAPTION :{WHITE}Darbība
STR_GRAPH_INCOME_CAPTION :{WHITE}Ienākumu diagramma STR_GRAPH_INCOME_CAPTION :{WHITE}Ienākumu diagramma
STR_GRAPH_CARGO_DELIVERED_CAPTION :{WHITE}Pārvadātās kravas vienības STR_GRAPH_CARGO_DELIVERED_CAPTION :{WHITE}Pārvadātās kravas vienības
STR_GRAPH_COMPANY_PERFORMANCE_RATINGS_CAPTION :{WHITE}Uzņēmuma darbības vērtējumi (maksimālais ir 1000) STR_GRAPH_COMPANY_PERFORMANCE_RATINGS_CAPTION :{WHITE}Uzņēmuma darbības vērtējumi (maksimālais ir 1000)
STR_GRAPH_COMPANY_VALUES_CAPTION :{WHITE}Uzņēmuma vērtības STR_GRAPH_COMPANY_VALUES_CAPTION :{WHITE}Uzņēmuma vērtības diagramma
STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION :{WHITE}Kravas apmaksas cenas STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION :{WHITE}Kravas apmaksas cenas
STR_GRAPH_CARGO_PAYMENT_RATES_X_LABEL :{TINY_FONT}{BLACK}Dienas pārvadājumos STR_GRAPH_CARGO_PAYMENT_RATES_X_LABEL :{TINY_FONT}{BLACK}Dienas pārvadājumos
@ -701,6 +724,7 @@ STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Klikšķ
STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Klikšķināt uz mūzikas celiņa, lai to izdzēstu no pašreizējās programmas (tikai Pielāgotā1 un Pielāgotā2) STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Klikšķināt uz mūzikas celiņa, lai to izdzēstu no pašreizējās programmas (tikai Pielāgotā1 un Pielāgotā2)
# Highscore window # Highscore window
STR_HIGHSCORE_TOP_COMPANIES :{BIG_FONT}{BLACK}Lielākie uzņēmumi
STR_HIGHSCORE_POSITION :{BIG_FONT}{BLACK}{COMMA}. STR_HIGHSCORE_POSITION :{BIG_FONT}{BLACK}{COMMA}.
STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :Darījumu cilvēks STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :Darījumu cilvēks
STR_HIGHSCORE_PERFORMANCE_TITLE_ENTREPRENEUR :Uzņēmējs STR_HIGHSCORE_PERFORMANCE_TITLE_ENTREPRENEUR :Uzņēmējs
@ -832,7 +856,7 @@ STR_NEWS_COMPANY_BANKRUPT_TITLE :{BIG_FONT}{BLAC
STR_NEWS_COMPANY_BANKRUPT_DESCRIPTION :{BIG_FONT}{BLACK}{STRING} kreditori slēdza un visi īpašumi tika izpārdoti! STR_NEWS_COMPANY_BANKRUPT_DESCRIPTION :{BIG_FONT}{BLACK}{STRING} kreditori slēdza un visi īpašumi tika izpārdoti!
STR_NEWS_COMPANY_LAUNCH_TITLE :{BIG_FONT}{BLACK}Darbu sāk jauns transporta uzņēmums! STR_NEWS_COMPANY_LAUNCH_TITLE :{BIG_FONT}{BLACK}Darbu sāk jauns transporta uzņēmums!
STR_NEWS_COMPANY_LAUNCH_DESCRIPTION :{BIG_FONT}{BLACK}{STRING} sāk būvdarbus netālu no {TOWN}! STR_NEWS_COMPANY_LAUNCH_DESCRIPTION :{BIG_FONT}{BLACK}{STRING} sāk būvdarbus netālu no {TOWN}!
STR_NEWS_MERGER_TAKEOVER_TITLE :{BIG_FONT}{BLACK}{STRING} tiek pārņemts {STRING} izpildījumā! STR_NEWS_MERGER_TAKEOVER_TITLE :{BIG_FONT}{BLACK}{STRING} ir pārņēmis {STRING} par neizpaužamu summu!
STR_PRESIDENT_NAME_MANAGER :{BLACK}{PRESIDENT_NAME}{}(vadītājs) STR_PRESIDENT_NAME_MANAGER :{BLACK}{PRESIDENT_NAME}{}(vadītājs)
STR_NEWS_NEW_TOWN :{BLACK}{BIG_FONT}{STRING} pabalstīja jaunas pilsētas - {TOWN} dibināšanu! STR_NEWS_NEW_TOWN :{BLACK}{BIG_FONT}{STRING} pabalstīja jaunas pilsētas - {TOWN} dibināšanu!
@ -889,6 +913,8 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Tagad ir
STR_NEWS_SHOW_VEHICLE_GROUP_TOOLTIP :{BLACK}Atvērt grupas logu, fokusēts uz transportlīdzekļu grupu STR_NEWS_SHOW_VEHICLE_GROUP_TOOLTIP :{BLACK}Atvērt grupas logu, fokusēts uz transportlīdzekļu grupu
STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_LIST :{WHITE}{STATION} vairs nepieņem: {CARGO_LIST}
STR_NEWS_STATION_NOW_ACCEPTS_CARGO_LIST :{WHITE}{STATION} tagad pieņem: {CARGO_LIST}
STR_NEWS_OFFER_OF_SUBSIDY_EXPIRED :{BIG_FONT}{BLACK}Subsīdijas piedāvājums beidzies:{}{}{STRING} no {STRING} uz {STRING} subsidēšana ir atcelta STR_NEWS_OFFER_OF_SUBSIDY_EXPIRED :{BIG_FONT}{BLACK}Subsīdijas piedāvājums beidzies:{}{}{STRING} no {STRING} uz {STRING} subsidēšana ir atcelta
STR_NEWS_SUBSIDY_WITHDRAWN_SERVICE :{BIG_FONT}{BLACK}Subsidēšana atcelta:{}{}{STRING} pārvadājumi no {STRING} uz {STRING} turpmāk vairs netiek subsidēti STR_NEWS_SUBSIDY_WITHDRAWN_SERVICE :{BIG_FONT}{BLACK}Subsidēšana atcelta:{}{}{STRING} pārvadājumi no {STRING} uz {STRING} turpmāk vairs netiek subsidēti
@ -913,12 +939,27 @@ STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Kopēt
# Game options window # Game options window
STR_GAME_OPTIONS_CAPTION :{WHITE}Spēles opcijas STR_GAME_OPTIONS_CAPTION :{WHITE}Spēles opcijas
STR_GAME_OPTIONS_TAB_GENERAL :Vispārīgi
STR_GAME_OPTIONS_TAB_GENERAL_TT :{BLACK}Izvēlieties vispārīgos iestatījumus
STR_GAME_OPTIONS_TAB_GRAPHICS :Grafika
STR_GAME_OPTIONS_TAB_GRAPHICS_TT :{BLACK}Izvēlieties grafikas iestatījumus
STR_GAME_OPTIONS_TAB_SOUND :Skaņa
STR_GAME_OPTIONS_TAB_SOUND_TT :{BLACK}Izvēlieties skaņas un mūzikas iestatījumus
STR_GAME_OPTIONS_VOLUME :Skaļums
STR_GAME_OPTIONS_SFX_VOLUME :Skaņas efekti
STR_GAME_OPTIONS_MUSIC_VOLUME :Mūzika
STR_GAME_OPTIONS_VOLUME_0 :0%
STR_GAME_OPTIONS_VOLUME_25 :25%
STR_GAME_OPTIONS_VOLUME_50 :50%
STR_GAME_OPTIONS_VOLUME_75 :75%
STR_GAME_OPTIONS_VOLUME_100 :100%
STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Naudas vienības STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Naudas vienības
STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Naudas vienību izvēle STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Naudas vienību izvēle
STR_GAME_OPTIONS_CURRENCY_CODE :{STRING} ({STRING})
###length 42 ###length 42
STR_GAME_OPTIONS_CURRENCY_GBP :Lielbritānijas sterliņu mārciņas STR_GAME_OPTIONS_CURRENCY_GBP :Lielbritānijas sterliņu mārciņas
@ -940,7 +981,7 @@ STR_GAME_OPTIONS_CURRENCY_ISK :Īslandes krona
STR_GAME_OPTIONS_CURRENCY_ITL :Itālijas liras STR_GAME_OPTIONS_CURRENCY_ITL :Itālijas liras
STR_GAME_OPTIONS_CURRENCY_NLG :Nīderlandes guldeņi STR_GAME_OPTIONS_CURRENCY_NLG :Nīderlandes guldeņi
STR_GAME_OPTIONS_CURRENCY_NOK :Norvēģijas kronas STR_GAME_OPTIONS_CURRENCY_NOK :Norvēģijas kronas
STR_GAME_OPTIONS_CURRENCY_PLN :Polijas zloti STR_GAME_OPTIONS_CURRENCY_PLN :Polijas Zlots
STR_GAME_OPTIONS_CURRENCY_RON :Rumānijas lejas STR_GAME_OPTIONS_CURRENCY_RON :Rumānijas lejas
STR_GAME_OPTIONS_CURRENCY_RUR :Krievijas rubļi STR_GAME_OPTIONS_CURRENCY_RUR :Krievijas rubļi
STR_GAME_OPTIONS_CURRENCY_SIT :Slovēnijas tolāri STR_GAME_OPTIONS_CURRENCY_SIT :Slovēnijas tolāri
@ -970,6 +1011,10 @@ STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_TOOLTIP :{BLACK}Izvēlē
# Autosave dropdown # Autosave dropdown
###length 5 ###length 5
STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_OFF :Izslēgta STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_OFF :Izslēgta
STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_10_MINUTES :Ik pēc 10 minūtēm
STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_30_MINUTES :Ik pēc 30 minūtēm
STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_60_MINUTES :Ik pēc 60 minūtēm
STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_120_MINUTES :Ik pēc 120 minūtēm
STR_GAME_OPTIONS_LANGUAGE :{BLACK}Valoda STR_GAME_OPTIONS_LANGUAGE :{BLACK}Valoda
STR_GAME_OPTIONS_LANGUAGE_TOOLTIP :{BLACK}Saskarnes valodas izvēle STR_GAME_OPTIONS_LANGUAGE_TOOLTIP :{BLACK}Saskarnes valodas izvēle
@ -1006,6 +1051,13 @@ STR_GAME_OPTIONS_GUI_SCALE_3X :3x
STR_GAME_OPTIONS_GUI_SCALE_4X :4x STR_GAME_OPTIONS_GUI_SCALE_4X :4x
STR_GAME_OPTIONS_GUI_SCALE_5X :5x STR_GAME_OPTIONS_GUI_SCALE_5X :5x
STR_GAME_OPTIONS_PARTICIPATE_SURVEY_FRAME :{BLACK}Automatizēta aptauja
STR_GAME_OPTIONS_PARTICIPATE_SURVEY :{BLACK}Piedalieties automatizētā aptaujā
STR_GAME_OPTIONS_PARTICIPATE_SURVEY_TOOLTIP :{BLACK}Ja ieslēgts, OpenTTD pārsūtīs aptauju, izejot no spēles
STR_GAME_OPTIONS_PARTICIPATE_SURVEY_LINK :{BLACK}Par aptauju un privātumu
STR_GAME_OPTIONS_PARTICIPATE_SURVEY_LINK_TOOLTIP :{BLACK}Tiek atvērts pārlūks ar plašāku informāciju par automatizēto aptauju
STR_GAME_OPTIONS_PARTICIPATE_SURVEY_PREVIEW :{BLACK}Priekšskatīt aptaujas rezultātus
STR_GAME_OPTIONS_PARTICIPATE_SURVEY_PREVIEW_TOOLTIP :{BLACK}Rādīt pašreizējās spēles aptaujas rezultātus
STR_GAME_OPTIONS_GRAPHICS :{BLACK}Grafika STR_GAME_OPTIONS_GRAPHICS :{BLACK}Grafika
@ -1015,17 +1067,18 @@ STR_GAME_OPTIONS_REFRESH_RATE_ITEM :{NUM}Hz
STR_GAME_OPTIONS_REFRESH_RATE_WARNING :{WHITE}Atsvaidzes intensitāte, kas lielāka par 60 Hz, var ietekmēt veiktspēju. STR_GAME_OPTIONS_REFRESH_RATE_WARNING :{WHITE}Atsvaidzes intensitāte, kas lielāka par 60 Hz, var ietekmēt veiktspēju.
STR_GAME_OPTIONS_BASE_GRF :{BLACK}Pamata grafikas kopa STR_GAME_OPTIONS_BASE_GRF :{BLACK}Pamata grafikas kopa
STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Atlasīt lietošanai pamata grafikas kopu STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Atlasiet izmantojamo pamata grafiku (to nevar mainīt spēlē, tikai no galvenās izvēlnes)
STR_GAME_OPTIONS_BASE_GRF_DESCRIPTION_TOOLTIP :{BLACK}Papildinformācija par pamata grafikas kopu STR_GAME_OPTIONS_BASE_GRF_DESCRIPTION_TOOLTIP :{BLACK}Papildinformācija par pamata grafikas kopu
STR_GAME_OPTIONS_BASE_SFX :{BLACK}Pamata skaņas kopa STR_GAME_OPTIONS_BASE_SFX :{BLACK}Pamata skaņas kopa
STR_GAME_OPTIONS_BASE_SFX_TOOLTIP :{BLACK}Atlasīt lietošanai pamata skaņas kopu STR_GAME_OPTIONS_BASE_SFX_TOOLTIP :{BLACK}Atlasiet izmantojamās pamata skaņas (nevar mainīt spēlē, tikai galvenajā izvēlnē)
STR_GAME_OPTIONS_BASE_SFX_DESCRIPTION_TOOLTIP :{BLACK}Papildinformācija par pamata skaņas kopu STR_GAME_OPTIONS_BASE_SFX_DESCRIPTION_TOOLTIP :{BLACK}Papildinformācija par pamata skaņas kopu
STR_GAME_OPTIONS_BASE_MUSIC :{BLACK}Pamata mūzikas kopa STR_GAME_OPTIONS_BASE_MUSIC :{BLACK}Pamata mūzikas kopa
STR_GAME_OPTIONS_BASE_MUSIC_TOOLTIP :{BLACK}Atlasīt lietošanai pamata mūzikas kopu STR_GAME_OPTIONS_BASE_MUSIC_TOOLTIP :{BLACK}Atlasīt lietošanai pamata mūzikas kopu
STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP :{BLACK}Papildinformācija par pamata mūzikas kopu STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP :{BLACK}Papildinformācija par pamata mūzikas kopu
STR_BASESET_STATUS :{STRING} {RED}({NUM} trūkst/bojāts fail{P s i ""})
STR_ERROR_RESOLUTION_LIST_FAILED :{WHITE}Neizdevās saņemt sarakstu ar atbalstītajām izšķirtspējām STR_ERROR_RESOLUTION_LIST_FAILED :{WHITE}Neizdevās saņemt sarakstu ar atbalstītajām izšķirtspējām
STR_ERROR_FULLSCREEN_FAILED :{WHITE}Pilnekrāna spēles iestatīšana neizdevās STR_ERROR_FULLSCREEN_FAILED :{WHITE}Pilnekrāna spēles iestatīšana neizdevās
@ -1135,6 +1188,7 @@ STR_CONFIG_SETTING_EXPAND_ALL :{BLACK}Izvērst
STR_CONFIG_SETTING_COLLAPSE_ALL :{BLACK}Sakļaut visu STR_CONFIG_SETTING_COLLAPSE_ALL :{BLACK}Sakļaut visu
STR_CONFIG_SETTING_RESET_ALL :{BLACK}Atiestatīt visas vērtības STR_CONFIG_SETTING_RESET_ALL :{BLACK}Atiestatīt visas vērtības
STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT :(skaidrojums nav pieejams) STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT :(skaidrojums nav pieejams)
STR_CONFIG_SETTING_VALUE :{PUSH_COLOUR}{ORANGE}{STRING}{POP_COLOUR}
STR_CONFIG_SETTING_DEFAULT_VALUE :{LTBLUE}Noklusējuma vērtība: {ORANGE}{STRING} STR_CONFIG_SETTING_DEFAULT_VALUE :{LTBLUE}Noklusējuma vērtība: {ORANGE}{STRING}
STR_CONFIG_SETTING_TYPE :{LTBLUE}Iestatījuma veids: {ORANGE}{STRING} STR_CONFIG_SETTING_TYPE :{LTBLUE}Iestatījuma veids: {ORANGE}{STRING}
STR_CONFIG_SETTING_TYPE_CLIENT :lietotāja iestatījums (netiek iekļauts saglabājumos, ietekmē visas spēles) STR_CONFIG_SETTING_TYPE_CLIENT :lietotāja iestatījums (netiek iekļauts saglabājumos, ietekmē visas spēles)
@ -1188,6 +1242,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT :pa kreisi
STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :centrā STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :centrā
STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :pa labi STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :pa labi
STR_CONFIG_SETTING_SECONDS_VALUE :{COMMA}{NBSP}sekund{P 0 i es ""}
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Maksimālais sākotnējais aizdevums: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Maksimālais sākotnējais aizdevums: {STRING}
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Maksimālais aizdevuma daudzums, ko uzņēmums var izsniegt (neskaitot inflāciju) STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Maksimālais aizdevuma daudzums, ko uzņēmums var izsniegt (neskaitot inflāciju)
@ -1246,7 +1301,7 @@ STR_CONFIG_SETTING_CATCHMENT :Atļaut realist
STR_CONFIG_SETTING_CATCHMENT_HELPTEXT :Atšķirīga lieluma apkalpojamās platības dažādu veidu stacijām un lidostām STR_CONFIG_SETTING_CATCHMENT_HELPTEXT :Atšķirīga lieluma apkalpojamās platības dažādu veidu stacijām un lidostām
STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES :Uzņēmumu stacijas var apkalpot industrijas, kurām ir pievienotas neitrālas stacijas: {STRING} STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES :Uzņēmumu stacijas var apkalpot industrijas, kurām ir pievienotas neitrālas stacijas: {STRING}
STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES_HELPTEXT :Ja ieslēgts, industrijas ar pievienotām stacijām (piemēram, naftas ieguves platformas) var apkalpot arī netālu esošās uzņēmumumam piederošās stacijas. Ja izslēgts, šīs industrijas var apkalpot tikai to pašu stacijas. Tuvumā esošās uzņēmumu stacijas nevarēs tās apkalpot, un pievienotās stacijas neapkalpos preču veidus, kas nav atbilstošas attiecīgajai industrijai. STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES_HELPTEXT :Kad ieslēgts, nozares ar pievienotajām stacijām (piemēram, naftas ieguves platformām) var apkalpot arī uzņēmumam piederošas stacijas, kas uzbūvētas tuvumā. Ja tas ir atspējots, šīs nozares var apkalpot tikai tām pievienotās stacijas. Nevienas tuvumā esošās uzņēmuma stacijas nevarēs tos apkalpot, kā arī pievienotā stacija apkalpos neko citu kā tikai nozari
STR_CONFIG_SETTING_EXTRADYNAMITE :Atļaut pilsētai piederošo ceļu, tiltu un tuneļu nojaukšanu: {STRING} STR_CONFIG_SETTING_EXTRADYNAMITE :Atļaut pilsētai piederošo ceļu, tiltu un tuneļu nojaukšanu: {STRING}
STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT :Padara vieglāku pilsētai piederošas infrastruktūras un ēku nojaukšanu STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT :Padara vieglāku pilsētai piederošas infrastruktūras un ēku nojaukšanu
@ -1316,7 +1371,7 @@ STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT :Jaunie rīkojum
STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT_HELPTEXT :Transportlīdzeklis parasti pietur pie katras caurbraucamās stacijas. Ieslēdzot šo iestatījumu, tas dosies cauri visām ceļa stacijām uz savu galamērķi bez pieturām. Ņemiet vērā, ka šis iestatījums nosaka noklusējuma vērtību tikai jaunajiem rīkojumiem. Tomēr ir iespējams katru rīkojumu iestatīt arī atsevišķi STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT_HELPTEXT :Transportlīdzeklis parasti pietur pie katras caurbraucamās stacijas. Ieslēdzot šo iestatījumu, tas dosies cauri visām ceļa stacijām uz savu galamērķi bez pieturām. Ņemiet vērā, ka šis iestatījums nosaka noklusējuma vērtību tikai jaunajiem rīkojumiem. Tomēr ir iespējams katru rīkojumu iestatīt arī atsevišķi
STR_CONFIG_SETTING_STOP_LOCATION :Jaunie vilcienu rīkojumi noklusējumā liek apstāties perona {STRING} STR_CONFIG_SETTING_STOP_LOCATION :Jaunie vilcienu rīkojumi noklusējumā liek apstāties perona {STRING}
STR_CONFIG_SETTING_STOP_LOCATION_HELPTEXT :Vieta, kur vilciens apstāsies pie perona noklusējumā. 'Sākumā' ir pie ieejas stacijā, 'vidū' nozīmē perona vidū, un 'beigās' ir tālu prom no ieejas. Ņemiet vērā, ka šis iestatījums nosaka noklusējuma vērtību tikai jaunajiem rīkojumiem. Taču individuālos rīkojumos var noteikt atšķirīgu rīcību STR_CONFIG_SETTING_STOP_LOCATION_HELPTEXT :Vieta, kur vilciens pēc noklusējuma apstāsies pie perona. “Tuvākais gals” nozīmē tuvu ieejas punktam, “vidējais” nozīmē platformas vidu un “tālais gals” nozīmē tālu no ieejas punkta. Ņemiet vērā, ka šis iestatījums nosaka tikai noklusējuma vērtību jauniem pasūtījumiem. Atsevišķu pasūtījumu pieturas vietu var iestatīt, noklikšķinot uz pasūtījuma teksta
###length 3 ###length 3
STR_CONFIG_SETTING_STOP_LOCATION_NEAR_END :sākumā STR_CONFIG_SETTING_STOP_LOCATION_NEAR_END :sākumā
STR_CONFIG_SETTING_STOP_LOCATION_MIDDLE :vidū STR_CONFIG_SETTING_STOP_LOCATION_MIDDLE :vidū
@ -1359,9 +1414,11 @@ STR_CONFIG_SETTING_PLANE_CRASHES_NONE :Nav*
STR_CONFIG_SETTING_PLANE_CRASHES_REDUCED :samazināts STR_CONFIG_SETTING_PLANE_CRASHES_REDUCED :samazināts
STR_CONFIG_SETTING_PLANE_CRASHES_NORMAL :parasts STR_CONFIG_SETTING_PLANE_CRASHES_NORMAL :parasts
STR_CONFIG_SETTING_CROSSING_WITH_COMPETITOR :Atļaut dzelzceļa pārbrauktuves ar ceļiem vai sliedēm, kas pieder sāncenšiem: {STRING}
STR_CONFIG_SETTING_CROSSING_WITH_COMPETITOR_HELPTEXT :Atļaut būvēt dzelzceļa pārbrauktuves uz sāncenšu piederošiem ceļiem vai sliedēm
STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD :Atļaut caurbraucamas pieturvietas uz pilsētai piederošiem ceļiem: {STRING} STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD :Atļaut caurbraucamo ceļu pieturas uz ceļiem, kas pieder pilsētām: {STRING}
STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD_HELPTEXT :Ļauj būvēt caurbraucamas pieturvietas uz pilsētai piederošiem ceļiem STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD_HELPTEXT :Atļaut būvēt caurbraucamo ceļu pieturas uz ceļiem, kas pieder pilsētām
STR_CONFIG_SETTING_STOP_ON_COMPETITOR_ROAD :Atļaut caurbraucamas pieturvietas uz sāncenšu ceļiem: {STRING} STR_CONFIG_SETTING_STOP_ON_COMPETITOR_ROAD :Atļaut caurbraucamas pieturvietas uz sāncenšu ceļiem: {STRING}
STR_CONFIG_SETTING_STOP_ON_COMPETITOR_ROAD_HELPTEXT :Ļauj būvēt caurbraucamas pieturvietas uz citiem uzņēmumiem piederošiem ceļiem STR_CONFIG_SETTING_STOP_ON_COMPETITOR_ROAD_HELPTEXT :Ļauj būvēt caurbraucamas pieturvietas uz citiem uzņēmumiem piederošiem ceļiem
STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Šo iestatījumu nav iespējams mainīt, kad tur ir transportlīdzekļi STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Šo iestatījumu nav iespējams mainīt, kad tur ir transportlīdzekļi
@ -1372,6 +1429,8 @@ STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Kad ieslēgts,
STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :Sākotnējā uzņēmuma krāsa: {STRING} STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :Sākotnējā uzņēmuma krāsa: {STRING}
STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :Izvēlieties uzņēmuma sākotnējo krāsu STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :Izvēlieties uzņēmuma sākotnējo krāsu
STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY :Uzņēmuma sākuma sekundārā krāsa: {STRING}
STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY_HELPTEXT :Izvēlieties uzņēmuma sākuma sekundāro krāsu, ja izmantojat NewGRF, kas to ļauj.
STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Lidostas darbosies mūžīgi: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Lidostas darbosies mūžīgi: {STRING}
STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Ieslēdzot šo iestatījumu, katrs lidostas veids pēc tā ieviešanas vienmēr ir pieejams STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Ieslēdzot šo iestatījumu, katrs lidostas veids pēc tā ieviešanas vienmēr ir pieejams
@ -1434,7 +1493,7 @@ STR_CONFIG_SETTING_LAND_GENERATOR_ORIGINAL :Sākotnējais
STR_CONFIG_SETTING_LAND_GENERATOR_TERRA_GENESIS :TerraGenesis STR_CONFIG_SETTING_LAND_GENERATOR_TERRA_GENESIS :TerraGenesis
STR_CONFIG_SETTING_TERRAIN_TYPE :Reljefa veids: {STRING} STR_CONFIG_SETTING_TERRAIN_TYPE :Reljefa veids: {STRING}
STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT :(Tikai TerraGenesis) Ainavas kalnainība STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT :Izvēlieties ainavas pauguru un kalnu augstumu
STR_CONFIG_SETTING_INDUSTRY_DENSITY :Industriju blīvums: {STRING} STR_CONFIG_SETTING_INDUSTRY_DENSITY :Industriju blīvums: {STRING}
STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Iestatiet, cik industrijas jāģenerē un kāds līmenis jāuztur spēles laikā STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Iestatiet, cik industrijas jāģenerē un kāds līmenis jāuztur spēles laikā
@ -1443,18 +1502,18 @@ STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Naftas industri
STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Limits, cik tālu no kartes malām drīkst taisīt naftas pārstrādes rūpnīcas un un naftas ieguves platformas. Uz salu kartēm tas nodrošina, ka šīs konstrukcijas tiek būvētas piekrastēs. Uz kartēm, kas ir lielākas par 256 lauciņiem šī vērtība tiek palielināta. STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Limits, cik tālu no kartes malām drīkst taisīt naftas pārstrādes rūpnīcas un un naftas ieguves platformas. Uz salu kartēm tas nodrošina, ka šīs konstrukcijas tiek būvētas piekrastēs. Uz kartēm, kas ir lielākas par 256 lauciņiem šī vērtība tiek palielināta.
STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Sniega līnijas augstums: {STRING} STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Sniega līnijas augstums: {STRING}
STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Kontrolē, kādā augstumā sākas sniegs subarktiskajā ainavā. Sniegs ietekmē arī nozares ražošanas un pilsētu izaugsmes prasības. Var mainīt tikai, izmantojot scenāriju redaktoru, vai citādi aprēķināts, izmantojot “sniega segumu” STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Izvēlieties, kādā augstumā sākas sniegs subarktiskajā ainavā. Sniegs ietekmē arī nozares ražošanas un pilsētu izaugsmi. Var mainīt tikai, izmantojot scenāriju redaktoru, vai citādi aprēķināt, izmantojot "sniega segumu"
STR_CONFIG_SETTING_SNOW_COVERAGE :Sniega pārklājums: {STRING} STR_CONFIG_SETTING_SNOW_COVERAGE :Sniega pārklājums: {STRING}
STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Kontrolē aptuveno sniega daudzumu subarktiskajā ainavā. Sniegs ietekmē arī nozares ražošanas un pilsētu izaugsmes prasības. Izmanto tikai karšu ģenerēšanas laikā. Zeme tieši virs jūras līmeņa vienmēr ir bez sniega STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Izvēlieties aptuveno sniega daudzumu subarktiskajā ainavā. Sniegs ietekmē arī nozares ražošanas un pilsētu izaugsmei. Izmanto tikai kartes ģenerēšanas laikā. Uz jūras līmeņa un piekrastes abpagaliem nekad nav sniega.
STR_CONFIG_SETTING_SNOW_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_SNOW_COVERAGE_VALUE :{NUM}%
STR_CONFIG_SETTING_DESERT_COVERAGE :Tuksneša pārklājums: {STRING} STR_CONFIG_SETTING_DESERT_COVERAGE :Tuksneša pārklājums: {STRING}
STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :Kontrolējiet aptuveno tuksneša daudzumu tropiskajā ainavā. Tuksnesis ietekmē arī nozaru veidošanos. Izmanto tikai karšu ģenerēšanas laikā STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :Izvēlieties aptuveno tuksneša daudzumu tropiskajā ainavā. Tuksnesis ietekmē arī nozares ražošanas un pilsētu izaugsmi. Izmanto tikai kartes ģenerēšanas laikā
STR_CONFIG_SETTING_DESERT_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_DESERT_COVERAGE_VALUE :{NUM}%
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :Apvidus nelīdzenums: {STRING} STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :Apvidus nelīdzenums: {STRING}
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :(Tikai TerraGenesis) Izvēlieties pauguru biežumu — gludās ainavās ir mazāk pauguru, bet tie ir plaši izvērsti. Nelīdzenā ainavā ir daudz pauguru, kas var izskatīties vienveidīgi. STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :Izvēlieties pauguru formu un skaitu. Gludās ainavās ir mazāk, bet platāku pauguru, savukārt nelīdzenās ainavās ir vairāk, mazāku kalnu.
###length 4 ###length 4
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :Ļoti gluda STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :Ļoti gluda
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_SMOOTH :Gluda STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_SMOOTH :Gluda
@ -1462,7 +1521,7 @@ STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_ROUGH :Nelīdzena
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_ROUGH :Ļoti nelīdzena STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_ROUGH :Ļoti nelīdzena
STR_CONFIG_SETTING_VARIETY :Dažādības sadalījums: {STRING} STR_CONFIG_SETTING_VARIETY :Dažādības sadalījums: {STRING}
STR_CONFIG_SETTING_VARIETY_HELPTEXT :(Tikai TerraGenesis) Nosaka, vai karte satur gan kalnus, gan līdzenumus. Tā kā šis padara karti tikai plakanāku, citus iestatījumus vajadzētu pārslēgt uz kalnainumu STR_CONFIG_SETTING_VARIETY_HELPTEXT :Izvēlieties, vai kartē ir gan kalni, gan līdzenas vietas. Jo augstāka atšķirība, jo lielākas atšķirības kalnu un līdzenu apgabalu augstumā.
STR_CONFIG_SETTING_RIVER_AMOUNT :Upju daudzums: {STRING} STR_CONFIG_SETTING_RIVER_AMOUNT :Upju daudzums: {STRING}
STR_CONFIG_SETTING_RIVER_AMOUNT_HELPTEXT :Izvēlieties, cik daudz upju ģenerēt STR_CONFIG_SETTING_RIVER_AMOUNT_HELPTEXT :Izvēlieties, cik daudz upju ģenerēt
@ -1482,6 +1541,7 @@ STR_CONFIG_SETTING_ROAD_SIDE_LEFT :Brauc pa kreiso
STR_CONFIG_SETTING_ROAD_SIDE_RIGHT :Brauc pa labo pusi STR_CONFIG_SETTING_ROAD_SIDE_RIGHT :Brauc pa labo pusi
STR_CONFIG_SETTING_HEIGHTMAP_ROTATION :Augstumu kartes pagriešana: {STRING} STR_CONFIG_SETTING_HEIGHTMAP_ROTATION :Augstumu kartes pagriešana: {STRING}
STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_TOOLTIP :Izvēlieties, kādā veidā augstuma kartes attēls tiek pagriezts, lai tas iekļautos spēles pasaulē
###length 2 ###length 2
STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_COUNTER_CLOCKWISE :Pret pulksteņa rādītāja virzienu STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_COUNTER_CLOCKWISE :Pret pulksteņa rādītāja virzienu
STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_CLOCKWISE :Pulksteņa rādītāja virzienā STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_CLOCKWISE :Pulksteņa rādītāja virzienā
@ -1516,7 +1576,7 @@ STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREY_TO_RED :Pelēks uz sark
STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREYSCALE :Pelēktonis STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREYSCALE :Pelēktonis
STR_CONFIG_SETTING_SCROLLMODE :Skatvietas ritināšanas uzvedība: {STRING} STR_CONFIG_SETTING_SCROLLMODE :Skatvietas ritināšanas uzvedība: {STRING}
STR_CONFIG_SETTING_SCROLLMODE_HELPTEXT :Uzvedība, kad ritina karti STR_CONFIG_SETTING_SCROLLMODE_HELPTEXT :Uzvedība, ritinot karti. Opcijas “peles pozīcija bloķēta” nedarbojas visās sistēmās, piemēram, tīmekļa versijās, skārienekrānos, Linux ar Wayland un citās
###length 4 ###length 4
STR_CONFIG_SETTING_SCROLLMODE_DEFAULT :Pārvietot skatvietu ar labo peles pogu, peles pozīcija ir fiksēta STR_CONFIG_SETTING_SCROLLMODE_DEFAULT :Pārvietot skatvietu ar labo peles pogu, peles pozīcija ir fiksēta
STR_CONFIG_SETTING_SCROLLMODE_RMB_LOCKED :Pārvietot karti ar labo peles pogu, peles pozīcija ir fiksēta STR_CONFIG_SETTING_SCROLLMODE_RMB_LOCKED :Pārvietot karti ar labo peles pogu, peles pozīcija ir fiksēta
@ -1574,6 +1634,9 @@ STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_OFF :Izslēgta
STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE :Aizvērt logu ar labo klikšķi: {STRING} STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE :Aizvērt logu ar labo klikšķi: {STRING}
STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_HELPTEXT :Labais klikšķis logā aizver logu. Izslēdz paskaidres parādīšanu ar labo klikšķi! STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_HELPTEXT :Labais klikšķis logā aizver logu. Izslēdz paskaidres parādīšanu ar labo klikšķi!
###length 3 ###length 3
STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_NO :Nē
STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_YES :Jā
STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_YES_EXCEPT_STICKY :Jā, izņemot lipīgo
STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES :Lietot {STRING} datuma formātu saglabāto spēļu nosaukumos STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES :Lietot {STRING} datuma formātu saglabāto spēļu nosaukumos
STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_HELPTEXT :Datuma formāts spēļu saglabājuma failu nosaukumos STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_HELPTEXT :Datuma formāts spēļu saglabājuma failu nosaukumos
@ -1599,7 +1662,12 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Ieslēgt papild
STR_CONFIG_SETTING_LOADING_INDICATORS :Lietot piekraušanas rādītājus: {STRING} STR_CONFIG_SETTING_LOADING_INDICATORS :Lietot piekraušanas rādītājus: {STRING}
STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :Izvēlēties piekraušanas rādītāju attēlošanu virs iekraujamiem un izkraujamiem transportlīdzekļiem STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :Izvēlēties piekraušanas rādītāju attēlošanu virs iekraujamiem un izkraujamiem transportlīdzekļiem
STR_CONFIG_SETTING_TIMETABLE_MODE :Laika vienības laika grafikiem: {STRING}
STR_CONFIG_SETTING_TIMETABLE_MODE_HELPTEXT :Izvēlieties transportlīdzekļu kustības sarakstos izmantotās laika vienības
###length 3 ###length 3
STR_CONFIG_SETTING_TIMETABLE_MODE_DAYS :Dienas
STR_CONFIG_SETTING_TIMETABLE_MODE_SECONDS :Sekundes
STR_CONFIG_SETTING_TIMETABLE_MODE_TICKS :Tiki
STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Kustības sarakstos rādīt pienākšanu un atiešanu: {STRING} STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Kustības sarakstos rādīt pienākšanu un atiešanu: {STRING}
STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Kustības sarakstos rādīt paredzamos pienākšanas un atiešanas laikus STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Kustības sarakstos rādīt paredzamos pienākšanas un atiešanas laikus
@ -1694,7 +1762,7 @@ STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :Cik daudz atmi
STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_VALUE :{COMMA} MiB STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_VALUE :{COMMA} MiB
STR_CONFIG_SETTING_SERVINT_ISPERCENT :Apkopju starplaiki procentos: {STRING} STR_CONFIG_SETTING_SERVINT_ISPERCENT :Apkopju starplaiki procentos: {STRING}
STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Izvēlieties, vai transportlīdzekļu apkopi veikt pēc fiksēta laika kopš iepriekšējās apkopes vai, kad uzticamība nokrīt zem kāda noteiktas daļas no maksimālās uzticamības STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Ja tas ir ieslēgts, transportlīdzekļi mēģina veikt apkopi, kad to uzticamība samazinās par noteiktu procentuālo daļu no maksimālās uzticamības.{}{}Piemēram, ja transportlīdzekļa maksimālā uzticamība ir 90% un apkopes intervāls ir 20%, transportlīdzeklis mēģinās veikt apkopi, kad tas sasniedz 72% ticamību.
STR_CONFIG_SETTING_SERVINT_TRAINS :Vilcienu apkopju noklusējuma starplaiks: {STRING} STR_CONFIG_SETTING_SERVINT_TRAINS :Vilcienu apkopju noklusējuma starplaiks: {STRING}
STR_CONFIG_SETTING_SERVINT_TRAINS_HELPTEXT :Izvēlēties jaunajiem sliežu transportlīdzekļiem apkopju noklusējuma starplaiku, ja tiem tas nav noteikts STR_CONFIG_SETTING_SERVINT_TRAINS_HELPTEXT :Izvēlēties jaunajiem sliežu transportlīdzekļiem apkopju noklusējuma starplaiku, ja tiem tas nav noteikts
@ -1824,8 +1892,8 @@ STR_CONFIG_SETTING_ALLOW_TOWN_ROADS_HELPTEXT :Ļauj pilsētā
STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS :Pilsētam ir atļauts būvēt vienlīmeņa krustojumus: {STRING} STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS :Pilsētam ir atļauts būvēt vienlīmeņa krustojumus: {STRING}
STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS_HELPTEXT :Šā iestatījuma ieslēgšana pilsētām atļauj būvēt vienlīmeņa krustojumus STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS_HELPTEXT :Šā iestatījuma ieslēgšana pilsētām atļauj būvēt vienlīmeņa krustojumus
STR_CONFIG_SETTING_NOISE_LEVEL :Atļaut pilsētām kontrolēt trokšņu līmeni lidostās: {STRING} STR_CONFIG_SETTING_NOISE_LEVEL :Lidostas izvietojuma ierobežojums, pamatojoties uz trokšņa līmeni: {STRING}
STR_CONFIG_SETTING_NOISE_LEVEL_HELPTEXT :Ja šis iestatījums ir izslēgts, tad katrā pilsētā var būt divas lidostas. Ja šis iestatījums ir ieslēgts, tad lidostu daudzums pilsētā ir ierobežots ar pilsētas piekrišanu troksnim, kas ir atkarīga no iedzīvotāju skaita, lidostas lieluma un attāluma STR_CONFIG_SETTING_NOISE_LEVEL_HELPTEXT :Ļaujiet pilsētām bloķēt lidostu būvniecību, pamatojoties uz to trokšņa pieļaujamo līmeni, kas ir balstīts uz pilsētas iedzīvotāju skaitu un lidostas lielumu un attālumu. Ja šis iestatījums ir izslēgts, pilsētās tiek atļautas tikai divas lidostas, ja vien vietējās iestādes attieksme nav "Atļaujoša"
STR_CONFIG_SETTING_TOWN_FOUNDING :Pilsētu dibināšana: {STRING} STR_CONFIG_SETTING_TOWN_FOUNDING :Pilsētu dibināšana: {STRING}
STR_CONFIG_SETTING_TOWN_FOUNDING_HELPTEXT :Šā iestatījuma ieslēgšana atļauj spēlētājiem spēlē nodibināt jaunas pilsētas STR_CONFIG_SETTING_TOWN_FOUNDING_HELPTEXT :Šā iestatījuma ieslēgšana atļauj spēlētājiem spēlē nodibināt jaunas pilsētas
@ -1899,13 +1967,17 @@ STR_CONFIG_SETTING_LARGER_TOWNS_DISABLED :neviena
STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Pilsētu sākuma lieluma reizinātājs: {STRING} STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Pilsētu sākuma lieluma reizinātājs: {STRING}
STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Pilsētu vidējais lielums attiecībā pret parastām apdzīvotām vietām spēles sākumā STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Pilsētu vidējais lielums attiecībā pret parastām apdzīvotām vietām spēles sākumā
STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL :Atjaunināt sadalījuma grafu ik pēc {STRING}
STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :Laiks starp turpmākajiem saišu grafa pārrēķiniem. Katrs pārrēķins aprēķina viena grafa komponentes plānus. Tas nozīmē, ka vērtība X šim iestatījumam nenozīmē, ka visa diagramma tiks atjaunināta ik pēc X sekundēm. Būs tikai daži komponenti. Jo īsāku to iestatīsit, jo vairāk CPU laika būs nepieciešams tā aprēķināšanai. Jo ilgāk to iestatīsit, jo ilgāks laiks paies, līdz sāksies kravu sadale jaunos maršrutos.
STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME :Izplatības grafa pārrēķināšanai izmantojiet {STRING}
STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :Laiks, kas nepieciešams katram saišu grafa komponenta pārrēķinam. Kad tiek sākts pārrēķins, tiek izveidots pavediens, kuram ir atļauts darboties šo sekunžu skaitu. Jo īsāku iestatījumu iestatāt, jo lielāka iespēja, ka pavediens nebūs pabeigts paredzētajā laikā. Tad spēle apstājas, līdz pāriet ielāde. Jo ilgāk jūs to iestatāt, jo ilgāks laiks nepieciešams, līdz izplatīšana tiek atjaunināta, mainoties maršrutiem.
STR_CONFIG_SETTING_DISTRIBUTION_PAX :Pasažieru izplatīšanas režīms: {STRING} STR_CONFIG_SETTING_DISTRIBUTION_PAX :Pasažieru izplatīšanas režīms: {STRING}
STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"simetriska" nozīmē, ka apmēram vienāds daudzums pasažieri vēlēsies doties virzienā no stacijas A uz B, cik no B uz A. "asimetriska" nozīmē, ka patvaļīgs pasažieru daudzums var vēlēties nokļūt katrā no virzieniem. "manuāli" nozīmē, ka pasažieriem netiks veikta automātiska izplatīšana. STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"Simetrisks" nozīmē, ka aptuveni tikpat daudz pasažieru dosies no stacijas A uz staciju B kā no B uz A. "Asimetrisks" nozīmē, ka abos virzienos var doties patvaļīgs pasažieru skaits. "Manuāli" nozīmē, ka pasažieriem nenotiks automātiska sadale.
STR_CONFIG_SETTING_DISTRIBUTION_MAIL :Pasta izplatīšanas režīms: {STRING} STR_CONFIG_SETTING_DISTRIBUTION_MAIL :Pasta izplatīšanas režīms: {STRING}
STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :"simetriska" nozīmē, ka apmēram vienāds daudzums pasta tiks nosūtīts virzienā no stacijas A uz B, cik no B uz A. "asimetriska" nozīmē, ka patvaļīgs pasta daudzums var tikt nosūtīts katrā no virzieniem. "manuāli" nozīmē, ka pastam netiks veikta automātiska izplatīšana. STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :"Simetrisks" nozīmē, ka no stacijas A uz staciju B tiks nosūtīts aptuveni tāds pats pasta daudzums kā no B uz A. "Asimetrisks" nozīmē, ka jebkurā virzienā var nosūtīt patvaļīgu pasta daudzumu. "Manuāli" nozīmē, ka pasta automātiska izplatīšana netiks veikta.
STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED :Izplatīšanas režīms APSARGĀJAMAI preču klasei: {STRING} STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED :Izplatīšanas režīms APSARGĀJAMAI preču klasei: {STRING}
STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :APSARGĀJAMĀ kravas klase satur vērtslietas mērenajā joslā, dimantus subtropu joslā un zeltu subarktiskajā joslā. NewGRF paplašinājumi var to mainīt. "simetriska" nozīmē, ka apmēram vienāds daudzums kravas tiks nosūtīts virzienā no stacijas A uz B, cik no B uz A. "asimetriska" nozīmē, ka patvaļīgs kravas daudzums var tikt nosūtīts katrā no virzieniem. "manuāli" nozīmē, ka pastam netiks veikta automātiska izplatīšana. Šo vērtību vēlams iestatīt kā asimetrisku vai manuālu, kad spēlē subarktiskajā joslā, jo bankas nesūta zeltu atpakaļ uz zelta raktuvēm. Mērenajā un subtropu joslā var izvēlēties simetrisku, jo bankas sūtīs vērtslietas atpakaļ uz izcelsmes banku, kad saņems vērtslietu pievedumu. STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :APSARGĀJAMĀ kravu klasē ir vērtslietas mērenā klimatā, dimanti subtropu klimatā vai zelts subarktiskajā klimatā. NewGRF to var mainīt. "Simetrisks" nozīmē, ka no stacijas A uz staciju B tiks nosūtīts aptuveni tāds pats šīs kravas daudzums kā no B uz A. "Asimetrisks" nozīmē, ka šīs kravas var nosūtīt jebkurā virzienā patvaļīgi. "Manuāli" nozīmē, ka šai kravai automātiskā sadale nenotiks. Spēlējot subarktisko vai subtropu, ieteicams to iestatīt uz asimetrisku vai manuālu, jo bankas saņem kravas tikai šādos klimatiskajos apstākļos. Mērenam klimatam varat izvēlēties arī simetrisko, jo bankas nosūtīs vērtslietas atpakaļ uz izcelsmes banku.
STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT :Izplatīšanas modelis citām kravu klasēm: {STRING} STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT :Izplatīšanas modelis citām kravu klasēm: {STRING}
STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"Asimetrisks" nozīmē, ka jebkurā virzienā var nosūtīt patvaļīgu daudzumu kravas. "Manuāli" nozīmē, ka šīm kravām automātiska sadale nenotiks STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"Asimetrisks" nozīmē, ka jebkurā virzienā var nosūtīt patvaļīgu daudzumu kravas. "Manuāli" nozīmē, ka šīm kravām automātiska sadale nenotiks
###length 3 ###length 3
@ -1924,13 +1996,15 @@ STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Uzstādod šo m
STR_CONFIG_SETTING_SHORT_PATH_SATURATION :Īso ceļu piesātinājums pirms sākt izmantot augstas ietilpības ceļus: {STRING} STR_CONFIG_SETTING_SHORT_PATH_SATURATION :Īso ceļu piesātinājums pirms sākt izmantot augstas ietilpības ceļus: {STRING}
STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Nereti starp divām stacijām ir vairāki ceļi. Kravu sadale vispirms piesātinās īsāko maršrutu, pēc tam izmantos nākamo īsāko maršrutu līdz tas būs piesātināts, un tā tālāk. Piesātinājumu nosaka novērtējot ietilpību un plānoto izmantojumu. Kad visi ceļi ir piesātināti un vēl ir palicis pieprasījumus, tas pārslogos visus ceļus, dodot priekšroku ceļiem ar lielāko ietilpību. Algoritms visbiežāk nepareizi novērtēs ietilpību. Šis iestatījums jums atļaus norādīt, līdz cik procentiem īsākais ceļš ir jāpiesātina pirmajā piegājienā pirms izvēlēties garāku ceļu. Iestatiet to uz mazāk kā 100%, lai izvairītos no pārpildītām stacijām, ja kapacitāte ir pārvērtēta. STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Nereti starp divām stacijām ir vairāki ceļi. Kravu sadale vispirms piesātinās īsāko maršrutu, pēc tam izmantos nākamo īsāko maršrutu līdz tas būs piesātināts, un tā tālāk. Piesātinājumu nosaka novērtējot ietilpību un plānoto izmantojumu. Kad visi ceļi ir piesātināti un vēl ir palicis pieprasījumus, tas pārslogos visus ceļus, dodot priekšroku ceļiem ar lielāko ietilpību. Algoritms visbiežāk nepareizi novērtēs ietilpību. Šis iestatījums jums atļaus norādīt, līdz cik procentiem īsākais ceļš ir jāpiesātina pirmajā piegājienā pirms izvēlēties garāku ceļu. Iestatiet to uz mazāk kā 100%, lai izvairītos no pārpildītām stacijām, ja kapacitāte ir pārvērtēta.
STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Ātruma mērvienības: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Ātruma vienības (sauszemes): {STRING}
STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_NAUTICAL :Ātruma vienības (jūras): {STRING}
STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Vai lietotāja saskarnē rāda ātrumu, rādīt norādītajās mērvienībās STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Vai lietotāja saskarnē rāda ātrumu, rādīt norādītajās mērvienībās
###length 5 ###length 5
STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :impērijas, britu (jūdzes stundā) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :impērijas, britu (jūdzes stundā)
STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :metriskās (km/h) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :metriskās (km/h)
STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :SI, starptautiskās (m/s) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :SI, starptautiskās (m/s)
STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_GAMEUNITS :Spēles vienības (lauciņi/dienas) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_GAMEUNITS :Spēles vienības (lauciņi/dienas)
STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_KNOTS :Mezgli
STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER :Transportlīdzekļu jaudas mērvienības: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER :Transportlīdzekļu jaudas mērvienības: {STRING}
STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_HELPTEXT :Vai lietotāja saskarnē rāda transporta līdzekļa jaudu, rādīt norādītajās mērvienībās STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_HELPTEXT :Vai lietotāja saskarnē rāda transporta līdzekļa jaudu, rādīt norādītajās mērvienībās
@ -2031,6 +2105,7 @@ STR_CONFIG_ERROR_SPRITECACHE_TOO_BIG :{WHITE}Neizdev
# Video initalization errors # Video initalization errors
STR_VIDEO_DRIVER_ERROR :{WHITE}Kļūda ar video iestatījumiem STR_VIDEO_DRIVER_ERROR :{WHITE}Kļūda ar video iestatījumiem
STR_VIDEO_DRIVER_ERROR_NO_HARDWARE_ACCELERATION :{WHITE}... nav atrasts saderīgs GPU. Aparatūras paātrinājums ir atspējots STR_VIDEO_DRIVER_ERROR_NO_HARDWARE_ACCELERATION :{WHITE}... nav atrasts saderīgs GPU. Aparatūras paātrinājums ir atspējots
STR_VIDEO_DRIVER_ERROR_HARDWARE_ACCELERATION_CRASH :{WHITE}... GPU dzinulis apturēja spēli. Aparatūras paātrinājums ir izslēgts
# Intro window # Intro window
STR_INTRO_CAPTION :{WHITE}OpenTTD {REV} STR_INTRO_CAPTION :{WHITE}OpenTTD {REV}
@ -2044,6 +2119,7 @@ STR_INTRO_MULTIPLAYER :{BLACK}Vairāks
STR_INTRO_GAME_OPTIONS :{BLACK}Spēles opcijas STR_INTRO_GAME_OPTIONS :{BLACK}Spēles opcijas
STR_INTRO_HIGHSCORE :{BLACK}Sasniegumu tabula STR_INTRO_HIGHSCORE :{BLACK}Sasniegumu tabula
STR_INTRO_HELP :{BLACK}Palīdzība un rokasgrāmatas
STR_INTRO_CONFIG_SETTINGS_TREE :{BLACK}Iestatījumi STR_INTRO_CONFIG_SETTINGS_TREE :{BLACK}Iestatījumi
STR_INTRO_NEWGRF_SETTINGS :{BLACK}NewGRF iestatījumi STR_INTRO_NEWGRF_SETTINGS :{BLACK}NewGRF iestatījumi
STR_INTRO_ONLINE_CONTENT :{BLACK}Pārbaudīt tiešsaistes saturu STR_INTRO_ONLINE_CONTENT :{BLACK}Pārbaudīt tiešsaistes saturu
@ -2065,6 +2141,7 @@ STR_INTRO_TOOLTIP_TOYLAND_LANDSCAPE :{BLACK}Izvēlē
STR_INTRO_TOOLTIP_GAME_OPTIONS :{BLACK}Rādīt spēles opcijas STR_INTRO_TOOLTIP_GAME_OPTIONS :{BLACK}Rādīt spēles opcijas
STR_INTRO_TOOLTIP_HIGHSCORE :{BLACK}Rādīt sasniegumu tabulu STR_INTRO_TOOLTIP_HIGHSCORE :{BLACK}Rādīt sasniegumu tabulu
STR_INTRO_TOOLTIP_HELP :{BLACK}Piekļūstiet dokumentācijai un tiešsaistes resursiem
STR_INTRO_TOOLTIP_CONFIG_SETTINGS_TREE :{BLACK}Displeja iestatījumi STR_INTRO_TOOLTIP_CONFIG_SETTINGS_TREE :{BLACK}Displeja iestatījumi
STR_INTRO_TOOLTIP_NEWGRF_SETTINGS :{BLACK}Rādīt NewGRF iestatījumus STR_INTRO_TOOLTIP_NEWGRF_SETTINGS :{BLACK}Rādīt NewGRF iestatījumus
STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK}Pārbaudīt vai lejupielādei nav pieejams jauns un atjaunināts saturs STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK}Pārbaudīt vai lejupielādei nav pieejams jauns un atjaunināts saturs
@ -2087,6 +2164,17 @@ STR_ABANDON_GAME_QUERY :{YELLOW}Vai tie
STR_ABANDON_SCENARIO_QUERY :{YELLOW}Vai tiešām vēlaties pamest šo scenāriju? STR_ABANDON_SCENARIO_QUERY :{YELLOW}Vai tiešām vēlaties pamest šo scenāriju?
# Help window # Help window
STR_HELP_WINDOW_CAPTION :{WHITE}Palīdzība un rokasgrāmatas
STR_HELP_WINDOW_WEBSITES :{BLACK}Vietnes
STR_HELP_WINDOW_DOCUMENTS :{BLACK}Dokumenti
STR_HELP_WINDOW_README :{BLACK}Lasi_Mani
STR_HELP_WINDOW_CHANGELOG :{BLACK}Izmaiņu žurnāls
STR_HELP_WINDOW_KNOWN_BUGS :{BLACK}Zināmās kļūdas
STR_HELP_WINDOW_LICENSE :{BLACK}Licence
STR_HELP_WINDOW_MAIN_WEBSITE :{BLACK}OpenTTD
STR_HELP_WINDOW_MANUAL_WIKI :{BLACK}Rokasgrāmata / Wiki
STR_HELP_WINDOW_BUGTRACKER :{BLACK}Ziņot par kļūdu
STR_HELP_WINDOW_COMMUNITY :{BLACK}Kopiena
# Cheat window # Cheat window
STR_CHEATS :{WHITE}Blēdības STR_CHEATS :{WHITE}Blēdības
@ -2102,6 +2190,7 @@ STR_CHEAT_EDIT_MAX_HL_QUERY_CAPT :{WHITE}Izmainī
STR_CHEAT_CHANGE_DATE :{LTBLUE}Nomainīt datumu: {ORANGE} {DATE_SHORT} STR_CHEAT_CHANGE_DATE :{LTBLUE}Nomainīt datumu: {ORANGE} {DATE_SHORT}
STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Mainīt pašreizējo gadu STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Mainīt pašreizējo gadu
STR_CHEAT_SETUP_PROD :{LTBLUE}Ieslēgt ražojumu vērtības maiņu: {ORANGE}{STRING} STR_CHEAT_SETUP_PROD :{LTBLUE}Ieslēgt ražojumu vērtības maiņu: {ORANGE}{STRING}
STR_CHEAT_STATION_RATING :{LTBLUE}Labot stacijas vērtējumus uz 100%: {ORANGE}{STRING}
# Livery window # Livery window
STR_LIVERY_CAPTION :{WHITE}{COMPANY} - krāsu shēma STR_LIVERY_CAPTION :{WHITE}{COMPANY} - krāsu shēma
@ -2111,12 +2200,20 @@ STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Rādīt
STR_LIVERY_ROAD_VEHICLE_TOOLTIP :{BLACK}Rādīt autotransporta identitātes krāsu shēmas STR_LIVERY_ROAD_VEHICLE_TOOLTIP :{BLACK}Rādīt autotransporta identitātes krāsu shēmas
STR_LIVERY_SHIP_TOOLTIP :{BLACK}Rādīt kuģu identitātes krāsu shēmas STR_LIVERY_SHIP_TOOLTIP :{BLACK}Rādīt kuģu identitātes krāsu shēmas
STR_LIVERY_AIRCRAFT_TOOLTIP :{BLACK}Rādīt lidaparātu identitātes krāsu shēmas STR_LIVERY_AIRCRAFT_TOOLTIP :{BLACK}Rādīt lidaparātu identitātes krāsu shēmas
STR_LIVERY_TRAIN_GROUP_TOOLTIP :{BLACK}Rādīt vilcienu grupu krāsas
STR_LIVERY_ROAD_VEHICLE_GROUP_TOOLTIP :{BLACK}Rādīt autotransporta grupu krāsas
STR_LIVERY_SHIP_GROUP_TOOLTIP :{BLACK}Rādīt kuģu grupu krāsas
STR_LIVERY_AIRCRAFT_GROUP_TOOLTIP :{BLACK}Rādīt lidaparātu grupu krāsas
STR_LIVERY_PRIMARY_TOOLTIP :{BLACK}Izvēlēties galveno identitātes krāsu atlasītajai shēmai. Ctrl+klikšķis iestatīs šo krāsu katrai shēmai STR_LIVERY_PRIMARY_TOOLTIP :{BLACK}Izvēlēties galveno identitātes krāsu atlasītajai shēmai. Ctrl+klikšķis iestatīs šo krāsu katrai shēmai
STR_LIVERY_SECONDARY_TOOLTIP :{BLACK}Izvēlēties papildu identitātes krāsu atlasītajai shēmai. Ctrl+klikšķis iestatīs šo krāsu katrai shēmai STR_LIVERY_SECONDARY_TOOLTIP :{BLACK}Izvēlēties papildu identitātes krāsu atlasītajai shēmai. Ctrl+klikšķis iestatīs šo krāsu katrai shēmai
STR_LIVERY_PANEL_TOOLTIP :{BLACK}Izvēlēties kuru identitātes krāsu shēmu mainīt, vai vairākas ar Ctrl+klikšķi. Klikšķināt uz rūtiņas, lai pārslēgtu shēmas izmantošanu STR_LIVERY_PANEL_TOOLTIP :{BLACK}Izvēlēties kuru identitātes krāsu shēmu mainīt, vai vairākas ar Ctrl+klikšķi. Klikšķināt uz rūtiņas, lai pārslēgtu shēmas izmantošanu
STR_LIVERY_TRAIN_GROUP_EMPTY :Vilcienu grupas nav izveidotas
STR_LIVERY_ROAD_VEHICLE_GROUP_EMPTY :Autotransporta līdzekļu grupas nav izveidotas
STR_LIVERY_SHIP_GROUP_EMPTY :Nav izveidotas kuģu grupas
STR_LIVERY_AIRCRAFT_GROUP_EMPTY :Nav izveidota neviena gaisa kuģu grupa
###length 23 ###length 23
STR_LIVERY_DEFAULT :Vispārpieņemtā identitātes krāsa STR_LIVERY_DEFAULT :Noklusējuma Nokrāsa
STR_LIVERY_STEAM :Tvaika lokomotīve STR_LIVERY_STEAM :Tvaika lokomotīve
STR_LIVERY_DIESEL :Dīzeļlokomotīve STR_LIVERY_DIESEL :Dīzeļlokomotīve
STR_LIVERY_ELECTRIC :Elektrolokomotīve STR_LIVERY_ELECTRIC :Elektrolokomotīve
@ -2269,7 +2366,7 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Spēles
STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Uzstādīt paroli STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Uzstādīt paroli
STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Aizsargā jūsu spēli ar paroli, ja nevēlaties lai tā būtu publiski pieejama STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Aizsargā jūsu spēli ar paroli, ja nevēlaties lai tā būtu publiski pieejama
STR_NETWORK_START_SERVER_VISIBILITY_LABEL :{BLACK}Redzamība STR_NETWORK_START_SERVER_VISIBILITY_LABEL :{BLACK}Redzamība:
STR_NETWORK_START_SERVER_VISIBILITY_TOOLTIP :{BLACK} Vai citi lietotāji var redzēt jūsu serveri publiskajā sarakstā STR_NETWORK_START_SERVER_VISIBILITY_TOOLTIP :{BLACK} Vai citi lietotāji var redzēt jūsu serveri publiskajā sarakstā
STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} spēlētāj{P s i u} STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} spēlētāj{P s i u}
STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Maksimālais spēlētāju skaits: STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Maksimālais spēlētāju skaits:
@ -2335,6 +2432,8 @@ STR_NETWORK_CLIENT_LIST_NEW_COMPANY :(Jauna kompāni
STR_NETWORK_CLIENT_LIST_NEW_COMPANY_TOOLTIP :{BLACK}Izveidot jaunu kompāniju un pievienoties tai STR_NETWORK_CLIENT_LIST_NEW_COMPANY_TOOLTIP :{BLACK}Izveidot jaunu kompāniju un pievienoties tai
STR_NETWORK_CLIENT_LIST_PLAYER_ICON_SELF_TOOLTIP :{BLACK}Tas esat jūs STR_NETWORK_CLIENT_LIST_PLAYER_ICON_SELF_TOOLTIP :{BLACK}Tas esat jūs
STR_NETWORK_CLIENT_LIST_PLAYER_ICON_HOST_TOOLTIP :{BLACK}Šis ir spēles īpašnieks STR_NETWORK_CLIENT_LIST_PLAYER_ICON_HOST_TOOLTIP :{BLACK}Šis ir spēles īpašnieks
STR_NETWORK_CLIENT_LIST_CLIENT_COMPANY_COUNT :{BLACK}Klientu: {NUM}; uzņēmumu: {NUM}/{NUM}
STR_NETWORK_CLIENT_LIST_CLIENT_COMPANY_COUNT_TOOLTIP :{BLACK}Pašlaik savienoto klientu skaits, uzņēmumu skaits un maksimālais servera administratora atļautais uzņēmumu skaits
# Matches ConnectionType # Matches ConnectionType
###length 5 ###length 5
@ -2361,6 +2460,12 @@ STR_NETWORK_ASK_RELAY_NO :{BLACK}Nē
STR_NETWORK_ASK_RELAY_YES_ONCE :{BLACK}Jā, vienreiz STR_NETWORK_ASK_RELAY_YES_ONCE :{BLACK}Jā, vienreiz
STR_NETWORK_ASK_RELAY_YES_ALWAYS :{BLACK}Jā, vairs nejautāt STR_NETWORK_ASK_RELAY_YES_ALWAYS :{BLACK}Jā, vairs nejautāt
STR_NETWORK_ASK_SURVEY_CAPTION :Vai piedalīties automatizētā aptaujā?
STR_NETWORK_ASK_SURVEY_TEXT :Vai vēlaties piedalīties automatizētajā aptaujā?{}OpenTTD pārsūtīs aptauju, izejot no spēles.{}To jebkurā laikā varat mainīt sadaļā "Spēles opcijas".
STR_NETWORK_ASK_SURVEY_PREVIEW :Priekšskatīt aptaujas rezultātus
STR_NETWORK_ASK_SURVEY_LINK :Par aptauju un privātumu
STR_NETWORK_ASK_SURVEY_NO :Nē
STR_NETWORK_ASK_SURVEY_YES :Jā
STR_NETWORK_SPECTATORS :Novērotāji STR_NETWORK_SPECTATORS :Novērotāji
@ -2496,7 +2601,7 @@ STR_CONTENT_SEARCH_EXTERNAL_TOOLTIP :{BLACK}Meklēt
STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER_CAPTION :{WHITE}Jūs aizejat no OpenTTD! STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER_CAPTION :{WHITE}Jūs aizejat no OpenTTD!
STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER :{WHITE}Lietošanas noteikumi no ārpuses lejupielādētam saturam var būt dažāi.{}Jums būs jāskatās ārējās saites ārējā satura instalēšanai uz OpenTTD.{}Vai vēlaties turpināt? STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER :{WHITE}Lietošanas noteikumi no ārpuses lejupielādētam saturam var būt dažāi.{}Jums būs jāskatās ārējās saites ārējā satura instalēšanai uz OpenTTD.{}Vai vēlaties turpināt?
STR_CONTENT_FILTER_TITLE :{BLACK}Atzīmju/nosaukumu filtrs: STR_CONTENT_FILTER_TITLE :{BLACK}Atzīmju/nosaukumu filtrs:
STR_CONTENT_OPEN_URL :{BLACK}Apmeklēt tīmekļa vietni STR_CONTENT_OPEN_URL :{BLACK}Vietne
STR_CONTENT_OPEN_URL_TOOLTIP :{BLACK}Apmeklēt tīmekļa vietni, lai tiktu pie šī satura STR_CONTENT_OPEN_URL_TOOLTIP :{BLACK}Apmeklēt tīmekļa vietni, lai tiktu pie šī satura
STR_CONTENT_DOWNLOAD_CAPTION :{BLACK}Lejupielādēt STR_CONTENT_DOWNLOAD_CAPTION :{BLACK}Lejupielādēt
STR_CONTENT_DOWNLOAD_CAPTION_TOOLTIP :{BLACK}Sākt atlasītā lejupielādi STR_CONTENT_DOWNLOAD_CAPTION_TOOLTIP :{BLACK}Sākt atlasītā lejupielādi
@ -2567,6 +2672,7 @@ STR_TRANSPARENT_BUILDINGS_TOOLTIP :{BLACK}Pārslē
STR_TRANSPARENT_BRIDGES_TOOLTIP :{BLACK}Pārslēgt tiltu caurspīdību. Ctrl+klikšķis, lai slēgtu STR_TRANSPARENT_BRIDGES_TOOLTIP :{BLACK}Pārslēgt tiltu caurspīdību. Ctrl+klikšķis, lai slēgtu
STR_TRANSPARENT_STRUCTURES_TOOLTIP :{BLACK}Pārslēgt caurspīdību tādām celtnēm kā bākas un antenas. Ctrl+klikšķis, lai slēgtu STR_TRANSPARENT_STRUCTURES_TOOLTIP :{BLACK}Pārslēgt caurspīdību tādām celtnēm kā bākas un antenas. Ctrl+klikšķis, lai slēgtu
STR_TRANSPARENT_CATENARY_TOOLTIP :{BLACK}Pārslēgt piekartroses caurspīdību. Ctrl+klikšķis, lai slēgtu STR_TRANSPARENT_CATENARY_TOOLTIP :{BLACK}Pārslēgt piekartroses caurspīdību. Ctrl+klikšķis, lai slēgtu
STR_TRANSPARENT_TEXT_TOOLTIP :{BLACK}Pārslēgt caurspīdīgumu ielādei un izmaksu/ienākumu tekstam. Ctrl+klikšķis, lai bloķētu
STR_TRANSPARENT_INVISIBLE_TOOLTIP :{BLACK}Caurspīdības vietā objektus padarīt neredzamus STR_TRANSPARENT_INVISIBLE_TOOLTIP :{BLACK}Caurspīdības vietā objektus padarīt neredzamus
# Linkgraph legend window # Linkgraph legend window
@ -2650,8 +2756,11 @@ STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Būvēt
STR_STATION_BUILD_STATION_CLASS_TOOLTIP :{BLACK}Izvēlēties kuru stacijas klasi rādīt STR_STATION_BUILD_STATION_CLASS_TOOLTIP :{BLACK}Izvēlēties kuru stacijas klasi rādīt
STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}Izvēlēties kuru stacijas veidu būvēt STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}Izvēlēties kuru stacijas veidu būvēt
STR_STATION_CLASS_DFLT :Noklusējuma stacija STR_STATION_CLASS_DFLT :Noklusējuma
STR_STATION_CLASS_DFLT_STATION :Noklusējuma stacija
STR_STATION_CLASS_DFLT_ROADSTOP :Noklusējuma pietura
STR_STATION_CLASS_WAYP :Pieturas punkti STR_STATION_CLASS_WAYP :Pieturas punkti
STR_STATION_CLASS_WAYP_WAYPOINT :Noklusējuma pieturas punkts
# Signal window # Signal window
STR_BUILD_SIGNAL_CAPTION :{WHITE}Signāla izvēle STR_BUILD_SIGNAL_CAPTION :{WHITE}Signāla izvēle
@ -2679,6 +2788,7 @@ STR_SELECT_ROAD_BRIDGE_CAPTION :{WHITE}Izvēlē
STR_SELECT_BRIDGE_SELECTION_TOOLTIP :{BLACK}Tiltu izvēle - klikšķināt uz vēlamo tiltu, lai to uzbūvētu STR_SELECT_BRIDGE_SELECTION_TOOLTIP :{BLACK}Tiltu izvēle - klikšķināt uz vēlamo tiltu, lai to uzbūvētu
STR_SELECT_BRIDGE_INFO_NAME :{GOLD}{STRING} STR_SELECT_BRIDGE_INFO_NAME :{GOLD}{STRING}
STR_SELECT_BRIDGE_INFO_NAME_MAX_SPEED :{GOLD}{STRING},{} {VELOCITY} STR_SELECT_BRIDGE_INFO_NAME_MAX_SPEED :{GOLD}{STRING},{} {VELOCITY}
STR_SELECT_BRIDGE_INFO_NAME_COST :{GOLD}{0:STRING},{} {WHITE}{2:CURRENCY_LONG}
STR_SELECT_BRIDGE_INFO_NAME_MAX_SPEED_COST :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY_LONG} STR_SELECT_BRIDGE_INFO_NAME_MAX_SPEED_COST :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY_LONG}
STR_BRIDGE_NAME_SUSPENSION_STEEL :Vanšu, tērauda STR_BRIDGE_NAME_SUSPENSION_STEEL :Vanšu, tērauda
STR_BRIDGE_NAME_GIRDER_STEEL :Siju, tērauda STR_BRIDGE_NAME_GIRDER_STEEL :Siju, tērauda
@ -2799,7 +2909,7 @@ STR_OBJECT_CLASS_TRNS :Raidītāji
STR_PLANT_TREE_CAPTION :{WHITE}Koki STR_PLANT_TREE_CAPTION :{WHITE}Koki
STR_PLANT_TREE_TOOLTIP :{BLACK}Izvēlēties koka veidu stādīšanai. Ja lauciņš jau ir koks, tas pievienos vairāk jauktu veidu kokus neatkarīgi no izvēlētā veida STR_PLANT_TREE_TOOLTIP :{BLACK}Izvēlēties koka veidu stādīšanai. Ja lauciņš jau ir koks, tas pievienos vairāk jauktu veidu kokus neatkarīgi no izvēlētā veida
STR_TREES_RANDOM_TYPE :{BLACK}Nejauši izvēlēta veida koki STR_TREES_RANDOM_TYPE :{BLACK}Nejauši izvēlēta veida koki
STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Izvietot nejaušus kokus. Shift pārslēdz būve/rādīt izmaksu tāmi STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Novietojiet jaukta veida kokus. Ctrl atlasa apgabalu pa diagonāli. Shift pārslēdz celtniecību/rāda izmaksas
STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Nejauši koki STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Nejauši koki
STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Stādīt nejaušus kokus visā ainavā STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Stādīt nejaušus kokus visā ainavā
STR_TREES_MODE_NORMAL_BUTTON :{BLACK}Normāls STR_TREES_MODE_NORMAL_BUTTON :{BLACK}Normāls
@ -2858,7 +2968,7 @@ STR_FOUND_TOWN_SELECT_LAYOUT_3X3_GRID :{BLACK}3x3 rež
STR_FOUND_TOWN_SELECT_LAYOUT_RANDOM :{BLACK}Nejaušs STR_FOUND_TOWN_SELECT_LAYOUT_RANDOM :{BLACK}Nejaušs
# Fund new industry window # Fund new industry window
STR_FUND_INDUSTRY_CAPTION :{WHITE}Finansēt jaunu ražotni STR_FUND_INDUSTRY_CAPTION :{WHITE}Industrijas Finansējums
STR_FUND_INDUSTRY_SELECTION_TOOLTIP :{BLACK}Izvēlēties no saraksta atbilstošu ražotni STR_FUND_INDUSTRY_SELECTION_TOOLTIP :{BLACK}Izvēlēties no saraksta atbilstošu ražotni
STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES :{BLACK}Izveidot nejaušas nozares STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES :{BLACK}Izveidot nejaušas nozares
STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_TOOLTIP :{BLACK}Pārklāt karti ar nejauši izvietotām ražotnēm STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_TOOLTIP :{BLACK}Pārklāt karti ar nejauši izvietotām ražotnēm
@ -2874,14 +2984,14 @@ STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_CAPTION :{WHITE} Noņemt
STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_QUERY :{YELLOW}Vai tiešām vēlaties noņemt visas nozares? STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_QUERY :{YELLOW}Vai tiešām vēlaties noņemt visas nozares?
# Industry cargoes window # Industry cargoes window
STR_INDUSTRY_CARGOES_INDUSTRY_CAPTION :{WHITE}Ražotnes '{STRING}' kravu ķēde STR_INDUSTRY_CARGOES_INDUSTRY_CAPTION :{WHITE}Nozares ķēde - {STRING}
STR_INDUSTRY_CARGOES_CARGO_CAPTION :{WHITE}{STRING} kravas ražotņu ķēde STR_INDUSTRY_CARGOES_CARGO_CAPTION :{WHITE}Kravas ķēde - {STRING}
STR_INDUSTRY_CARGOES_PRODUCERS :{WHITE}Ražotāji STR_INDUSTRY_CARGOES_PRODUCERS :{WHITE}Ražotāji
STR_INDUSTRY_CARGOES_CUSTOMERS :{WHITE}Patērētāji STR_INDUSTRY_CARGOES_CUSTOMERS :{WHITE}Patērētāji
STR_INDUSTRY_CARGOES_HOUSES :{WHITE}Mājas STR_INDUSTRY_CARGOES_HOUSES :{WHITE}Mājas
STR_INDUSTRY_CARGOES_INDUSTRY_TOOLTIP :{BLACK}Klikšķināt uz ražotnes, lai redzētu tās piegādātājus un patērētājus STR_INDUSTRY_CARGOES_INDUSTRY_TOOLTIP :{BLACK}Klikšķināt uz ražotnes, lai redzētu tās piegādātājus un patērētājus
STR_INDUSTRY_CARGOES_CARGO_TOOLTIP :{BLACK}{STRING}{}Klikšķināt uz kravas, lai redzētu tās piegādātājus un patērētājus STR_INDUSTRY_CARGOES_CARGO_TOOLTIP :{BLACK}{STRING}{}Klikšķināt uz kravas, lai redzētu tās piegādātājus un patērētājus
STR_INDUSTRY_DISPLAY_CHAIN :{BLACK}Rādīt ķēdi STR_INDUSTRY_DISPLAY_CHAIN :{BLACK}Nozares ķēde
STR_INDUSTRY_DISPLAY_CHAIN_TOOLTIP :{BLACK}Rādīt kravas ražojošās un patērējošās ražotnes STR_INDUSTRY_DISPLAY_CHAIN_TOOLTIP :{BLACK}Rādīt kravas ražojošās un patērējošās ražotnes
STR_INDUSTRY_CARGOES_NOTIFY_SMALLMAP :{BLACK}Piesaistīt minikartei STR_INDUSTRY_CARGOES_NOTIFY_SMALLMAP :{BLACK}Piesaistīt minikartei
STR_INDUSTRY_CARGOES_NOTIFY_SMALLMAP_TOOLTIP :{BLACK}Izvēlēties arī minikartē attēlotās rūpnīcas STR_INDUSTRY_CARGOES_NOTIFY_SMALLMAP_TOOLTIP :{BLACK}Izvēlēties arī minikartē attēlotās rūpnīcas
@ -3019,7 +3129,7 @@ STR_ABOUT_VERSION :{BLACK}OpenTTD
STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-{STRING} OpenTTD darba grupa STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-{STRING} OpenTTD darba grupa
# Framerate display window # Framerate display window
STR_FRAMERATE_CAPTION :{WHITE}Kadru biežums STR_FRAMERATE_CAPTION :{WHITE}Kadru nomaiņas ātrums
STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}x) STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}x)
STR_FRAMERATE_RATE_GAMELOOP :{BLACK}Simulācijas ātrums: {STRING} STR_FRAMERATE_RATE_GAMELOOP :{BLACK}Simulācijas ātrums: {STRING}
STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Spēles tikšķu skaits, ko simulēt vienā sekundē. STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Spēles tikšķu skaits, ko simulēt vienā sekundē.
@ -3112,11 +3222,15 @@ STR_MAPGEN_MAPSIZE :{BLACK}Kartes i
STR_MAPGEN_MAPSIZE_TOOLTIP :{BLACK}Izvēlieties kartes izmēru, izteikts lauciņos. Pieejamo lauciņu skaits var būt nedaudz mazāks STR_MAPGEN_MAPSIZE_TOOLTIP :{BLACK}Izvēlieties kartes izmēru, izteikts lauciņos. Pieejamo lauciņu skaits var būt nedaudz mazāks
STR_MAPGEN_BY :{BLACK}* STR_MAPGEN_BY :{BLACK}*
STR_MAPGEN_NUMBER_OF_TOWNS :{BLACK}Pilsētu daudzums: STR_MAPGEN_NUMBER_OF_TOWNS :{BLACK}Pilsētu daudzums:
STR_MAPGEN_NUMBER_OF_TOWNS_TOOLTIP :{BLACK}Atlasiet pilsētu blīvumu vai pielāgojiet daudzumu
STR_MAPGEN_TOWN_NAME_LABEL :{BLACK}Pilsētu nosaukumi: STR_MAPGEN_TOWN_NAME_LABEL :{BLACK}Pilsētu nosaukumi:
STR_MAPGEN_TOWN_NAME_DROPDOWN_TOOLTIP :{BLACK}Pilsētu nosaukumu stila izvēle STR_MAPGEN_TOWN_NAME_DROPDOWN_TOOLTIP :{BLACK}Pilsētu nosaukumu stila izvēle
STR_MAPGEN_DATE :{BLACK}Datums: STR_MAPGEN_DATE :{BLACK}Datums:
STR_MAPGEN_DATE_TOOLTIP :{BLACK}Izvēlieties sākuma datumu
STR_MAPGEN_NUMBER_OF_INDUSTRIES :{BLACK}Ražotņu daudzums: STR_MAPGEN_NUMBER_OF_INDUSTRIES :{BLACK}Ražotņu daudzums:
STR_MAPGEN_NUMBER_OF_INDUSTRIES_TOOLTIP :{BLACK}Atlasiet nozaru blīvumu vai pielāgojiet daudzumu
STR_MAPGEN_HEIGHTMAP_HEIGHT :{BLACK}Augstākā virsotne: STR_MAPGEN_HEIGHTMAP_HEIGHT :{BLACK}Augstākā virsotne:
STR_MAPGEN_HEIGHTMAP_HEIGHT_TOOLTIP :{BLACK}Izvēlieties augstāko virsotni, ko spēle mēģinās izveidot, mērot augstumu virs jūras līmeņa
STR_MAPGEN_HEIGHTMAP_HEIGHT_UP :{BLACK}Palielināt augstāko punktu virsotnes pa vienai STR_MAPGEN_HEIGHTMAP_HEIGHT_UP :{BLACK}Palielināt augstāko punktu virsotnes pa vienai
STR_MAPGEN_HEIGHTMAP_HEIGHT_DOWN :{BLACK}Pa vienai samazināt kartes augstākās virsotnes maksimālo augstumu STR_MAPGEN_HEIGHTMAP_HEIGHT_DOWN :{BLACK}Pa vienai samazināt kartes augstākās virsotnes maksimālo augstumu
STR_MAPGEN_SNOW_COVERAGE :{BLACK}Sniega pārklājums: STR_MAPGEN_SNOW_COVERAGE :{BLACK}Sniega pārklājums:
@ -3129,10 +3243,12 @@ STR_MAPGEN_DESERT_COVERAGE_DOWN :{BLACK}Samazin
STR_MAPGEN_DESERT_COVERAGE_TEXT :{BLACK}{NUM}% STR_MAPGEN_DESERT_COVERAGE_TEXT :{BLACK}{NUM}%
STR_MAPGEN_TERRAIN_TYPE :{BLACK}Apvidus reljefs: STR_MAPGEN_TERRAIN_TYPE :{BLACK}Apvidus reljefs:
STR_MAPGEN_SEA_LEVEL :{BLACK}Jūras līmenis: STR_MAPGEN_SEA_LEVEL :{BLACK}Jūras līmenis:
STR_MAPGEN_SEA_LEVEL_TOOLTIP :{BLACK}Izvēlieties jūras līmeni
STR_MAPGEN_QUANTITY_OF_RIVERS :{BLACK}Upes: STR_MAPGEN_QUANTITY_OF_RIVERS :{BLACK}Upes:
STR_MAPGEN_SMOOTHNESS :{BLACK}Gludums: STR_MAPGEN_SMOOTHNESS :{BLACK}Gludums:
STR_MAPGEN_VARIETY :{BLACK}Dažādības sadalījums: STR_MAPGEN_VARIETY :{BLACK}Dažādības sadalījums:
STR_MAPGEN_GENERATE :{WHITE}Radīt STR_MAPGEN_GENERATE :{WHITE}Radīt
STR_MAPGEN_GENERATE_TOOLTIP :{BLACK}Izveidojiet pasauli un spēlējiet OpenTTD!
STR_MAPGEN_NEWGRF_SETTINGS :{BLACK}NewGRF Iestatījumi STR_MAPGEN_NEWGRF_SETTINGS :{BLACK}NewGRF Iestatījumi
STR_MAPGEN_NEWGRF_SETTINGS_TOOLTIP :{BLACK}Rādīt NewGRF iestatījumus STR_MAPGEN_NEWGRF_SETTINGS_TOOLTIP :{BLACK}Rādīt NewGRF iestatījumus
STR_MAPGEN_AI_SETTINGS :{BLACK}AI iestatījumi STR_MAPGEN_AI_SETTINGS :{BLACK}AI iestatījumi
@ -3165,6 +3281,7 @@ STR_MAPGEN_TOWN_NAME_CATALAN :Katalāņu
# Strings for map borders at game generation # Strings for map borders at game generation
STR_MAPGEN_BORDER_TYPE :{BLACK}Kartes malas: STR_MAPGEN_BORDER_TYPE :{BLACK}Kartes malas:
STR_MAPGEN_BORDER_TYPE_TOOLTIP :{BLACK}Izvēlieties spēļu pasaules robežas
STR_MAPGEN_NORTHWEST :{BLACK}Ziemeļrietumi STR_MAPGEN_NORTHWEST :{BLACK}Ziemeļrietumi
STR_MAPGEN_NORTHEAST :{BLACK}Ziemeļaustrumi STR_MAPGEN_NORTHEAST :{BLACK}Ziemeļaustrumi
STR_MAPGEN_SOUTHEAST :{BLACK}Dienvidaustrumi STR_MAPGEN_SOUTHEAST :{BLACK}Dienvidaustrumi
@ -3177,7 +3294,9 @@ STR_MAPGEN_BORDER_MANUAL :{BLACK}Manuāli
STR_MAPGEN_HEIGHTMAP_ROTATION :{BLACK}Augstumu kartes pagriešana: STR_MAPGEN_HEIGHTMAP_ROTATION :{BLACK}Augstumu kartes pagriešana:
STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}Augstumu kartes nosaukums: STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}Augstumu kartes nosaukums:
STR_MAPGEN_HEIGHTMAP_NAME_TOOLTIP :{BLACK}Augstuma kartes attēla faila nosaukums
STR_MAPGEN_HEIGHTMAP_SIZE_LABEL :{BLACK}Lielums: STR_MAPGEN_HEIGHTMAP_SIZE_LABEL :{BLACK}Lielums:
STR_MAPGEN_HEIGHTMAP_SIZE_LABEL_TOOLTIP :{BLACK}Avota augstuma kartes attēla izmērs. Lai iegūtu labākos rezultātus, katrai malai ir jāatbilst OpenTTD pieejamajam kartes malas garumam, piemēram, 256, 512, 1024 utt.
STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM} x {NUM} STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM} x {NUM}
STR_MAPGEN_TERRAIN_TYPE_QUERY_CAPT :{WHITE}Vēlamā augtākā virsotne STR_MAPGEN_TERRAIN_TYPE_QUERY_CAPT :{WHITE}Vēlamā augtākā virsotne
@ -3192,6 +3311,7 @@ STR_SE_MAPGEN_FLAT_WORLD :{WHITE}Līdzena
STR_SE_MAPGEN_FLAT_WORLD_TOOLTIP :{BLACK}Radīt līdzenu zemi STR_SE_MAPGEN_FLAT_WORLD_TOOLTIP :{BLACK}Radīt līdzenu zemi
STR_SE_MAPGEN_RANDOM_LAND :{WHITE}Nejauša zeme STR_SE_MAPGEN_RANDOM_LAND :{WHITE}Nejauša zeme
STR_SE_MAPGEN_FLAT_WORLD_HEIGHT :{BLACK}Līdzenas zemes augstums: STR_SE_MAPGEN_FLAT_WORLD_HEIGHT :{BLACK}Līdzenas zemes augstums:
STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_TOOLTIP :{BLACK}Izvēlieties zemes augstumu virs jūras līmeņa
STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_DOWN :{BLACK}Par vienu līmeni samazināt līdzenas zemes augstumu STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_DOWN :{BLACK}Par vienu līmeni samazināt līdzenas zemes augstumu
STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_UP :{BLACK}Par vienu līmeni palielināt līdzenas zemes augstumu STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_UP :{BLACK}Par vienu līmeni palielināt līdzenas zemes augstumu
@ -3278,6 +3398,7 @@ STR_SAVE_PRESET_SAVE :{BLACK}Saglabā
STR_SAVE_PRESET_SAVE_TOOLTIP :{BLACK}pašreizējos iestatījumus saglābāt kā sākontnējos iestatījumus STR_SAVE_PRESET_SAVE_TOOLTIP :{BLACK}pašreizējos iestatījumus saglābāt kā sākontnējos iestatījumus
# NewGRF parameters window # NewGRF parameters window
STR_BASEGRF_PARAMETERS_CAPTION :{WHITE}Mainiet pamata grafikas parametrus
STR_NEWGRF_PARAMETERS_CAPTION :{WHITE}Mainīt NewGRF parametrus STR_NEWGRF_PARAMETERS_CAPTION :{WHITE}Mainīt NewGRF parametrus
STR_NEWGRF_PARAMETERS_CLOSE :{BLACK}Aizvērt STR_NEWGRF_PARAMETERS_CLOSE :{BLACK}Aizvērt
STR_NEWGRF_PARAMETERS_RESET :{BLACK}Atjaunot STR_NEWGRF_PARAMETERS_RESET :{BLACK}Atjaunot
@ -3294,6 +3415,7 @@ STR_NEWGRF_INSPECT_PARENT_TOOLTIP :{BLACK}Pārbaud
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT :{STRING} adresē {HEX} STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT :{STRING} adresē {HEX}
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_OBJECT :Objekts STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_OBJECT :Objekts
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_RAIL_TYPE :Sliežu veids STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_RAIL_TYPE :Sliežu veids
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Ceļa tips
STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF mainīgā 60+x parametrs (heksadecimāls) STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF mainīgā 60+x parametrs (heksadecimāls)
@ -3328,6 +3450,8 @@ STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING
STR_NEWGRF_ERROR_MSG_WARNING :{RED}Brīdinājums: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_WARNING :{RED}Brīdinājums: {SILVER}{STRING}
STR_NEWGRF_ERROR_MSG_ERROR :{RED}Kļūda: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_ERROR :{RED}Kļūda: {SILVER}{STRING}
STR_NEWGRF_ERROR_MSG_FATAL :{RED}Fatāls: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_FATAL :{RED}Fatāls: {SILVER}{STRING}
STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}NewGRF "{STRING}" apstrādājas dēl neatgrieziniskās kļūdas:{}{STRING}
STR_NEWGRF_ERROR_POPUP :{WHITE}NewGRF "{STRING}"uzrāda kļūdu:{}{STRING}
STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING} nedarbosies kopā ar TTDPatch versiju (par ko ziņoja OpenTTD). STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING} nedarbosies kopā ar TTDPatch versiju (par ko ziņoja OpenTTD).
STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} ir paredzēts TTD versijai {2:STRING} STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} ir paredzēts TTD versijai {2:STRING}
STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} ir paredzēts lietošanai ar {2:STRING} STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} ir paredzēts lietošanai ar {2:STRING}
@ -3478,8 +3602,8 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{PUSH_COLOUR}{Y
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION :{PUSH_COLOUR}{YELLOW}Finansējiet pilsētas ceļu tīkla rekonstrukciju.{}Līdz 6 mēnešiem rada ievērojamus ceļu satiksmes traucējumus.{}{POP_COLOUR}Izmaksas: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION :{PUSH_COLOUR}{YELLOW}Finansējiet pilsētas ceļu tīkla rekonstrukciju.{}Līdz 6 mēnešiem rada ievērojamus ceļu satiksmes traucējumus.{}{POP_COLOUR}Izmaksas: {CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{PUSH_COLOUR}{YELLOW}Uzceliet statuju par godu savam uzņēmumam.{}Nodrošina pastāvīgu staciju vērtējuma palielinājumu šajā pilsētā.{}{POP_COLOUR}Izmaksas: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{PUSH_COLOUR}{YELLOW}Uzceliet statuju par godu savam uzņēmumam.{}Nodrošina pastāvīgu staciju vērtējuma palielinājumu šajā pilsētā.{}{POP_COLOUR}Izmaksas: {CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{PUSH_COLOUR}{YELLOW}Finansējiet jaunu ēku celtniecību pilsētā.{}Nodrošina īslaicīgu stimulu pilsētas izaugsmei šajā pilsētā.{}{POP_COLOUR}Izmaksas: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{PUSH_COLOUR}{YELLOW}Finansējiet jaunu ēku celtniecību pilsētā.{}Nodrošina īslaicīgu stimulu pilsētas izaugsmei šajā pilsētā.{}{POP_COLOUR}Izmaksas: {CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT :{PUSH_COLOUR}{YELLOW}Iegādājieties 1 gada ekskluzīvas transporta tiesības pilsētā.{}Pašvaldība neļaus pasažieriem un kravai izmantot jūsu konkurentu stacijas.{}{POP_COLOUR}Izmaksas: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT :{PUSH_COLOUR}{YELLOW}Iegādājieties 1 gada ekskluzīvas transporta tiesības pilsētā.{}Pilsētas pašvaldība neļaus pasažieriem un kravai izmantot jūsu konkurentu stacijas. Veiksmīgs kukulis no konkurenta atcels šo līgumu.{}{POP_COLOUR}Izmaksas: {CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{PUSH_COLOUR}{YELLOW}Piekukuļojiet vietējo pašvaldību, lai paaugstinātu savu vērtējumu, riskējot saņemt bargu sodu.{}{POP_COLOUR}Izmaksas: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{PUSH_COLOUR}{YELLOW}Piekukuļot vietējo pašvaldību, lai paaugstinātu savu vērtējumu un atceltu konkurenta ekskluzīvās transporta tiesības, riskējot ar bargu sodu, ja tiksiet pieķerts.{}{POP_COLOUR}Izmaksas: {CURRENCY_LONG}
# Goal window # Goal window
STR_GOALS_CAPTION :{WHITE}{COMPANY} mērķi STR_GOALS_CAPTION :{WHITE}{COMPANY} mērķi
@ -3703,6 +3827,8 @@ STR_COMPANY_VIEW_INFRASTRUCTURE_BUTTON :{BLACK}Sīkāk
STR_COMPANY_VIEW_INFRASTRUCTURE_TOOLTIP :{BLACK}Skatīt detalizētāku infrastruktūras uzskaiti STR_COMPANY_VIEW_INFRASTRUCTURE_TOOLTIP :{BLACK}Skatīt detalizētāku infrastruktūras uzskaiti
STR_COMPANY_VIEW_GIVE_MONEY_BUTTON :{BLACK}Iedot naudu STR_COMPANY_VIEW_GIVE_MONEY_BUTTON :{BLACK}Iedot naudu
STR_COMPANY_VIEW_GIVE_MONEY_TOOLTIP :{BLACK}Iedot naudu šai kompānijai STR_COMPANY_VIEW_GIVE_MONEY_TOOLTIP :{BLACK}Iedot naudu šai kompānijai
STR_COMPANY_VIEW_HOSTILE_TAKEOVER_BUTTON :{BLACK}Naidīga pārņemšana
STR_COMPANY_VIEW_HOSTILE_TAKEOVER_TOOLTIP :{BLACK}Veiciet naidīgu šī uzņēmuma pārņemšanu
STR_COMPANY_VIEW_NEW_FACE_BUTTON :{BLACK}Jauna seja STR_COMPANY_VIEW_NEW_FACE_BUTTON :{BLACK}Jauna seja
STR_COMPANY_VIEW_NEW_FACE_TOOLTIP :{BLACK}Izvēlēties jaunu seju vadītājam STR_COMPANY_VIEW_NEW_FACE_TOOLTIP :{BLACK}Izvēlēties jaunu seju vadītājam
@ -3718,6 +3844,7 @@ STR_COMPANY_VIEW_PRESIDENT_S_NAME_QUERY_CAPTION :Vadītāja vār
STR_COMPANY_VIEW_GIVE_MONEY_QUERY_CAPTION :Ievadiet naudas daudzumu, kuru vēlaties atdot STR_COMPANY_VIEW_GIVE_MONEY_QUERY_CAPTION :Ievadiet naudas daudzumu, kuru vēlaties atdot
STR_BUY_COMPANY_MESSAGE :{WHITE}Mēs meklējam transporta uzņēmumu, kurš vēlētos pārņemt mūsējo.{}{}Vai Jūs vēlaties pirkt {COMPANY} par {CURRENCY_LONG}? STR_BUY_COMPANY_MESSAGE :{WHITE}Mēs meklējam transporta uzņēmumu, kurš vēlētos pārņemt mūsējo.{}{}Vai Jūs vēlaties pirkt {COMPANY} par {CURRENCY_LONG}?
STR_BUY_COMPANY_HOSTILE_TAKEOVER :{WHITE}Naidīgā uzņēmuma {COMPANY} pārņemšanas gadījumā jūs iegādāsities visus aktīvus, atmaksāsit visus aizdevumus un maksāsiet divu gadu peļņu.{}{}Tiek lēsts, ka kopējā summa ir {CURRENCY_LONG}.{}{}Vai jūs vēlaties turpināt šo naidīgo pārņemšanu?
# Company infrastructure window # Company infrastructure window
STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}{COMPANY} infrastruktūra STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}{COMPANY} infrastruktūra
@ -3790,12 +3917,15 @@ STR_VEHICLE_LIST_MANAGE_LIST :{BLACK}Pārvald
STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP :{BLACK}Sūtīt norādījumus visiem transportlīdzekļiem, kas ir šajā sarakstā STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP :{BLACK}Sūtīt norādījumus visiem transportlīdzekļiem, kas ir šajā sarakstā
STR_VEHICLE_LIST_REPLACE_VEHICLES :Nomainīt transportlīdzekļus STR_VEHICLE_LIST_REPLACE_VEHICLES :Nomainīt transportlīdzekļus
STR_VEHICLE_LIST_SEND_FOR_SERVICING :Sūtīt uz apkopi STR_VEHICLE_LIST_SEND_FOR_SERVICING :Sūtīt uz apkopi
STR_VEHICLE_LIST_CREATE_GROUP :Izveidot grupu
STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Peļņa šogad: {CURRENCY_LONG} (pērn: {CURRENCY_LONG}) STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Peļņa šogad: {CURRENCY_LONG} (pērn: {CURRENCY_LONG})
STR_VEHICLE_LIST_CARGO :[{CARGO_LIST}]
STR_VEHICLE_LIST_NAME_AND_CARGO :{STRING} {STRING}
STR_VEHICLE_LIST_SEND_TRAIN_TO_DEPOT :Sūtīt uz depo STR_VEHICLE_LIST_SEND_TRAIN_TO_DEPOT :Nosūtīt uz depo
STR_VEHICLE_LIST_SEND_ROAD_VEHICLE_TO_DEPOT :Sūtīt uz depo STR_VEHICLE_LIST_SEND_ROAD_VEHICLE_TO_DEPOT :Nosūtīt uz depo
STR_VEHICLE_LIST_SEND_SHIP_TO_DEPOT :Sūtīt uz depo STR_VEHICLE_LIST_SEND_SHIP_TO_DEPOT :Nosūtīt uz depo
STR_VEHICLE_LIST_SEND_AIRCRAFT_TO_HANGAR :Sūtīt uz angāru STR_VEHICLE_LIST_SEND_AIRCRAFT_TO_HANGAR :Nosūtīt uz angāru
STR_VEHICLE_LIST_MASS_STOP_LIST_TOOLTIP :{BLACK}Klikšķināt, lai apstādinātu visas mašīnas, kas ir sarakstā STR_VEHICLE_LIST_MASS_STOP_LIST_TOOLTIP :{BLACK}Klikšķināt, lai apstādinātu visas mašīnas, kas ir sarakstā
STR_VEHICLE_LIST_MASS_START_LIST_TOOLTIP :{BLACK}Klikšķināt, lai iedarbinātu visas mašīnas, kas ir saraks STR_VEHICLE_LIST_MASS_START_LIST_TOOLTIP :{BLACK}Klikšķināt, lai iedarbinātu visas mašīnas, kas ir saraks
@ -4481,8 +4611,13 @@ STR_TIMETABLE_STATUS_ON_TIME :{BLACK}Šis tra
STR_TIMETABLE_STATUS_LATE :{BLACK}Šis transportlīdzeklis pašlaik {STRING} kavē STR_TIMETABLE_STATUS_LATE :{BLACK}Šis transportlīdzeklis pašlaik {STRING} kavē
STR_TIMETABLE_STATUS_EARLY :{BLACK}Šis transportlīdzeklis pašlaik {STRING} par agru STR_TIMETABLE_STATUS_EARLY :{BLACK}Šis transportlīdzeklis pašlaik {STRING} par agru
STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}Šis saraksts vēl nav sācies STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}Šis saraksts vēl nav sācies
STR_TIMETABLE_STATUS_START_AT_DATE :{BLACK}Šis grafiks sāksies plkst. {STRING}
STR_TIMETABLE_STATUS_START_IN_SECONDS :{BLACK}Šis grafiks sāksies pēc {COMMA} sekundēm
STR_TIMETABLE_START :{BLACK}Sākt Grafiku
STR_TIMETABLE_START_TOOLTIP :{BLACK}Atlasiet, kad sākas šis saraksts. Ctrl+klikšķis vienmērīgi sadala visu transportlīdzekļu sākumu, kas koplieto šo pasūtījumu, pamatojoties uz to relatīvo pasūtījumu, ja pasūtījumam ir pilnībā noteikts saraksts
STR_TIMETABLE_START_SECONDS_QUERY :Sekundes līdz grafika sākumam
STR_TIMETABLE_CHANGE_TIME :{BLACK}Mainīt laiku STR_TIMETABLE_CHANGE_TIME :{BLACK}Mainīt laiku
STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Mainiet laiku, kas nepieciešams iezīmētajam pasūtījumam. Ctrl+Click iestata laiku visiem pasūtījumiem STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Mainiet laiku, kas nepieciešams iezīmētajam pasūtījumam. Ctrl+Click iestata laiku visiem pasūtījumiem
@ -4497,7 +4632,7 @@ STR_TIMETABLE_CLEAR_SPEED :{BLACK}Nodzēst
STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Dzēst iezīmētā pasūtījuma maksimālo braukšanas ātrumu. Ctrl+klikšķis notīra ātrumu visiem pasūtījumiem STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Dzēst iezīmētā pasūtījuma maksimālo braukšanas ātrumu. Ctrl+klikšķis notīra ātrumu visiem pasūtījumiem
STR_TIMETABLE_RESET_LATENESS :{BLACK}Atiestatīt kavējuma skaitītāju STR_TIMETABLE_RESET_LATENESS :{BLACK}Atiestatīt kavējuma skaitītāju
STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Atslēgt skaitītāju, lai transportlīdzeklis būtu laikā STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Atiestatiet kavējuma skaitītāju, lai transportlīdzeklis būtu laikā. Nospiežot taustiņu kombināciju Ctrl+klikšķis, tiks atiestatīta visa grupa, lai jaunākais transportlīdzeklis būtu laicīgi un visi pārējie ātrāk
STR_TIMETABLE_AUTOFILL :{BLACK}Automātiska aizpildīšana STR_TIMETABLE_AUTOFILL :{BLACK}Automātiska aizpildīšana
STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}Automātiski aizpildiet kustības grafiku ar vērtībām no nākamā brauciena. Ctrl+noklikšķiniet, lai mēģinātu saglabāt gaidīšanas laiku STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}Automātiski aizpildiet kustības grafiku ar vērtībām no nākamā brauciena. Ctrl+noklikšķiniet, lai mēģinātu saglabāt gaidīšanas laiku
@ -4506,6 +4641,10 @@ STR_TIMETABLE_EXPECTED :{BLACK}Paredzē
STR_TIMETABLE_SCHEDULED :{BLACK}Ieplānots STR_TIMETABLE_SCHEDULED :{BLACK}Ieplānots
STR_TIMETABLE_EXPECTED_TOOLTIP :{BLACK}Pārslēgties starp sagaidāmo un ieplānoto STR_TIMETABLE_EXPECTED_TOOLTIP :{BLACK}Pārslēgties starp sagaidāmo un ieplānoto
STR_TIMETABLE_ARRIVAL_DATE :A: {COLOUR}{DATE_TINY}
STR_TIMETABLE_DEPARTURE_DATE :D: {COLOUR}{DATE_TINY}
STR_TIMETABLE_ARRIVAL_SECONDS_IN_FUTURE :iekš: {COLOUR}{COMMA} sek
STR_TIMETABLE_DEPARTURE_SECONDS_IN_FUTURE :D: {COLOUR}{COMMA} sek
# Date window (for timetable) # Date window (for timetable)
@ -4533,23 +4672,25 @@ STR_AI_DEBUG_MATCH_CASE :{BLACK}Ievērot
STR_AI_DEBUG_MATCH_CASE_TOOLTIP :{BLACK}Pārslēgt lielo/mazo burtu ievērošanu, kad salīdzināt MI ziņojumus ar slēgšanas tekstu STR_AI_DEBUG_MATCH_CASE_TOOLTIP :{BLACK}Pārslēgt lielo/mazo burtu ievērošanu, kad salīdzināt MI ziņojumus ar slēgšanas tekstu
STR_AI_DEBUG_CONTINUE :{BLACK}Turpināt STR_AI_DEBUG_CONTINUE :{BLACK}Turpināt
STR_AI_DEBUG_CONTINUE_TOOLTIP :{BLACK}Atsākt un turpināt šo MI STR_AI_DEBUG_CONTINUE_TOOLTIP :{BLACK}Atsākt un turpināt šo MI
STR_AI_DEBUG_SELECT_AI_TOOLTIP :{BLACK}Attēlot šī MI atkļūdošanas izvadu STR_AI_DEBUG_SELECT_AI_TOOLTIP :{BLACK}Skatīt šī AI atkļūdošanas izeju. Ctrl-klikšķis, lai atvērtu jaunā logā
STR_AI_GAME_SCRIPT :{BLACK}Spēles skripts STR_AI_GAME_SCRIPT :{BLACK}Spēles skripts
STR_AI_GAME_SCRIPT_TOOLTIP :{BLACK}Pārbaudīt spēles skriptu žurnālu STR_AI_GAME_SCRIPT_TOOLTIP :{BLACK}Pārbaudiet spēles skripta žurnālu. Ctrl-klikšķis, lai atvērtu jaunā logā
STR_ERROR_AI_NO_AI_FOUND :Nav atrasts ielādei piemērots MI.{}Šis ir MI makets un spēlē tas neko nedarīs.{}Jūs varat lejupielādēt dažus MI no 'Tiešsaistes satura' sistēmas STR_ERROR_AI_NO_AI_FOUND :Nav atrasts ielādei piemērots MI.{}Šis ir MI makets un spēlē tas neko nedarīs.{}Jūs varat lejupielādēt dažus MI no 'Tiešsaistes satura' sistēmas
STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}Viens no strādājošiem skriptiem nobruka. Lūdzu, paziņojiet par šo gadījumu skripta autoram, pievienojot ekrānuzņēmumu ar MI/spēles skriptu atkļūdošanas logu STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}Viens no strādājošiem skriptiem nobruka. Lūdzu, paziņojiet par šo gadījumu skripta autoram, pievienojot ekrānuzņēmumu ar MI/spēles skriptu atkļūdošanas logu
STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}MI/spēles skriptu atkļūdošanas logs ir pieejams tikai serverim STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}MI/spēles skriptu atkļūdošanas logs ir pieejams tikai serverim
# AI configuration window # AI configuration window
STR_AI_CONFIG_CAPTION_AI :{WHITE}AI Konfigurācija STR_AI_CONFIG_CAPTION_AI :{WHITE}AI iestatījumi
STR_AI_CONFIG_CAPTION_GAMESCRIPT :{WHITE}Spēles skripta konfigurācija STR_AI_CONFIG_CAPTION_GAMESCRIPT :{WHITE}Spēles Skripta Iestatījumi
STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}Spēles skripts, kas tiks ielādēts nākamajā spēlē STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}Spēles skripts, kas tiks ielādēts nākamajā spēlē
STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}MI, kas tiks ielādēts nākamajā spēlē STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}MI, kas tiks ielādēts nākamajā spēlē
STR_AI_CONFIG_HUMAN_PLAYER :Spēlētājs (cilvēks) STR_AI_CONFIG_HUMAN_PLAYER :Spēlētājs (cilvēks)
STR_AI_CONFIG_RANDOM_AI :Nejaušs MI STR_AI_CONFIG_RANDOM_AI :Nejaušs MI
STR_AI_CONFIG_NONE :(nav) STR_AI_CONFIG_NONE :(nav)
STR_AI_CONFIG_NAME_VERSION :{STRING} {YELLOW}v{NUM}
STR_AI_CONFIG_MAX_COMPETITORS :{LTBLUE}Maksimālais sāncenšu daudzums: {ORANGE}{COMMA} STR_AI_CONFIG_MAX_COMPETITORS :{LTBLUE}Maksimālais sāncenšu daudzums: {ORANGE}{COMMA}
STR_AI_CONFIG_COMPETITORS_INTERVAL :{LTBLUE}Intervāls starp konkurentu startiem: {ORANGE}{COMMA} minut{P e es ""}
STR_AI_CONFIG_MOVE_UP :{BLACK}Pacelt uz augšu STR_AI_CONFIG_MOVE_UP :{BLACK}Pacelt uz augšu
STR_AI_CONFIG_MOVE_UP_TOOLTIP :{BLACK}Pacelt izvēlētos MI sarakstā uz augšu STR_AI_CONFIG_MOVE_UP_TOOLTIP :{BLACK}Pacelt izvēlētos MI sarakstā uz augšu
@ -4561,8 +4702,8 @@ STR_AI_CONFIG_GAMESCRIPT_PARAM :{SILVER}Paramet
STR_AI_CONFIG_AI :{SILVER}MI STR_AI_CONFIG_AI :{SILVER}MI
STR_AI_CONFIG_CHANGE_AI :{BLACK}Izvēlēties MI STR_AI_CONFIG_CHANGE_AI :{BLACK}Izvēlēties MI
STR_AI_CONFIG_CHANGE_GAMESCRIPT :{BLACK}Atlasiet spēles skriptu STR_AI_CONFIG_CHANGE_GAMESCRIPT :{BLACK}Izvētaties spēles skriptu
STR_AI_CONFIG_CHANGE_TOOLTIP :{BLACK}Ielādēt citu skriptu STR_AI_CONFIG_CHANGE_TOOLTIP :{BLACK}Ielādēt citu skriptu. Ctrl+klikšķis, lai parādītu visas pieejamās versijas
STR_AI_CONFIG_CONFIGURE :{BLACK}Konfigurēt STR_AI_CONFIG_CONFIGURE :{BLACK}Konfigurēt
STR_AI_CONFIG_CONFIGURE_TOOLTIP :{BLACK}Konfigurēt skripta parametrus STR_AI_CONFIG_CONFIGURE_TOOLTIP :{BLACK}Konfigurēt skripta parametrus
@ -4591,22 +4732,33 @@ STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Minikart
# Script Parameters # Script Parameters
STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Iestatījumi STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Iestatījumi
STR_AI_SETTINGS_CAPTION_AI :{WHITE}MI Parametri STR_AI_SETTINGS_CAPTION_AI :AI
STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Spēles skripts
STR_AI_SETTINGS_CLOSE :{BLACK}Aizvērt STR_AI_SETTINGS_CLOSE :{BLACK}Aizvērt
STR_AI_SETTINGS_RESET :{BLACK}Atiestatīt STR_AI_SETTINGS_RESET :{BLACK}Atiestatīt
STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING} STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING}
# Textfile window # Textfile window
STR_TEXTFILE_JUMPLIST :{WHITE}Satura rādītājs
STR_TEXTFILE_JUMPLIST_TOOLTIP :{BLACK}Izmantojot šo sarakstu, ātri pārejiet uz parādītā faila sadaļu
STR_TEXTFILE_JUMPLIST_ITEM :{WHITE}{STRING}
STR_TEXTFILE_NAVBACK_TOOLTIP :{BLACK}Atgriezties navigācijas vēsturē
STR_TEXTFILE_NAVFORWARD_TOOLTIP :{BLACK}Atgriezties uz priekšu navigācijas vēsturē
STR_TEXTFILE_WRAP_TEXT :{WHITE}Aplauzt tekstu STR_TEXTFILE_WRAP_TEXT :{WHITE}Aplauzt tekstu
STR_TEXTFILE_WRAP_TEXT_TOOLTIP :{BLACK}Aplauzt tekstu logā, lai tas viss iekļautos un nevajadzētu ritināt STR_TEXTFILE_WRAP_TEXT_TOOLTIP :{BLACK}Aplauzt tekstu logā, lai tas viss iekļautos un nevajadzētu ritināt
STR_TEXTFILE_VIEW_README :{BLACK}Skatīt failu Lasi_mani STR_TEXTFILE_VIEW_README :{BLACK}Lasi_Mani
STR_TEXTFILE_VIEW_README_TOOLTIP :Skatīt šī satura readme
STR_TEXTFILE_VIEW_CHANGELOG :{BLACK}Izmaiņu žurnāls STR_TEXTFILE_VIEW_CHANGELOG :{BLACK}Izmaiņu žurnāls
STR_TEXTFILE_VIEW_CHANGELOG_TOOLTIP :Skatīt šī satura izmaiņu žurnālu
STR_TEXTFILE_VIEW_LICENCE :{BLACK}Licence STR_TEXTFILE_VIEW_LICENCE :{BLACK}Licence
STR_TEXTFILE_VIEW_LICENCE_TOOLTIP :Skatīt šī satura licenci
###length 5 ###length 5
STR_TEXTFILE_README_CAPTION :{WHITE}{STRING} kopas {STRING} fails Lasi_mani STR_TEXTFILE_README_CAPTION :{WHITE}{STRING} kopas {STRING} fails Lasi_mani
STR_TEXTFILE_CHANGELOG_CAPTION :{WHITE}{STRING} kopas {STRING} izmaiņu žurnāls STR_TEXTFILE_CHANGELOG_CAPTION :{WHITE}{STRING} kopas {STRING} izmaiņu žurnāls
STR_TEXTFILE_LICENCE_CAPTION :{WHITE}{STRING} kopas {STRING} licence STR_TEXTFILE_LICENCE_CAPTION :{WHITE}{STRING} kopas {STRING} licence
STR_TEXTFILE_SURVEY_RESULT_CAPTION :{WHITE}Priekšskatīt aptaujas rezultātus
STR_TEXTFILE_GAME_MANUAL_CAPTION :{WHITE}OpenTTD dokuments'{STRING}'
# Vehicle loading indicators # Vehicle loading indicators
@ -4788,7 +4940,7 @@ STR_ERROR_TOO_MANY_TRUCK_STOPS :{WHITE}Pārāk
STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}Pārāk tuvu citai piestātnei STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}Pārāk tuvu citai piestātnei
STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT :{WHITE}Pārāk tuvu citai lidostai STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT :{WHITE}Pārāk tuvu citai lidostai
STR_ERROR_CAN_T_RENAME_STATION :{WHITE}Nevar pārdēvēt staciju... STR_ERROR_CAN_T_RENAME_STATION :{WHITE}Nevar pārdēvēt staciju...
STR_ERROR_DRIVE_THROUGH_ON_TOWN_ROAD :{WHITE}... šis ceļš pieder pilsētai STR_ERROR_DRIVE_THROUGH_ON_TOWN_ROAD :{WHITE}... ceļš pieder pilsētai
STR_ERROR_DRIVE_THROUGH_DIRECTION :{WHITE}... ceļš novietots nepareizā virzienā STR_ERROR_DRIVE_THROUGH_DIRECTION :{WHITE}... ceļš novietots nepareizā virzienā
STR_ERROR_DRIVE_THROUGH_CORNER :{WHITE}... caurbraucamās stacijās nevar būt stūru STR_ERROR_DRIVE_THROUGH_CORNER :{WHITE}... caurbraucamās stacijās nevar būt stūru
STR_ERROR_DRIVE_THROUGH_JUNCTION :{WHITE}... caurbraucamās stacijās nevar būt sazarojumu STR_ERROR_DRIVE_THROUGH_JUNCTION :{WHITE}... caurbraucamās stacijās nevar būt sazarojumu
@ -5045,11 +5197,25 @@ STR_ERROR_TOO_FAR_FROM_PREVIOUS_DESTINATION :{WHITE}... pār
STR_ERROR_AIRCRAFT_NOT_ENOUGH_RANGE :{WHITE}... lidaparātam ir nepietiekams apgabals STR_ERROR_AIRCRAFT_NOT_ENOUGH_RANGE :{WHITE}... lidaparātam ir nepietiekams apgabals
# Extra messages which go on the third line of errors, explaining why orders failed # Extra messages which go on the third line of errors, explaining why orders failed
STR_ERROR_NO_RAIL_STATION :{WHITE}Dzelzceļa stacijas nav
STR_ERROR_NO_BUS_STATION :{WHITE}Nav autoostas
STR_ERROR_NO_TRUCK_STATION :{WHITE}Nav kravas automašīnu stacijas
STR_ERROR_NO_DOCK :{WHITE}Nav piestātnes
STR_ERROR_NO_AIRPORT :{WHITE}Nav lidostas/heliportu
STR_ERROR_NO_STOP_COMPATIBLE_ROAD_TYPE :{WHITE}Nav pieturu ar saderīgu ceļa veidu
STR_ERROR_NO_STOP_COMPATIBLE_TRAM_TYPE :{WHITE}Saderīgam tramvaja veidam pieturu nav
STR_ERROR_NO_STOP_ARTICULATED_VEHICLE :{WHITE}Nav pieturu, kas būtu piemērotas posmainiem transportlīdzekļiem.{}Posmainiem transportlīdzekļiem ir nepieciešama caurbraucama pietura.
STR_ERROR_AIRPORT_NO_PLANES :{WHITE}Šī lidmašīna nevar nolaisties šajā helikopteru lidlaukā
STR_ERROR_AIRPORT_NO_HELICOPTERS :{WHITE}Šis helikopters nevar nolaisties šajā lidostā
STR_ERROR_NO_RAIL_WAYPOINT :{WHITE}Nav dzelzceļa pieturas punkta
STR_ERROR_NO_BUOY :{WHITE}Bojas nav
# Timetable related errors # Timetable related errors
STR_ERROR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Nevar panākt transportalīdzekļa iekļaušanos sarakstā STR_ERROR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Nevar panākt transportalīdzekļa iekļaušanos sarakstā
STR_ERROR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}Transportlīdzekļus var gaidīt tikai stacijās STR_ERROR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}Transportlīdzekļus var gaidīt tikai stacijās
STR_ERROR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}Šis transportlīdzeklis šajā stacijā nepieturēs STR_ERROR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}Šis transportlīdzeklis šajā stacijā nepieturēs
STR_ERROR_TIMETABLE_INCOMPLETE :{WHITE}... saraksts ir nepilnīgs
STR_ERROR_TIMETABLE_NOT_STARTED :{WHITE}... grafiks vēl nav sācies
# Sign related errors # Sign related errors
STR_ERROR_TOO_MANY_SIGNS :{WHITE}... pārāk daudz zīmju STR_ERROR_TOO_MANY_SIGNS :{WHITE}... pārāk daudz zīmju
@ -5529,17 +5695,21 @@ STR_VEHICLE_NAME :{VEHICLE}
STR_WAYPOINT_NAME :{WAYPOINT} STR_WAYPOINT_NAME :{WAYPOINT}
STR_JUST_CARGO :{CARGO_LONG} STR_JUST_CARGO :{CARGO_LONG}
STR_JUST_RIGHT_ARROW :{RIGHT_ARROW}
STR_JUST_CHECKMARK :{CHECKMARK} STR_JUST_CHECKMARK :{CHECKMARK}
STR_JUST_COMMA :{COMMA} STR_JUST_COMMA :{COMMA}
STR_JUST_CURRENCY_SHORT :{CURRENCY_SHORT} STR_JUST_CURRENCY_SHORT :{CURRENCY_SHORT}
STR_JUST_CURRENCY_LONG :{CURRENCY_LONG} STR_JUST_CURRENCY_LONG :{CURRENCY_LONG}
STR_JUST_CARGO_LIST :{CARGO_LIST} STR_JUST_CARGO_LIST :{CARGO_LIST}
STR_JUST_DECIMAL :{DECIMAL}
STR_JUST_INT :{NUM} STR_JUST_INT :{NUM}
STR_JUST_DATE_TINY :{DATE_TINY} STR_JUST_DATE_TINY :{DATE_TINY}
STR_JUST_DATE_SHORT :{DATE_SHORT} STR_JUST_DATE_SHORT :{DATE_SHORT}
STR_JUST_DATE_LONG :{DATE_LONG} STR_JUST_DATE_LONG :{DATE_LONG}
STR_JUST_DATE_ISO :{DATE_ISO} STR_JUST_DATE_ISO :{DATE_ISO}
STR_JUST_STRING :{STRING} STR_JUST_STRING :{STRING}
STR_JUST_STRING1 :{STRING}
STR_JUST_STRING2 :{STRING}
STR_JUST_STRING_STRING :{STRING}{STRING} STR_JUST_STRING_STRING :{STRING}{STRING}
STR_JUST_RAW_STRING :{STRING} STR_JUST_RAW_STRING :{STRING}
STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING}

@ -256,6 +256,9 @@ STR_UNITS_HEIGHT_IMPERIAL :{DECIMAL} pé(s
STR_UNITS_HEIGHT_METRIC :{DECIMAL} m STR_UNITS_HEIGHT_METRIC :{DECIMAL} m
STR_UNITS_HEIGHT_SI :{DECIMAL} m STR_UNITS_HEIGHT_SI :{DECIMAL} m
STR_UNITS_DAYS :{COMMA}{NBSP}dia{P "" s}
STR_UNITS_SECONDS :{COMMA}{NBSP}segundo{P "" s}
STR_UNITS_TICKS :{COMMA}{NBSP}tique{P "" s}
# Common window strings # Common window strings
STR_LIST_FILTER_TITLE :{BLACK}Filtro: STR_LIST_FILTER_TITLE :{BLACK}Filtro:
@ -720,6 +723,7 @@ STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Clique n
STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Faça clique numa faixa para a remover da lista (Personaliz. 1 ou Personaliz. 2 apenas) STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Faça clique numa faixa para a remover da lista (Personaliz. 1 ou Personaliz. 2 apenas)
# Highscore window # Highscore window
STR_HIGHSCORE_TOP_COMPANIES :{BIG_FONT}{BLACK}Melhores empresas
STR_HIGHSCORE_POSITION :{BIG_FONT}{BLACK}{COMMA}. STR_HIGHSCORE_POSITION :{BIG_FONT}{BLACK}{COMMA}.
STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :Negociante STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :Negociante
STR_HIGHSCORE_PERFORMANCE_TITLE_ENTREPRENEUR :Empresário STR_HIGHSCORE_PERFORMANCE_TITLE_ENTREPRENEUR :Empresário
@ -1488,7 +1492,7 @@ STR_CONFIG_SETTING_LAND_GENERATOR_ORIGINAL :Original
STR_CONFIG_SETTING_LAND_GENERATOR_TERRA_GENESIS :TerraGenesis STR_CONFIG_SETTING_LAND_GENERATOR_TERRA_GENESIS :TerraGenesis
STR_CONFIG_SETTING_TERRAIN_TYPE :Tipo de terreno: {STRING} STR_CONFIG_SETTING_TERRAIN_TYPE :Tipo de terreno: {STRING}
STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT :(Apenas TerraGenesis) Relevo do terreno STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT :Escolher a altura das colinas e montanhas da paisagem
STR_CONFIG_SETTING_INDUSTRY_DENSITY :Densidade industrial: {STRING} STR_CONFIG_SETTING_INDUSTRY_DENSITY :Densidade industrial: {STRING}
STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Define quantas indústrias devem ser geradas e que nível deve ser mantido durante o jogo STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Define quantas indústrias devem ser geradas e que nível deve ser mantido durante o jogo
@ -1497,18 +1501,18 @@ STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Distância máx
STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Refinarias de petróleo são construídas apenas próximo da borda do mapa, isto é, na costa para mapas de ilha STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Refinarias de petróleo são construídas apenas próximo da borda do mapa, isto é, na costa para mapas de ilha
STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Altura da linha de neve: {STRING} STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Altura da linha de neve: {STRING}
STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Controla a que altura começa a neve no clima sub-ártico. A neve também afeta a geração de indústrias e os requisitos de crescimento das localidades. Só pode ser modificado no Editor de Cenário ou então é calculado por via da "cobertura de neve" STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Escolher a que altura a neve começa na paisagem subártica. A neve também afeta a geração de indústrias e os requisitos de crescimento das localidades. Só pode ser modificado através do Editor de Cenários ou é calculado através da "cobertura de neve"
STR_CONFIG_SETTING_SNOW_COVERAGE :Cobertura de neve: {STRING} STR_CONFIG_SETTING_SNOW_COVERAGE :Cobertura de neve: {STRING}
STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Controla a quantidade aproximada de neve no clima sub-ártico. A neve também afeta a geração das indústrias e os requisitos de crescimento das localidades. Usado apenas durante a geração do mapa. A terra logo acima do nível do mar está sempre sem neve STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Escolher a quantidade aproximada de neve no clima subártico. A neve também afeta a geração de indústrias e os requisitos de crescimento das localidades. Usado apenas durante a geração do mapa. O nível do mar e as suas encostas nunca têm neve.
STR_CONFIG_SETTING_SNOW_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_SNOW_COVERAGE_VALUE :{NUM}%
STR_CONFIG_SETTING_DESERT_COVERAGE :Cobertura do deserto: {STRING} STR_CONFIG_SETTING_DESERT_COVERAGE :Cobertura do deserto: {STRING}
STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :Controla a quantidade aproximada de deserto no clima tropical. O deserto também afeta a geração das indústrias. Usado apenas durante a geração do mapa STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :Escolher a quantidade aproximada de deserto na paisagem tropical. O deserto também afeta a geração de indústrias e os requisitos de crescimento das localidades. Usado apenas durante a geração do mapa
STR_CONFIG_SETTING_DESERT_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_DESERT_COVERAGE_VALUE :{NUM}%
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :Rudeza do terreno: {STRING} STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :Rudeza do terreno: {STRING}
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :(Apenas TerraGenesis) Escolhe a frequência de montes: paisagens macias têm menos montes e mais espalhados. Paisagens duras têm muitos montes, que podem parecer repetitivos STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :Escolher a forma e o número de colinas. As paisagens suaves têm poucas colinas, largas, enquanto as paisagens acidentadas possuem mais, colinas pequenas.
###length 4 ###length 4
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :Muito suave STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :Muito suave
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_SMOOTH :Suave STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_SMOOTH :Suave
@ -1516,7 +1520,7 @@ STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_ROUGH :Acidentado
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_ROUGH :Muito acidentado STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_ROUGH :Muito acidentado
STR_CONFIG_SETTING_VARIETY :Distribuição de variedade: {STRING} STR_CONFIG_SETTING_VARIETY :Distribuição de variedade: {STRING}
STR_CONFIG_SETTING_VARIETY_HELPTEXT :(Apenas TerraGenesis) Controla se o mapa contém áreas planas e montanhosas. Como isto apenas torna o mapa mais plano, outras definições devem ser definidas como montanhosas STR_CONFIG_SETTING_VARIETY_HELPTEXT :Escolher se o mapa contém tanto áreas montanhosas como áreas planas. Quanto maior a variedade, maiores as diferenças de altitude entre essas as áreas.
STR_CONFIG_SETTING_RIVER_AMOUNT :Quantidade de rios: {STRING} STR_CONFIG_SETTING_RIVER_AMOUNT :Quantidade de rios: {STRING}
STR_CONFIG_SETTING_RIVER_AMOUNT_HELPTEXT :Escolhe quantos rios serão gerados STR_CONFIG_SETTING_RIVER_AMOUNT_HELPTEXT :Escolhe quantos rios serão gerados
@ -1536,6 +1540,7 @@ STR_CONFIG_SETTING_ROAD_SIDE_LEFT :Circular pela e
STR_CONFIG_SETTING_ROAD_SIDE_RIGHT :Circular pela direita STR_CONFIG_SETTING_ROAD_SIDE_RIGHT :Circular pela direita
STR_CONFIG_SETTING_HEIGHTMAP_ROTATION :Rotação mapa de alt.: {STRING} STR_CONFIG_SETTING_HEIGHTMAP_ROTATION :Rotação mapa de alt.: {STRING}
STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_TOOLTIP :Escolher de que forma a imagem topográfica será girada para caber no mundo do jogo
###length 2 ###length 2
STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_COUNTER_CLOCKWISE :Sentido anti-horário STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_COUNTER_CLOCKWISE :Sentido anti-horário
STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_CLOCKWISE :Sentido horário STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_CLOCKWISE :Sentido horário
@ -1656,7 +1661,12 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Ativar a utiliz
STR_CONFIG_SETTING_LOADING_INDICATORS :Usar indicadores de carga: {STRING} STR_CONFIG_SETTING_LOADING_INDICATORS :Usar indicadores de carga: {STRING}
STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :Seleccionar se os indicadores de carga são mostrados acima de veículos em carga ou descarga STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :Seleccionar se os indicadores de carga são mostrados acima de veículos em carga ou descarga
STR_CONFIG_SETTING_TIMETABLE_MODE :Unidades de tempo para horários: {STRING}
STR_CONFIG_SETTING_TIMETABLE_MODE_HELPTEXT :Selecionar as unidades de tempo usadas nos horários dos veículos
###length 3 ###length 3
STR_CONFIG_SETTING_TIMETABLE_MODE_DAYS :Dias
STR_CONFIG_SETTING_TIMETABLE_MODE_SECONDS :Segundos
STR_CONFIG_SETTING_TIMETABLE_MODE_TICKS :Tiques
STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Mostrar chegada e partida nos horários: {STRING} STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Mostrar chegada e partida nos horários: {STRING}
STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Mostrar horários previstos de chegada e partida nas tabelas de horários STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Mostrar horários previstos de chegada e partida nas tabelas de horários
@ -2187,12 +2197,20 @@ STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Exibir e
STR_LIVERY_ROAD_VEHICLE_TOOLTIP :{BLACK}Exibir esquemas de cores dos veículos rodoviários STR_LIVERY_ROAD_VEHICLE_TOOLTIP :{BLACK}Exibir esquemas de cores dos veículos rodoviários
STR_LIVERY_SHIP_TOOLTIP :{BLACK}Exibir esquemas de cores dos navios STR_LIVERY_SHIP_TOOLTIP :{BLACK}Exibir esquemas de cores dos navios
STR_LIVERY_AIRCRAFT_TOOLTIP :{BLACK}Exibir esquema de cores da aeronave STR_LIVERY_AIRCRAFT_TOOLTIP :{BLACK}Exibir esquema de cores da aeronave
STR_LIVERY_TRAIN_GROUP_TOOLTIP :{BLACK}Exibir cores de grupos de comboios
STR_LIVERY_ROAD_VEHICLE_GROUP_TOOLTIP :{BLACK}Exibir cores de grupos de veículos rodoviários
STR_LIVERY_SHIP_GROUP_TOOLTIP :{BLACK}Exibir cores de grupos de navios
STR_LIVERY_AIRCRAFT_GROUP_TOOLTIP :{BLACK}Exibir cores de grupos de aeronaves
STR_LIVERY_PRIMARY_TOOLTIP :{BLACK}Seleccione a cor primária para o veículo seleccionado. Ctrl+Clique vai usar esta cor para todos os esquemas STR_LIVERY_PRIMARY_TOOLTIP :{BLACK}Seleccione a cor primária para o veículo seleccionado. Ctrl+Clique vai usar esta cor para todos os esquemas
STR_LIVERY_SECONDARY_TOOLTIP :{BLACK}Selecione a cor secundária para o esquema selecionado. Ctrl+Clique seleciona essa cor para todos os esquemas STR_LIVERY_SECONDARY_TOOLTIP :{BLACK}Selecione a cor secundária para o esquema selecionado. Ctrl+Clique seleciona essa cor para todos os esquemas
STR_LIVERY_PANEL_TOOLTIP :{BLACK}Seleccione o esquema de cores a alterar, ou esquemas múltiplos utilizando a tecla Ctrl com o botão esquerdo do rato. Marque a caixa para comutar a utilização do esquema de cores STR_LIVERY_PANEL_TOOLTIP :{BLACK}Seleccione o esquema de cores a alterar, ou esquemas múltiplos utilizando a tecla Ctrl com o botão esquerdo do rato. Marque a caixa para comutar a utilização do esquema de cores
STR_LIVERY_TRAIN_GROUP_EMPTY :Não estão configurados grupos de comboios
STR_LIVERY_ROAD_VEHICLE_GROUP_EMPTY :Não estão configurados grupos de veículos rodoviários
STR_LIVERY_SHIP_GROUP_EMPTY :Não estão configurados grupos de navios
STR_LIVERY_AIRCRAFT_GROUP_EMPTY :Não estão configurados grupos de aeronaves
###length 23 ###length 23
STR_LIVERY_DEFAULT :Estampagem Padrão STR_LIVERY_DEFAULT :Pintura Padrão
STR_LIVERY_STEAM :Locomotivas a Vapor STR_LIVERY_STEAM :Locomotivas a Vapor
STR_LIVERY_DIESEL :Locomotivas Diesel STR_LIVERY_DIESEL :Locomotivas Diesel
STR_LIVERY_ELECTRIC :Locomotivas Eléctricas STR_LIVERY_ELECTRIC :Locomotivas Eléctricas
@ -2345,7 +2363,7 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}O nome d
STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Definir palavra-chave STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Definir palavra-chave
STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Proteja o jogo com uma senha se não desejar que pessoas indesejadas se juntem STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Proteja o jogo com uma senha se não desejar que pessoas indesejadas se juntem
STR_NETWORK_START_SERVER_VISIBILITY_LABEL :{BLACK}Visibilidade STR_NETWORK_START_SERVER_VISIBILITY_LABEL :{BLACK}Visibilidade:
STR_NETWORK_START_SERVER_VISIBILITY_TOOLTIP :{BLACK}Se as outras pessoas podem ver o seu servidor na lista pública STR_NETWORK_START_SERVER_VISIBILITY_TOOLTIP :{BLACK}Se as outras pessoas podem ver o seu servidor na lista pública
STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} cliente{P "" s} STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} cliente{P "" s}
STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Máximo de clientes: STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Máximo de clientes:
@ -2580,7 +2598,7 @@ STR_CONTENT_SEARCH_EXTERNAL_TOOLTIP :{BLACK}Escolher
STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER_CAPTION :{WHITE}Está a sair do OpenTTD! STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER_CAPTION :{WHITE}Está a sair do OpenTTD!
STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER :{WHITE}Os termos e condições para o download de conteúdo de sites externos variam.{}Terá que se referir aos sites externos para instruções em como instalar o conteúdo no OpenTTD.{}Pretende continuar? STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER :{WHITE}Os termos e condições para o download de conteúdo de sites externos variam.{}Terá que se referir aos sites externos para instruções em como instalar o conteúdo no OpenTTD.{}Pretende continuar?
STR_CONTENT_FILTER_TITLE :{BLACK}Filtrar por etiqueta/nome: STR_CONTENT_FILTER_TITLE :{BLACK}Filtrar por etiqueta/nome:
STR_CONTENT_OPEN_URL :{BLACK}Visitar a página web STR_CONTENT_OPEN_URL :{BLACK}Website
STR_CONTENT_OPEN_URL_TOOLTIP :{BLACK}Visitar a página web para este conteúdo STR_CONTENT_OPEN_URL_TOOLTIP :{BLACK}Visitar a página web para este conteúdo
STR_CONTENT_DOWNLOAD_CAPTION :{BLACK}Descarregar STR_CONTENT_DOWNLOAD_CAPTION :{BLACK}Descarregar
STR_CONTENT_DOWNLOAD_CAPTION_TOOLTIP :{BLACK}Iniciar a descarga do conteúdo seleccionado STR_CONTENT_DOWNLOAD_CAPTION_TOOLTIP :{BLACK}Iniciar a descarga do conteúdo seleccionado
@ -3200,11 +3218,15 @@ STR_MAPGEN_MAPSIZE :{BLACK}Dim. do
STR_MAPGEN_MAPSIZE_TOOLTIP :{BLACK}Seleccionar o tamanho do mapa em mosaicos. O numero de mosaicos disponiveis será ligeiramente menor STR_MAPGEN_MAPSIZE_TOOLTIP :{BLACK}Seleccionar o tamanho do mapa em mosaicos. O numero de mosaicos disponiveis será ligeiramente menor
STR_MAPGEN_BY :{BLACK}* STR_MAPGEN_BY :{BLACK}*
STR_MAPGEN_NUMBER_OF_TOWNS :{BLACK}Num. de localidades: STR_MAPGEN_NUMBER_OF_TOWNS :{BLACK}Num. de localidades:
STR_MAPGEN_NUMBER_OF_TOWNS_TOOLTIP :{BLACK}Selecionar a densidade das cidades, ou um número personalizado
STR_MAPGEN_TOWN_NAME_LABEL :{BLACK}Nomes das localidades: STR_MAPGEN_TOWN_NAME_LABEL :{BLACK}Nomes das localidades:
STR_MAPGEN_TOWN_NAME_DROPDOWN_TOOLTIP :{BLACK}Seleccionar o estilo dos nomes das localidades STR_MAPGEN_TOWN_NAME_DROPDOWN_TOOLTIP :{BLACK}Seleccionar o estilo dos nomes das localidades
STR_MAPGEN_DATE :{BLACK}Data: STR_MAPGEN_DATE :{BLACK}Data:
STR_MAPGEN_DATE_TOOLTIP :{BLACK}Selecionar a data inicial
STR_MAPGEN_NUMBER_OF_INDUSTRIES :{BLACK}Num. de indústrias: STR_MAPGEN_NUMBER_OF_INDUSTRIES :{BLACK}Num. de indústrias:
STR_MAPGEN_NUMBER_OF_INDUSTRIES_TOOLTIP :{BLACK}Selecionar a densidade das indústrias, ou um número personalizado
STR_MAPGEN_HEIGHTMAP_HEIGHT :{BLACK}Pico mais alto: STR_MAPGEN_HEIGHTMAP_HEIGHT :{BLACK}Pico mais alto:
STR_MAPGEN_HEIGHTMAP_HEIGHT_TOOLTIP :{BLACK}Escolher o pico mais alto que o jogo tentará criar, medido em elevação acima do nível do mar
STR_MAPGEN_HEIGHTMAP_HEIGHT_UP :{BLACK}Subir a altura máxima do pico mais alto do mapa em um STR_MAPGEN_HEIGHTMAP_HEIGHT_UP :{BLACK}Subir a altura máxima do pico mais alto do mapa em um
STR_MAPGEN_HEIGHTMAP_HEIGHT_DOWN :{BLACK}Baixar a altura máxima do pico mais alto do mapa em um STR_MAPGEN_HEIGHTMAP_HEIGHT_DOWN :{BLACK}Baixar a altura máxima do pico mais alto do mapa em um
STR_MAPGEN_SNOW_COVERAGE :{BLACK}Cobertura de neve: STR_MAPGEN_SNOW_COVERAGE :{BLACK}Cobertura de neve:
@ -3217,10 +3239,12 @@ STR_MAPGEN_DESERT_COVERAGE_DOWN :{BLACK}Diminuir
STR_MAPGEN_DESERT_COVERAGE_TEXT :{BLACK}{NUM}% STR_MAPGEN_DESERT_COVERAGE_TEXT :{BLACK}{NUM}%
STR_MAPGEN_TERRAIN_TYPE :{BLACK}Tipo de terreno: STR_MAPGEN_TERRAIN_TYPE :{BLACK}Tipo de terreno:
STR_MAPGEN_SEA_LEVEL :{BLACK}Nível do mar: STR_MAPGEN_SEA_LEVEL :{BLACK}Nível do mar:
STR_MAPGEN_SEA_LEVEL_TOOLTIP :{BLACK}Selecione o nível do mar
STR_MAPGEN_QUANTITY_OF_RIVERS :{BLACK}Rios: STR_MAPGEN_QUANTITY_OF_RIVERS :{BLACK}Rios:
STR_MAPGEN_SMOOTHNESS :{BLACK}Suavidade: STR_MAPGEN_SMOOTHNESS :{BLACK}Suavidade:
STR_MAPGEN_VARIETY :{BLACK}Variedade da distribuição: STR_MAPGEN_VARIETY :{BLACK}Variedade da distribuição:
STR_MAPGEN_GENERATE :{WHITE}Gerar STR_MAPGEN_GENERATE :{WHITE}Gerar
STR_MAPGEN_GENERATE_TOOLTIP :{BLACK}Criar o mapa e jogar OpenTTD!
STR_MAPGEN_NEWGRF_SETTINGS :{BLACK}Definições de NewGRF STR_MAPGEN_NEWGRF_SETTINGS :{BLACK}Definições de NewGRF
STR_MAPGEN_NEWGRF_SETTINGS_TOOLTIP :{BLACK}Mostrar definições de NewGRF STR_MAPGEN_NEWGRF_SETTINGS_TOOLTIP :{BLACK}Mostrar definições de NewGRF
STR_MAPGEN_AI_SETTINGS :{BLACK}Definições de IA STR_MAPGEN_AI_SETTINGS :{BLACK}Definições de IA
@ -3253,6 +3277,7 @@ STR_MAPGEN_TOWN_NAME_CATALAN :Catalão
# Strings for map borders at game generation # Strings for map borders at game generation
STR_MAPGEN_BORDER_TYPE :{BLACK}Limites do mapa: STR_MAPGEN_BORDER_TYPE :{BLACK}Limites do mapa:
STR_MAPGEN_BORDER_TYPE_TOOLTIP :{BLACK}Escolher as bordas do mundo do jogo
STR_MAPGEN_NORTHWEST :{BLACK}Noroeste STR_MAPGEN_NORTHWEST :{BLACK}Noroeste
STR_MAPGEN_NORTHEAST :{BLACK}Nordeste STR_MAPGEN_NORTHEAST :{BLACK}Nordeste
STR_MAPGEN_SOUTHEAST :{BLACK}Sudeste STR_MAPGEN_SOUTHEAST :{BLACK}Sudeste
@ -3265,7 +3290,9 @@ STR_MAPGEN_BORDER_MANUAL :{BLACK}Manual
STR_MAPGEN_HEIGHTMAP_ROTATION :{BLACK}Rotação mapa de alt.: STR_MAPGEN_HEIGHTMAP_ROTATION :{BLACK}Rotação mapa de alt.:
STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}Nome mapa de alt.: STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}Nome mapa de alt.:
STR_MAPGEN_HEIGHTMAP_NAME_TOOLTIP :{BLACK}O nome do ficheiro de imagem topográfica
STR_MAPGEN_HEIGHTMAP_SIZE_LABEL :{BLACK}Tamanho: STR_MAPGEN_HEIGHTMAP_SIZE_LABEL :{BLACK}Tamanho:
STR_MAPGEN_HEIGHTMAP_SIZE_LABEL_TOOLTIP :{BLACK}As dimensões da imagem topográfica de origem. Para obter melhores resultados, cada aresta deve corresponder a um comprimento de aresta de mapa disponível no OpenTTD, tais como 256, 512, 1024, etc.
STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM} x {NUM} STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM} x {NUM}
STR_MAPGEN_TERRAIN_TYPE_QUERY_CAPT :{WHITE}Altura do pico alvo STR_MAPGEN_TERRAIN_TYPE_QUERY_CAPT :{WHITE}Altura do pico alvo
@ -3280,6 +3307,7 @@ STR_SE_MAPGEN_FLAT_WORLD :{WHITE}Terra pl
STR_SE_MAPGEN_FLAT_WORLD_TOOLTIP :{BLACK}Criar terra plana STR_SE_MAPGEN_FLAT_WORLD_TOOLTIP :{BLACK}Criar terra plana
STR_SE_MAPGEN_RANDOM_LAND :{WHITE}Terra aleatória STR_SE_MAPGEN_RANDOM_LAND :{WHITE}Terra aleatória
STR_SE_MAPGEN_FLAT_WORLD_HEIGHT :{BLACK}Altura da terra plana: STR_SE_MAPGEN_FLAT_WORLD_HEIGHT :{BLACK}Altura da terra plana:
STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_TOOLTIP :{BLACK}Escolher a elevação do terreno acima do nível do mar
STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_DOWN :{BLACK}Mover altura da terra plana um nível abaixo STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_DOWN :{BLACK}Mover altura da terra plana um nível abaixo
STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_UP :{BLACK}Mover altura da terra plana um nível acima STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_UP :{BLACK}Mover altura da terra plana um nível acima
@ -4573,8 +4601,13 @@ STR_TIMETABLE_STATUS_ON_TIME :{BLACK}Este ve
STR_TIMETABLE_STATUS_LATE :{BLACK}Este veículo está presentemente atrasado {STRING} STR_TIMETABLE_STATUS_LATE :{BLACK}Este veículo está presentemente atrasado {STRING}
STR_TIMETABLE_STATUS_EARLY :{BLACK}Este veículo está presentemente adiantado {STRING} STR_TIMETABLE_STATUS_EARLY :{BLACK}Este veículo está presentemente adiantado {STRING}
STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}Este horário ainda não começou STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}Este horário ainda não começou
STR_TIMETABLE_STATUS_START_AT_DATE :{BLACK}Este horário tem início às {STRING}
STR_TIMETABLE_STATUS_START_IN_SECONDS :{BLACK}Este horário tem início em {COMMA} segundos
STR_TIMETABLE_START :{BLACK}Iniciar Horário
STR_TIMETABLE_START_TOOLTIP :{BLACK}Selecionar quando este horário começa. Ctrl+Clique distribui uniformemente o arranque de todos os veículos que partilham esta ordem com base na sua ordem relativa, se a ordem estiver completamente programada
STR_TIMETABLE_START_SECONDS_QUERY :Segundos até o horário iniciar
STR_TIMETABLE_CHANGE_TIME :{BLACK}Mudar Tempo STR_TIMETABLE_CHANGE_TIME :{BLACK}Mudar Tempo
STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Mudar a duração do tempo que a ordem selecionada deve durar. Ctrl+Clique define o tempo para todas as ordens STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Mudar a duração do tempo que a ordem selecionada deve durar. Ctrl+Clique define o tempo para todas as ordens
@ -4598,6 +4631,10 @@ STR_TIMETABLE_EXPECTED :{BLACK}Esperado
STR_TIMETABLE_SCHEDULED :{BLACK}Marcado STR_TIMETABLE_SCHEDULED :{BLACK}Marcado
STR_TIMETABLE_EXPECTED_TOOLTIP :{BLACK}Alternar entre tempo esperado e marcado STR_TIMETABLE_EXPECTED_TOOLTIP :{BLACK}Alternar entre tempo esperado e marcado
STR_TIMETABLE_ARRIVAL_DATE :A: {COLOUR}{DATE_TINY}
STR_TIMETABLE_DEPARTURE_DATE :D: {COLOUR}{DATE_TINY}
STR_TIMETABLE_ARRIVAL_SECONDS_IN_FUTURE :A: {COLOUR}{COMMA} seg
STR_TIMETABLE_DEPARTURE_SECONDS_IN_FUTURE :D: {COLOUR}{COMMA} seg
# Date window (for timetable) # Date window (for timetable)
@ -4625,9 +4662,9 @@ STR_AI_DEBUG_MATCH_CASE :{BLACK}Caso de
STR_AI_DEBUG_MATCH_CASE_TOOLTIP :{BLACK}Alternar o caso de igualdade quando se compara o resgisto da IA contra a string de paragem STR_AI_DEBUG_MATCH_CASE_TOOLTIP :{BLACK}Alternar o caso de igualdade quando se compara o resgisto da IA contra a string de paragem
STR_AI_DEBUG_CONTINUE :{BLACK}Continuar STR_AI_DEBUG_CONTINUE :{BLACK}Continuar
STR_AI_DEBUG_CONTINUE_TOOLTIP :{BLACK}Sair da pausa e continuar a IA STR_AI_DEBUG_CONTINUE_TOOLTIP :{BLACK}Sair da pausa e continuar a IA
STR_AI_DEBUG_SELECT_AI_TOOLTIP :{BLACK}Ver saída de depuração desta IA STR_AI_DEBUG_SELECT_AI_TOOLTIP :{BLACK}Ver saída de depuração desta IA. Ctrl+Clique para abrir numa nova janela
STR_AI_GAME_SCRIPT :{BLACK}Script de jogo STR_AI_GAME_SCRIPT :{BLACK}Script de jogo
STR_AI_GAME_SCRIPT_TOOLTIP :{BLACK}Verifique o registo do Script de jogo STR_AI_GAME_SCRIPT_TOOLTIP :{BLACK}Verifique o registo do Script de jogo. Ctrl+Clique para abrir numa nova janela
STR_ERROR_AI_NO_AI_FOUND :Não foi encontrada IA adequada para carregar.{}Esta IA é um pacote vazio e não fará nada.{}Pode descarregar várias IA através do sistema 'Conteúdo Online' STR_ERROR_AI_NO_AI_FOUND :Não foi encontrada IA adequada para carregar.{}Esta IA é um pacote vazio e não fará nada.{}Pode descarregar várias IA através do sistema 'Conteúdo Online'
STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}Houve um erro num script. Por favor reporte isto ao autor do script com uma imagem da janela Depuramento de IA/Scripts de Jogo. STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}Houve um erro num script. Por favor reporte isto ao autor do script com uma imagem da janela Depuramento de IA/Scripts de Jogo.
@ -4700,9 +4737,12 @@ STR_TEXTFILE_NAVBACK_TOOLTIP :{BLACK}Recuar n
STR_TEXTFILE_NAVFORWARD_TOOLTIP :{BLACK}Avançar no histórico de navegação STR_TEXTFILE_NAVFORWARD_TOOLTIP :{BLACK}Avançar no histórico de navegação
STR_TEXTFILE_WRAP_TEXT :{WHITE}Envolver o texto STR_TEXTFILE_WRAP_TEXT :{WHITE}Envolver o texto
STR_TEXTFILE_WRAP_TEXT_TOOLTIP :{BLACK}Envolve o texto da janela de forma que não é necessário deslizar listagem STR_TEXTFILE_WRAP_TEXT_TOOLTIP :{BLACK}Envolve o texto da janela de forma que não é necessário deslizar listagem
STR_TEXTFILE_VIEW_README :{BLACK}Ver leia-me STR_TEXTFILE_VIEW_README :{BLACK}Leia-me
STR_TEXTFILE_VIEW_README_TOOLTIP :Ver "readme" para este conteúdo
STR_TEXTFILE_VIEW_CHANGELOG :{BLACK}Lista de alterações STR_TEXTFILE_VIEW_CHANGELOG :{BLACK}Lista de alterações
STR_TEXTFILE_VIEW_CHANGELOG_TOOLTIP :Ver o "log" de alterações para este conteúdo
STR_TEXTFILE_VIEW_LICENCE :{BLACK}Licença STR_TEXTFILE_VIEW_LICENCE :{BLACK}Licença
STR_TEXTFILE_VIEW_LICENCE_TOOLTIP :Ver a licença para este conteúdo
###length 5 ###length 5
STR_TEXTFILE_README_CAPTION :{WHITE}Leiame {STRING} de {STRING} STR_TEXTFILE_README_CAPTION :{WHITE}Leiame {STRING} de {STRING}
STR_TEXTFILE_CHANGELOG_CAPTION :{WHITE}Lista de alterações {STRING} de {STRING} STR_TEXTFILE_CHANGELOG_CAPTION :{WHITE}Lista de alterações {STRING} de {STRING}

@ -2347,12 +2347,20 @@ STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Наст
STR_LIVERY_ROAD_VEHICLE_TOOLTIP :{BLACK}Настройка цветовой схемы автотранспорта STR_LIVERY_ROAD_VEHICLE_TOOLTIP :{BLACK}Настройка цветовой схемы автотранспорта
STR_LIVERY_SHIP_TOOLTIP :{BLACK}Настройка цветовой схемы судов STR_LIVERY_SHIP_TOOLTIP :{BLACK}Настройка цветовой схемы судов
STR_LIVERY_AIRCRAFT_TOOLTIP :{BLACK}Настройка цветовой схемы авиатранспорта STR_LIVERY_AIRCRAFT_TOOLTIP :{BLACK}Настройка цветовой схемы авиатранспорта
STR_LIVERY_TRAIN_GROUP_TOOLTIP :{BLACK}{BLACK}Показать цвета поездных групп
STR_LIVERY_ROAD_VEHICLE_GROUP_TOOLTIP :{BLACK}Показать цвета автомобильных групп
STR_LIVERY_SHIP_GROUP_TOOLTIP :{BLACK}Показать цвета корабельных групп
STR_LIVERY_AIRCRAFT_GROUP_TOOLTIP :{BLACK}Показать цвета самолетных групп
STR_LIVERY_PRIMARY_TOOLTIP :{BLACK}Настройка основного цвета выбранного вида транспорта. Ctrl+щелчок установит выбранный цвет для всех видов транспорта. STR_LIVERY_PRIMARY_TOOLTIP :{BLACK}Настройка основного цвета выбранного вида транспорта. Ctrl+щелчок установит выбранный цвет для всех видов транспорта.
STR_LIVERY_SECONDARY_TOOLTIP :{BLACK}Настройка дополнительного цвета выбранного вида транспорта. Ctrl+щелчок установит выбранный цвет для всех видов транспорта. STR_LIVERY_SECONDARY_TOOLTIP :{BLACK}Настройка дополнительного цвета выбранного вида транспорта. Ctrl+щелчок установит выбранный цвет для всех видов транспорта.
STR_LIVERY_PANEL_TOOLTIP :{BLACK}Выберите цветовую схему для изменения, либо несколько схем с Ctrl. Щёлкните по флажку для использования выбранной схемы. STR_LIVERY_PANEL_TOOLTIP :{BLACK}Выберите цветовую схему для изменения, либо несколько схем с Ctrl. Щёлкните по флажку для использования выбранной схемы.
STR_LIVERY_TRAIN_GROUP_EMPTY :Группы поездов не настроены
STR_LIVERY_ROAD_VEHICLE_GROUP_EMPTY :Группы автомобильных транспортных средств не настроены
STR_LIVERY_SHIP_GROUP_EMPTY :Группы кораблей не настроены
STR_LIVERY_AIRCRAFT_GROUP_EMPTY :Группы самолетов не созданы
###length 23 ###length 23
STR_LIVERY_DEFAULT :Стандарт. окраска STR_LIVERY_DEFAULT :Окраска по умолчанию
STR_LIVERY_STEAM :Паровоз STR_LIVERY_STEAM :Паровоз
STR_LIVERY_DIESEL :Тепловоз STR_LIVERY_DIESEL :Тепловоз
STR_LIVERY_ELECTRIC :Электровоз STR_LIVERY_ELECTRIC :Электровоз
@ -4840,9 +4848,9 @@ STR_AI_DEBUG_MATCH_CASE :{BLACK}Реги
STR_AI_DEBUG_MATCH_CASE_TOOLTIP :{BLACK}Переключить проверку регистра при сравнении строк STR_AI_DEBUG_MATCH_CASE_TOOLTIP :{BLACK}Переключить проверку регистра при сравнении строк
STR_AI_DEBUG_CONTINUE :{BLACK}Продолжить STR_AI_DEBUG_CONTINUE :{BLACK}Продолжить
STR_AI_DEBUG_CONTINUE_TOOLTIP :{BLACK}Продолжить игру STR_AI_DEBUG_CONTINUE_TOOLTIP :{BLACK}Продолжить игру
STR_AI_DEBUG_SELECT_AI_TOOLTIP :{BLACK}Просмотр отладочной информации модуля ИИ STR_AI_DEBUG_SELECT_AI_TOOLTIP :{BLACK}Просмотрите выходные данные отладки этого AI. Ctrl-щелчок, чтобы открыть в новом окне
STR_AI_GAME_SCRIPT :{BLACK}Игровой скрипт STR_AI_GAME_SCRIPT :{BLACK}Игровой скрипт
STR_AI_GAME_SCRIPT_TOOLTIP :{BLACK}Показать журнал работы игрового скрипта STR_AI_GAME_SCRIPT_TOOLTIP :{BLACK}Проверьте журнал игровых сценариев. Ctrl-щелчок, чтобы открыть в новом окне
STR_ERROR_AI_NO_AI_FOUND :Не найдено подходящих модулей ИИ, поэтому конкуренты ничего делать не будут.{}Вы можете скачать модули ИИ через систему онлайн-контента. STR_ERROR_AI_NO_AI_FOUND :Не найдено подходящих модулей ИИ, поэтому конкуренты ничего делать не будут.{}Вы можете скачать модули ИИ через систему онлайн-контента.
STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}Один из запущенных ИИ / скриптов завершил свою работу аварийно. Пожалуйста, сообщите об этом автору скрипта, приложив снимок окна отладки. STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}Один из запущенных ИИ / скриптов завершил свою работу аварийно. Пожалуйста, сообщите об этом автору скрипта, приложив снимок окна отладки.

@ -100,7 +100,7 @@ public:
this->DrawWidgets(); this->DrawWidgets();
} }
void DrawWidget(const Rect &r, int widget) const override void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
if (widget != WID_PLT_BACKGROUND) return; if (widget != WID_PLT_BACKGROUND) return;
@ -127,7 +127,7 @@ public:
} }
} }
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{ {
if (widget != WID_PLT_BACKGROUND) return; if (widget != WID_PLT_BACKGROUND) return;
@ -302,7 +302,7 @@ public:
this->InitNested(table); this->InitNested(table);
} }
void SetStringParameters(int widget) const override void SetStringParameters(WidgetID widget) const override
{ {
if (widget != WID_SLT_CAPTION) return; if (widget != WID_SLT_CAPTION) return;
SetDParamStr(0, this->title); SetDParamStr(0, this->title);
@ -313,7 +313,7 @@ public:
this->DrawWidgets(); this->DrawWidgets();
} }
void DrawWidget(const Rect &r, int widget) const override void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
if (widget != WID_SLT_BACKGROUND) return; if (widget != WID_SLT_BACKGROUND) return;
@ -355,7 +355,7 @@ public:
} }
} }
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{ {
if (widget != WID_SLT_BACKGROUND) return; if (widget != WID_SLT_BACKGROUND) return;
@ -395,7 +395,7 @@ public:
} }
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
if (widget != WID_SLT_BACKGROUND) return; if (widget != WID_SLT_BACKGROUND) return;

@ -642,56 +642,54 @@ void LinkGraphOverlay::SetCompanyMask(CompanyMask company_mask)
} }
/** Make a number of rows with buttons for each company for the linkgraph legend window. */ /** Make a number of rows with buttons for each company for the linkgraph legend window. */
NWidgetBase *MakeCompanyButtonRowsLinkGraphGUI(int *biggest_index) std::unique_ptr<NWidgetBase> MakeCompanyButtonRowsLinkGraphGUI()
{ {
return MakeCompanyButtonRows(biggest_index, WID_LGL_COMPANY_FIRST, WID_LGL_COMPANY_LAST, COLOUR_GREY, 3, STR_NULL); return MakeCompanyButtonRows(WID_LGL_COMPANY_FIRST, WID_LGL_COMPANY_LAST, COLOUR_GREY, 3, STR_NULL);
} }
NWidgetBase *MakeSaturationLegendLinkGraphGUI(int *biggest_index) std::unique_ptr<NWidgetBase> MakeSaturationLegendLinkGraphGUI()
{ {
NWidgetVertical *panel = new NWidgetVertical(NC_EQUALSIZE); auto panel = std::make_unique<NWidgetVertical>(NC_EQUALSIZE);
for (uint i = 0; i < lengthof(LinkGraphOverlay::LINK_COLOURS[0]); ++i) { for (uint i = 0; i < lengthof(LinkGraphOverlay::LINK_COLOURS[0]); ++i) {
NWidgetBackground * wid = new NWidgetBackground(WWT_PANEL, COLOUR_DARK_GREEN, i + WID_LGL_SATURATION_FIRST); auto wid = std::make_unique<NWidgetBackground>(WWT_PANEL, COLOUR_DARK_GREEN, i + WID_LGL_SATURATION_FIRST);
wid->SetMinimalSize(50, 0); wid->SetMinimalSize(50, 0);
wid->SetMinimalTextLines(1, 0, FS_SMALL); wid->SetMinimalTextLines(1, 0, FS_SMALL);
wid->SetFill(1, 1); wid->SetFill(1, 1);
wid->SetResize(0, 0); wid->SetResize(0, 0);
panel->Add(wid); panel->Add(std::move(wid));
} }
*biggest_index = WID_LGL_SATURATION_LAST;
return panel; return panel;
} }
NWidgetBase *MakeCargoesLegendLinkGraphGUI(int *biggest_index) std::unique_ptr<NWidgetBase> MakeCargoesLegendLinkGraphGUI()
{ {
uint num_cargo = static_cast<uint>(_sorted_cargo_specs.size()); uint num_cargo = static_cast<uint>(_sorted_cargo_specs.size());
static const uint ENTRIES_PER_COL = 5; static const uint ENTRIES_PER_COL = 5;
NWidgetHorizontal *panel = new NWidgetHorizontal(NC_EQUALSIZE); auto panel = std::make_unique<NWidgetHorizontal>(NC_EQUALSIZE);
NWidgetVertical *col = nullptr; std::unique_ptr<NWidgetVertical> col = nullptr;
for (uint i = 0; i < num_cargo; ++i) { for (uint i = 0; i < num_cargo; ++i) {
if (i % ENTRIES_PER_COL == 0) { if (i % ENTRIES_PER_COL == 0) {
if (col != nullptr) panel->Add(col); if (col != nullptr) panel->Add(std::move(col));
col = new NWidgetVertical(NC_EQUALSIZE); col = std::make_unique<NWidgetVertical>(NC_EQUALSIZE);
} }
NWidgetBackground * wid = new NWidgetBackground(WWT_PANEL, COLOUR_GREY, i + WID_LGL_CARGO_FIRST); auto wid = std::make_unique<NWidgetBackground>(WWT_PANEL, COLOUR_GREY, i + WID_LGL_CARGO_FIRST);
wid->SetMinimalSize(25, 0); wid->SetMinimalSize(25, 0);
wid->SetMinimalTextLines(1, 0, FS_SMALL); wid->SetMinimalTextLines(1, 0, FS_SMALL);
wid->SetFill(1, 1); wid->SetFill(1, 1);
wid->SetResize(0, 0); wid->SetResize(0, 0);
col->Add(wid); col->Add(std::move(wid));
} }
/* Fill up last row */ /* Fill up last row */
for (uint i = num_cargo; i < Ceil(num_cargo, ENTRIES_PER_COL); ++i) { for (uint i = num_cargo; i < Ceil(num_cargo, ENTRIES_PER_COL); ++i) {
NWidgetSpacer *spc = new NWidgetSpacer(25, 0); auto spc = std::make_unique<NWidgetSpacer>(25, 0);
spc->SetMinimalTextLines(1, 0, FS_SMALL); spc->SetMinimalTextLines(1, 0, FS_SMALL);
spc->SetFill(1, 1); spc->SetFill(1, 1);
spc->SetResize(0, 0); spc->SetResize(0, 0);
col->Add(spc); col->Add(std::move(spc));
} }
/* If there are no cargo specs defined, then col won't have been created so don't add it. */ /* If there are no cargo specs defined, then col won't have been created so don't add it. */
if (col != nullptr) panel->Add(col); if (col != nullptr) panel->Add(std::move(col));
*biggest_index = WID_LGL_CARGO_LAST;
return panel; return panel;
} }
@ -772,7 +770,7 @@ void LinkGraphLegendWindow::SetOverlay(LinkGraphOverlay *overlay)
} }
} }
void LinkGraphLegendWindow::UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) void LinkGraphLegendWindow::UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize)
{ {
if (IsInsideMM(widget, WID_LGL_SATURATION_FIRST, WID_LGL_SATURATION_LAST + 1)) { if (IsInsideMM(widget, WID_LGL_SATURATION_FIRST, WID_LGL_SATURATION_LAST + 1)) {
StringID str = STR_NULL; StringID str = STR_NULL;
@ -799,7 +797,7 @@ void LinkGraphLegendWindow::UpdateWidgetSize(int widget, Dimension *size, [[mayb
} }
} }
void LinkGraphLegendWindow::DrawWidget(const Rect &r, int widget) const void LinkGraphLegendWindow::DrawWidget(const Rect &r, WidgetID widget) const
{ {
Rect br = r.Shrink(WidgetDimensions::scaled.bevel); Rect br = r.Shrink(WidgetDimensions::scaled.bevel);
if (IsInsideMM(widget, WID_LGL_COMPANY_FIRST, WID_LGL_COMPANY_LAST + 1)) { if (IsInsideMM(widget, WID_LGL_COMPANY_FIRST, WID_LGL_COMPANY_LAST + 1)) {
@ -830,7 +828,7 @@ void LinkGraphLegendWindow::DrawWidget(const Rect &r, int widget) const
} }
} }
bool LinkGraphLegendWindow::OnTooltip([[maybe_unused]] Point, int widget, TooltipCloseCondition close_cond) bool LinkGraphLegendWindow::OnTooltip([[maybe_unused]] Point, WidgetID widget, TooltipCloseCondition close_cond)
{ {
if (IsInsideMM(widget, WID_LGL_COMPANY_FIRST, WID_LGL_COMPANY_LAST + 1)) { if (IsInsideMM(widget, WID_LGL_COMPANY_FIRST, WID_LGL_COMPANY_LAST + 1)) {
if (this->IsWidgetDisabled(widget)) { if (this->IsWidgetDisabled(widget)) {
@ -878,7 +876,7 @@ void LinkGraphLegendWindow::UpdateOverlayCargoes()
this->overlay->SetCargoMask(mask); this->overlay->SetCargoMask(mask);
} }
void LinkGraphLegendWindow::OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) void LinkGraphLegendWindow::OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count)
{ {
/* Check which button is clicked */ /* Check which button is clicked */
if (IsInsideMM(widget, WID_LGL_COMPANY_FIRST, WID_LGL_COMPANY_LAST + 1)) { if (IsInsideMM(widget, WID_LGL_COMPANY_FIRST, WID_LGL_COMPANY_LAST + 1)) {

@ -69,7 +69,7 @@ public:
* @param company_mask Bitmask of companies to be shown. * @param company_mask Bitmask of companies to be shown.
* @param scale Desired thickness of lines and size of station dots. * @param scale Desired thickness of lines and size of station dots.
*/ */
LinkGraphOverlay(Window *w, uint wid, CargoTypes cargo_mask, CompanyMask company_mask, uint scale) : LinkGraphOverlay(Window *w, WidgetID wid, CargoTypes cargo_mask, CompanyMask company_mask, uint scale) :
window(w), widget_id(wid), cargo_mask(cargo_mask), company_mask(company_mask), scale(scale), dirty(true) window(w), widget_id(wid), cargo_mask(cargo_mask), company_mask(company_mask), scale(scale), dirty(true)
{} {}
@ -94,7 +94,7 @@ public:
protected: protected:
Window *window; ///< Window to be drawn into. Window *window; ///< Window to be drawn into.
const uint widget_id; ///< ID of Widget in Window to be drawn to. const WidgetID widget_id; ///< ID of Widget in Window to be drawn to.
CargoTypes cargo_mask; ///< Bitmask of cargos to be displayed. CargoTypes cargo_mask; ///< Bitmask of cargos to be displayed.
CompanyMask company_mask; ///< Bitmask of companies to be displayed. CompanyMask company_mask; ///< Bitmask of companies to be displayed.
LinkList cached_links; ///< Cache for links to reduce recalculation. LinkList cached_links; ///< Cache for links to reduce recalculation.
@ -128,10 +128,10 @@ public:
LinkGraphLegendWindow(WindowDesc *desc, int window_number); LinkGraphLegendWindow(WindowDesc *desc, int window_number);
void SetOverlay(LinkGraphOverlay *overlay); void SetOverlay(LinkGraphOverlay *overlay);
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override; void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override;
void DrawWidget(const Rect &r, int widget) const override; void DrawWidget(const Rect &r, WidgetID widget) const override;
bool OnTooltip([[maybe_unused]] Point pt, int widget, TooltipCloseCondition close_cond) override; bool OnTooltip([[maybe_unused]] Point pt, WidgetID widget, TooltipCloseCondition close_cond) override;
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override; void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override;
void OnInvalidateData(int data = 0, bool gui_scope = true) override; void OnInvalidateData(int data = 0, bool gui_scope = true) override;
private: private:

@ -80,7 +80,7 @@ void CcGiveMoney(const CommandCost &result, TileIndex tile, uint32 p1, uint32 p2
* @param mode Tile highlighting mode, e.g. drawing a rectangle or a dot on the ground * @param mode Tile highlighting mode, e.g. drawing a rectangle or a dot on the ground
* @return true if the button is clicked, false if it's unclicked * @return true if the button is clicked, false if it's unclicked
*/ */
bool HandlePlacePushButton(Window *w, int widget, CursorID cursor, HighLightStyle mode) bool HandlePlacePushButton(Window *w, WidgetID widget, CursorID cursor, HighLightStyle mode)
{ {
if (w->IsWidgetDisabled(widget)) return false; if (w->IsWidgetDisabled(widget)) return false;
@ -520,7 +520,7 @@ struct MainWindow : Window
} }
} }
bool OnTooltip([[maybe_unused]] Point pt, int widget, TooltipCloseCondition close_cond) override bool OnTooltip([[maybe_unused]] Point pt, WidgetID widget, TooltipCloseCondition close_cond) override
{ {
if (widget != WID_M_VIEWPORT) return false; if (widget != WID_M_VIEWPORT) return false;
return this->viewport->overlay->ShowTooltip(pt, close_cond); return this->viewport->overlay->ShowTooltip(pt, close_cond);
@ -538,7 +538,7 @@ struct MainWindow : Window
InvalidateWindowData(WC_MAIN_TOOLBAR, 0, data, true); InvalidateWindowData(WC_MAIN_TOOLBAR, 0, data, true);
} }
virtual void OnMouseOver(Point pt, int widget) override virtual void OnMouseOver(Point pt, WidgetID widget) override
{ {
if (pt.x != -1 && _game_mode != GM_MENU && IsViewportMouseHoverActive()) { if (pt.x != -1 && _game_mode != GM_MENU && IsViewportMouseHoverActive()) {
/* Show tooltip with last month production or town name */ /* Show tooltip with last month production or town name */

@ -73,7 +73,7 @@ class LandInfoWindow : public Window {
public: public:
TileIndex tile; TileIndex tile;
void DrawWidget(const Rect &r, int widget) const override void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
if (widget != WID_LI_BACKGROUND) return; if (widget != WID_LI_BACKGROUND) return;
@ -89,7 +89,7 @@ public:
} }
} }
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{ {
if (widget != WID_LI_BACKGROUND) return; if (widget != WID_LI_BACKGROUND) return;
@ -375,7 +375,7 @@ public:
::ShowNewGRFInspectWindow(GetGrfSpecFeature(this->tile), this->tile); ::ShowNewGRFInspectWindow(GetGrfSpecFeature(this->tile), this->tile);
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
switch (widget) { switch (widget) {
case WID_LI_LOCATION: case WID_LI_LOCATION:
@ -522,7 +522,7 @@ struct AboutWindow : public Window {
this->text_position = this->GetWidget<NWidgetBase>(WID_A_SCROLLING_TEXT)->pos_y + this->GetWidget<NWidgetBase>(WID_A_SCROLLING_TEXT)->current_y; this->text_position = this->GetWidget<NWidgetBase>(WID_A_SCROLLING_TEXT)->pos_y + this->GetWidget<NWidgetBase>(WID_A_SCROLLING_TEXT)->current_y;
} }
void SetStringParameters(int widget) const override void SetStringParameters(WidgetID widget) const override
{ {
if (widget == WID_A_WEBSITE) SetDParamStr(0, "Main project website: https://www.openttd.org"); if (widget == WID_A_WEBSITE) SetDParamStr(0, "Main project website: https://www.openttd.org");
if (widget == WID_A_WEBSITE1) SetDParamStr(0, "Patchpack thread: https://www.tt-forums.net/viewtopic.php?f=33&t=73469"); if (widget == WID_A_WEBSITE1) SetDParamStr(0, "Patchpack thread: https://www.tt-forums.net/viewtopic.php?f=33&t=73469");
@ -530,7 +530,7 @@ struct AboutWindow : public Window {
if (widget == WID_A_COPYRIGHT) SetDParamStr(0, _openttd_revision_year); if (widget == WID_A_COPYRIGHT) SetDParamStr(0, _openttd_revision_year);
} }
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{ {
if (widget != WID_A_SCROLLING_TEXT) return; if (widget != WID_A_SCROLLING_TEXT) return;
@ -550,7 +550,7 @@ struct AboutWindow : public Window {
this->timer.SetInterval(TIMER_INTERVAL / GetCharacterHeight(FS_NORMAL)); this->timer.SetInterval(TIMER_INTERVAL / GetCharacterHeight(FS_NORMAL));
} }
void DrawWidget(const Rect &r, int widget) const override void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
if (widget != WID_A_SCROLLING_TEXT) return; if (widget != WID_A_SCROLLING_TEXT) return;
@ -752,7 +752,7 @@ struct TooltipsWindow : public Window
return pt; return pt;
} }
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{ {
if (widget != WID_TT_BACKGROUND) return; if (widget != WID_TT_BACKGROUND) return;
if (this->params.size() == 0) { if (this->params.size() == 0) {
@ -769,7 +769,7 @@ struct TooltipsWindow : public Window
size->height += WidgetDimensions::scaled.framerect.Vertical() + WidgetDimensions::scaled.fullbevel.Vertical(); size->height += WidgetDimensions::scaled.framerect.Vertical() + WidgetDimensions::scaled.fullbevel.Vertical();
} }
void DrawWidget(const Rect &r, int widget) const override void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
if (widget != WID_TT_BACKGROUND) return; if (widget != WID_TT_BACKGROUND) return;
GfxFillRect(r, PC_BLACK); GfxFillRect(r, PC_BLACK);
@ -837,7 +837,7 @@ void GuiShowTooltips(Window *parent, StringID str, TooltipCloseCondition close_t
new TooltipsWindow(parent, str, paramcount, close_tooltip); new TooltipsWindow(parent, str, paramcount, close_tooltip);
} }
void QueryString::HandleEditBox(Window *w, int wid) void QueryString::HandleEditBox(Window *w, WidgetID wid)
{ {
if (w->IsWidgetGloballyFocused(wid) && this->text.HandleCaret()) { if (w->IsWidgetGloballyFocused(wid) && this->text.HandleCaret()) {
w->SetWidgetDirty(wid); w->SetWidgetDirty(wid);
@ -852,7 +852,7 @@ static int GetCaretWidth()
return GetCharacterWidth(FS_NORMAL, '_'); return GetCharacterWidth(FS_NORMAL, '_');
} }
void QueryString::DrawEditBox(const Window *w, int wid) const void QueryString::DrawEditBox(const Window *w, WidgetID wid) const
{ {
const NWidgetLeaf *wi = w->GetWidget<NWidgetLeaf>(wid); const NWidgetLeaf *wi = w->GetWidget<NWidgetLeaf>(wid);
@ -904,7 +904,7 @@ void QueryString::DrawEditBox(const Window *w, int wid) const
* @param wid Widget index. * @param wid Widget index.
* @return Top-left location of the caret, relative to the window. * @return Top-left location of the caret, relative to the window.
*/ */
Point QueryString::GetCaretPosition(const Window *w, int wid) const Point QueryString::GetCaretPosition(const Window *w, WidgetID wid) const
{ {
const NWidgetLeaf *wi = w->GetWidget<NWidgetLeaf>(wid); const NWidgetLeaf *wi = w->GetWidget<NWidgetLeaf>(wid);
@ -933,7 +933,7 @@ Point QueryString::GetCaretPosition(const Window *w, int wid) const
* @param to End of the string range. * @param to End of the string range.
* @return Rectangle encompassing the string range, relative to the window. * @return Rectangle encompassing the string range, relative to the window.
*/ */
Rect QueryString::GetBoundingRect(const Window *w, int wid, const char *from, const char *to) const Rect QueryString::GetBoundingRect(const Window *w, WidgetID wid, const char *from, const char *to) const
{ {
const NWidgetLeaf *wi = w->GetWidget<NWidgetLeaf>(wid); const NWidgetLeaf *wi = w->GetWidget<NWidgetLeaf>(wid);
@ -964,7 +964,7 @@ Rect QueryString::GetBoundingRect(const Window *w, int wid, const char *from, co
* @param pt Position to test. * @param pt Position to test.
* @return Index of the character position or -1 if no character is at the position. * @return Index of the character position or -1 if no character is at the position.
*/ */
ptrdiff_t QueryString::GetCharAtPosition(const Window *w, int wid, const Point &pt) const ptrdiff_t QueryString::GetCharAtPosition(const Window *w, WidgetID wid, const Point &pt) const
{ {
const NWidgetLeaf *wi = w->GetWidget<NWidgetLeaf>(wid); const NWidgetLeaf *wi = w->GetWidget<NWidgetLeaf>(wid);
@ -986,7 +986,7 @@ ptrdiff_t QueryString::GetCharAtPosition(const Window *w, int wid, const Point &
return ::GetCharAtPosition(tb->buf, pt.x - delta - r.left); return ::GetCharAtPosition(tb->buf, pt.x - delta - r.left);
} }
void QueryString::ClickEditBox(Window *w, Point pt, int wid, int click_count, bool focus_changed) void QueryString::ClickEditBox(Window *w, Point pt, WidgetID wid, int click_count, bool focus_changed)
{ {
const NWidgetLeaf *wi = w->GetWidget<NWidgetLeaf>(wid); const NWidgetLeaf *wi = w->GetWidget<NWidgetLeaf>(wid);
@ -1070,7 +1070,7 @@ struct QueryStringWindow : public Window
this->ReInit(); this->ReInit();
} }
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{ {
if (widget == WID_QS_DEFAULT && (this->flags & QSF_ENABLE_DEFAULT) == 0) { if (widget == WID_QS_DEFAULT && (this->flags & QSF_ENABLE_DEFAULT) == 0) {
/* We don't want this widget to show! */ /* We don't want this widget to show! */
@ -1084,7 +1084,7 @@ struct QueryStringWindow : public Window
} }
} }
void DrawWidget(const Rect &r, int widget) const override void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
if (widget != WID_QS_WARNING) return; if (widget != WID_QS_WARNING) return;
@ -1094,7 +1094,7 @@ struct QueryStringWindow : public Window
} }
} }
void SetStringParameters(int widget) const override void SetStringParameters(WidgetID widget) const override
{ {
if (widget == WID_QS_CAPTION) SetDParam(0, this->editbox.caption); if (widget == WID_QS_CAPTION) SetDParam(0, this->editbox.caption);
} }
@ -1109,7 +1109,7 @@ struct QueryStringWindow : public Window
} }
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
switch (widget) { switch (widget) {
case WID_QS_DEFAULT: case WID_QS_DEFAULT:
@ -1231,7 +1231,7 @@ struct QueryWindow : public Window {
this->SetDirty(); this->SetDirty();
} }
void SetStringParameters(int widget) const override void SetStringParameters(WidgetID widget) const override
{ {
switch (widget) { switch (widget) {
case WID_Q_CAPTION: case WID_Q_CAPTION:
@ -1250,7 +1250,7 @@ struct QueryWindow : public Window {
} }
} }
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{ {
if (widget != WID_Q_TEXT) return; if (widget != WID_Q_TEXT) return;
@ -1262,7 +1262,7 @@ struct QueryWindow : public Window {
*size = d; *size = d;
} }
void DrawWidget(const Rect &r, int widget) const override void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
if (widget != WID_Q_TEXT) return; if (widget != WID_Q_TEXT) return;
@ -1272,7 +1272,7 @@ struct QueryWindow : public Window {
this->message_str, TC_FROMSTRING, SA_CENTER); this->message_str, TC_FROMSTRING, SA_CENTER);
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
switch (widget) { switch (widget) {
case WID_Q_YES: { case WID_Q_YES: {

@ -494,7 +494,7 @@ struct MusicTrackSelectionWindow : public Window {
this->LowerWidget(WID_MTS_ALL + _settings_client.music.playlist); this->LowerWidget(WID_MTS_ALL + _settings_client.music.playlist);
} }
void SetStringParameters(int widget) const override void SetStringParameters(WidgetID widget) const override
{ {
switch (widget) { switch (widget) {
case WID_MTS_PLAYLIST: case WID_MTS_PLAYLIST:
@ -526,7 +526,7 @@ struct MusicTrackSelectionWindow : public Window {
} }
} }
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{ {
switch (widget) { switch (widget) {
case WID_MTS_PLAYLIST: { case WID_MTS_PLAYLIST: {
@ -561,7 +561,7 @@ struct MusicTrackSelectionWindow : public Window {
} }
} }
void DrawWidget(const Rect &r, int widget) const override void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
switch (widget) { switch (widget) {
case WID_MTS_LIST_LEFT: { case WID_MTS_LIST_LEFT: {
@ -594,7 +594,7 @@ struct MusicTrackSelectionWindow : public Window {
} }
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
switch (widget) { switch (widget) {
case WID_MTS_LIST_LEFT: { // add to playlist case WID_MTS_LIST_LEFT: { // add to playlist
@ -626,7 +626,7 @@ struct MusicTrackSelectionWindow : public Window {
} }
} }
void OnDropdownSelect(int widget, int index) override void OnDropdownSelect(WidgetID widget, int index) override
{ {
switch (widget) { switch (widget) {
case WID_MTS_MUSICSET: case WID_MTS_MUSICSET:
@ -708,7 +708,7 @@ struct MusicWindow : public Window {
); );
} }
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{ {
switch (widget) { switch (widget) {
/* Make sure that WID_M_SHUFFLE and WID_M_PROGRAMME have the same size. /* Make sure that WID_M_SHUFFLE and WID_M_PROGRAMME have the same size.
@ -750,7 +750,7 @@ struct MusicWindow : public Window {
} }
} }
void DrawWidget(const Rect &r, int widget) const override void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
switch (widget) { switch (widget) {
case WID_M_TRACK_NR: { case WID_M_TRACK_NR: {
@ -813,7 +813,7 @@ struct MusicWindow : public Window {
} }
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
switch (widget) { switch (widget) {
case WID_M_PREV: // skip to prev case WID_M_PREV: // skip to prev

@ -452,7 +452,7 @@ struct NetworkChatWindow : public Window {
return pt; return pt;
} }
void SetStringParameters(int widget) const override void SetStringParameters(WidgetID widget) const override
{ {
if (widget != WID_NC_DESTINATION) return; if (widget != WID_NC_DESTINATION) return;
@ -461,7 +461,7 @@ struct NetworkChatWindow : public Window {
} }
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
switch (widget) { switch (widget) {
case WID_NC_SENDBUTTON: /* Send */ case WID_NC_SENDBUTTON: /* Send */
@ -484,7 +484,7 @@ struct NetworkChatWindow : public Window {
return state; return state;
} }
void OnEditboxChanged(int widget) override void OnEditboxChanged(WidgetID widget) override
{ {
if (widget == WID_NC_TEXTBOX) { if (widget == WID_NC_TEXTBOX) {
_chat_tab_completion_active = false; _chat_tab_completion_active = false;

@ -619,6 +619,8 @@ void ClientNetworkContentSocketHandler::OnReceiveData(UniqueBuffer<char> data)
this->lastActivity = std::chrono::steady_clock::now(); this->lastActivity = std::chrono::steady_clock::now();
this->lastActivity = std::chrono::steady_clock::now();
if (this->http_response_index == -1) { if (this->http_response_index == -1) {
if (data != nullptr) { if (data != nullptr) {
/* Append the rest of the response. */ /* Append the rest of the response. */

@ -65,7 +65,7 @@ struct ContentTextfileWindow : public TextfileWindow {
} }
} }
void SetStringParameters(int widget) const override void SetStringParameters(WidgetID widget) const override
{ {
if (widget == WID_TF_CAPTION) { if (widget == WID_TF_CAPTION) {
SetDParam(0, this->GetTypeString()); SetDParam(0, this->GetTypeString());
@ -115,7 +115,7 @@ void BaseNetworkContentDownloadStatusWindow::Close([[maybe_unused]] int data)
this->Window::Close(); this->Window::Close();
} }
void BaseNetworkContentDownloadStatusWindow::UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) void BaseNetworkContentDownloadStatusWindow::UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize)
{ {
switch (widget) { switch (widget) {
case WID_NCDS_PROGRESS_BAR: case WID_NCDS_PROGRESS_BAR:
@ -134,7 +134,7 @@ void BaseNetworkContentDownloadStatusWindow::UpdateWidgetSize(int widget, Dimens
} }
} }
void BaseNetworkContentDownloadStatusWindow::DrawWidget(const Rect &r, int widget) const void BaseNetworkContentDownloadStatusWindow::DrawWidget(const Rect &r, WidgetID widget) const
{ {
switch (widget) { switch (widget) {
case WID_NCDS_PROGRESS_BAR: { case WID_NCDS_PROGRESS_BAR: {
@ -286,7 +286,7 @@ public:
this->BaseNetworkContentDownloadStatusWindow::Close(); this->BaseNetworkContentDownloadStatusWindow::Close();
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
if (widget == WID_NCDS_CANCELOK) { if (widget == WID_NCDS_CANCELOK) {
if (this->downloaded_bytes != this->total_bytes) { if (this->downloaded_bytes != this->total_bytes) {
@ -585,7 +585,7 @@ public:
this->checkbox_size = maxdim(maxdim(GetSpriteSize(SPR_BOX_EMPTY), GetSpriteSize(SPR_BOX_CHECKED)), GetSpriteSize(SPR_BLOT)); this->checkbox_size = maxdim(maxdim(GetSpriteSize(SPR_BOX_EMPTY), GetSpriteSize(SPR_BOX_CHECKED)), GetSpriteSize(SPR_BLOT));
} }
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{ {
switch (widget) { switch (widget) {
case WID_NCL_CHECKBOX: case WID_NCL_CHECKBOX:
@ -609,7 +609,7 @@ public:
} }
void DrawWidget(const Rect &r, int widget) const override void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
switch (widget) { switch (widget) {
case WID_NCL_DETAILS: case WID_NCL_DETAILS:
@ -792,7 +792,7 @@ public:
} }
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
if (widget >= WID_NCL_TEXTFILE && widget < WID_NCL_TEXTFILE + TFT_CONTENT_END) { if (widget >= WID_NCL_TEXTFILE && widget < WID_NCL_TEXTFILE + TFT_CONTENT_END) {
if (this->selected == nullptr || this->selected->state != ContentInfo::ALREADY_HERE) return; if (this->selected == nullptr || this->selected->state != ContentInfo::ALREADY_HERE) return;
@ -925,7 +925,7 @@ public:
return ES_HANDLED; return ES_HANDLED;
} }
void OnEditboxChanged(int wid) override void OnEditboxChanged(WidgetID wid) override
{ {
if (wid == WID_NCL_FILTER) { if (wid == WID_NCL_FILTER) {
this->filter_data.string_filter.SetFilterTerm(this->filter_editbox.text.buf); this->filter_data.string_filter.SetFilterTerm(this->filter_editbox.text.buf);

@ -33,8 +33,8 @@ public:
BaseNetworkContentDownloadStatusWindow(WindowDesc *desc); BaseNetworkContentDownloadStatusWindow(WindowDesc *desc);
void Close([[maybe_unused]] int data = 0) override; void Close([[maybe_unused]] int data = 0) override;
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override; void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override;
void DrawWidget(const Rect &r, int widget) const override; void DrawWidget(const Rect &r, WidgetID widget) const override;
void OnDownloadProgress(const ContentInfo *ci, int bytes) override; void OnDownloadProgress(const ContentInfo *ci, int bytes) override;
}; };

@ -93,21 +93,21 @@ class NWidgetServerListHeader : public NWidgetContainer {
public: public:
NWidgetServerListHeader() : NWidgetContainer(NWID_HORIZONTAL) NWidgetServerListHeader() : NWidgetContainer(NWID_HORIZONTAL)
{ {
NWidgetLeaf *leaf = new NWidgetLeaf(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NG_NAME, STR_NETWORK_SERVER_LIST_GAME_NAME, STR_NETWORK_SERVER_LIST_GAME_NAME_TOOLTIP); auto leaf = std::make_unique<NWidgetLeaf>(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NG_NAME, STR_NETWORK_SERVER_LIST_GAME_NAME, STR_NETWORK_SERVER_LIST_GAME_NAME_TOOLTIP);
leaf->SetResize(1, 0); leaf->SetResize(1, 0);
leaf->SetFill(1, 0); leaf->SetFill(1, 0);
this->Add(leaf); this->Add(std::move(leaf));
this->Add(new NWidgetLeaf(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NG_CLIENTS, STR_NETWORK_SERVER_LIST_CLIENTS_CAPTION, STR_NETWORK_SERVER_LIST_CLIENTS_CAPTION_TOOLTIP)); this->Add(std::make_unique<NWidgetLeaf>(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NG_CLIENTS, STR_NETWORK_SERVER_LIST_CLIENTS_CAPTION, STR_NETWORK_SERVER_LIST_CLIENTS_CAPTION_TOOLTIP));
this->Add(new NWidgetLeaf(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NG_MAPSIZE, STR_NETWORK_SERVER_LIST_MAP_SIZE_CAPTION, STR_NETWORK_SERVER_LIST_MAP_SIZE_CAPTION_TOOLTIP)); this->Add(std::make_unique<NWidgetLeaf>(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NG_MAPSIZE, STR_NETWORK_SERVER_LIST_MAP_SIZE_CAPTION, STR_NETWORK_SERVER_LIST_MAP_SIZE_CAPTION_TOOLTIP));
this->Add(new NWidgetLeaf(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NG_DATE, STR_NETWORK_SERVER_LIST_DATE_CAPTION, STR_NETWORK_SERVER_LIST_DATE_CAPTION_TOOLTIP)); this->Add(std::make_unique<NWidgetLeaf>(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NG_DATE, STR_NETWORK_SERVER_LIST_DATE_CAPTION, STR_NETWORK_SERVER_LIST_DATE_CAPTION_TOOLTIP));
this->Add(new NWidgetLeaf(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NG_YEARS, STR_NETWORK_SERVER_LIST_YEARS_CAPTION, STR_NETWORK_SERVER_LIST_YEARS_CAPTION_TOOLTIP)); this->Add(std::make_unique<NWidgetLeaf>(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NG_YEARS, STR_NETWORK_SERVER_LIST_YEARS_CAPTION, STR_NETWORK_SERVER_LIST_YEARS_CAPTION_TOOLTIP));
leaf = new NWidgetLeaf(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NG_INFO, STR_EMPTY, STR_NETWORK_SERVER_LIST_INFO_ICONS_TOOLTIP); leaf = std::make_unique<NWidgetLeaf>(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NG_INFO, STR_EMPTY, STR_NETWORK_SERVER_LIST_INFO_ICONS_TOOLTIP);
leaf->SetMinimalSize(14 + GetSpriteSize(SPR_LOCK, nullptr, ZOOM_LVL_OUT_4X).width leaf->SetMinimalSize(14 + GetSpriteSize(SPR_LOCK, nullptr, ZOOM_LVL_OUT_4X).width
+ GetSpriteSize(SPR_BLOT, nullptr, ZOOM_LVL_OUT_4X).width, 12); + GetSpriteSize(SPR_BLOT, nullptr, ZOOM_LVL_OUT_4X).width, 12);
leaf->SetFill(0, 1); leaf->SetFill(0, 1);
this->Add(leaf); this->Add(std::move(leaf));
} }
void SetupSmallestSize(Window *w) override void SetupSmallestSize(Window *w) override
@ -119,18 +119,18 @@ public:
this->resize_y = 0; // We never resize in this direction this->resize_y = 0; // We never resize in this direction
/* First initialise some variables... */ /* First initialise some variables... */
for (NWidgetBase *child_wid = this->head; child_wid != nullptr; child_wid = child_wid->next) { for (const auto &child_wid : this->children) {
child_wid->SetupSmallestSize(w); child_wid->SetupSmallestSize(w);
this->smallest_y = std::max(this->smallest_y, child_wid->smallest_y + child_wid->padding.Vertical()); this->smallest_y = std::max(this->smallest_y, child_wid->smallest_y + child_wid->padding.Vertical());
} }
/* ... then in a second pass make sure the 'current' sizes are set. Won't change for most widgets. */ /* ... then in a second pass make sure the 'current' sizes are set. Won't change for most widgets. */
for (NWidgetBase *child_wid = this->head; child_wid != nullptr; child_wid = child_wid->next) { for (const auto &child_wid : this->children) {
child_wid->current_x = child_wid->smallest_x; child_wid->current_x = child_wid->smallest_x;
child_wid->current_y = this->smallest_y; child_wid->current_y = this->smallest_y;
} }
this->smallest_x = this->head->smallest_x + this->tail->smallest_x; // First and last are always shown, rest not this->smallest_x = this->children.front()->smallest_x + this->children.back()->smallest_x; // First and last are always shown, rest not
} }
void AssignSizePosition(SizingType sizing, int x, int y, uint given_width, uint given_height, bool rtl) override void AssignSizePosition(SizingType sizing, int x, int y, uint given_width, uint given_height, bool rtl) override
@ -142,27 +142,38 @@ public:
this->current_x = given_width; this->current_x = given_width;
this->current_y = given_height; this->current_y = given_height;
given_width -= this->tail->smallest_x; given_width -= this->children.back()->smallest_x;
/* The first and last widget are always visible, determine which other should be visible */ /* The first and last widget are always visible, determine which other should be visible */
for (NWidgetBase *child_wid = this->head->next; child_wid->next != nullptr; child_wid = child_wid->next) { if (this->children.size() > 2) {
if (given_width > ScaleGUITrad(MINIMUM_NAME_WIDTH_BEFORE_NEW_HEADER) + child_wid->smallest_x && child_wid->prev->current_x != 0) { auto first = std::next(std::begin(this->children));
given_width -= child_wid->smallest_x; auto last = std::prev(std::end(this->children));
child_wid->current_x = child_wid->smallest_x; /* Make visible. */ for (auto it = first; it != last; ++it) {
} else { auto &child_wid = *it;
child_wid->current_x = 0; /* Make invisible. */ if (given_width > ScaleGUITrad(MINIMUM_NAME_WIDTH_BEFORE_NEW_HEADER) + child_wid->smallest_x && (*std::prev(it))->current_x != 0) {
given_width -= child_wid->smallest_x;
child_wid->current_x = child_wid->smallest_x; /* Make visible. */
} else {
child_wid->current_x = 0; /* Make invisible. */
}
} }
} }
/* All remaining space goes to the first (name) widget */ /* All remaining space goes to the first (name) widget */
this->head->current_x = given_width; this->children.front()->current_x = given_width;
/* Now assign the widgets to their rightful place */ /* Now assign the widgets to their rightful place */
uint position = 0; // Place to put next child relative to origin of the container. uint position = 0; // Place to put next child relative to origin of the container.
for (NWidgetBase *child_wid = rtl ? this->tail : this->head; child_wid != nullptr; child_wid = rtl ? child_wid->prev : child_wid->next) { auto assign_position = [&](const std::unique_ptr<NWidgetBase> &child_wid) {
if (child_wid->current_x != 0) { if (child_wid->current_x != 0) {
child_wid->AssignSizePosition(sizing, x + position, y, child_wid->current_x, this->current_y, rtl); child_wid->AssignSizePosition(sizing, x + position, y, child_wid->current_x, this->current_y, rtl);
position += child_wid->current_x; position += child_wid->current_x;
} }
};
if (rtl) {
std::for_each(std::rbegin(this->children), std::rend(this->children), assign_position);
} else {
std::for_each(std::begin(this->children), std::end(this->children), assign_position);
} }
} }
}; };
@ -470,7 +481,7 @@ public:
this->flag_offset = this->blot_offset + ScaleGUITrad(2) + GetSpriteSize(SPR_BLOT).width; this->flag_offset = this->blot_offset + ScaleGUITrad(2) + GetSpriteSize(SPR_BLOT).width;
} }
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{ {
switch (widget) { switch (widget) {
case WID_NG_MATRIX: case WID_NG_MATRIX:
@ -516,7 +527,7 @@ public:
} }
} }
void DrawWidget(const Rect &r, int widget) const override void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
switch (widget) { switch (widget) {
case WID_NG_MATRIX: { case WID_NG_MATRIX: {
@ -674,7 +685,7 @@ public:
} }
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
switch (widget) { switch (widget) {
case WID_NG_CANCEL: // Cancel button case WID_NG_CANCEL: // Cancel button
@ -808,7 +819,7 @@ public:
return state; return state;
} }
void OnEditboxChanged(int wid) override void OnEditboxChanged(WidgetID wid) override
{ {
switch (wid) { switch (wid) {
case WID_NG_FILTER: { case WID_NG_FILTER: {
@ -865,10 +876,9 @@ GUIGameServerList::FilterFunction * const NetworkGameWindow::filter_funcs[] = {
&NGameSearchFilter &NGameSearchFilter
}; };
static NWidgetBase *MakeResizableHeader(int *biggest_index) static std::unique_ptr<NWidgetBase> MakeResizableHeader()
{ {
*biggest_index = std::max<int>(*biggest_index, WID_NG_INFO); return std::make_unique<NWidgetServerListHeader>();
return new NWidgetServerListHeader();
} }
static const NWidgetPart _nested_network_game_widgets[] = { static const NWidgetPart _nested_network_game_widgets[] = {
@ -974,7 +984,7 @@ void ShowNetworkGameWindow()
} }
struct NetworkStartServerWindow : public Window { struct NetworkStartServerWindow : public Window {
byte widget_id; ///< The widget that has the pop-up input menu WidgetID widget_id; ///< The widget that has the pop-up input menu
QueryString name_editbox; ///< Server name editbox. QueryString name_editbox; ///< Server name editbox.
NetworkStartServerWindow(WindowDesc *desc) : Window(desc), name_editbox(NETWORK_NAME_LENGTH) NetworkStartServerWindow(WindowDesc *desc) : Window(desc), name_editbox(NETWORK_NAME_LENGTH)
@ -987,7 +997,7 @@ struct NetworkStartServerWindow : public Window {
this->SetFocusedWidget(WID_NSS_GAMENAME); this->SetFocusedWidget(WID_NSS_GAMENAME);
} }
void SetStringParameters(int widget) const override void SetStringParameters(WidgetID widget) const override
{ {
switch (widget) { switch (widget) {
case WID_NSS_CONNTYPE_BTN: case WID_NSS_CONNTYPE_BTN:
@ -1004,7 +1014,7 @@ struct NetworkStartServerWindow : public Window {
} }
} }
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{ {
switch (widget) { switch (widget) {
case WID_NSS_CONNTYPE_BTN: case WID_NSS_CONNTYPE_BTN:
@ -1015,7 +1025,7 @@ struct NetworkStartServerWindow : public Window {
} }
} }
void DrawWidget(const Rect &r, int widget) const override void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
switch (widget) { switch (widget) {
case WID_NSS_SETPWD: case WID_NSS_SETPWD:
@ -1024,7 +1034,7 @@ struct NetworkStartServerWindow : public Window {
} }
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
switch (widget) { switch (widget) {
case WID_NSS_CANCEL: // Cancel button case WID_NSS_CANCEL: // Cancel button
@ -1102,7 +1112,7 @@ struct NetworkStartServerWindow : public Window {
} }
} }
void OnDropdownSelect(int widget, int index) override void OnDropdownSelect(WidgetID widget, int index) override
{ {
switch (widget) { switch (widget) {
case WID_NSS_CONNTYPE_BTN: case WID_NSS_CONNTYPE_BTN:
@ -1667,7 +1677,7 @@ public:
this->SetWidgetDisabledState(WID_CL_SERVER_NAME_EDIT, !_network_server); this->SetWidgetDisabledState(WID_CL_SERVER_NAME_EDIT, !_network_server);
} }
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{ {
switch (widget) { switch (widget) {
case WID_CL_SERVER_VISIBILITY: case WID_CL_SERVER_VISIBILITY:
@ -1695,7 +1705,7 @@ public:
this->vscroll->SetCapacityFromWidget(this, WID_CL_MATRIX); this->vscroll->SetCapacityFromWidget(this, WID_CL_MATRIX);
} }
void SetStringParameters(int widget) const override void SetStringParameters(WidgetID widget) const override
{ {
switch (widget) { switch (widget) {
case WID_CL_SERVER_NAME: case WID_CL_SERVER_NAME:
@ -1730,7 +1740,7 @@ public:
} }
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
switch (widget) { switch (widget) {
case WID_CL_SERVER_NAME_EDIT: case WID_CL_SERVER_NAME_EDIT:
@ -1764,7 +1774,7 @@ public:
} }
} }
bool OnTooltip([[maybe_unused]] Point pt, int widget, TooltipCloseCondition close_cond) override bool OnTooltip([[maybe_unused]] Point pt, WidgetID widget, TooltipCloseCondition close_cond) override
{ {
switch (widget) { switch (widget) {
case WID_CL_MATRIX: { case WID_CL_MATRIX: {
@ -1803,7 +1813,7 @@ public:
return false; return false;
} }
void OnDropdownClose(Point pt, int widget, int index, bool instant_close) override void OnDropdownClose(Point pt, WidgetID widget, int index, bool instant_close) override
{ {
/* If you close the dropdown outside the list, don't take any action. */ /* If you close the dropdown outside the list, don't take any action. */
if (widget == WID_CL_MATRIX) return; if (widget == WID_CL_MATRIX) return;
@ -1811,7 +1821,7 @@ public:
Window::OnDropdownClose(pt, widget, index, instant_close); Window::OnDropdownClose(pt, widget, index, instant_close);
} }
void OnDropdownSelect(int widget, int index) override void OnDropdownSelect(WidgetID widget, int index) override
{ {
switch (widget) { switch (widget) {
case WID_CL_SERVER_VISIBILITY: case WID_CL_SERVER_VISIBILITY:
@ -2021,7 +2031,7 @@ public:
} }
} }
void DrawWidget(const Rect &r, int widget) const override void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
switch (widget) { switch (widget) {
case WID_CL_MATRIX: { case WID_CL_MATRIX: {
@ -2057,7 +2067,7 @@ public:
} }
} }
void OnMouseOver([[maybe_unused]] Point pt, int widget) override void OnMouseOver([[maybe_unused]] Point pt, WidgetID widget) override
{ {
if (widget != WID_CL_MATRIX) { if (widget != WID_CL_MATRIX) {
if (this->hover_index != -1) { if (this->hover_index != -1) {
@ -2093,7 +2103,7 @@ struct NetworkJoinStatusWindow : Window {
this->InitNested(WN_NETWORK_STATUS_WINDOW_JOIN); this->InitNested(WN_NETWORK_STATUS_WINDOW_JOIN);
} }
void DrawWidget(const Rect &r, int widget) const override void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
switch (widget) { switch (widget) {
case WID_NJS_PROGRESS_BAR: { case WID_NJS_PROGRESS_BAR: {
@ -2144,7 +2154,7 @@ struct NetworkJoinStatusWindow : Window {
} }
} }
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{ {
switch (widget) { switch (widget) {
case WID_NJS_PROGRESS_BAR: case WID_NJS_PROGRESS_BAR:
@ -2170,7 +2180,7 @@ struct NetworkJoinStatusWindow : Window {
} }
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
if (widget == WID_NJS_CANCELOK) { // Disconnect button if (widget == WID_NJS_CANCELOK) { // Disconnect button
NetworkDisconnect(); NetworkDisconnect();
@ -2259,14 +2269,14 @@ struct NetworkCompanyPasswordWindow : public Window {
this->ReInit(); this->ReInit();
} }
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{ {
if (widget == WID_NCP_WARNING) { if (widget == WID_NCP_WARNING) {
*size = this->warning_size; *size = this->warning_size;
} }
} }
void DrawWidget(const Rect &r, int widget) const override void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
if (widget != WID_NCP_WARNING) return; if (widget != WID_NCP_WARNING) return;
@ -2283,7 +2293,7 @@ struct NetworkCompanyPasswordWindow : public Window {
NetworkChangeCompanyPassword(_local_company, this->password_editbox.text.buf); NetworkChangeCompanyPassword(_local_company, this->password_editbox.text.buf);
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
switch (widget) { switch (widget) {
case WID_NCP_OK: case WID_NCP_OK:
@ -2365,14 +2375,14 @@ struct NetworkAskRelayWindow : public Window {
this->Window::Close(); this->Window::Close();
} }
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{ {
if (widget == WID_NAR_TEXT) { if (widget == WID_NAR_TEXT) {
*size = GetStringBoundingBox(STR_NETWORK_ASK_RELAY_TEXT); *size = GetStringBoundingBox(STR_NETWORK_ASK_RELAY_TEXT);
} }
} }
void DrawWidget(const Rect &r, int widget) const override void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
if (widget == WID_NAR_TEXT) { if (widget == WID_NAR_TEXT) {
DrawStringMultiLine(r, STR_NETWORK_ASK_RELAY_TEXT, TC_FROMSTRING, SA_CENTER); DrawStringMultiLine(r, STR_NETWORK_ASK_RELAY_TEXT, TC_FROMSTRING, SA_CENTER);
@ -2387,7 +2397,7 @@ struct NetworkAskRelayWindow : public Window {
this->SetDirty(); this->SetDirty();
} }
void SetStringParameters(int widget) const override void SetStringParameters(WidgetID widget) const override
{ {
switch (widget) { switch (widget) {
case WID_NAR_TEXT: case WID_NAR_TEXT:
@ -2397,7 +2407,7 @@ struct NetworkAskRelayWindow : public Window {
} }
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
switch (widget) { switch (widget) {
case WID_NAR_NO: case WID_NAR_NO:
@ -2468,14 +2478,14 @@ struct NetworkAskSurveyWindow : public Window {
this->InitNested(0); this->InitNested(0);
} }
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{ {
if (widget == WID_NAS_TEXT) { if (widget == WID_NAS_TEXT) {
*size = GetStringBoundingBox(STR_NETWORK_ASK_SURVEY_TEXT); *size = GetStringBoundingBox(STR_NETWORK_ASK_SURVEY_TEXT);
} }
} }
void DrawWidget(const Rect &r, int widget) const override void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
if (widget == WID_NAS_TEXT) { if (widget == WID_NAS_TEXT) {
DrawStringMultiLine(r, STR_NETWORK_ASK_SURVEY_TEXT, TC_BLACK, SA_CENTER); DrawStringMultiLine(r, STR_NETWORK_ASK_SURVEY_TEXT, TC_BLACK, SA_CENTER);
@ -2490,7 +2500,7 @@ struct NetworkAskSurveyWindow : public Window {
this->SetDirty(); this->SetDirty();
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
switch (widget) { switch (widget) {
case WID_NAS_PREVIEW: case WID_NAS_PREVIEW:

@ -433,14 +433,14 @@ struct NewGRFInspectWindow : Window {
this->OnInvalidateData(0, true); this->OnInvalidateData(0, true);
} }
void SetStringParameters(int widget) const override void SetStringParameters(WidgetID widget) const override
{ {
if (widget != WID_NGRFI_CAPTION) return; if (widget != WID_NGRFI_CAPTION) return;
GetFeatureHelper(this->window_number)->SetStringParameters(this->GetFeatureIndex()); GetFeatureHelper(this->window_number)->SetStringParameters(this->GetFeatureIndex());
} }
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{ {
switch (widget) { switch (widget) {
case WID_NGRFI_VEH_CHAIN: { case WID_NGRFI_VEH_CHAIN: {
@ -486,7 +486,7 @@ struct NewGRFInspectWindow : Window {
::DrawString(r.Shrink(WidgetDimensions::scaled.frametext).Shrink(0, offset * this->resize.step_height, 0, 0), buf, TC_BLACK); ::DrawString(r.Shrink(WidgetDimensions::scaled.frametext).Shrink(0, offset * this->resize.step_height, 0, 0), buf, TC_BLACK);
} }
void DrawWidget(const Rect &r, int widget) const override void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
switch (widget) { switch (widget) {
case WID_NGRFI_VEH_CHAIN: { case WID_NGRFI_VEH_CHAIN: {
@ -877,7 +877,7 @@ struct NewGRFInspectWindow : Window {
this->SelectTagArrayItem(this->marked_groups, group); this->SelectTagArrayItem(this->marked_groups, group);
} }
void OnClick(Point pt, int widget, int click_count) override void OnClick(Point pt, WidgetID widget, int click_count) override
{ {
switch (widget) { switch (widget) {
case WID_NGRFI_PARENT: { case WID_NGRFI_PARENT: {
@ -1059,7 +1059,7 @@ struct NewGRFInspectWindow : Window {
} }
} }
void OnDropdownSelect(int widget, int index) override void OnDropdownSelect(WidgetID widget, int index) override
{ {
if (widget == WID_NGRFI_MAIN_OPTIONS) { if (widget == WID_NGRFI_MAIN_OPTIONS) {
GetFeatureHelper(this->window_number)->OnOptionsDropdownSelect(this->GetFeatureIndex(), index); GetFeatureHelper(this->window_number)->OnOptionsDropdownSelect(this->GetFeatureIndex(), index);
@ -1146,7 +1146,7 @@ struct NewGRFInspectWindow : Window {
this->redraw_scrollbar = false; this->redraw_scrollbar = false;
} }
virtual bool OnTooltip(Point pt, int widget, TooltipCloseCondition close_cond) override virtual bool OnTooltip(Point pt, WidgetID widget, TooltipCloseCondition close_cond) override
{ {
if (widget == WID_NGRFI_MAINPANEL && this->sprite_dump) { if (widget == WID_NGRFI_MAINPANEL && this->sprite_dump) {
_temp_special_strings[0] = GetString(this->click_to_mark_mode ? STR_NEWGRF_INSPECT_SPRITE_DUMP_PANEL_TOOLTIP_MARK : STR_NEWGRF_INSPECT_SPRITE_DUMP_PANEL_TOOLTIP_HIGHLIGHT); _temp_special_strings[0] = GetString(this->click_to_mark_mode ? STR_NEWGRF_INSPECT_SPRITE_DUMP_PANEL_TOOLTIP_MARK : STR_NEWGRF_INSPECT_SPRITE_DUMP_PANEL_TOOLTIP_HIGHLIGHT);
@ -1418,7 +1418,7 @@ struct SpriteAlignerWindow : Window {
this->InvalidateData(0, true); this->InvalidateData(0, true);
} }
void SetStringParameters(int widget) const override void SetStringParameters(WidgetID widget) const override
{ {
const Sprite *spr = GetSprite(this->current_sprite, SpriteType::Normal, ZoomMask(ZOOM_LVL_GUI)); const Sprite *spr = GetSprite(this->current_sprite, SpriteType::Normal, ZoomMask(ZOOM_LVL_GUI));
switch (widget) { switch (widget) {
@ -1452,7 +1452,7 @@ struct SpriteAlignerWindow : Window {
} }
} }
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{ {
switch (widget) { switch (widget) {
case WID_SA_SPRITE: case WID_SA_SPRITE:
@ -1470,7 +1470,7 @@ struct SpriteAlignerWindow : Window {
} }
} }
void DrawWidget(const Rect &r, int widget) const override void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
switch (widget) { switch (widget) {
case WID_SA_SPRITE: { case WID_SA_SPRITE: {
@ -1522,7 +1522,7 @@ struct SpriteAlignerWindow : Window {
} }
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
switch (widget) { switch (widget) {
case WID_SA_PREVIOUS: case WID_SA_PREVIOUS:

@ -221,7 +221,7 @@ struct NewGRFParametersWindow : public Window {
return this->HasParameterInfo(nr) ? this->grf_config->param_info[nr].value() : GetDummyParameterInfo(nr); return this->HasParameterInfo(nr) ? this->grf_config->param_info[nr].value() : GetDummyParameterInfo(nr);
} }
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{ {
switch (widget) { switch (widget) {
case WID_NP_NUMPAR_DEC: case WID_NP_NUMPAR_DEC:
@ -264,7 +264,7 @@ struct NewGRFParametersWindow : public Window {
} }
} }
void SetStringParameters(int widget) const override void SetStringParameters(WidgetID widget) const override
{ {
switch (widget) { switch (widget) {
case WID_NP_NUMPAR: case WID_NP_NUMPAR:
@ -273,7 +273,7 @@ struct NewGRFParametersWindow : public Window {
} }
} }
void DrawWidget(const Rect &r, int widget) const override void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
if (widget == WID_NP_DESCRIPTION) { if (widget == WID_NP_DESCRIPTION) {
if (!this->HasParameterInfo(this->clicked_row)) return; if (!this->HasParameterInfo(this->clicked_row)) return;
@ -342,7 +342,7 @@ struct NewGRFParametersWindow : public Window {
this->DrawWidgets(); this->DrawWidgets();
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
switch (widget) { switch (widget) {
case WID_NP_NUMPAR_DEC: case WID_NP_NUMPAR_DEC:
@ -464,7 +464,7 @@ struct NewGRFParametersWindow : public Window {
this->SetDirty(); this->SetDirty();
} }
void OnDropdownSelect(int widget, int index) override void OnDropdownSelect(WidgetID widget, int index) override
{ {
if (widget != WID_NP_SETTING_DROPDOWN) return; if (widget != WID_NP_SETTING_DROPDOWN) return;
assert(this->clicked_dropdown); assert(this->clicked_dropdown);
@ -473,7 +473,7 @@ struct NewGRFParametersWindow : public Window {
this->SetDirty(); this->SetDirty();
} }
void OnDropdownClose(Point, int widget, int, bool) override void OnDropdownClose(Point, WidgetID widget, int, bool) override
{ {
if (widget != WID_NP_SETTING_DROPDOWN) return; if (widget != WID_NP_SETTING_DROPDOWN) return;
/* We cannot raise the dropdown button just yet. OnClick needs some hint, whether /* We cannot raise the dropdown button just yet. OnClick needs some hint, whether
@ -577,7 +577,7 @@ struct NewGRFTextfileWindow : public TextfileWindow {
this->LoadTextfile(textfile, NEWGRF_DIR); this->LoadTextfile(textfile, NEWGRF_DIR);
} }
void SetStringParameters(int widget) const override void SetStringParameters(WidgetID widget) const override
{ {
if (widget == WID_TF_CAPTION) { if (widget == WID_TF_CAPTION) {
SetDParam(0, STR_CONTENT_TYPE_NEWGRF); SetDParam(0, STR_CONTENT_TYPE_NEWGRF);
@ -756,7 +756,7 @@ struct NewGRFWindow : public Window, NewGRFScanCallback {
} }
} }
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{ {
switch (widget) { switch (widget) {
case WID_NS_FILE_LIST: case WID_NS_FILE_LIST:
@ -814,7 +814,7 @@ struct NewGRFWindow : public Window, NewGRFScanCallback {
this->vscroll2->SetCapacityFromWidget(this, WID_NS_AVAIL_LIST); this->vscroll2->SetCapacityFromWidget(this, WID_NS_AVAIL_LIST);
} }
void SetStringParameters(int widget) const override void SetStringParameters(WidgetID widget) const override
{ {
switch (widget) { switch (widget) {
case WID_NS_PRESET_LIST: case WID_NS_PRESET_LIST:
@ -863,7 +863,7 @@ struct NewGRFWindow : public Window, NewGRFScanCallback {
return pal; return pal;
} }
void DrawWidget(const Rect &r, int widget) const override void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
switch (widget) { switch (widget) {
case WID_NS_FILE_LIST: { case WID_NS_FILE_LIST: {
@ -955,7 +955,7 @@ struct NewGRFWindow : public Window, NewGRFScanCallback {
} }
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
if (widget >= WID_NS_NEWGRF_TEXTFILE && widget < WID_NS_NEWGRF_TEXTFILE + TFT_CONTENT_END) { if (widget >= WID_NS_NEWGRF_TEXTFILE && widget < WID_NS_NEWGRF_TEXTFILE + TFT_CONTENT_END) {
if (this->active_sel == nullptr && this->avail_sel == nullptr) return; if (this->active_sel == nullptr && this->avail_sel == nullptr) return;
@ -1197,7 +1197,7 @@ struct NewGRFWindow : public Window, NewGRFScanCallback {
this->CloseChildWindows(WC_QUERY_STRING); // Remove the parameter query window this->CloseChildWindows(WC_QUERY_STRING); // Remove the parameter query window
} }
void OnDropdownSelect(int widget, int index) override void OnDropdownSelect(WidgetID widget, int index) override
{ {
if (widget != WID_NS_PRESET_LIST) return; if (widget != WID_NS_PRESET_LIST) return;
if (!this->editable) return; if (!this->editable) return;
@ -1383,7 +1383,7 @@ struct NewGRFWindow : public Window, NewGRFScanCallback {
return ES_HANDLED; return ES_HANDLED;
} }
void OnEditboxChanged(int widget) override void OnEditboxChanged(WidgetID widget) override
{ {
if (!this->editable) return; if (!this->editable) return;
@ -1395,7 +1395,7 @@ struct NewGRFWindow : public Window, NewGRFScanCallback {
} }
} }
void OnDragDrop(Point pt, int widget) override void OnDragDrop(Point pt, WidgetID widget) override
{ {
if (!this->editable) return; if (!this->editable) return;
@ -1443,7 +1443,7 @@ struct NewGRFWindow : public Window, NewGRFScanCallback {
} }
} }
void OnMouseDrag(Point pt, int widget) override void OnMouseDrag(Point pt, WidgetID widget) override
{ {
if (!this->editable) return; if (!this->editable) return;
@ -1622,27 +1622,22 @@ NewGRFWindow::GUIGRFConfigList::FilterFunction * const NewGRFWindow::filter_func
* - two column mode, put the #acs and the #avs underneath each other and the #inf next to it, or * - two column mode, put the #acs and the #avs underneath each other and the #inf next to it, or
* - three column mode, put the #avs, #acs, and #inf each in its own column. * - three column mode, put the #avs, #acs, and #inf each in its own column.
*/ */
class NWidgetNewGRFDisplay : public NWidgetContainer { class NWidgetNewGRFDisplay : public NWidgetBase {
public: public:
static const uint MAX_EXTRA_INFO_WIDTH; ///< Maximal additional width given to the panel. static const uint MAX_EXTRA_INFO_WIDTH; ///< Maximal additional width given to the panel.
static const uint MIN_EXTRA_FOR_3_COLUMNS; ///< Minimal additional width needed before switching to 3 columns. static const uint MIN_EXTRA_FOR_3_COLUMNS; ///< Minimal additional width needed before switching to 3 columns.
NWidgetBase *avs; ///< Widget with the available grfs list and buttons. std::unique_ptr<NWidgetBase> avs; ///< Widget with the available grfs list and buttons.
NWidgetBase *acs; ///< Widget with the active grfs list and buttons. std::unique_ptr<NWidgetBase> acs; ///< Widget with the active grfs list and buttons.
NWidgetBase *inf; ///< Info panel. std::unique_ptr<NWidgetBase> inf; ///< Info panel.
bool editable; ///< Editable status of the parent NewGRF window (if \c false, drop all widgets that make the window editable). bool editable; ///< Editable status of the parent NewGRF window (if \c false, drop all widgets that make the window editable).
NWidgetNewGRFDisplay(NWidgetBase *avs, NWidgetBase *acs, NWidgetBase *inf) : NWidgetContainer(NWID_HORIZONTAL) NWidgetNewGRFDisplay(std::unique_ptr<NWidgetBase> &&avs, std::unique_ptr<NWidgetBase> &&acs, std::unique_ptr<NWidgetBase> &&inf) : NWidgetBase(NWID_CUSTOM)
, avs(std::move(avs))
, acs(std::move(acs))
, inf(std::move(inf))
, editable(true) // Temporary setting, 'real' value is set in SetupSmallestSize().
{ {
this->avs = avs;
this->acs = acs;
this->inf = inf;
this->Add(this->avs);
this->Add(this->acs);
this->Add(this->inf);
this->editable = true; // Temporary setting, 'real' value is set in SetupSmallestSize().
} }
void SetupSmallestSize(Window *w) override void SetupSmallestSize(Window *w) override
@ -1807,6 +1802,13 @@ public:
} }
} }
void FillWidgetLookup(WidgetLookup &widget_lookup) override
{
this->avs->FillWidgetLookup(widget_lookup);
this->acs->FillWidgetLookup(widget_lookup);
this->inf->FillWidgetLookup(widget_lookup);
}
NWidgetCore *GetWidgetFromPos(int x, int y) override NWidgetCore *GetWidgetFromPos(int x, int y) override
{ {
if (!IsInsideBS(x, this->pos_x, this->current_x) || !IsInsideBS(y, this->pos_y, this->current_y)) return nullptr; if (!IsInsideBS(x, this->pos_x, this->current_x) || !IsInsideBS(y, this->pos_y, this->current_y)) return nullptr;
@ -1970,18 +1972,13 @@ static const NWidgetPart _nested_newgrf_infopanel_widgets[] = {
}; };
/** Construct nested container widget for managing the lists and the info panel of the NewGRF GUI. */ /** Construct nested container widget for managing the lists and the info panel of the NewGRF GUI. */
NWidgetBase* NewGRFDisplay(int *biggest_index) std::unique_ptr<NWidgetBase> NewGRFDisplay()
{ {
NWidgetBase *avs = MakeNWidgets(std::begin(_nested_newgrf_availables_widgets), std::end(_nested_newgrf_availables_widgets), biggest_index, nullptr); std::unique_ptr<NWidgetBase> avs = MakeNWidgets(std::begin(_nested_newgrf_availables_widgets), std::end(_nested_newgrf_availables_widgets), nullptr);
std::unique_ptr<NWidgetBase> acs = MakeNWidgets(std::begin(_nested_newgrf_actives_widgets), std::end(_nested_newgrf_actives_widgets), nullptr);
int biggest2; std::unique_ptr<NWidgetBase> inf = MakeNWidgets(std::begin(_nested_newgrf_infopanel_widgets), std::end(_nested_newgrf_infopanel_widgets), nullptr);
NWidgetBase *acs = MakeNWidgets(std::begin(_nested_newgrf_actives_widgets), std::end(_nested_newgrf_actives_widgets), &biggest2, nullptr);
*biggest_index = std::max(*biggest_index, biggest2);
NWidgetBase *inf = MakeNWidgets(std::begin(_nested_newgrf_infopanel_widgets), std::end(_nested_newgrf_infopanel_widgets), &biggest2, nullptr);
*biggest_index = std::max(*biggest_index, biggest2);
return new NWidgetNewGRFDisplay(avs, acs, inf); return std::make_unique<NWidgetNewGRFDisplay>(std::move(avs), std::move(acs), std::move(inf));
} }
/* Widget definition of the manage newgrfs window */ /* Widget definition of the manage newgrfs window */
@ -2137,7 +2134,7 @@ struct SavePresetWindow : public Window {
if (initial_text != nullptr) this->presetname_editbox.text.Assign(initial_text); if (initial_text != nullptr) this->presetname_editbox.text.Assign(initial_text);
} }
void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override
{ {
switch (widget) { switch (widget) {
case WID_SVP_PRESET_LIST: { case WID_SVP_PRESET_LIST: {
@ -2154,7 +2151,7 @@ struct SavePresetWindow : public Window {
} }
} }
void DrawWidget(const Rect &r, int widget) const override void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
switch (widget) { switch (widget) {
case WID_SVP_PRESET_LIST: { case WID_SVP_PRESET_LIST: {
@ -2178,7 +2175,7 @@ struct SavePresetWindow : public Window {
} }
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
switch (widget) { switch (widget) {
case WID_SVP_PRESET_LIST: { case WID_SVP_PRESET_LIST: {
@ -2252,7 +2249,7 @@ struct ScanProgressWindow : public Window {
this->InitNested(1); this->InitNested(1);
} }
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{ {
switch (widget) { switch (widget) {
case WID_SP_PROGRESS_BAR: { case WID_SP_PROGRESS_BAR: {
@ -2275,7 +2272,7 @@ struct ScanProgressWindow : public Window {
} }
} }
void DrawWidget(const Rect &r, int widget) const override void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
switch (widget) { switch (widget) {
case WID_SP_PROGRESS_BAR: { case WID_SP_PROGRESS_BAR: {

@ -344,7 +344,7 @@ struct NewsWindow : Window {
return pt; return pt;
} }
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{ {
StringID str = STR_NULL; StringID str = STR_NULL;
switch (widget) { switch (widget) {
@ -418,12 +418,12 @@ struct NewsWindow : Window {
*size = maxdim(*size, d); *size = maxdim(*size, d);
} }
void SetStringParameters(int widget) const override void SetStringParameters(WidgetID widget) const override
{ {
if (widget == WID_N_DATE) SetDParam(0, this->ni->date); if (widget == WID_N_DATE) SetDParam(0, this->ni->date);
} }
void DrawWidget(const Rect &r, int widget) const override void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
switch (widget) { switch (widget) {
case WID_N_CAPTION: case WID_N_CAPTION:
@ -480,7 +480,7 @@ struct NewsWindow : Window {
} }
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
switch (widget) { switch (widget) {
case WID_N_CLOSEBOX: case WID_N_CLOSEBOX:
@ -592,7 +592,7 @@ private:
return this->ni->params[1].data; return this->ni->params[1].data;
} }
StringID GetNewVehicleMessageString(int widget) const StringID GetNewVehicleMessageString(WidgetID widget) const
{ {
assert(this->ni->reftype1 == NR_ENGINE); assert(this->ni->reftype1 == NR_ENGINE);
EngineID engine = this->ni->ref1; EngineID engine = this->ni->ref1;
@ -1135,7 +1135,7 @@ struct MessageHistoryWindow : Window {
this->OnInvalidateData(0); this->OnInvalidateData(0);
} }
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{ {
if (widget == WID_MH_BACKGROUND) { if (widget == WID_MH_BACKGROUND) {
this->line_height = GetCharacterHeight(FS_NORMAL) + WidgetDimensions::scaled.vsep_normal; this->line_height = GetCharacterHeight(FS_NORMAL) + WidgetDimensions::scaled.vsep_normal;
@ -1157,7 +1157,7 @@ struct MessageHistoryWindow : Window {
this->DrawWidgets(); this->DrawWidgets();
} }
void DrawWidget(const Rect &r, int widget) const override void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
if (widget != WID_MH_BACKGROUND || _total_news == 0) return; if (widget != WID_MH_BACKGROUND || _total_news == 0) return;
@ -1196,7 +1196,7 @@ struct MessageHistoryWindow : Window {
this->vscroll->SetCount(_total_news); this->vscroll->SetCount(_total_news);
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
if (widget == WID_MH_BACKGROUND) { if (widget == WID_MH_BACKGROUND) {
NewsItem *ni = _latest_news; NewsItem *ni = _latest_news;

@ -182,7 +182,7 @@ public:
assert(ObjectClass::Get(_selected_object_class)->GetUISpecCount() > 0); // object GUI should be disabled elsewise assert(ObjectClass::Get(_selected_object_class)->GetUISpecCount() > 0); // object GUI should be disabled elsewise
} }
void SetStringParameters(int widget) const override void SetStringParameters(WidgetID widget) const override
{ {
switch (widget) { switch (widget) {
case WID_BO_OBJECT_NAME: { case WID_BO_OBJECT_NAME: {
@ -210,7 +210,7 @@ public:
this->object_margin = ScaleGUITrad(4); this->object_margin = ScaleGUITrad(4);
} }
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{ {
switch (widget) { switch (widget) {
case WID_BO_CLASS_LIST: { case WID_BO_CLASS_LIST: {
@ -302,9 +302,9 @@ public:
} }
} }
void DrawWidget(const Rect &r, int widget) const override void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
switch (GB(widget, 0, 16)) { switch (widget) {
case WID_BO_CLASS_LIST: { case WID_BO_CLASS_LIST: {
Rect mr = r.Shrink(WidgetDimensions::scaled.matrix); Rect mr = r.Shrink(WidgetDimensions::scaled.matrix);
uint pos = 0; uint pos = 0;
@ -331,7 +331,8 @@ public:
* look nice in all layouts, we use the 4x4 layout (smallest previews) as starting point. For the bigger * look nice in all layouts, we use the 4x4 layout (smallest previews) as starting point. For the bigger
* previews in the layouts with less views we add space homogeneously on all sides, so the 4x4 preview-rectangle * previews in the layouts with less views we add space homogeneously on all sides, so the 4x4 preview-rectangle
* is centered in the 2x1, 1x2 resp. 1x1 buttons. */ * is centered in the 2x1, 1x2 resp. 1x1 buttons. */
uint matrix_height = this->GetWidget<NWidgetMatrix>(WID_BO_OBJECT_MATRIX)->current_y; const NWidgetMatrix *matrix = this->GetWidget<NWidgetBase>(widget)->GetParentWidget<NWidgetMatrix>();
uint matrix_height = matrix->current_y;
DrawPixelInfo tmp_dpi; DrawPixelInfo tmp_dpi;
/* Set up a clipping area for the preview. */ /* Set up a clipping area for the preview. */
@ -343,7 +344,7 @@ public:
const DrawTileSprites *dts = &_objects[spec->grf_prop.local_id]; const DrawTileSprites *dts = &_objects[spec->grf_prop.local_id];
DrawOrigTileSeqInGUI(ir.Width() / 2 - 1, (ir.Height() + matrix_height / 2) / 2 - this->object_margin - ScaleSpriteTrad(TILE_PIXELS), dts, PAL_NONE); DrawOrigTileSeqInGUI(ir.Width() / 2 - 1, (ir.Height() + matrix_height / 2) / 2 - this->object_margin - ScaleSpriteTrad(TILE_PIXELS), dts, PAL_NONE);
} else { } else {
DrawNewObjectTileInGUI(ir.Width() / 2 - 1, (ir.Height() + matrix_height / 2) / 2 - this->object_margin - ScaleSpriteTrad(TILE_PIXELS), spec, GB(widget, 16, 16)); DrawNewObjectTileInGUI(ir.Width() / 2 - 1, (ir.Height() + matrix_height / 2) / 2 - this->object_margin - ScaleSpriteTrad(TILE_PIXELS), spec, matrix->GetCurrentElement());
} }
} }
break; break;
@ -351,7 +352,7 @@ public:
case WID_BO_SELECT_IMAGE: { case WID_BO_SELECT_IMAGE: {
ObjectClass *objclass = ObjectClass::Get(_selected_object_class); ObjectClass *objclass = ObjectClass::Get(_selected_object_class);
int obj_index = objclass->GetIndexFromUI(GB(widget, 16, 16)); int obj_index = objclass->GetIndexFromUI(this->GetWidget<NWidgetBase>(widget)->GetParentWidget<NWidgetMatrix>()->GetCurrentElement());
if (obj_index < 0) break; if (obj_index < 0) break;
const ObjectSpec *spec = objclass->GetSpec(obj_index); const ObjectSpec *spec = objclass->GetSpec(obj_index);
if (spec == nullptr) break; if (spec == nullptr) break;
@ -531,9 +532,9 @@ public:
this->vscroll->SetCapacityFromWidget(this, WID_BO_CLASS_LIST); this->vscroll->SetCapacityFromWidget(this, WID_BO_CLASS_LIST);
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
switch (GB(widget, 0, 16)) { switch (widget) {
case WID_BO_CLASS_LIST: { case WID_BO_CLASS_LIST: {
auto it = this->vscroll->GetScrolledItemFromWidget(this->object_classes, pt.y, this, widget); auto it = this->vscroll->GetScrolledItemFromWidget(this->object_classes, pt.y, this, widget);
if (it == this->object_classes.end()) break; if (it == this->object_classes.end()) break;
@ -545,14 +546,14 @@ public:
case WID_BO_SELECT_IMAGE: { case WID_BO_SELECT_IMAGE: {
ObjectClass *objclass = ObjectClass::Get(_selected_object_class); ObjectClass *objclass = ObjectClass::Get(_selected_object_class);
int num_clicked = objclass->GetIndexFromUI(GB(widget, 16, 16)); int num_clicked = objclass->GetIndexFromUI(this->GetWidget<NWidgetBase>(widget)->GetParentWidget<NWidgetMatrix>()->GetCurrentElement());
if (num_clicked >= 0 && objclass->GetSpec(num_clicked)->IsAvailable()) this->SelectOtherObject(num_clicked); if (num_clicked >= 0 && objclass->GetSpec(num_clicked)->IsAvailable()) this->SelectOtherObject(num_clicked);
break; break;
} }
case WID_BO_OBJECT_SPRITE: case WID_BO_OBJECT_SPRITE:
if (_selected_object_index != -1) { if (_selected_object_index != -1) {
_selected_object_view = GB(widget, 16, 16); _selected_object_view = this->GetWidget<NWidgetBase>(widget)->GetParentWidget<NWidgetMatrix>()->GetCurrentElement();
this->SelectOtherObject(_selected_object_index); // Re-select the object for a different view. this->SelectOtherObject(_selected_object_index); // Re-select the object for a different view.
} }
break; break;
@ -616,7 +617,7 @@ public:
return ES_HANDLED; return ES_HANDLED;
} }
void OnEditboxChanged(int widget) override void OnEditboxChanged(WidgetID widget) override
{ {
if (widget == WID_BO_FILTER) { if (widget == WID_BO_FILTER) {
string_filter.SetFilterTerm(this->filter_editbox.text.buf); string_filter.SetFilterTerm(this->filter_editbox.text.buf);

@ -187,7 +187,7 @@ public:
this->Window::Close(); this->Window::Close();
} }
virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override virtual void UpdateWidgetSize(WidgetID widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override
{ {
if (widget == WID_CTO_HEADER) { if (widget == WID_CTO_HEADER) {
(*size).height = std::max((*size).height, (uint) GetCharacterHeight(FS_NORMAL) + WidgetDimensions::scaled.framerect.Vertical()); (*size).height = std::max((*size).height, (uint) GetCharacterHeight(FS_NORMAL) + WidgetDimensions::scaled.framerect.Vertical());
@ -203,7 +203,7 @@ public:
} }
} }
virtual void DrawWidget(const Rect &r, int widget) const override virtual void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
if (WID_CTO_CARGO_LABEL_FIRST <= widget && widget <= WID_CTO_CARGO_LABEL_LAST) { if (WID_CTO_CARGO_LABEL_FIRST <= widget && widget <= WID_CTO_CARGO_LABEL_LAST) {
Rect ir = r.Shrink(WidgetDimensions::scaled.framerect); Rect ir = r.Shrink(WidgetDimensions::scaled.framerect);
@ -227,7 +227,7 @@ public:
} }
} }
virtual void OnClick(Point pt, int widget, int click_count) override virtual void OnClick(Point pt, WidgetID widget, int click_count) override
{ {
if (!this->CheckOrderStillValid()) { if (!this->CheckOrderStillValid()) {
this->Close(); this->Close();
@ -245,7 +245,7 @@ public:
} }
} }
virtual void OnDropdownSelect(int widget, int action_type) override virtual void OnDropdownSelect(WidgetID widget, int action_type) override
{ {
if (!this->CheckOrderStillValid()) { if (!this->CheckOrderStillValid()) {
this->Close(); this->Close();
@ -283,7 +283,7 @@ public:
} }
} }
virtual void SetStringParameters(int widget) const override virtual void SetStringParameters(WidgetID widget) const override
{ {
if (!this->CheckOrderStillValid()) { if (!this->CheckOrderStillValid()) {
return; return;
@ -330,14 +330,12 @@ public:
/** /**
* Make a list of panel for each available cargo type. * Make a list of panel for each available cargo type.
* Each panel contains a label to display the cargo name. * Each panel contains a label to display the cargo name.
* @param biggest_index Storage for collecting the biggest index used in the returned tree
* @return A vertical container of cargo type orders rows. * @return A vertical container of cargo type orders rows.
* @post \c *biggest_index contains the largest used index in the tree. * @post \c *biggest_index contains the largest used index in the tree.
*/ */
static NWidgetBase *MakeCargoTypeOrdersRows(int *biggest_index, bool right) static std::unique_ptr<NWidgetBase> MakeCargoTypeOrdersRows(bool right)
{ {
std::unique_ptr<NWidgetVertical> ver = std::make_unique<NWidgetVertical>();
NWidgetVertical *ver = new NWidgetVertical;
const bool dual_column = (_sorted_standard_cargo_specs.size() >= 32); const bool dual_column = (_sorted_standard_cargo_specs.size() >= 32);
if (right && !dual_column) return ver; if (right && !dual_column) return ver;
@ -346,34 +344,36 @@ static NWidgetBase *MakeCargoTypeOrdersRows(int *biggest_index, bool right)
for (int i = (right ? 1 : 0); i < (int)_sorted_standard_cargo_specs.size(); i += increment) { for (int i = (right ? 1 : 0); i < (int)_sorted_standard_cargo_specs.size(); i += increment) {
/* Cargo row */ /* Cargo row */
NWidgetBackground *panel = new NWidgetBackground(WWT_PANEL, COLOUR_GREY, WID_CTO_CARGO_ROW_FIRST + i); std::unique_ptr<NWidgetBackground> panel = std::make_unique<NWidgetBackground>(WWT_PANEL, COLOUR_GREY, WID_CTO_CARGO_ROW_FIRST + i);
ver->Add(panel); std::unique_ptr<NWidgetHorizontal> horiz = std::make_unique<NWidgetHorizontal>();
NWidgetHorizontal *horiz = new NWidgetHorizontal;
panel->Add(horiz);
/* Cargo label */ /* Cargo label */
NWidgetBackground *label = new NWidgetBackground(WWT_PANEL, COLOUR_GREY, WID_CTO_CARGO_LABEL_FIRST + i); std::unique_ptr<NWidgetBackground> label = std::make_unique<NWidgetBackground>(WWT_PANEL, COLOUR_GREY, WID_CTO_CARGO_LABEL_FIRST + i);
label->SetFill(1, 0); label->SetFill(1, 0);
label->SetResize(1, 0); label->SetResize(1, 0);
horiz->Add(label); horiz->Add(std::move(label));
/* Orders dropdown */ /* Orders dropdown */
NWidgetLeaf *dropdown = new NWidgetLeaf(WWT_DROPDOWN, COLOUR_GREY, WID_CTO_CARGO_DROPDOWN_FIRST + i, STR_NULL, STR_EMPTY); std::unique_ptr<NWidgetLeaf> dropdown = std::make_unique<NWidgetLeaf>(WWT_DROPDOWN, COLOUR_GREY, WID_CTO_CARGO_DROPDOWN_FIRST + i, STR_NULL, STR_EMPTY);
dropdown->SetFill(1, 0); dropdown->SetFill(1, 0);
dropdown->SetResize(1, 0); dropdown->SetResize(1, 0);
horiz->Add(dropdown); horiz->Add(std::move(dropdown));
panel->Add(std::move(horiz));
ver->Add(std::move(panel));
} }
*biggest_index = WID_CTO_CARGO_DROPDOWN_LAST;
return ver; return ver;
} }
static NWidgetBase *MakeCargoTypeOrdersRowsLeft(int *biggest_index) static std::unique_ptr<NWidgetBase> MakeCargoTypeOrdersRowsLeft()
{ {
return MakeCargoTypeOrdersRows(biggest_index, false); return MakeCargoTypeOrdersRows(false);
} }
static NWidgetBase *MakeCargoTypeOrdersRowsRight(int *biggest_index) static std::unique_ptr<NWidgetBase> MakeCargoTypeOrdersRowsRight()
{ {
return MakeCargoTypeOrdersRows(biggest_index, true); return MakeCargoTypeOrdersRows(true);
} }
/** Widgets definition of CargoTypeOrdersWindow. */ /** Widgets definition of CargoTypeOrdersWindow. */
@ -1907,7 +1907,7 @@ public:
this->GeneralVehicleWindow::Close(); this->GeneralVehicleWindow::Close();
} }
void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override
{ {
switch (widget) { switch (widget) {
case WID_O_OCCUPANCY_LIST: case WID_O_OCCUPANCY_LIST:
@ -2382,7 +2382,7 @@ public:
this->DrawWidgets(); this->DrawWidgets();
} }
void DrawWidget(const Rect &r, int widget) const override void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
switch (widget) { switch (widget) {
case WID_O_ORDER_LIST: case WID_O_ORDER_LIST:
@ -2517,7 +2517,7 @@ public:
DrawString(left, right, r.top + offset + clicked, STR_ORDERS_TIMETABLE_VIEW, TC_FROMSTRING, SA_HOR_CENTER); DrawString(left, right, r.top + offset + clicked, STR_ORDERS_TIMETABLE_VIEW, TC_FROMSTRING, SA_HOR_CENTER);
} }
void SetStringParameters(int widget) const override void SetStringParameters(WidgetID widget) const override
{ {
switch (widget) { switch (widget) {
case WID_O_COND_VALUE: { case WID_O_COND_VALUE: {
@ -2682,7 +2682,7 @@ public:
} }
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
switch (widget) { switch (widget) {
case WID_O_ORDER_LIST: { case WID_O_ORDER_LIST: {
@ -3214,7 +3214,7 @@ public:
} }
} }
void OnDropdownSelect(int widget, int index) override void OnDropdownSelect(WidgetID widget, int index) override
{ {
switch (widget) { switch (widget) {
case WID_O_NON_STOP: case WID_O_NON_STOP:
@ -3351,7 +3351,7 @@ public:
} }
} }
void OnDragDrop(Point pt, int widget) override void OnDragDrop(Point pt, WidgetID widget) override
{ {
switch (widget) { switch (widget) {
case WID_O_ORDER_LIST: { case WID_O_ORDER_LIST: {
@ -3525,7 +3525,7 @@ public:
} }
} }
void OnMouseDrag(Point pt, int widget) override void OnMouseDrag(Point pt, WidgetID widget) override
{ {
if (this->selected_order != -1 && widget == WID_O_ORDER_LIST) { if (this->selected_order != -1 && widget == WID_O_ORDER_LIST) {
/* An order is dragged.. */ /* An order is dragged.. */
@ -3565,7 +3565,7 @@ public:
} }
} }
bool OnTooltip(Point pt, int widget, TooltipCloseCondition close_cond) override bool OnTooltip(Point pt, WidgetID widget, TooltipCloseCondition close_cond) override
{ {
switch (widget) { switch (widget) {
case WID_O_SHARED_ORDER_LIST: { case WID_O_SHARED_ORDER_LIST: {

@ -37,7 +37,7 @@ static byte _keystate = KEYS_NONE;
struct OskWindow : public Window { struct OskWindow : public Window {
StringID caption; ///< the caption for this window. StringID caption; ///< the caption for this window.
QueryString *qs; ///< text-input QueryString *qs; ///< text-input
int text_btn; ///< widget number of parent's text field WidgetID text_btn; ///< widget number of parent's text field
Textbuf *text; ///< pointer to parent's textbuffer (to update caret position) Textbuf *text; ///< pointer to parent's textbuffer (to update caret position)
std::string orig_str; ///< Original string. std::string orig_str; ///< Original string.
bool shift; ///< Is the shift effectively pressed? bool shift; ///< Is the shift effectively pressed?
@ -88,12 +88,12 @@ struct OskWindow : public Window {
this->SetWidgetLoweredState(WID_OSK_CAPS, HasBit(_keystate, KEYS_CAPS)); this->SetWidgetLoweredState(WID_OSK_CAPS, HasBit(_keystate, KEYS_CAPS));
} }
void SetStringParameters(int widget) const override void SetStringParameters(WidgetID widget) const override
{ {
if (widget == WID_OSK_CAPTION) SetDParam(0, this->caption); if (widget == WID_OSK_CAPTION) SetDParam(0, this->caption);
} }
void DrawWidget(const Rect &r, int widget) const override void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
if (widget < WID_OSK_LETTERS) return; if (widget < WID_OSK_LETTERS) return;
@ -101,7 +101,7 @@ struct OskWindow : public Window {
DrawCharCentered(_keyboard[this->shift][widget], r, TC_BLACK); DrawCharCentered(_keyboard[this->shift][widget], r, TC_BLACK);
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
/* clicked a letter */ /* clicked a letter */
if (widget >= WID_OSK_LETTERS) { if (widget >= WID_OSK_LETTERS) {
@ -183,7 +183,7 @@ struct OskWindow : public Window {
} }
} }
void OnEditboxChanged(int widget) override void OnEditboxChanged(WidgetID widget) override
{ {
if (widget == WID_OSK_TEXT) { if (widget == WID_OSK_TEXT) {
this->SetWidgetDirty(WID_OSK_TEXT); this->SetWidgetDirty(WID_OSK_TEXT);
@ -220,103 +220,100 @@ static const int KEY_PADDING = 6; // Vertical padding for remaining key rows
* @param widtype Widget type of the key. Must be either \c NWID_SPACER for an invisible key, or a \c WWT_* widget. * @param widtype Widget type of the key. Must be either \c NWID_SPACER for an invisible key, or a \c WWT_* widget.
* @param widnum Widget number of the key. * @param widnum Widget number of the key.
* @param widdata Data value of the key widget. * @param widdata Data value of the key widget.
* @param biggest_index Collected biggest widget index so far.
* @note Key width is measured in 1/2 keys to allow for 1/2 key shifting between rows. * @note Key width is measured in 1/2 keys to allow for 1/2 key shifting between rows.
*/ */
static void AddKey(NWidgetHorizontal *hor, int pad_y, int num_half, WidgetType widtype, int widnum, uint16 widdata, int *biggest_index) static void AddKey(std::unique_ptr<NWidgetHorizontal> &hor, int pad_y, int num_half, WidgetType widtype, WidgetID widnum, uint16_t widdata)
{ {
int key_width = HALF_KEY_WIDTH + (INTER_KEY_SPACE + HALF_KEY_WIDTH) * (num_half - 1); int key_width = HALF_KEY_WIDTH + (INTER_KEY_SPACE + HALF_KEY_WIDTH) * (num_half - 1);
if (widtype == NWID_SPACER) { if (widtype == NWID_SPACER) {
if (!hor->IsEmpty()) key_width += INTER_KEY_SPACE; if (!hor->IsEmpty()) key_width += INTER_KEY_SPACE;
NWidgetSpacer *spc = new NWidgetSpacer(key_width, 0); auto spc = std::make_unique<NWidgetSpacer>(key_width, 0);
spc->SetMinimalTextLines(1, pad_y, FS_NORMAL); spc->SetMinimalTextLines(1, pad_y, FS_NORMAL);
hor->Add(spc); hor->Add(std::move(spc));
} else { } else {
if (!hor->IsEmpty()) { if (!hor->IsEmpty()) {
NWidgetSpacer *spc = new NWidgetSpacer(INTER_KEY_SPACE, 0); auto spc = std::make_unique<NWidgetSpacer>(INTER_KEY_SPACE, 0);
spc->SetMinimalTextLines(1, pad_y, FS_NORMAL); spc->SetMinimalTextLines(1, pad_y, FS_NORMAL);
hor->Add(spc); hor->Add(std::move(spc));
} }
NWidgetLeaf *leaf = new NWidgetLeaf(widtype, COLOUR_GREY, widnum, widdata, STR_NULL); auto leaf = std::make_unique<NWidgetLeaf>(widtype, COLOUR_GREY, widnum, widdata, STR_NULL);
leaf->SetMinimalSize(key_width, 0); leaf->SetMinimalSize(key_width, 0);
leaf->SetMinimalTextLines(1, pad_y, FS_NORMAL); leaf->SetMinimalTextLines(1, pad_y, FS_NORMAL);
hor->Add(leaf); hor->Add(std::move(leaf));
} }
*biggest_index = std::max(*biggest_index, widnum);
} }
/** Construct the top row keys (cancel, ok, backspace). */ /** Construct the top row keys (cancel, ok, backspace). */
static NWidgetBase *MakeTopKeys(int *biggest_index) static std::unique_ptr<NWidgetBase> MakeTopKeys()
{ {
NWidgetHorizontal *hor = new NWidgetHorizontal(); auto hor = std::make_unique<NWidgetHorizontal>();
AddKey(hor, TOP_KEY_PADDING, 6 * 2, WWT_TEXTBTN, WID_OSK_CANCEL, STR_BUTTON_CANCEL, biggest_index); AddKey(hor, TOP_KEY_PADDING, 6 * 2, WWT_TEXTBTN, WID_OSK_CANCEL, STR_BUTTON_CANCEL);
AddKey(hor, TOP_KEY_PADDING, 6 * 2, WWT_TEXTBTN, WID_OSK_OK, STR_BUTTON_OK, biggest_index); AddKey(hor, TOP_KEY_PADDING, 6 * 2, WWT_TEXTBTN, WID_OSK_OK, STR_BUTTON_OK );
AddKey(hor, TOP_KEY_PADDING, 2 * 2, WWT_PUSHIMGBTN, WID_OSK_BACKSPACE, SPR_OSK_BACKSPACE, biggest_index); AddKey(hor, TOP_KEY_PADDING, 2 * 2, WWT_PUSHIMGBTN, WID_OSK_BACKSPACE, SPR_OSK_BACKSPACE);
return hor; return hor;
} }
/** Construct the row containing the digit keys. */ /** Construct the row containing the digit keys. */
static NWidgetBase *MakeNumberKeys(int *biggest_index) static std::unique_ptr<NWidgetBase> MakeNumberKeys()
{ {
NWidgetHorizontal *hor = new NWidgetHorizontalLTR(); std::unique_ptr<NWidgetHorizontal> hor = std::make_unique<NWidgetHorizontalLTR>();
for (int widnum = WID_OSK_NUMBERS_FIRST; widnum <= WID_OSK_NUMBERS_LAST; widnum++) { for (WidgetID widnum = WID_OSK_NUMBERS_FIRST; widnum <= WID_OSK_NUMBERS_LAST; widnum++) {
AddKey(hor, KEY_PADDING, 2, WWT_PUSHBTN, widnum, 0x0, biggest_index); AddKey(hor, KEY_PADDING, 2, WWT_PUSHBTN, widnum, 0x0);
} }
return hor; return hor;
} }
/** Construct the qwerty row keys. */ /** Construct the qwerty row keys. */
static NWidgetBase *MakeQwertyKeys(int *biggest_index) static std::unique_ptr<NWidgetBase> MakeQwertyKeys()
{ {
NWidgetHorizontal *hor = new NWidgetHorizontalLTR(); std::unique_ptr<NWidgetHorizontal> hor = std::make_unique<NWidgetHorizontalLTR>();
AddKey(hor, KEY_PADDING, 3, WWT_PUSHIMGBTN, WID_OSK_SPECIAL, SPR_OSK_SPECIAL, biggest_index); AddKey(hor, KEY_PADDING, 3, WWT_PUSHIMGBTN, WID_OSK_SPECIAL, SPR_OSK_SPECIAL);
for (int widnum = WID_OSK_QWERTY_FIRST; widnum <= WID_OSK_QWERTY_LAST; widnum++) { for (WidgetID widnum = WID_OSK_QWERTY_FIRST; widnum <= WID_OSK_QWERTY_LAST; widnum++) {
AddKey(hor, KEY_PADDING, 2, WWT_PUSHBTN, widnum, 0x0, biggest_index); AddKey(hor, KEY_PADDING, 2, WWT_PUSHBTN, widnum, 0x0);
} }
AddKey(hor, KEY_PADDING, 1, NWID_SPACER, 0, 0, biggest_index); AddKey(hor, KEY_PADDING, 1, NWID_SPACER, 0, 0);
return hor; return hor;
} }
/** Construct the asdfg row keys. */ /** Construct the asdfg row keys. */
static NWidgetBase *MakeAsdfgKeys(int *biggest_index) static std::unique_ptr<NWidgetBase> MakeAsdfgKeys()
{ {
NWidgetHorizontal *hor = new NWidgetHorizontalLTR(); std::unique_ptr<NWidgetHorizontal> hor = std::make_unique<NWidgetHorizontalLTR>();
AddKey(hor, KEY_PADDING, 4, WWT_IMGBTN, WID_OSK_CAPS, SPR_OSK_CAPS, biggest_index); AddKey(hor, KEY_PADDING, 4, WWT_IMGBTN, WID_OSK_CAPS, SPR_OSK_CAPS);
for (int widnum = WID_OSK_ASDFG_FIRST; widnum <= WID_OSK_ASDFG_LAST; widnum++) { for (WidgetID widnum = WID_OSK_ASDFG_FIRST; widnum <= WID_OSK_ASDFG_LAST; widnum++) {
AddKey(hor, KEY_PADDING, 2, WWT_PUSHBTN, widnum, 0x0, biggest_index); AddKey(hor, KEY_PADDING, 2, WWT_PUSHBTN, widnum, 0x0);
} }
return hor; return hor;
} }
/** Construct the zxcvb row keys. */ /** Construct the zxcvb row keys. */
static NWidgetBase *MakeZxcvbKeys(int *biggest_index) static std::unique_ptr<NWidgetBase> MakeZxcvbKeys()
{ {
NWidgetHorizontal *hor = new NWidgetHorizontalLTR(); std::unique_ptr<NWidgetHorizontal> hor = std::make_unique<NWidgetHorizontalLTR>();
AddKey(hor, KEY_PADDING, 3, WWT_IMGBTN, WID_OSK_SHIFT, SPR_OSK_SHIFT, biggest_index); AddKey(hor, KEY_PADDING, 3, WWT_IMGBTN, WID_OSK_SHIFT, SPR_OSK_SHIFT);
for (int widnum = WID_OSK_ZXCVB_FIRST; widnum <= WID_OSK_ZXCVB_LAST; widnum++) { for (WidgetID widnum = WID_OSK_ZXCVB_FIRST; widnum <= WID_OSK_ZXCVB_LAST; widnum++) {
AddKey(hor, KEY_PADDING, 2, WWT_PUSHBTN, widnum, 0x0, biggest_index); AddKey(hor, KEY_PADDING, 2, WWT_PUSHBTN, widnum, 0x0);
} }
AddKey(hor, KEY_PADDING, 1, NWID_SPACER, 0, 0, biggest_index); AddKey(hor, KEY_PADDING, 1, NWID_SPACER, 0, 0);
return hor; return hor;
} }
/** Construct the spacebar row keys. */ /** Construct the spacebar row keys. */
static NWidgetBase *MakeSpacebarKeys(int *biggest_index) static std::unique_ptr<NWidgetBase> MakeSpacebarKeys()
{ {
NWidgetHorizontal *hor = new NWidgetHorizontal(); auto hor = std::make_unique<NWidgetHorizontal>();
AddKey(hor, KEY_PADDING, 8, NWID_SPACER, 0, 0, biggest_index); AddKey(hor, KEY_PADDING, 8, NWID_SPACER, 0, 0);
AddKey(hor, KEY_PADDING, 13, WWT_PUSHTXTBTN, WID_OSK_SPACE, STR_EMPTY, biggest_index); AddKey(hor, KEY_PADDING, 13, WWT_PUSHTXTBTN, WID_OSK_SPACE, STR_EMPTY);
AddKey(hor, KEY_PADDING, 3, NWID_SPACER, 0, 0, biggest_index); AddKey(hor, KEY_PADDING, 3, NWID_SPACER, 0, 0);
AddKey(hor, KEY_PADDING, 2, WWT_PUSHIMGBTN, WID_OSK_LEFT, SPR_OSK_LEFT, biggest_index); AddKey(hor, KEY_PADDING, 2, WWT_PUSHIMGBTN, WID_OSK_LEFT, SPR_OSK_LEFT);
AddKey(hor, KEY_PADDING, 2, WWT_PUSHIMGBTN, WID_OSK_RIGHT, SPR_OSK_RIGHT, biggest_index); AddKey(hor, KEY_PADDING, 2, WWT_PUSHIMGBTN, WID_OSK_RIGHT, SPR_OSK_RIGHT);
return hor; return hor;
} }
@ -393,7 +390,7 @@ void GetKeyboardLayout()
* @param parent pointer to the Window where this keyboard originated from * @param parent pointer to the Window where this keyboard originated from
* @param button widget number of parent's textbox * @param button widget number of parent's textbox
*/ */
void ShowOnScreenKeyboard(Window *parent, int button) void ShowOnScreenKeyboard(Window *parent, WidgetID button)
{ {
CloseWindowById(WC_OSK, 0); CloseWindowById(WC_OSK, 0);
@ -408,7 +405,7 @@ void ShowOnScreenKeyboard(Window *parent, int button)
* @param parent window that just updated its original text * @param parent window that just updated its original text
* @param button widget number of parent's textbox to update * @param button widget number of parent's textbox to update
*/ */
void UpdateOSKOriginalText(const Window *parent, int button) void UpdateOSKOriginalText(const Window *parent, WidgetID button)
{ {
OskWindow *osk = dynamic_cast<OskWindow *>(FindWindowById(WC_OSK, 0)); OskWindow *osk = dynamic_cast<OskWindow *>(FindWindowById(WC_OSK, 0));
if (osk == nullptr || osk->parent != parent || osk->text_btn != button) return; if (osk == nullptr || osk->parent != parent || osk->text_btn != button) return;
@ -424,7 +421,7 @@ void UpdateOSKOriginalText(const Window *parent, int button)
* @param button Editbox of \a w to check for * @param button Editbox of \a w to check for
* @return true if the OSK is opened for \a button. * @return true if the OSK is opened for \a button.
*/ */
bool IsOSKOpenedFor(const Window *w, int button) bool IsOSKOpenedFor(const Window *w, WidgetID button)
{ {
OskWindow *osk = dynamic_cast<OskWindow *>(FindWindowById(WC_OSK, 0)); OskWindow *osk = dynamic_cast<OskWindow *>(FindWindowById(WC_OSK, 0));
return osk != nullptr && osk->parent == w && osk->text_btn == button; return osk != nullptr && osk->parent == w && osk->text_btn == button;

@ -108,7 +108,7 @@ struct PlansWindow : Window {
this->Window::Close(); this->Window::Close();
} }
virtual void OnClick(Point pt, int widget, int click_count) override virtual void OnClick(Point pt, WidgetID widget, int click_count) override
{ {
switch (widget) { switch (widget) {
case WID_PLN_NEW: case WID_PLN_NEW:
@ -222,7 +222,7 @@ struct PlansWindow : Window {
} }
} }
virtual void OnDropdownSelect(int widget, int index) override virtual void OnDropdownSelect(WidgetID widget, int index) override
{ {
switch (widget) { switch (widget) {
case WID_PLN_COLOUR: case WID_PLN_COLOUR:
@ -262,7 +262,7 @@ struct PlansWindow : Window {
this->DrawWidgets(); this->DrawWidgets();
} }
virtual void DrawWidget(const Rect &r, int widget) const override virtual void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
switch (widget) { switch (widget) {
case WID_PLN_LIST: { case WID_PLN_LIST: {
@ -316,7 +316,7 @@ struct PlansWindow : Window {
} }
} }
void SetStringParameters(int widget) const override void SetStringParameters(WidgetID widget) const override
{ {
switch (widget) { switch (widget) {
case WID_PLN_COLOUR: case WID_PLN_COLOUR:
@ -330,7 +330,7 @@ struct PlansWindow : Window {
this->vscroll->SetCapacityFromWidget(this, WID_PLN_LIST, WidgetDimensions::scaled.framerect.Vertical()); this->vscroll->SetCapacityFromWidget(this, WID_PLN_LIST, WidgetDimensions::scaled.framerect.Vertical());
} }
virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override virtual void UpdateWidgetSize(WidgetID widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override
{ {
switch (widget) { switch (widget) {
case WID_PLN_LIST: case WID_PLN_LIST:

@ -267,7 +267,7 @@ public:
RebuildInstructionList(); RebuildInstructionList();
} }
virtual void OnClick(Point pt, int widget, int click_count) override virtual void OnClick(Point pt, WidgetID widget, int click_count) override
{ {
switch (widget) { switch (widget) {
case PROGRAM_WIDGET_INSTRUCTION_LIST: { case PROGRAM_WIDGET_INSTRUCTION_LIST: {
@ -537,7 +537,7 @@ public:
} }
} }
virtual void OnDropdownSelect(int widget, int index) override virtual void OnDropdownSelect(WidgetID widget, int index) override
{ {
SignalInstruction *ins = this->GetSelected(); SignalInstruction *ins = this->GetSelected();
if (!ins) return; if (!ins) return;
@ -603,7 +603,7 @@ public:
} }
} }
virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override virtual void UpdateWidgetSize(WidgetID widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override
{ {
switch (widget) { switch (widget) {
case PROGRAM_WIDGET_INSTRUCTION_LIST: case PROGRAM_WIDGET_INSTRUCTION_LIST:
@ -624,7 +624,7 @@ public:
this->DrawWidgets(); this->DrawWidgets();
} }
virtual void DrawWidget(const Rect &r, int widget) const override virtual void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
if (widget != PROGRAM_WIDGET_INSTRUCTION_LIST) return; if (widget != PROGRAM_WIDGET_INSTRUCTION_LIST) return;
@ -649,7 +649,7 @@ public:
} }
virtual void SetStringParameters(int widget) const override virtual void SetStringParameters(WidgetID widget) const override
{ {
switch (widget) { switch (widget) {
case PROGRAM_WIDGET_COND_VALUE: { case PROGRAM_WIDGET_COND_VALUE: {

@ -42,17 +42,17 @@ struct QueryString {
} }
public: public:
void DrawEditBox(const Window *w, int wid) const; void DrawEditBox(const Window *w, WidgetID wid) const;
void ClickEditBox(Window *w, Point pt, int wid, int click_count, bool focus_changed); void ClickEditBox(Window *w, Point pt, WidgetID wid, int click_count, bool focus_changed);
void HandleEditBox(Window *w, int wid); void HandleEditBox(Window *w, WidgetID wid);
Point GetCaretPosition(const Window *w, int wid) const; Point GetCaretPosition(const Window *w, WidgetID wid) const;
Rect GetBoundingRect(const Window *w, int wid, const char *from, const char *to) const; Rect GetBoundingRect(const Window *w, WidgetID wid, const char *from, const char *to) const;
ptrdiff_t GetCharAtPosition(const Window *w, int wid, const Point &pt) const; ptrdiff_t GetCharAtPosition(const Window *w, WidgetID wid, const Point &pt) const;
}; };
void ShowOnScreenKeyboard(Window *parent, int button); void ShowOnScreenKeyboard(Window *parent, WidgetID button);
void UpdateOSKOriginalText(const Window *parent, int button); void UpdateOSKOriginalText(const Window *parent, WidgetID button);
bool IsOSKOpenedFor(const Window *w, int button); bool IsOSKOpenedFor(const Window *w, WidgetID button);
#endif /* QUERYSTRING_GUI_H */ #endif /* QUERYSTRING_GUI_H */

@ -370,7 +370,7 @@ static bool RailToolbar_CtrlChanged(Window *w)
if (w->IsWidgetDisabled(WID_RAT_REMOVE)) return false; if (w->IsWidgetDisabled(WID_RAT_REMOVE)) return false;
/* allow ctrl to switch remove mode only for these widgets */ /* allow ctrl to switch remove mode only for these widgets */
for (uint i = WID_RAT_BUILD_NS; i <= WID_RAT_BUILD_STATION; i++) { for (WidgetID i = WID_RAT_BUILD_NS; i <= WID_RAT_BUILD_STATION; i++) {
if ((i <= WID_RAT_POLYRAIL || i >= WID_RAT_BUILD_WAYPOINT) && w->IsWidgetLowered(i)) { if ((i <= WID_RAT_POLYRAIL || i >= WID_RAT_BUILD_WAYPOINT) && w->IsWidgetLowered(i)) {
ToggleRailButton_Remove(w); ToggleRailButton_Remove(w);
return true; return true;
@ -557,7 +557,7 @@ struct BuildRailToolbarWindow : Window {
this->ReInit(); this->ReInit();
} }
void UpdateRemoveWidgetStatus(int clicked_widget) void UpdateRemoveWidgetStatus(WidgetID clicked_widget)
{ {
switch (clicked_widget) { switch (clicked_widget) {
case WID_RAT_REMOVE: case WID_RAT_REMOVE:
@ -588,7 +588,7 @@ struct BuildRailToolbarWindow : Window {
} }
} }
void SetStringParameters(int widget) const override void SetStringParameters(WidgetID widget) const override
{ {
if (widget == WID_RAT_CAPTION) { if (widget == WID_RAT_CAPTION) {
const RailTypeInfo *rti = GetRailTypeInfo(this->railtype); const RailTypeInfo *rti = GetRailTypeInfo(this->railtype);
@ -602,7 +602,7 @@ struct BuildRailToolbarWindow : Window {
} }
} }
void DrawWidget(const Rect &r, int widget) const override void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
if (widget == WID_RAT_POLYRAIL) { if (widget == WID_RAT_POLYRAIL) {
Dimension d = GetSpriteSize(SPR_BLOT); Dimension d = GetSpriteSize(SPR_BLOT);
@ -611,7 +611,7 @@ struct BuildRailToolbarWindow : Window {
} }
} }
void OnClick(Point pt, int widget, int click_count) override void OnClick(Point pt, WidgetID widget, int click_count) override
{ {
if (widget < WID_RAT_BUILD_NS) return; if (widget < WID_RAT_BUILD_NS) return;
@ -742,7 +742,7 @@ struct BuildRailToolbarWindow : Window {
if (_ctrl_pressed) RailToolbar_CtrlChanged(this); if (_ctrl_pressed) RailToolbar_CtrlChanged(this);
} }
virtual bool OnTooltip(Point pt, int widget, TooltipCloseCondition close_cond) override virtual bool OnTooltip(Point pt, WidgetID widget, TooltipCloseCondition close_cond) override
{ {
if (widget == WID_RAT_CONVERT_RAIL) { if (widget == WID_RAT_CONVERT_RAIL) {
SetDParam(0, STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL); SetDParam(0, STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL);
@ -1344,7 +1344,7 @@ public:
return ES_HANDLED; return ES_HANDLED;
} }
void OnEditboxChanged(int widget) override void OnEditboxChanged(WidgetID widget) override
{ {
if (widget == WID_BRAS_FILTER_EDITBOX) { if (widget == WID_BRAS_FILTER_EDITBOX) {
string_filter.SetFilterTerm(this->filter_editbox.text.buf); string_filter.SetFilterTerm(this->filter_editbox.text.buf);
@ -1403,7 +1403,7 @@ public:
} }
} }
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{ {
switch (widget) { switch (widget) {
case WID_BRAS_NEWST_LIST: { case WID_BRAS_NEWST_LIST: {
@ -1459,11 +1459,11 @@ public:
} }
} }
void DrawWidget(const Rect &r, int widget) const override void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
DrawPixelInfo tmp_dpi; DrawPixelInfo tmp_dpi;
switch (GB(widget, 0, 16)) { switch (widget) {
case WID_BRAS_PLATFORM_DIR_X: { case WID_BRAS_PLATFORM_DIR_X: {
/* Set up a clipping area for the '/' station preview */ /* Set up a clipping area for the '/' station preview */
Rect ir = r.Shrink(WidgetDimensions::scaled.bevel); Rect ir = r.Shrink(WidgetDimensions::scaled.bevel);
@ -1508,7 +1508,7 @@ public:
} }
case WID_BRAS_IMAGE: { case WID_BRAS_IMAGE: {
uint16_t type = GB(widget, 16, 16); uint16_t type = this->GetWidget<NWidgetBase>(widget)->GetParentWidget<NWidgetMatrix>()->GetCurrentElement();
assert(type < _railstation.station_count); assert(type < _railstation.station_count);
/* Check station availability callback */ /* Check station availability callback */
const StationSpec *statspec = StationClass::Get(_railstation.station_class)->GetSpec(type); const StationSpec *statspec = StationClass::Get(_railstation.station_class)->GetSpec(type);
@ -1538,7 +1538,7 @@ public:
} }
} }
void SetStringParameters(int widget) const override void SetStringParameters(WidgetID widget) const override
{ {
if (widget == WID_BRAS_SHOW_NEWST_TYPE) { if (widget == WID_BRAS_SHOW_NEWST_TYPE) {
const StationSpec *statspec = StationClass::Get(_railstation.station_class)->GetSpec(_railstation.station_type); const StationSpec *statspec = StationClass::Get(_railstation.station_class)->GetSpec(_railstation.station_type);
@ -1546,9 +1546,9 @@ public:
} }
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
switch (GB(widget, 0, 16)) { switch (widget) {
case WID_BRAS_PLATFORM_DIR_X: case WID_BRAS_PLATFORM_DIR_X:
case WID_BRAS_PLATFORM_DIR_Y: case WID_BRAS_PLATFORM_DIR_Y:
this->RaiseWidget(_railstation.orientation + WID_BRAS_PLATFORM_DIR_X); this->RaiseWidget(_railstation.orientation + WID_BRAS_PLATFORM_DIR_X);
@ -1682,7 +1682,7 @@ public:
} }
case WID_BRAS_IMAGE: { case WID_BRAS_IMAGE: {
uint16_t y = GB(widget, 16, 16); uint16_t y = this->GetWidget<NWidgetBase>(widget)->GetParentWidget<NWidgetMatrix>()->GetCurrentElement();
if (y >= _railstation.station_count) return; if (y >= _railstation.station_count) return;
/* Check station availability callback */ /* Check station availability callback */
@ -1692,7 +1692,7 @@ public:
_railstation.station_type = y; _railstation.station_type = y;
this->CheckSelectedSize(statspec); this->CheckSelectedSize(statspec);
this->GetWidget<NWidgetMatrix>(WID_BRAS_MATRIX)->SetClicked(_railstation.station_type); this->GetWidget<NWidgetBase>(widget)->GetParentWidget<NWidgetMatrix>()->SetClicked(_railstation.station_type);
if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP); if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
this->SetDirty(); this->SetDirty();
@ -1868,7 +1868,7 @@ private:
* @param widget_index index of this widget in the window * @param widget_index index of this widget in the window
* @param image the sprite to draw * @param image the sprite to draw
*/ */
void DrawSignalSprite(const Rect &r, int widget_index, PalSpriteID image) const void DrawSignalSprite(const Rect &r, WidgetID widget_index, PalSpriteID image) const
{ {
Point offset; Point offset;
Dimension sprite_size = GetSpriteSize(image.sprite, &offset); Dimension sprite_size = GetSpriteSize(image.sprite, &offset);
@ -1884,10 +1884,10 @@ private:
void SetDisableStates() void SetDisableStates()
{ {
for (int widget = WID_BS_SEMAPHORE_NORM; widget <= WID_BS_SEMAPHORE_NO_ENTRY; widget++) { for (WidgetID widget = WID_BS_SEMAPHORE_NORM; widget <= WID_BS_SEMAPHORE_NO_ENTRY; widget++) {
this->SetWidgetDisabledState(widget, _cur_signal_style > 0 && !HasBit(_new_signal_styles[_cur_signal_style - 1].semaphore_mask, TypeForClick(widget - WID_BS_SEMAPHORE_NORM))); this->SetWidgetDisabledState(widget, _cur_signal_style > 0 && !HasBit(_new_signal_styles[_cur_signal_style - 1].semaphore_mask, TypeForClick(widget - WID_BS_SEMAPHORE_NORM)));
} }
for (int widget = WID_BS_ELECTRIC_NORM; widget <= WID_BS_ELECTRIC_NO_ENTRY; widget++) { for (WidgetID widget = WID_BS_ELECTRIC_NORM; widget <= WID_BS_ELECTRIC_NO_ENTRY; widget++) {
this->SetWidgetDisabledState(widget, _cur_signal_style > 0 && !HasBit(_new_signal_styles[_cur_signal_style - 1].electric_mask, TypeForClick(widget - WID_BS_ELECTRIC_NORM))); this->SetWidgetDisabledState(widget, _cur_signal_style > 0 && !HasBit(_new_signal_styles[_cur_signal_style - 1].electric_mask, TypeForClick(widget - WID_BS_ELECTRIC_NORM)));
} }
if (_cur_signal_style > 0) { if (_cur_signal_style > 0) {
@ -2009,7 +2009,7 @@ public:
} }
} }
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{ {
if (widget == WID_BS_DRAG_SIGNALS_DENSITY_LABEL) { if (widget == WID_BS_DRAG_SIGNALS_DENSITY_LABEL) {
/* Two digits for signals density. */ /* Two digits for signals density. */
@ -2022,7 +2022,7 @@ public:
} }
} }
void SetStringParameters(int widget) const override void SetStringParameters(WidgetID widget) const override
{ {
switch (widget) { switch (widget) {
case WID_BS_DRAG_SIGNALS_DENSITY_LABEL: case WID_BS_DRAG_SIGNALS_DENSITY_LABEL:
@ -2035,7 +2035,7 @@ public:
} }
} }
void DrawWidget(const Rect &r, int widget) const override void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
if (IsInsideMM(widget, WID_BS_SEMAPHORE_NORM, WID_BS_ELECTRIC_NO_ENTRY + 1)) { if (IsInsideMM(widget, WID_BS_SEMAPHORE_NORM, WID_BS_ELECTRIC_NO_ENTRY + 1)) {
/* Extract signal from widget number. */ /* Extract signal from widget number. */
@ -2089,7 +2089,7 @@ public:
} }
} }
void OnClick(Point pt, int widget, int click_count) override void OnClick(Point pt, WidgetID widget, int click_count) override
{ {
switch (widget) { switch (widget) {
case WID_BS_SEMAPHORE_NORM: case WID_BS_SEMAPHORE_NORM:
@ -2184,7 +2184,7 @@ public:
this->InvalidateData(); this->InvalidateData();
} }
virtual void OnDropdownSelect(int widget, int index) override virtual void OnDropdownSelect(WidgetID widget, int index) override
{ {
switch (widget) { switch (widget) {
case WID_BS_STYLE: case WID_BS_STYLE:
@ -2352,7 +2352,7 @@ struct BuildRailDepotWindow : public PickerWindowBase {
this->LowerWidget(_build_depot_direction + WID_BRAD_DEPOT_NE); this->LowerWidget(_build_depot_direction + WID_BRAD_DEPOT_NE);
} }
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{ {
if (!IsInsideMM(widget, WID_BRAD_DEPOT_NE, WID_BRAD_DEPOT_NW + 1)) return; if (!IsInsideMM(widget, WID_BRAD_DEPOT_NE, WID_BRAD_DEPOT_NW + 1)) return;
@ -2360,7 +2360,7 @@ struct BuildRailDepotWindow : public PickerWindowBase {
size->height = ScaleGUITrad(48) + WidgetDimensions::scaled.fullbevel.Vertical(); size->height = ScaleGUITrad(48) + WidgetDimensions::scaled.fullbevel.Vertical();
} }
void DrawWidget(const Rect &r, int widget) const override void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
if (!IsInsideMM(widget, WID_BRAD_DEPOT_NE, WID_BRAD_DEPOT_NW + 1)) return; if (!IsInsideMM(widget, WID_BRAD_DEPOT_NE, WID_BRAD_DEPOT_NW + 1)) return;
@ -2374,7 +2374,7 @@ struct BuildRailDepotWindow : public PickerWindowBase {
} }
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
switch (widget) { switch (widget) {
case WID_BRAD_DEPOT_NE: case WID_BRAD_DEPOT_NE:
@ -2507,7 +2507,7 @@ struct BuildRailWaypointWindow : PickerWindowBase {
this->PickerWindowBase::Close(data); this->PickerWindowBase::Close(data);
} }
void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override
{ {
switch (widget) { switch (widget) {
case WID_BRW_WAYPOINT_MATRIX: case WID_BRW_WAYPOINT_MATRIX:
@ -2526,7 +2526,7 @@ struct BuildRailWaypointWindow : PickerWindowBase {
} }
} }
void SetStringParameters(int widget) const override void SetStringParameters(WidgetID widget) const override
{ {
if (widget == WID_BRW_NAME) { if (widget == WID_BRW_NAME) {
if (!this->list.empty() && IsInsideBS(_cur_waypoint_type, 0, this->waypoints->GetSpecCount())) { if (!this->list.empty() && IsInsideBS(_cur_waypoint_type, 0, this->waypoints->GetSpecCount())) {
@ -2548,11 +2548,11 @@ struct BuildRailWaypointWindow : PickerWindowBase {
this->DrawWidgets(); this->DrawWidgets();
} }
void DrawWidget(const Rect &r, int widget) const override void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
switch (GB(widget, 0, 16)) { switch (widget) {
case WID_BRW_WAYPOINT: { case WID_BRW_WAYPOINT: {
uint16_t type = this->list.at(GB(widget, 16, 16)); uint16_t type = this->list.at(this->GetWidget<NWidgetBase>(widget)->GetParentWidget<NWidgetMatrix>()->GetCurrentElement());
const StationSpec *statspec = this->waypoints->GetSpec(type); const StationSpec *statspec = this->waypoints->GetSpec(type);
DrawPixelInfo tmp_dpi; DrawPixelInfo tmp_dpi;
@ -2571,11 +2571,11 @@ struct BuildRailWaypointWindow : PickerWindowBase {
} }
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
switch (GB(widget, 0, 16)) { switch (widget) {
case WID_BRW_WAYPOINT: { case WID_BRW_WAYPOINT: {
uint16_t sel = GB(widget, 16, 16); uint16_t sel = this->GetWidget<NWidgetBase>(widget)->GetParentWidget<NWidgetMatrix>()->GetCurrentElement();
assert(sel < this->list.size()); assert(sel < this->list.size());
uint16_t type = this->list.at(sel); uint16_t type = this->list.at(sel);
@ -2584,7 +2584,7 @@ struct BuildRailWaypointWindow : PickerWindowBase {
if (!IsStationAvailable(statspec)) return; if (!IsStationAvailable(statspec)) return;
_cur_waypoint_type = type; _cur_waypoint_type = type;
this->GetWidget<NWidgetMatrix>(WID_BRW_WAYPOINT_MATRIX)->SetClicked(sel); this->GetWidget<NWidgetBase>(widget)->GetParentWidget<NWidgetMatrix>()->SetClicked(sel);
if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP); if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
this->SetDirty(); this->SetDirty();
break; break;
@ -2613,7 +2613,7 @@ struct BuildRailWaypointWindow : PickerWindowBase {
this->list.ForceRebuild(); this->list.ForceRebuild();
} }
void OnEditboxChanged(int wid) override void OnEditboxChanged(WidgetID wid) override
{ {
if (wid == WID_BRW_FILTER) { if (wid == WID_BRW_FILTER) {
this->string_filter.SetFilterTerm(this->editbox.text.buf); this->string_filter.SetFilterTerm(this->editbox.text.buf);
@ -2863,7 +2863,7 @@ void ShowBuildRailStationPickerAndSelect(StationType station_type, const Station
} }
if (w == nullptr) return; if (w == nullptr) return;
auto trigger_widget = [&](int widget) { auto trigger_widget = [&](WidgetID widget) {
if (!w->IsWidgetLowered(widget)) { if (!w->IsWidgetLowered(widget)) {
w->OnHotkey(widget); w->OnHotkey(widget);
} }

@ -344,7 +344,7 @@ static bool RoadToolbar_CtrlChanged(Window *w)
if (w->IsWidgetDisabled(WID_ROT_REMOVE)) return false; if (w->IsWidgetDisabled(WID_ROT_REMOVE)) return false;
/* allow ctrl to switch remove mode only for these widgets */ /* allow ctrl to switch remove mode only for these widgets */
for (uint i = WID_ROT_ROAD_X; i <= WID_ROT_AUTOROAD; i++) { for (WidgetID i = WID_ROT_ROAD_X; i <= WID_ROT_AUTOROAD; i++) {
if (w->IsWidgetLowered(i)) { if (w->IsWidgetLowered(i)) {
ToggleRoadButton_Remove(w); ToggleRoadButton_Remove(w);
return true; return true;
@ -460,7 +460,7 @@ struct BuildRoadToolbarWindow : Window {
this->ReInit(); this->ReInit();
} }
void SetStringParameters(int widget) const override void SetStringParameters(WidgetID widget) const override
{ {
if (widget == WID_ROT_CAPTION) { if (widget == WID_ROT_CAPTION) {
if (this->rti->max_speed > 0) { if (this->rti->max_speed > 0) {
@ -528,7 +528,7 @@ struct BuildRoadToolbarWindow : Window {
} }
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
_remove_button_clicked = false; _remove_button_clicked = false;
_one_way_button_clicked = false; _one_way_button_clicked = false;
@ -1135,13 +1135,15 @@ struct BuildRoadDepotWindow : public PickerWindowBase {
this->LowerWidget(_build_depot_direction + WID_BROD_DEPOT_NE); this->LowerWidget(_build_depot_direction + WID_BROD_DEPOT_NE);
if (RoadTypeIsTram(_cur_roadtype)) { if (RoadTypeIsTram(_cur_roadtype)) {
this->GetWidget<NWidgetCore>(WID_BROD_CAPTION)->widget_data = STR_BUILD_DEPOT_TRAM_ORIENTATION_CAPTION; this->GetWidget<NWidgetCore>(WID_BROD_CAPTION)->widget_data = STR_BUILD_DEPOT_TRAM_ORIENTATION_CAPTION;
for (int i = WID_BROD_DEPOT_NE; i <= WID_BROD_DEPOT_NW; i++) this->GetWidget<NWidgetCore>(i)->tool_tip = STR_BUILD_DEPOT_TRAM_ORIENTATION_SELECT_TOOLTIP; for (WidgetID i = WID_BROD_DEPOT_NE; i <= WID_BROD_DEPOT_NW; i++) {
this->GetWidget<NWidgetCore>(i)->tool_tip = STR_BUILD_DEPOT_TRAM_ORIENTATION_SELECT_TOOLTIP;
}
} }
this->FinishInitNested(TRANSPORT_ROAD); this->FinishInitNested(TRANSPORT_ROAD);
} }
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{ {
if (!IsInsideMM(widget, WID_BROD_DEPOT_NE, WID_BROD_DEPOT_NW + 1)) return; if (!IsInsideMM(widget, WID_BROD_DEPOT_NE, WID_BROD_DEPOT_NW + 1)) return;
@ -1149,7 +1151,7 @@ struct BuildRoadDepotWindow : public PickerWindowBase {
size->height = ScaleGUITrad(48) + WidgetDimensions::scaled.fullbevel.Vertical(); size->height = ScaleGUITrad(48) + WidgetDimensions::scaled.fullbevel.Vertical();
} }
void DrawWidget(const Rect &r, int widget) const override void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
if (!IsInsideMM(widget, WID_BROD_DEPOT_NE, WID_BROD_DEPOT_NW + 1)) return; if (!IsInsideMM(widget, WID_BROD_DEPOT_NE, WID_BROD_DEPOT_NW + 1)) return;
@ -1163,7 +1165,7 @@ struct BuildRoadDepotWindow : public PickerWindowBase {
} }
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
switch (widget) { switch (widget) {
case WID_BROD_DEPOT_NW: case WID_BROD_DEPOT_NW:
@ -1325,7 +1327,7 @@ public:
const RoadTypeInfo *rti = GetRoadTypeInfo(_cur_roadtype); const RoadTypeInfo *rti = GetRoadTypeInfo(_cur_roadtype);
this->GetWidget<NWidgetCore>(WID_BROS_CAPTION)->widget_data = rti->strings.picker_title[rs]; this->GetWidget<NWidgetCore>(WID_BROS_CAPTION)->widget_data = rti->strings.picker_title[rs];
for (uint i = RoadTypeIsTram(_cur_roadtype) ? WID_BROS_STATION_X : WID_BROS_STATION_NE; i < WID_BROS_LT_OFF; i++) { for (WidgetID i = RoadTypeIsTram(_cur_roadtype) ? WID_BROS_STATION_X : WID_BROS_STATION_NE; i < WID_BROS_LT_OFF; i++) {
this->GetWidget<NWidgetCore>(i)->tool_tip = rti->strings.picker_tooltip[rs]; this->GetWidget<NWidgetCore>(i)->tool_tip = rti->strings.picker_tooltip[rs];
} }
@ -1455,7 +1457,7 @@ public:
return ES_HANDLED; return ES_HANDLED;
} }
void OnEditboxChanged(int widget) override void OnEditboxChanged(WidgetID widget) override
{ {
if (widget == WID_BROS_FILTER_EDITBOX) { if (widget == WID_BROS_FILTER_EDITBOX) {
string_filter.SetFilterTerm(this->filter_editbox.text.buf); string_filter.SetFilterTerm(this->filter_editbox.text.buf);
@ -1503,7 +1505,7 @@ public:
} }
} }
void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override
{ {
switch (widget) { switch (widget) {
case WID_BROS_NEWST_LIST: { case WID_BROS_NEWST_LIST: {
@ -1571,9 +1573,9 @@ public:
} }
} }
void DrawWidget(const Rect &r, int widget) const override void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
switch (GB(widget, 0, 16)) { switch (widget) {
case WID_BROS_STATION_NE: case WID_BROS_STATION_NE:
case WID_BROS_STATION_SE: case WID_BROS_STATION_SE:
case WID_BROS_STATION_SW: case WID_BROS_STATION_SW:
@ -1616,7 +1618,7 @@ public:
} }
case WID_BROS_IMAGE: { case WID_BROS_IMAGE: {
uint16_t type = GB(widget, 16, 16); uint16_t type = this->GetWidget<NWidgetBase>(widget)->GetParentWidget<NWidgetMatrix>()->GetCurrentElement();
assert(type < _roadstop_gui_settings.roadstop_count); assert(type < _roadstop_gui_settings.roadstop_count);
const RoadStopSpec *spec = RoadStopClass::Get(_roadstop_gui_settings.roadstop_class)->GetSpec(type); const RoadStopSpec *spec = RoadStopClass::Get(_roadstop_gui_settings.roadstop_class)->GetSpec(type);
@ -1655,7 +1657,7 @@ public:
} }
} }
void SetStringParameters(int widget) const override void SetStringParameters(WidgetID widget) const override
{ {
if (widget == WID_BROS_SHOW_NEWST_TYPE) { if (widget == WID_BROS_SHOW_NEWST_TYPE) {
const RoadStopSpec *roadstopspec = RoadStopClass::Get(_roadstop_gui_settings.roadstop_class)->GetSpec(_roadstop_gui_settings.roadstop_type); const RoadStopSpec *roadstopspec = RoadStopClass::Get(_roadstop_gui_settings.roadstop_class)->GetSpec(_roadstop_gui_settings.roadstop_type);
@ -1663,9 +1665,9 @@ public:
} }
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
switch (GB(widget, 0, 16)) { switch (widget) {
case WID_BROS_STATION_NE: case WID_BROS_STATION_NE:
case WID_BROS_STATION_SE: case WID_BROS_STATION_SE:
case WID_BROS_STATION_SW: case WID_BROS_STATION_SW:
@ -1706,7 +1708,7 @@ public:
} }
case WID_BROS_IMAGE: { case WID_BROS_IMAGE: {
uint16_t y = GB(widget, 16, 16); uint16_t y = this->GetWidget<NWidgetBase>(widget)->GetParentWidget<NWidgetMatrix>()->GetCurrentElement();
if (y >= _roadstop_gui_settings.roadstop_count) return; if (y >= _roadstop_gui_settings.roadstop_count) return;
const RoadStopSpec *spec = RoadStopClass::Get(_roadstop_gui_settings.roadstop_class)->GetSpec(y); const RoadStopSpec *spec = RoadStopClass::Get(_roadstop_gui_settings.roadstop_class)->GetSpec(y);
@ -1717,7 +1719,7 @@ public:
/* Check station availability callback */ /* Check station availability callback */
_roadstop_gui_settings.roadstop_type = y; _roadstop_gui_settings.roadstop_type = y;
this->GetWidget<NWidgetMatrix>(WID_BROS_MATRIX)->SetClicked(_roadstop_gui_settings.roadstop_type); this->GetWidget<NWidgetBase>(widget)->GetParentWidget<NWidgetMatrix>()->SetClicked(_roadstop_gui_settings.roadstop_type);
if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP); if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
this->SetDirty(); this->SetDirty();
@ -2022,7 +2024,7 @@ struct BuildRoadWaypointWindow : PickerWindowBase {
this->PickerWindowBase::Close(); this->PickerWindowBase::Close();
} }
void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override
{ {
switch (widget) { switch (widget) {
case WID_BROW_WAYPOINT_MATRIX: case WID_BROW_WAYPOINT_MATRIX:
@ -2041,7 +2043,7 @@ struct BuildRoadWaypointWindow : PickerWindowBase {
} }
} }
void SetStringParameters(int widget) const override void SetStringParameters(WidgetID widget) const override
{ {
if (widget == WID_BROW_NAME) { if (widget == WID_BROW_NAME) {
if (!this->list.empty() && IsInsideBS(_cur_waypoint_type, 0, this->waypoints->GetSpecCount())) { if (!this->list.empty() && IsInsideBS(_cur_waypoint_type, 0, this->waypoints->GetSpecCount())) {
@ -2063,11 +2065,11 @@ struct BuildRoadWaypointWindow : PickerWindowBase {
this->DrawWidgets(); this->DrawWidgets();
} }
void DrawWidget(const Rect &r, int widget) const override void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
switch (GB(widget, 0, 16)) { switch (widget) {
case WID_BROW_WAYPOINT: { case WID_BROW_WAYPOINT: {
uint16_t type = this->list.at(GB(widget, 16, 16)); uint16_t type = this->list.at(this->GetWidget<NWidgetBase>(widget)->GetParentWidget<NWidgetMatrix>()->GetCurrentElement());
const RoadStopSpec *spec = this->waypoints->GetSpec(type); const RoadStopSpec *spec = this->waypoints->GetSpec(type);
DrawPixelInfo tmp_dpi; DrawPixelInfo tmp_dpi;
if (FillDrawPixelInfo(&tmp_dpi, r)) { if (FillDrawPixelInfo(&tmp_dpi, r)) {
@ -2087,11 +2089,11 @@ struct BuildRoadWaypointWindow : PickerWindowBase {
} }
} }
void OnClick(Point pt, int widget, int click_count) override void OnClick(Point pt, WidgetID widget, int click_count) override
{ {
switch (GB(widget, 0, 16)) { switch (widget) {
case WID_BROW_WAYPOINT: { case WID_BROW_WAYPOINT: {
uint16_t sel = GB(widget, 16, 16); uint16_t sel = this->GetWidget<NWidgetBase>(widget)->GetParentWidget<NWidgetMatrix>()->GetCurrentElement();
assert(sel < this->list.size()); assert(sel < this->list.size());
uint16_t type = this->list.at(sel); uint16_t type = this->list.at(sel);
@ -2128,7 +2130,7 @@ struct BuildRoadWaypointWindow : PickerWindowBase {
this->list.ForceRebuild(); this->list.ForceRebuild();
} }
void OnEditboxChanged(int wid) override void OnEditboxChanged(WidgetID wid) override
{ {
if (wid == WID_BROW_FILTER) { if (wid == WID_BROW_FILTER) {
this->string_filter.SetFilterTerm(this->editbox.text.buf); this->string_filter.SetFilterTerm(this->editbox.text.buf);
@ -2406,7 +2408,7 @@ void ShowBuildRoadStopPickerAndSelect(StationType station_type, const RoadStopSp
BuildRoadToolbarWindow *w = GetRoadToolbarWindowForRoadStop(spec, rtt_preferred); BuildRoadToolbarWindow *w = GetRoadToolbarWindowForRoadStop(spec, rtt_preferred);
if (w == nullptr) return; if (w == nullptr) return;
auto trigger_widget = [&](int widget) { auto trigger_widget = [&](WidgetID widget) {
if (!w->IsWidgetLowered(widget)) { if (!w->IsWidgetLowered(widget)) {
w->OnHotkey(widget); w->OnHotkey(widget);
} }

@ -249,7 +249,7 @@ struct SchdispatchWindow : GeneralVehicleWindow {
return this->vehicle->orders->GetDispatchScheduleByIndex(this->schedule_index); return this->vehicle->orders->GetDispatchScheduleByIndex(this->schedule_index);
} }
virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override virtual void UpdateWidgetSize(WidgetID widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override
{ {
switch (widget) { switch (widget) {
case WID_SCHDISPATCH_MATRIX: { case WID_SCHDISPATCH_MATRIX: {
@ -347,7 +347,7 @@ struct SchdispatchWindow : GeneralVehicleWindow {
this->DrawWidgets(); this->DrawWidgets();
} }
virtual void SetStringParameters(int widget) const override virtual void SetStringParameters(WidgetID widget) const override
{ {
switch (widget) { switch (widget) {
case WID_SCHDISPATCH_CAPTION: case WID_SCHDISPATCH_CAPTION:
@ -374,7 +374,7 @@ struct SchdispatchWindow : GeneralVehicleWindow {
} }
} }
virtual bool OnTooltip(Point pt, int widget, TooltipCloseCondition close_cond) override virtual bool OnTooltip(Point pt, WidgetID widget, TooltipCloseCondition close_cond) override
{ {
switch (widget) { switch (widget) {
case WID_SCHDISPATCH_ADD: { case WID_SCHDISPATCH_ADD: {
@ -440,7 +440,7 @@ struct SchdispatchWindow : GeneralVehicleWindow {
} }
} }
virtual void DrawWidget(const Rect &r, int widget) const override virtual void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
const Vehicle *v = this->vehicle; const Vehicle *v = this->vehicle;
@ -658,7 +658,7 @@ struct SchdispatchWindow : GeneralVehicleWindow {
return 1; return 1;
} }
virtual void OnClick(Point pt, int widget, int click_count) override virtual void OnClick(Point pt, WidgetID widget, int click_count) override
{ {
const Vehicle *v = this->vehicle; const Vehicle *v = this->vehicle;
@ -809,7 +809,7 @@ struct SchdispatchWindow : GeneralVehicleWindow {
} }
} }
void OnDropdownSelect(int widget, int index) override void OnDropdownSelect(WidgetID widget, int index) override
{ {
switch (widget) { switch (widget) {
case WID_SCHDISPATCH_MANAGEMENT: { case WID_SCHDISPATCH_MANAGEMENT: {
@ -1092,7 +1092,7 @@ struct ScheduledDispatchAddSlotsWindow : Window {
return pt; return pt;
} }
virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override virtual void UpdateWidgetSize(WidgetID widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override
{ {
Dimension d = {0, 0}; Dimension d = {0, 0};
switch (widget) { switch (widget) {
@ -1130,7 +1130,7 @@ struct ScheduledDispatchAddSlotsWindow : Window {
*size = d; *size = d;
} }
virtual void SetStringParameters(int widget) const override virtual void SetStringParameters(WidgetID widget) const override
{ {
switch (widget) { switch (widget) {
case WID_SCHDISPATCH_ADD_SLOT_START_HOUR: SetDParam(0, start.ClockHour()); break; case WID_SCHDISPATCH_ADD_SLOT_START_HOUR: SetDParam(0, start.ClockHour()); break;
@ -1142,7 +1142,7 @@ struct ScheduledDispatchAddSlotsWindow : Window {
} }
} }
virtual void OnClick(Point pt, int widget, int click_count) override virtual void OnClick(Point pt, WidgetID widget, int click_count) override
{ {
auto handle_hours_dropdown = [&](ClockFaceMinutes current) { auto handle_hours_dropdown = [&](ClockFaceMinutes current) {
DropDownList list; DropDownList list;
@ -1189,7 +1189,7 @@ struct ScheduledDispatchAddSlotsWindow : Window {
} }
} }
virtual void OnDropdownSelect(int widget, int index) override virtual void OnDropdownSelect(WidgetID widget, int index) override
{ {
switch (widget) { switch (widget) {
case WID_SCHDISPATCH_ADD_SLOT_START_HOUR: case WID_SCHDISPATCH_ADD_SLOT_START_HOUR:

@ -26,7 +26,7 @@ struct ScreenshotWindow : Window {
this->DrawWidgets(); this->DrawWidgets();
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
ScreenshotType st; ScreenshotType st;
switch (widget) { switch (widget) {

@ -24,6 +24,9 @@
* API removals: * API removals:
* \li AIError::ERR_PRECONDITION_TOO_MANY_PARAMETERS, that error is never returned anymore. * \li AIError::ERR_PRECONDITION_TOO_MANY_PARAMETERS, that error is never returned anymore.
* *
* Other changes:
* \li AIVehicleList accepts an optional filter function
*
* \b 13.0 * \b 13.0
* *
* API additions: * API additions:

@ -84,6 +84,9 @@
* API removals: * API removals:
* \li GSError::ERR_PRECONDITION_TOO_MANY_PARAMETERS, that error is never returned anymore. * \li GSError::ERR_PRECONDITION_TOO_MANY_PARAMETERS, that error is never returned anymore.
* *
* Other changes:
* \li GSVehicleList accepts an optional filter function
*
* \b 13.0 * \b 13.0
* *
* API additions: * API additions:

@ -925,7 +925,7 @@ public:
* @param number The windownumber that was clicked. * @param number The windownumber that was clicked.
* @param widget The widget in the window that was clicked. * @param widget The widget in the window that was clicked.
*/ */
ScriptEventWindowWidgetClick(ScriptWindow::WindowClass window, uint32 number, uint8 widget) : ScriptEventWindowWidgetClick(ScriptWindow::WindowClass window, uint32_t number, WidgetID widget) :
ScriptEvent(ET_WINDOW_WIDGET_CLICK), ScriptEvent(ET_WINDOW_WIDGET_CLICK),
window(window), window(window),
number(number), number(number),
@ -956,12 +956,12 @@ public:
* Get the number of the widget that was clicked. * Get the number of the widget that was clicked.
* @return The number of the clicked widget. * @return The number of the clicked widget.
*/ */
uint8 GetWidgetNumber() { return this->widget; } int GetWidgetNumber() { return this->widget; }
private: private:
ScriptWindow::WindowClass window; ///< Window of the click. ScriptWindow::WindowClass window; ///< Window of the click.
uint32 number; ///< Number of the click. uint32_t number; ///< Number of the click.
uint8 widget; ///< Widget of the click. WidgetID widget; ///< Widget of the click.
}; };
/** /**

@ -18,12 +18,78 @@
#include "../../safeguards.h" #include "../../safeguards.h"
ScriptVehicleList::ScriptVehicleList() ScriptVehicleList::ScriptVehicleList(HSQUIRRELVM vm)
{ {
EnforceDeityOrCompanyModeValid_Void(); EnforceDeityOrCompanyModeValid_Void();
int nparam = sq_gettop(vm) - 1;
if (nparam >= 1) {
/* Make sure the filter function is really a function, and not any
* other type. It's parameter 2 for us, but for the user it's the
* first parameter they give. */
SQObjectType valuator_type = sq_gettype(vm, 2);
if (valuator_type != OT_CLOSURE && valuator_type != OT_NATIVECLOSURE) {
throw sq_throwerror(vm, "parameter 1 has an invalid type (expected function)");
}
/* Push the function to call */
sq_push(vm, 2);
}
/* Don't allow docommand from a Valuator, as we can't resume in
* mid C++-code. */
bool backup_allow = ScriptObject::GetAllowDoCommand();
ScriptObject::SetAllowDoCommand(false);
for (const Vehicle *v : Vehicle::Iterate()) { for (const Vehicle *v : Vehicle::Iterate()) {
if ((v->owner == ScriptObject::GetCompany() || ScriptCompanyMode::IsDeity()) && (v->IsPrimaryVehicle() || (v->type == VEH_TRAIN && ::Train::From(v)->IsFreeWagon()))) this->AddItem(v->index); if (v->owner != ScriptObject::GetCompany() && !ScriptCompanyMode::IsDeity()) continue;
if (!v->IsPrimaryVehicle() && !(v->type == VEH_TRAIN && ::Train::From(v)->IsFreeWagon())) continue;
if (nparam < 1) {
/* No filter, just add the item. */
this->AddItem(v->index);
continue;
}
/* Push the root table as instance object, this is what squirrel does for meta-functions. */
sq_pushroottable(vm);
/* Push all arguments for the valuator function. */
sq_pushinteger(vm, v->index);
for (int i = 0; i < nparam - 1; i++) {
sq_push(vm, i + 3);
}
/* Call the function. Squirrel pops all parameters and pushes the return value. */
if (SQ_FAILED(sq_call(vm, nparam + 1, SQTrue, SQTrue))) {
ScriptObject::SetAllowDoCommand(backup_allow);
throw sq_throwerror(vm, "failed to run filter");
}
/* Retrieve the return value */
switch (sq_gettype(vm, -1)) {
case OT_BOOL: {
SQBool add;
sq_getbool(vm, -1, &add);
if (add) this->AddItem(v->index);
break;
}
default: {
ScriptObject::SetAllowDoCommand(backup_allow);
throw sq_throwerror(vm, "return value of filter is not valid (not bool)");
}
}
/* Pop the return value. */
sq_poptop(vm);
} }
if (nparam >= 1) {
/* Pop the filter function */
sq_poptop(vm);
}
ScriptObject::SetAllowDoCommand(backup_allow);
} }
ScriptVehicleList_Station::ScriptVehicleList_Station(StationID station_id) ScriptVehicleList_Station::ScriptVehicleList_Station(StationID station_id)

@ -20,7 +20,32 @@
*/ */
class ScriptVehicleList : public ScriptList { class ScriptVehicleList : public ScriptList {
public: public:
#ifdef DOXYGEN_API
ScriptVehicleList(); ScriptVehicleList();
/**
* Apply a filter when building the list.
* @param filter_function The function which will be doing the filtering.
* @param params The params to give to the filters (minus the first param,
* which is always the index-value).
* @note You can write your own filters and use them. Just remember that
* the first parameter should be the index-value, and it should return
* a bool.
* @note Example:
* ScriptVehicleList(ScriptVehicle.IsInDepot);
* function IsType(vehicle_id, type)
* {
* return ScriptVehicle.GetVehicleType(vehicle_id) == type;
* }
* ScriptVehicleList(IsType, ScriptVehicle.VT_ROAD);
*/
ScriptVehicleList(void *filter_function, int params, ...);
#else
/**
* The constructor wrapper from Squirrel.
*/
ScriptVehicleList(HSQUIRRELVM vm);
#endif
}; };
/** /**

@ -97,14 +97,14 @@ struct ScriptListWindow : public Window {
} }
} }
void SetStringParameters(int widget) const override void SetStringParameters(WidgetID widget) const override
{ {
if (widget != WID_SCRL_CAPTION) return; if (widget != WID_SCRL_CAPTION) return;
SetDParam(0, (this->slot == OWNER_DEITY) ? STR_AI_LIST_CAPTION_GAMESCRIPT : STR_AI_LIST_CAPTION_AI); SetDParam(0, (this->slot == OWNER_DEITY) ? STR_AI_LIST_CAPTION_GAMESCRIPT : STR_AI_LIST_CAPTION_AI);
} }
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{ {
if (widget != WID_SCRL_LIST) return; if (widget != WID_SCRL_LIST) return;
@ -115,7 +115,7 @@ struct ScriptListWindow : public Window {
size->height = 5 * this->line_height; size->height = 5 * this->line_height;
} }
void DrawWidget(const Rect &r, int widget) const override void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
switch (widget) { switch (widget) {
case WID_SCRL_LIST: { case WID_SCRL_LIST: {
@ -192,7 +192,7 @@ struct ScriptListWindow : public Window {
} }
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
switch (widget) { switch (widget) {
case WID_SCRL_LIST: { // Select one of the Scripts case WID_SCRL_LIST: { // Select one of the Scripts
@ -351,14 +351,14 @@ struct ScriptSettingsWindow : public Window {
this->vscroll->SetCount(this->visible_settings.size()); this->vscroll->SetCount(this->visible_settings.size());
} }
void SetStringParameters(int widget) const override void SetStringParameters(WidgetID widget) const override
{ {
if (widget != WID_SCRS_CAPTION) return; if (widget != WID_SCRS_CAPTION) return;
SetDParam(0, (this->slot == OWNER_DEITY) ? STR_AI_SETTINGS_CAPTION_GAMESCRIPT : STR_AI_SETTINGS_CAPTION_AI); SetDParam(0, (this->slot == OWNER_DEITY) ? STR_AI_SETTINGS_CAPTION_GAMESCRIPT : STR_AI_SETTINGS_CAPTION_AI);
} }
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{ {
if (widget != WID_SCRS_BACKGROUND) return; if (widget != WID_SCRS_BACKGROUND) return;
@ -369,7 +369,7 @@ struct ScriptSettingsWindow : public Window {
size->height = 5 * this->line_height; size->height = 5 * this->line_height;
} }
void DrawWidget(const Rect &r, int widget) const override void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
if (widget != WID_SCRS_BACKGROUND) return; if (widget != WID_SCRS_BACKGROUND) return;
@ -437,7 +437,7 @@ struct ScriptSettingsWindow : public Window {
this->DrawWidgets(); this->DrawWidgets();
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
switch (widget) { switch (widget) {
case WID_SCRS_BACKGROUND: { case WID_SCRS_BACKGROUND: {
@ -540,14 +540,14 @@ struct ScriptSettingsWindow : public Window {
SetValue(value); SetValue(value);
} }
void OnDropdownSelect(int widget, int index) override void OnDropdownSelect(WidgetID widget, int index) override
{ {
if (widget != WID_SCRS_SETTING_DROPDOWN) return; if (widget != WID_SCRS_SETTING_DROPDOWN) return;
assert(this->clicked_dropdown); assert(this->clicked_dropdown);
SetValue(index); SetValue(index);
} }
void OnDropdownClose(Point, int widget, int, bool) override void OnDropdownClose(Point, WidgetID widget, int, bool) override
{ {
if (widget != WID_SCRS_SETTING_DROPDOWN) return; if (widget != WID_SCRS_SETTING_DROPDOWN) return;
/* We cannot raise the dropdown button just yet. OnClick needs some hint, whether /* We cannot raise the dropdown button just yet. OnClick needs some hint, whether
@ -652,7 +652,7 @@ struct ScriptTextfileWindow : public TextfileWindow {
this->OnInvalidateData(); this->OnInvalidateData();
} }
void SetStringParameters(int widget) const override void SetStringParameters(WidgetID widget) const override
{ {
if (widget == WID_TF_CAPTION) { if (widget == WID_TF_CAPTION) {
SetDParam(0, (slot == OWNER_DEITY) ? STR_CONTENT_TYPE_GAME_SCRIPT : STR_CONTENT_TYPE_AI); SetDParam(0, (slot == OWNER_DEITY) ? STR_CONTENT_TYPE_GAME_SCRIPT : STR_CONTENT_TYPE_AI);
@ -803,19 +803,14 @@ struct ScriptDebugWindow : public Window {
this->CreateNestedTree(); this->CreateNestedTree();
this->vscroll = this->GetScrollbar(WID_SCRD_VSCROLLBAR); this->vscroll = this->GetScrollbar(WID_SCRD_VSCROLLBAR);
this->hscroll = this->GetScrollbar(WID_SCRD_HSCROLLBAR); this->hscroll = this->GetScrollbar(WID_SCRD_HSCROLLBAR);
this->show_break_box = _settings_client.gui.ai_developer_tools;
this->GetWidget<NWidgetStacked>(WID_SCRD_BREAK_STRING_WIDGETS)->SetDisplayedPlane(this->show_break_box ? 0 : SZSP_HORIZONTAL);
this->FinishInitNested(number); this->FinishInitNested(number);
if (!this->show_break_box) this->filter.break_check_enabled = false;
this->last_vscroll_pos = 0; this->last_vscroll_pos = 0;
this->autoscroll = true; this->autoscroll = true;
this->highlight_row = -1; this->highlight_row = -1;
this->querystrings[WID_SCRD_BREAK_STR_EDIT_BOX] = &this->break_editbox; this->querystrings[WID_SCRD_BREAK_STR_EDIT_BOX] = &this->break_editbox;
SetWidgetsDisabledState(!this->show_break_box, WID_SCRD_BREAK_STR_ON_OFF_BTN, WID_SCRD_BREAK_STR_EDIT_BOX, WID_SCRD_MATCH_CASE_BTN);
this->hscroll->SetStepSize(10); // Speed up horizontal scrollbar this->hscroll->SetStepSize(10); // Speed up horizontal scrollbar
/* Restore the break string value from static variable, and enable the filter. */ /* Restore the break string value from static variable, and enable the filter. */
@ -831,6 +826,11 @@ struct ScriptDebugWindow : public Window {
void OnInit() override void OnInit() override
{ {
this->show_break_box = _settings_client.gui.ai_developer_tools;
this->GetWidget<NWidgetStacked>(WID_SCRD_BREAK_STRING_WIDGETS)->SetDisplayedPlane(this->show_break_box ? 0 : SZSP_HORIZONTAL);
if (!this->show_break_box) this->filter.break_check_enabled = false;
SetWidgetsDisabledState(!this->show_break_box, WID_SCRD_BREAK_STR_ON_OFF_BTN, WID_SCRD_BREAK_STR_EDIT_BOX, WID_SCRD_MATCH_CASE_BTN);
this->InvalidateData(-1); this->InvalidateData(-1);
} }
@ -839,7 +839,7 @@ struct ScriptDebugWindow : public Window {
ScriptDebugWindow::initial_state = this->filter; ScriptDebugWindow::initial_state = this->filter;
} }
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{ {
if (widget == WID_SCRD_LOG_PANEL) { if (widget == WID_SCRD_LOG_PANEL) {
resize->height = GetCharacterHeight(FS_NORMAL) + WidgetDimensions::scaled.vsep_normal; resize->height = GetCharacterHeight(FS_NORMAL) + WidgetDimensions::scaled.vsep_normal;
@ -856,7 +856,7 @@ struct ScriptDebugWindow : public Window {
this->DrawWidgets(); this->DrawWidgets();
} }
void SetStringParameters(int widget) const override void SetStringParameters(WidgetID widget) const override
{ {
if (widget != WID_SCRD_NAME_TEXT) return; if (widget != WID_SCRD_NAME_TEXT) return;
@ -877,7 +877,7 @@ struct ScriptDebugWindow : public Window {
} }
} }
void DrawWidget(const Rect &r, int widget) const override void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
switch (widget) { switch (widget) {
case WID_SCRD_LOG_PANEL: case WID_SCRD_LOG_PANEL:
@ -898,7 +898,7 @@ struct ScriptDebugWindow : public Window {
* @param widget Widget index to start. * @param widget Widget index to start.
* @param start Widget index of first company button. * @param start Widget index of first company button.
*/ */
void DrawWidgetCompanyButton(const Rect &r, int widget, int start) const void DrawWidgetCompanyButton(const Rect &r, WidgetID widget, int start) const
{ {
if (this->IsWidgetDisabled(widget)) return; if (this->IsWidgetDisabled(widget)) return;
CompanyID cid = (CompanyID)(widget - start); CompanyID cid = (CompanyID)(widget - start);
@ -1052,7 +1052,7 @@ struct ScriptDebugWindow : public Window {
this->last_vscroll_pos = this->vscroll->GetPosition(); this->last_vscroll_pos = this->vscroll->GetPosition();
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
/* Also called for hotkeys, so check for disabledness */ /* Also called for hotkeys, so check for disabledness */
if (this->IsWidgetDisabled(widget)) return; if (this->IsWidgetDisabled(widget)) return;
@ -1128,7 +1128,7 @@ struct ScriptDebugWindow : public Window {
} }
} }
void OnEditboxChanged(int wid) override void OnEditboxChanged(WidgetID wid) override
{ {
if (wid != WID_SCRD_BREAK_STR_EDIT_BOX) return; if (wid != WID_SCRD_BREAK_STR_EDIT_BOX) return;
@ -1145,6 +1145,8 @@ struct ScriptDebugWindow : public Window {
*/ */
void OnInvalidateData([[maybe_unused]] int data = 0, [[maybe_unused]] bool gui_scope = true) override void OnInvalidateData([[maybe_unused]] int data = 0, [[maybe_unused]] bool gui_scope = true) override
{ {
if (this->show_break_box != _settings_client.gui.ai_developer_tools) this->ReInit();
/* If the log message is related to the active company tab, check the break string. /* If the log message is related to the active company tab, check the break string.
* This needs to be done in gameloop-scope, so the AI is suspended immediately. */ * This needs to be done in gameloop-scope, so the AI is suspended immediately. */
if (!gui_scope && data == this->filter.script_debug_company && if (!gui_scope && data == this->filter.script_debug_company &&
@ -1218,9 +1220,9 @@ struct ScriptDebugWindow : public Window {
}; };
/** Make a number of rows with buttons for each company for the Script debug window. */ /** Make a number of rows with buttons for each company for the Script debug window. */
NWidgetBase *MakeCompanyButtonRowsScriptDebug(int *biggest_index) std::unique_ptr<NWidgetBase> MakeCompanyButtonRowsScriptDebug()
{ {
return MakeCompanyButtonRows(biggest_index, WID_SCRD_COMPANY_BUTTON_START, WID_SCRD_COMPANY_BUTTON_END, COLOUR_GREY, 8, STR_AI_DEBUG_SELECT_AI_TOOLTIP); return MakeCompanyButtonRows(WID_SCRD_COMPANY_BUTTON_START, WID_SCRD_COMPANY_BUTTON_END, COLOUR_GREY, 8, STR_AI_DEBUG_SELECT_AI_TOOLTIP);
} }
/** /**

@ -105,7 +105,7 @@ struct BaseSetTextfileWindow : public TextfileWindow {
this->LoadTextfile(textfile, BASESET_DIR); this->LoadTextfile(textfile, BASESET_DIR);
} }
void SetStringParameters(int widget) const override void SetStringParameters(WidgetID widget) const override
{ {
if (widget == WID_TF_CAPTION) { if (widget == WID_TF_CAPTION) {
SetDParam(0, content_type); SetDParam(0, content_type);
@ -179,7 +179,7 @@ struct GameOptionsWindow : Window {
GameSettings *opt; GameSettings *opt;
bool reload; bool reload;
int gui_scale; int gui_scale;
static inline int active_tab = WID_GO_TAB_GENERAL; static inline WidgetID active_tab = WID_GO_TAB_GENERAL;
enum class QueryTextItem { enum class QueryTextItem {
None, None,
@ -217,7 +217,7 @@ struct GameOptionsWindow : Window {
* @param selected_index Currently selected item * @param selected_index Currently selected item
* @return the built dropdown list, or nullptr if the widget has no dropdown menu. * @return the built dropdown list, or nullptr if the widget has no dropdown menu.
*/ */
DropDownList BuildDropDownList(int widget, int *selected_index) const DropDownList BuildDropDownList(WidgetID widget, int *selected_index) const
{ {
DropDownList list; DropDownList list;
switch (widget) { switch (widget) {
@ -322,7 +322,7 @@ struct GameOptionsWindow : Window {
return list; return list;
} }
void SetStringParameters(int widget) const override void SetStringParameters(WidgetID widget) const override
{ {
switch (widget) { switch (widget) {
case WID_GO_CURRENCY_DROPDOWN: { case WID_GO_CURRENCY_DROPDOWN: {
@ -369,7 +369,7 @@ struct GameOptionsWindow : Window {
} }
} }
void DrawWidget(const Rect &r, int widget) const override void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
switch (widget) { switch (widget) {
case WID_GO_BASE_GRF_DESCRIPTION: case WID_GO_BASE_GRF_DESCRIPTION:
@ -406,7 +406,7 @@ struct GameOptionsWindow : Window {
} }
} }
void SetTab(int widget) void SetTab(WidgetID widget)
{ {
this->SetWidgetsLoweredState(false, WID_GO_TAB_GENERAL, WID_GO_TAB_GRAPHICS, WID_GO_TAB_SOUND); this->SetWidgetsLoweredState(false, WID_GO_TAB_GENERAL, WID_GO_TAB_GRAPHICS, WID_GO_TAB_SOUND);
this->LowerWidget(widget); this->LowerWidget(widget);
@ -455,7 +455,7 @@ struct GameOptionsWindow : Window {
if (changed) this->ReInit(0, 0, this->flags & WF_CENTERED); if (changed) this->ReInit(0, 0, this->flags & WF_CENTERED);
} }
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{ {
switch (widget) { switch (widget) {
case WID_GO_TEXT_SFX_VOLUME: case WID_GO_TEXT_SFX_VOLUME:
@ -475,7 +475,7 @@ struct GameOptionsWindow : Window {
} }
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
if (widget >= WID_GO_BASE_GRF_TEXTFILE && widget < WID_GO_BASE_GRF_TEXTFILE + TFT_CONTENT_END) { if (widget >= WID_GO_BASE_GRF_TEXTFILE && widget < WID_GO_BASE_GRF_TEXTFILE + TFT_CONTENT_END) {
if (BaseGraphics::GetUsedSet() == nullptr) return; if (BaseGraphics::GetUsedSet() == nullptr) return;
@ -676,7 +676,7 @@ struct GameOptionsWindow : Window {
} }
} }
void OnDropdownSelect(int widget, int index) override void OnDropdownSelect(WidgetID widget, int index) override
{ {
switch (widget) { switch (widget) {
case WID_GO_CURRENCY_DROPDOWN: // Currency case WID_GO_CURRENCY_DROPDOWN: // Currency
@ -2602,7 +2602,7 @@ struct GameSettingsWindow : Window {
_circle_size = maxdim(GetSpriteSize(SPR_CIRCLE_FOLDED), GetSpriteSize(SPR_CIRCLE_UNFOLDED)); _circle_size = maxdim(GetSpriteSize(SPR_CIRCLE_FOLDED), GetSpriteSize(SPR_CIRCLE_UNFOLDED));
} }
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{ {
switch (widget) { switch (widget) {
case WID_GS_OPTIONSPANEL: case WID_GS_OPTIONSPANEL:
@ -2670,7 +2670,7 @@ struct GameSettingsWindow : Window {
} }
} }
void SetStringParameters(int widget) const override void SetStringParameters(WidgetID widget) const override
{ {
switch (widget) { switch (widget) {
case WID_GS_RESTRICT_DROPDOWN: case WID_GS_RESTRICT_DROPDOWN:
@ -2688,7 +2688,7 @@ struct GameSettingsWindow : Window {
} }
} }
DropDownList BuildDropDownList(int widget) const DropDownList BuildDropDownList(WidgetID widget) const
{ {
DropDownList list; DropDownList list;
switch (widget) { switch (widget) {
@ -2712,7 +2712,7 @@ struct GameSettingsWindow : Window {
return list; return list;
} }
void DrawWidget(const Rect &r, int widget) const override void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
switch (widget) { switch (widget) {
case WID_GS_OPTIONSPANEL: { case WID_GS_OPTIONSPANEL: {
@ -2783,7 +2783,7 @@ struct GameSettingsWindow : Window {
this->last_clicked = pe; this->last_clicked = pe;
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
switch (widget) { switch (widget) {
case WID_GS_EXPAND_ALL: case WID_GS_EXPAND_ALL:
@ -3034,7 +3034,7 @@ struct GameSettingsWindow : Window {
this->SetDirty(); this->SetDirty();
} }
void OnDropdownSelect(int widget, int index) override void OnDropdownSelect(WidgetID widget, int index) override
{ {
switch (widget) { switch (widget) {
case WID_GS_RESTRICT_DROPDOWN: case WID_GS_RESTRICT_DROPDOWN:
@ -3071,7 +3071,7 @@ struct GameSettingsWindow : Window {
} }
} }
void OnDropdownClose(Point pt, int widget, int index, bool instant_close) override void OnDropdownClose(Point pt, WidgetID widget, int index, bool instant_close) override
{ {
if (widget != WID_GS_SETTING_DROPDOWN) { if (widget != WID_GS_SETTING_DROPDOWN) {
/* Normally the default implementation of OnDropdownClose() takes care of /* Normally the default implementation of OnDropdownClose() takes care of
@ -3120,7 +3120,7 @@ struct GameSettingsWindow : Window {
this->SetWidgetDisabledState(WID_GS_COLLAPSE_ALL, all_folded); this->SetWidgetDisabledState(WID_GS_COLLAPSE_ALL, all_folded);
} }
void OnEditboxChanged(int wid) override void OnEditboxChanged(WidgetID wid) override
{ {
if (wid == WID_GS_FILTER) { if (wid == WID_GS_FILTER) {
this->filter.string.SetFilterTerm(this->filter_editbox.text.buf); this->filter.string.SetFilterTerm(this->filter_editbox.text.buf);
@ -3283,7 +3283,7 @@ struct CustomCurrencyWindow : Window {
this->SetWidgetDisabledState(WID_CC_YEAR_UP, _custom_currency.to_euro == MAX_YEAR); this->SetWidgetDisabledState(WID_CC_YEAR_UP, _custom_currency.to_euro == MAX_YEAR);
} }
void SetStringParameters(int widget) const override void SetStringParameters(WidgetID widget) const override
{ {
switch (widget) { switch (widget) {
case WID_CC_RATE: SetDParam(0, 1); SetDParam(1, 1); break; case WID_CC_RATE: SetDParam(0, 1); SetDParam(1, 1); break;
@ -3301,7 +3301,7 @@ struct CustomCurrencyWindow : Window {
} }
} }
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{ {
switch (widget) { switch (widget) {
/* Set the appropriate width for the up/down buttons. */ /* Set the appropriate width for the up/down buttons. */
@ -3328,7 +3328,7 @@ struct CustomCurrencyWindow : Window {
} }
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
int line = 0; int line = 0;
int len = 0; int len = 0;

@ -189,7 +189,7 @@ struct SignListWindow : Window, SignList {
this->DrawWidgets(); this->DrawWidgets();
} }
void DrawWidget(const Rect &r, int widget) const override void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
switch (widget) { switch (widget) {
case WID_SIL_LIST: { case WID_SIL_LIST: {
@ -223,12 +223,12 @@ struct SignListWindow : Window, SignList {
} }
} }
void SetStringParameters(int widget) const override void SetStringParameters(WidgetID widget) const override
{ {
if (widget == WID_SIL_CAPTION) SetDParam(0, this->vscroll->GetCount()); if (widget == WID_SIL_CAPTION) SetDParam(0, this->vscroll->GetCount());
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
switch (widget) { switch (widget) {
case WID_SIL_LIST: { case WID_SIL_LIST: {
@ -260,7 +260,7 @@ struct SignListWindow : Window, SignList {
this->vscroll->SetCapacityFromWidget(this, WID_SIL_LIST, WidgetDimensions::scaled.framerect.Vertical()); this->vscroll->SetCapacityFromWidget(this, WID_SIL_LIST, WidgetDimensions::scaled.framerect.Vertical());
} }
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{ {
switch (widget) { switch (widget) {
case WID_SIL_LIST: { case WID_SIL_LIST: {
@ -296,7 +296,7 @@ struct SignListWindow : Window, SignList {
return ES_HANDLED; return ES_HANDLED;
} }
void OnEditboxChanged(int widget) override void OnEditboxChanged(WidgetID widget) override
{ {
if (widget == WID_SIL_FILTER_TEXT) this->SetFilterString(this->filter_editbox.text.buf); if (widget == WID_SIL_FILTER_TEXT) this->SetFilterString(this->filter_editbox.text.buf);
} }
@ -475,7 +475,7 @@ struct SignWindow : Window, SignList {
return next ? this->signs.front() : this->signs.back(); return next ? this->signs.front() : this->signs.back();
} }
void SetStringParameters(int widget) const override void SetStringParameters(WidgetID widget) const override
{ {
switch (widget) { switch (widget) {
case WID_QES_CAPTION: case WID_QES_CAPTION:
@ -484,7 +484,7 @@ struct SignWindow : Window, SignList {
} }
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
switch (widget) { switch (widget) {
case WID_QES_LOCATION: { case WID_QES_LOCATION: {

@ -396,6 +396,7 @@ static bool FixTTOEngines()
} }
Date aging_date = std::min(_date + DAYS_TILL_ORIGINAL_BASE_YEAR.AsDelta(), ConvertYMDToDate(2050, 0, 1)); Date aging_date = std::min(_date + DAYS_TILL_ORIGINAL_BASE_YEAR.AsDelta(), ConvertYMDToDate(2050, 0, 1));
YearMonthDay aging_ymd = ConvertDateToYMD(aging_date);
for (EngineID i = 0; i < 256; i++) { for (EngineID i = 0; i < 256; i++) {
int oi = ttd_to_tto[i]; int oi = ttd_to_tto[i];
@ -404,7 +405,7 @@ static bool FixTTOEngines()
if (oi == 255) { if (oi == 255) {
/* Default engine is used */ /* Default engine is used */
_date += DAYS_TILL_ORIGINAL_BASE_YEAR.AsDelta(); _date += DAYS_TILL_ORIGINAL_BASE_YEAR.AsDelta();
StartupOneEngine(e, aging_date, 0, INT_MAX); StartupOneEngine(e, aging_date, aging_ymd, 0, INT_MAX);
CalcEngineReliability(e, false); CalcEngineReliability(e, false);
e->intro_date -= DAYS_TILL_ORIGINAL_BASE_YEAR.AsDelta(); e->intro_date -= DAYS_TILL_ORIGINAL_BASE_YEAR.AsDelta();
_date -= DAYS_TILL_ORIGINAL_BASE_YEAR.AsDelta(); _date -= DAYS_TILL_ORIGINAL_BASE_YEAR.AsDelta();

@ -1114,7 +1114,7 @@ void SmallMapWindow::RebuildColourIndexIfNecessary()
BuildLandLegend(); BuildLandLegend();
} }
/* virtual */ void SmallMapWindow::SetStringParameters(int widget) const /* virtual */ void SmallMapWindow::SetStringParameters(WidgetID widget) const
{ {
switch (widget) { switch (widget) {
case WID_SM_CAPTION: case WID_SM_CAPTION:
@ -1192,7 +1192,7 @@ void SmallMapWindow::RebuildColourIndexIfNecessary()
this->DrawWidgets(); this->DrawWidgets();
} }
/* virtual */ void SmallMapWindow::DrawWidget(const Rect &r, int widget) const /* virtual */ void SmallMapWindow::DrawWidget(const Rect &r, WidgetID widget) const
{ {
switch (widget) { switch (widget) {
case WID_SM_MAP: { case WID_SM_MAP: {
@ -1392,7 +1392,7 @@ int SmallMapWindow::GetPositionOnLegend(Point pt)
return (column * number_of_rows) + line; return (column * number_of_rows) + line;
} }
/* virtual */ void SmallMapWindow::OnMouseOver([[maybe_unused]] Point pt, int widget) /* virtual */ void SmallMapWindow::OnMouseOver([[maybe_unused]] Point pt, WidgetID widget)
{ {
IndustryType new_highlight = INVALID_INDUSTRYTYPE; IndustryType new_highlight = INVALID_INDUSTRYTYPE;
if (widget == WID_SM_LEGEND && this->map_type == SMT_INDUSTRY) { if (widget == WID_SM_LEGEND && this->map_type == SMT_INDUSTRY) {
@ -1409,7 +1409,7 @@ int SmallMapWindow::GetPositionOnLegend(Point pt)
} }
} }
/* virtual */ void SmallMapWindow::OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) /* virtual */ void SmallMapWindow::OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count)
{ {
switch (widget) { switch (widget) {
case WID_SM_MAP: { // Map window case WID_SM_MAP: { // Map window
@ -1555,7 +1555,7 @@ int SmallMapWindow::GetPositionOnLegend(Point pt)
this->SetDirty(); this->SetDirty();
} }
/* virtual */ bool SmallMapWindow::OnRightClick([[maybe_unused]] Point pt, int widget) /* virtual */ bool SmallMapWindow::OnRightClick([[maybe_unused]] Point pt, WidgetID widget)
{ {
if (widget != WID_SM_MAP || _scrolling_viewport) return false; if (widget != WID_SM_MAP || _scrolling_viewport) return false;
@ -1747,8 +1747,9 @@ public:
void SetupSmallestSize(Window *w) override void SetupSmallestSize(Window *w) override
{ {
NWidgetBase *display = this->head; assert(this->children.size() == 2);
NWidgetBase *bar = display->next; NWidgetBase *display = this->children.front().get();
NWidgetBase *bar = this->children.back().get();
display->SetupSmallestSize(w); display->SetupSmallestSize(w);
bar->SetupSmallestSize(w); bar->SetupSmallestSize(w);
@ -1770,8 +1771,9 @@ public:
this->current_x = given_width; this->current_x = given_width;
this->current_y = given_height; this->current_y = given_height;
NWidgetBase *display = this->head; assert(this->children.size() == 2);
NWidgetBase *bar = display->next; NWidgetBase *display = this->children.front().get();
NWidgetBase *bar = this->children.back().get();
if (sizing == ST_SMALLEST) { if (sizing == ST_SMALLEST) {
this->smallest_x = given_width; this->smallest_x = given_width;
@ -1837,12 +1839,12 @@ static const NWidgetPart _nested_smallmap_bar[] = {
EndContainer(), EndContainer(),
}; };
static NWidgetBase *SmallMapDisplay(int *biggest_index) static std::unique_ptr<NWidgetBase> SmallMapDisplay()
{ {
NWidgetContainer *map_display = new NWidgetSmallmapDisplay; std::unique_ptr<NWidgetBase> map_display = std::make_unique<NWidgetSmallmapDisplay>();
MakeNWidgets(std::begin(_nested_smallmap_display), std::end(_nested_smallmap_display), biggest_index, map_display); map_display = MakeNWidgets(std::begin(_nested_smallmap_display), std::end(_nested_smallmap_display), std::move(map_display));
MakeNWidgets(std::begin(_nested_smallmap_bar), std::end(_nested_smallmap_bar), biggest_index, map_display); map_display = MakeNWidgets(std::begin(_nested_smallmap_bar), std::end(_nested_smallmap_bar), std::move(map_display));
return map_display; return map_display;
} }

@ -207,17 +207,17 @@ public:
Point GetStationMiddle(const Station *st) const; Point GetStationMiddle(const Station *st) const;
void Close([[maybe_unused]] int data = 0) override; void Close([[maybe_unused]] int data = 0) override;
void SetStringParameters(int widget) const override; void SetStringParameters(WidgetID widget) const override;
void OnInit() override; void OnInit() override;
void OnPaint() override; void OnPaint() override;
void DrawWidget(const Rect &r, int widget) const override; void DrawWidget(const Rect &r, WidgetID widget) const override;
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override; void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override;
void OnInvalidateData(int data = 0, bool gui_scope = true) override; void OnInvalidateData(int data = 0, bool gui_scope = true) override;
bool OnRightClick(Point pt, int widget) override; bool OnRightClick(Point pt, WidgetID widget) override;
void OnMouseWheel(int wheel) override; void OnMouseWheel(int wheel) override;
void OnRealtimeTick(uint delta_ms) override; void OnRealtimeTick(uint delta_ms) override;
void OnScroll(Point delta) override; void OnScroll(Point delta) override;
void OnMouseOver(Point pt, int widget) override; void OnMouseOver(Point pt, WidgetID widget) override;
void TakeScreenshot(); void TakeScreenshot();
void ScreenshotCallbackHandler(void *buf, uint y, uint pitch, uint n); void ScreenshotCallbackHandler(void *buf, uint y, uint pitch, uint n);

@ -500,7 +500,7 @@ public:
this->Window::Close(data); this->Window::Close(data);
} }
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{ {
switch (widget) { switch (widget) {
case WID_STL_SORTBY: { case WID_STL_SORTBY: {
@ -554,7 +554,7 @@ public:
this->DrawWidgets(); this->DrawWidgets();
} }
void DrawWidget(const Rect &r, int widget) const override void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
switch (widget) { switch (widget) {
case WID_STL_SORTBY: case WID_STL_SORTBY:
@ -626,7 +626,7 @@ public:
} }
} }
void SetStringParameters(int widget) const override void SetStringParameters(WidgetID widget) const override
{ {
if (widget == WID_STL_CAPTION) { if (widget == WID_STL_CAPTION) {
SetDParam(0, this->window_number); SetDParam(0, this->window_number);
@ -634,7 +634,7 @@ public:
} }
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
switch (widget) { switch (widget) {
case WID_STL_LIST: { case WID_STL_LIST: {
@ -673,7 +673,7 @@ public:
break; break;
case WID_STL_FACILALL: case WID_STL_FACILALL:
for (uint i = WID_STL_TRAIN; i <= WID_STL_SHIP; i++) { for (WidgetID i = WID_STL_TRAIN; i <= WID_STL_SHIP; i++) {
this->LowerWidget(i); this->LowerWidget(i);
} }
@ -749,7 +749,7 @@ public:
} }
} }
void OnDropdownSelect(int widget, int index) override void OnDropdownSelect(WidgetID widget, int index) override
{ {
if (widget == WID_STL_SORTDROPBTN) { if (widget == WID_STL_SORTDROPBTN) {
if (this->stations.SortType() != index) { if (this->stations.SortType() != index) {
@ -819,23 +819,21 @@ const StringID CompanyStationsWindow::sorter_names[] = {
/** /**
* Make a horizontal row of cargo buttons, starting at widget #WID_STL_CARGOSTART. * Make a horizontal row of cargo buttons, starting at widget #WID_STL_CARGOSTART.
* @param biggest_index Pointer to store biggest used widget number of the buttons.
* @return Horizontal row. * @return Horizontal row.
*/ */
static NWidgetBase *CargoWidgets(int *biggest_index) static std::unique_ptr<NWidgetBase> CargoWidgets()
{ {
NWidgetHorizontal *container = new NWidgetHorizontal(); auto container = std::make_unique<NWidgetHorizontal>();
for (uint i = 0; i < _sorted_standard_cargo_specs.size(); i++) { for (uint i = 0; i < _sorted_standard_cargo_specs.size(); i++) {
NWidgetBackground *panel = new NWidgetBackground(WWT_PANEL, COLOUR_GREY, WID_STL_CARGOSTART + i); auto panel = std::make_unique<NWidgetBackground>(WWT_PANEL, COLOUR_GREY, WID_STL_CARGOSTART + i);
panel->SetMinimalSize(14, 0); panel->SetMinimalSize(14, 0);
panel->SetMinimalTextLines(1, 0, FS_NORMAL); panel->SetMinimalTextLines(1, 0, FS_NORMAL);
panel->SetResize(0, 0); panel->SetResize(0, 0);
panel->SetFill(0, 1); panel->SetFill(0, 1);
panel->SetDataTip(0, STR_STATION_LIST_USE_CTRL_TO_SELECT_MORE); panel->SetDataTip(0, STR_STATION_LIST_USE_CTRL_TO_SELECT_MORE);
container->Add(panel); container->Add(std::move(panel));
} }
*biggest_index = WID_STL_CARGOSTART + static_cast<int>(_sorted_standard_cargo_specs.size());
return container; return container;
} }
@ -1509,7 +1507,7 @@ struct StationViewWindow : public Window {
data->Update(count); data->Update(count);
} }
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{ {
switch (widget) { switch (widget) {
case WID_SV_WAITING: case WID_SV_WAITING:
@ -1546,7 +1544,7 @@ struct StationViewWindow : public Window {
} }
} }
bool OnTooltip(Point pt, int widget, TooltipCloseCondition close_cond) override bool OnTooltip(Point pt, WidgetID widget, TooltipCloseCondition close_cond) override
{ {
if (widget == WID_SV_RENAME) { if (widget == WID_SV_RENAME) {
SetDParam(0, STR_STATION_VIEW_RENAME_TOOLTIP); SetDParam(0, STR_STATION_VIEW_RENAME_TOOLTIP);
@ -1643,7 +1641,7 @@ struct StationViewWindow : public Window {
} }
} }
void SetStringParameters(int widget) const override void SetStringParameters(WidgetID widget) const override
{ {
if (widget == WID_SV_CAPTION) { if (widget == WID_SV_CAPTION) {
const Station *st = Station::Get(this->window_number); const Station *st = Station::Get(this->window_number);
@ -2101,7 +2099,7 @@ struct StationViewWindow : public Window {
this->SetWidgetDirty(WID_SV_WAITING); this->SetWidgetDirty(WID_SV_WAITING);
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
switch (widget) { switch (widget) {
case WID_SV_WAITING: case WID_SV_WAITING:
@ -2326,7 +2324,7 @@ struct StationViewWindow : public Window {
this->SetDirty(); this->SetDirty();
} }
void OnDropdownSelect(int widget, int index) override void OnDropdownSelect(WidgetID widget, int index) override
{ {
if (widget == WID_SV_SORT_BY) { if (widget == WID_SV_SORT_BY) {
this->SelectSortBy(index); this->SelectSortBy(index);
@ -2563,7 +2561,7 @@ struct SelectStationWindow : Window {
this->Window::Close(); this->Window::Close();
} }
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{ {
if (widget != WID_JS_PANEL) return; if (widget != WID_JS_PANEL) return;
@ -2583,7 +2581,7 @@ struct SelectStationWindow : Window {
*size = d; *size = d;
} }
void DrawWidget(const Rect &r, int widget) const override void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
if (widget != WID_JS_PANEL) return; if (widget != WID_JS_PANEL) return;
@ -2604,7 +2602,7 @@ struct SelectStationWindow : Window {
} }
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
if (widget != WID_JS_PANEL) return; if (widget != WID_JS_PANEL) return;
@ -2651,7 +2649,7 @@ struct SelectStationWindow : Window {
this->SetDirty(); this->SetDirty();
} }
void OnMouseOver([[maybe_unused]] Point pt, int widget) override void OnMouseOver([[maybe_unused]] Point pt, WidgetID widget) override
{ {
if (widget != WID_JS_PANEL) { if (widget != WID_JS_PANEL) {
SetViewportCatchmentSpecializedStation<T>(nullptr, true); SetViewportCatchmentSpecializedStation<T>(nullptr, true);
@ -3050,7 +3048,7 @@ public:
this->data[line_nr][0] = '\0'; this->data[line_nr][0] = '\0';
} }
void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override
{ {
if (widget != 0) return; if (widget != 0) return;
@ -3070,7 +3068,7 @@ public:
size->height -= WidgetDimensions::scaled.vsep_normal; size->height -= WidgetDimensions::scaled.vsep_normal;
} }
void DrawWidget(const Rect &r, int widget) const override void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
GfxDrawLine(r.left, r.top, r.right, r.top, PC_BLACK); GfxDrawLine(r.left, r.top, r.right, r.top, PC_BLACK);
GfxDrawLine(r.left, r.bottom, r.right, r.bottom, PC_BLACK); GfxDrawLine(r.left, r.bottom, r.right, r.bottom, PC_BLACK);

@ -88,7 +88,7 @@ struct StatusBarWindow : Window {
Window::FindWindowPlacementAndResize(_toolbar_width, def_height); Window::FindWindowPlacementAndResize(_toolbar_width, def_height);
} }
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{ {
Dimension d; Dimension d;
switch (widget) { switch (widget) {
@ -114,7 +114,7 @@ struct StatusBarWindow : Window {
*size = maxdim(d, *size); *size = maxdim(d, *size);
} }
void DrawWidget(const Rect &r, int widget) const override void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
Rect tr = r.Shrink(WidgetDimensions::scaled.framerect, RectPadding::zero); Rect tr = r.Shrink(WidgetDimensions::scaled.framerect, RectPadding::zero);
tr.top = CenterBounds(r.top, r.bottom, GetCharacterHeight(FS_NORMAL)); tr.top = CenterBounds(r.top, r.bottom, GetCharacterHeight(FS_NORMAL));
@ -198,7 +198,7 @@ struct StatusBarWindow : Window {
} }
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
switch (widget) { switch (widget) {
case WID_S_MIDDLE: ShowLastNewsMessage(); break; case WID_S_MIDDLE: ShowLastNewsMessage(); break;

@ -646,7 +646,7 @@ public:
} }
} }
void SetStringParameters(int widget) const override void SetStringParameters(WidgetID widget) const override
{ {
switch (widget) { switch (widget) {
case WID_SB_SEL_PAGE: { case WID_SB_SEL_PAGE: {
@ -680,7 +680,7 @@ public:
this->DrawWidgets(); this->DrawWidgets();
} }
void DrawWidget(const Rect &r, int widget) const override void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
if (widget != WID_SB_PAGE_PANEL) return; if (widget != WID_SB_PAGE_PANEL) return;
@ -754,7 +754,7 @@ public:
} }
} }
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{ {
if (widget != WID_SB_SEL_PAGE && widget != WID_SB_PAGE_PANEL) return; if (widget != WID_SB_SEL_PAGE && widget != WID_SB_PAGE_PANEL) return;
@ -804,7 +804,7 @@ public:
this->vscroll->SetCount(this->GetContentHeight()); this->vscroll->SetCount(this->GetContentHeight());
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
switch (widget) { switch (widget) {
case WID_SB_SEL_PAGE: { case WID_SB_SEL_PAGE: {
@ -845,7 +845,7 @@ public:
} }
} }
void OnDropdownSelect(int widget, int index) override void OnDropdownSelect(WidgetID widget, int index) override
{ {
if (widget != WID_SB_SEL_PAGE) return; if (widget != WID_SB_SEL_PAGE) return;

@ -340,6 +340,8 @@ void StrMakeValidInPlace(char *str, StringValidationSettings settings)
*/ */
std::string StrMakeValid(std::string_view str, StringValidationSettings settings) std::string StrMakeValid(std::string_view str, StringValidationSettings settings)
{ {
if (str.empty()) return {};
auto buf = str.data(); auto buf = str.data();
auto last = buf + str.size() - 1; auto last = buf + str.size() - 1;

@ -36,7 +36,7 @@ struct SubsidyListWindow : Window {
this->OnInvalidateData(0); this->OnInvalidateData(0);
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
if (widget != WID_SUL_PANEL) return; if (widget != WID_SUL_PANEL) return;
@ -125,7 +125,7 @@ struct SubsidyListWindow : Window {
return 3 + num_awarded + num_not_awarded; return 3 + num_awarded + num_not_awarded;
} }
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{ {
if (widget != WID_SUL_PANEL) return; if (widget != WID_SUL_PANEL) return;
Dimension d = maxdim(GetStringBoundingBox(STR_SUBSIDIES_OFFERED_TITLE), GetStringBoundingBox(STR_SUBSIDIES_SUBSIDISED_TITLE)); Dimension d = maxdim(GetStringBoundingBox(STR_SUBSIDIES_OFFERED_TITLE), GetStringBoundingBox(STR_SUBSIDIES_SUBSIDISED_TITLE));
@ -138,7 +138,7 @@ struct SubsidyListWindow : Window {
*size = maxdim(*size, d); *size = maxdim(*size, d);
} }
void DrawWidget(const Rect &r, int widget) const override void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
if (widget != WID_SUL_PANEL) return; if (widget != WID_SUL_PANEL) return;

@ -1647,7 +1647,7 @@ cat = SC_EXPERT
var = gui.ai_developer_tools var = gui.ai_developer_tools
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
def = false def = false
post_cb = [](auto) { InvalidateWindowClassesData(WC_SCRIPT_SETTINGS); } post_cb = [](auto) { InvalidateWindowClassesData(WC_GAME_OPTIONS); InvalidateWindowClassesData(WC_SCRIPT_DEBUG); InvalidateWindowClassesData(WC_SCRIPT_SETTINGS); }
cat = SC_EXPERT cat = SC_EXPERT
startup = true startup = true

@ -217,7 +217,7 @@ public:
UpdateButtonState(); UpdateButtonState();
} }
virtual void OnClick(Point pt, int widget, int click_count) override virtual void OnClick(Point pt, WidgetID widget, int click_count) override
{ {
switch(widget) { switch(widget) {
case TCW_NEW_TMPL_PANEL: { case TCW_NEW_TMPL_PANEL: {
@ -286,7 +286,7 @@ public:
this->SetDirty(); this->SetDirty();
} }
virtual void DrawWidget(const Rect &r, int widget) const override virtual void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
switch(widget) { switch(widget) {
case TCW_NEW_TMPL_PANEL: { case TCW_NEW_TMPL_PANEL: {
@ -391,7 +391,7 @@ public:
} }
} }
virtual bool OnRightClick(Point pt, int widget) override virtual bool OnRightClick(Point pt, WidgetID widget) override
{ {
if (widget != TCW_NEW_TMPL_PANEL) return false; if (widget != TCW_NEW_TMPL_PANEL) return false;
@ -443,7 +443,7 @@ public:
return true; return true;
} }
virtual void OnDragDrop(Point pt, int widget) override virtual void OnDragDrop(Point pt, WidgetID widget) override
{ {
switch (widget) { switch (widget) {
case TCW_NEW_TMPL_PANEL: { case TCW_NEW_TMPL_PANEL: {
@ -504,7 +504,7 @@ public:
this->SetDirty(); this->SetDirty();
} }
virtual void OnMouseDrag(Point pt, int widget) override virtual void OnMouseDrag(Point pt, WidgetID widget) override
{ {
if (this->sel == INVALID_VEHICLE) return; if (this->sel == INVALID_VEHICLE) return;

@ -260,7 +260,7 @@ public:
this->Window::Close(); this->Window::Close();
} }
virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override virtual void UpdateWidgetSize(WidgetID widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override
{ {
switch (widget) { switch (widget) {
case TRW_WIDGET_TOP_MATRIX: case TRW_WIDGET_TOP_MATRIX:
@ -312,7 +312,7 @@ public:
} }
} }
virtual void SetStringParameters(int widget) const override virtual void SetStringParameters(WidgetID widget) const override
{ {
switch (widget) { switch (widget) {
case TRW_CAPTION: case TRW_CAPTION:
@ -321,7 +321,7 @@ public:
} }
} }
virtual void DrawWidget(const Rect &r, int widget) const override virtual void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
switch (widget) { switch (widget) {
case TRW_WIDGET_TOP_MATRIX: { case TRW_WIDGET_TOP_MATRIX: {
@ -404,7 +404,7 @@ public:
this->DrawWidgets(); this->DrawWidgets();
} }
virtual void OnClick(Point pt, int widget, int click_count) override virtual void OnClick(Point pt, WidgetID widget, int click_count) override
{ {
if (this->editInProgress) return; if (this->editInProgress) return;
@ -495,7 +495,7 @@ public:
ShowDropDownList(this, GetRailTypeDropDownList(true, true), this->sel_railtype, TRW_WIDGET_TRAIN_RAILTYPE_DROPDOWN); ShowDropDownList(this, GetRailTypeDropDownList(true, true), this->sel_railtype, TRW_WIDGET_TRAIN_RAILTYPE_DROPDOWN);
break; break;
case TRW_WIDGET_TOP_MATRIX: { case TRW_WIDGET_TOP_MATRIX: {
uint16 newindex = (uint16)((pt.y - this->nested_array[TRW_WIDGET_TOP_MATRIX]->pos_y) / (GetCharacterHeight(FS_NORMAL) + WidgetDimensions::scaled.matrix.Vertical()) ) + this->vscroll[0]->GetPosition(); uint16 newindex = (uint16)((pt.y - this->GetWidget<NWidgetBase>(TRW_WIDGET_TOP_MATRIX)->pos_y) / (GetCharacterHeight(FS_NORMAL) + WidgetDimensions::scaled.matrix.Vertical()) ) + this->vscroll[0]->GetPosition();
if (newindex == this->selected_group_index || newindex >= this->groups.size()) { if (newindex == this->selected_group_index || newindex >= this->groups.size()) {
this->selected_group_index = -1; this->selected_group_index = -1;
} else if (newindex < this->groups.size()) { } else if (newindex < this->groups.size()) {
@ -505,7 +505,7 @@ public:
break; break;
} }
case TRW_WIDGET_BOTTOM_MATRIX: { case TRW_WIDGET_BOTTOM_MATRIX: {
uint16 newindex = (uint16)((pt.y - this->nested_array[TRW_WIDGET_BOTTOM_MATRIX]->pos_y) / this->bottom_matrix_item_size) + this->vscroll[1]->GetPosition(); uint16 newindex = (uint16)((pt.y - this->GetWidget<NWidgetBase>(TRW_WIDGET_BOTTOM_MATRIX)->pos_y) / this->bottom_matrix_item_size) + this->vscroll[1]->GetPosition();
if (newindex == this->selected_template_index || newindex >= templates.size()) { if (newindex == this->selected_template_index || newindex >= templates.size()) {
this->selected_template_index = -1; this->selected_template_index = -1;
} else if (newindex < templates.size()) { } else if (newindex < templates.size()) {
@ -560,7 +560,7 @@ public:
this->RaiseButtons(); this->RaiseButtons();
} }
virtual void OnDropdownSelect(int widget, int index) override virtual void OnDropdownSelect(WidgetID widget, int index) override
{ {
RailType temp = (RailType) index; RailType temp = (RailType) index;
if (temp == this->sel_railtype) return; // we didn't select a new one. No need to change anything if (temp == this->sel_railtype) return; // we didn't select a new one. No need to change anything

@ -221,7 +221,7 @@ struct TerraformToolbarWindow : Window {
SetWidgetDisabledState(WID_TT_BUY_LAND, _settings_game.construction.purchase_land_permitted == 0); SetWidgetDisabledState(WID_TT_BUY_LAND, _settings_game.construction.purchase_land_permitted == 0);
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
if (widget < WID_TT_BUTTONS_START) return; if (widget < WID_TT_BUTTONS_START) return;
@ -628,7 +628,7 @@ struct ScenarioEditorLandscapeGenerationWindow : Window {
} }
} }
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{ {
if (widget != WID_ETT_DOTS) return; if (widget != WID_ETT_DOTS) return;
@ -636,7 +636,7 @@ struct ScenarioEditorLandscapeGenerationWindow : Window {
size->height = std::max<uint>(size->height, ScaleGUITrad(31)); size->height = std::max<uint>(size->height, ScaleGUITrad(31));
} }
void DrawWidget(const Rect &r, int widget) const override void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
if (widget != WID_ETT_DOTS) return; if (widget != WID_ETT_DOTS) return;
@ -653,7 +653,7 @@ struct ScenarioEditorLandscapeGenerationWindow : Window {
} while (--n); } while (--n);
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
if (widget < WID_ETT_BUTTONS_START) return; if (widget < WID_ETT_BUTTONS_START) return;
@ -731,9 +731,9 @@ struct ScenarioEditorLandscapeGenerationWindow : Window {
void OnTimeout() override void OnTimeout() override
{ {
for (uint i = WID_ETT_START; i < this->nested_array_size; i++) { for (const auto &pair : this->widget_lookup) {
if (i == WID_ETT_BUTTONS_START) i = WID_ETT_BUTTONS_END; // skip the buttons if (pair.first < WID_ETT_START || (pair.first >= WID_ETT_BUTTONS_START && pair.first < WID_ETT_BUTTONS_END)) continue; // skip the buttons
this->RaiseWidgetWhenLowered(i); this->RaiseWidgetWhenLowered(pair.first);
} }
} }

@ -92,11 +92,9 @@ TEST_CASE_METHOD(WindowDescTestsFixture, "WindowDesc - NWidgetPart validity")
INFO(fmt::format("{}:{}", window_desc->file, window_desc->line)); INFO(fmt::format("{}:{}", window_desc->file, window_desc->line));
int biggest_index = -1;
NWidgetStacked *shade_select = nullptr; NWidgetStacked *shade_select = nullptr;
NWidgetBase *root = nullptr; std::unique_ptr<NWidgetBase> root = nullptr;
REQUIRE_NOTHROW(root = MakeWindowNWidgetTree(window_desc->nwid_begin, window_desc->nwid_end, &biggest_index, &shade_select)); REQUIRE_NOTHROW(root = MakeWindowNWidgetTree(window_desc->nwid_begin, window_desc->nwid_end, &shade_select));
CHECK((root != nullptr)); CHECK((root != nullptr));
delete root;
} }

@ -88,9 +88,9 @@ TextfileWindow::TextfileWindow(TextfileType file_type) : Window(&_textfile_desc)
this->CreateNestedTree(); this->CreateNestedTree();
this->vscroll = this->GetScrollbar(WID_TF_VSCROLLBAR); this->vscroll = this->GetScrollbar(WID_TF_VSCROLLBAR);
this->hscroll = this->GetScrollbar(WID_TF_HSCROLLBAR); this->hscroll = this->GetScrollbar(WID_TF_HSCROLLBAR);
this->FinishInitNested(file_type);
this->GetWidget<NWidgetCore>(WID_TF_CAPTION)->SetDataTip(STR_TEXTFILE_README_CAPTION + file_type, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS); this->GetWidget<NWidgetCore>(WID_TF_CAPTION)->SetDataTip(STR_TEXTFILE_README_CAPTION + file_type, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS);
this->GetWidget<NWidgetStacked>(WID_TF_SEL_JUMPLIST)->SetDisplayedPlane(SZSP_HORIZONTAL); this->GetWidget<NWidgetStacked>(WID_TF_SEL_JUMPLIST)->SetDisplayedPlane(SZSP_HORIZONTAL);
this->FinishInitNested(file_type);
this->DisableWidget(WID_TF_NAVBACK); this->DisableWidget(WID_TF_NAVBACK);
this->DisableWidget(WID_TF_NAVFORWARD); this->DisableWidget(WID_TF_NAVFORWARD);
@ -128,7 +128,7 @@ uint TextfileWindow::GetContentHeight()
return this->lines.back().bottom; return this->lines.back().bottom;
} }
/* virtual */ void TextfileWindow::UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) /* virtual */ void TextfileWindow::UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize)
{ {
switch (widget) { switch (widget) {
case WID_TF_BACKGROUND: case WID_TF_BACKGROUND:
@ -495,7 +495,7 @@ void TextfileWindow::NavigateToFile(std::string newfile, size_t line)
if (StrEndsWithIgnoreCase(this->filename, ".md")) this->AfterLoadMarkdown(); if (StrEndsWithIgnoreCase(this->filename, ".md")) this->AfterLoadMarkdown();
this->GetWidget<NWidgetStacked>(WID_TF_SEL_JUMPLIST)->SetDisplayedPlane(this->jumplist.empty() ? SZSP_HORIZONTAL : 0); if (this->GetWidget<NWidgetStacked>(WID_TF_SEL_JUMPLIST)->SetDisplayedPlane(this->jumplist.empty() ? SZSP_HORIZONTAL : 0)) this->ReInit();
} }
/** /**
@ -518,7 +518,7 @@ void TextfileWindow::AfterLoadMarkdown()
} }
} }
/* virtual */ void TextfileWindow::OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) /* virtual */ void TextfileWindow::OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count)
{ {
switch (widget) { switch (widget) {
case WID_TF_WRAPTEXT: case WID_TF_WRAPTEXT:
@ -550,7 +550,7 @@ void TextfileWindow::AfterLoadMarkdown()
} }
} }
/* virtual */ void TextfileWindow::DrawWidget(const Rect &r, int widget) const /* virtual */ void TextfileWindow::DrawWidget(const Rect &r, WidgetID widget) const
{ {
if (widget != WID_TF_BACKGROUND) return; if (widget != WID_TF_BACKGROUND) return;
@ -594,7 +594,7 @@ void TextfileWindow::AfterLoadMarkdown()
this->SetupScrollbars(true); this->SetupScrollbars(true);
} }
void TextfileWindow::OnDropdownSelect(int widget, int index) void TextfileWindow::OnDropdownSelect(WidgetID widget, int index)
{ {
if (widget != WID_TF_JUMPLIST) return; if (widget != WID_TF_JUMPLIST) return;
@ -763,8 +763,7 @@ static void Xunzip(byte **bufp, size_t *sizep)
this->lines.clear(); this->lines.clear();
this->jumplist.clear(); this->jumplist.clear();
this->GetWidget<NWidgetStacked>(WID_TF_SEL_JUMPLIST)->SetDisplayedPlane(SZSP_HORIZONTAL); if (this->GetWidget<NWidgetStacked>(WID_TF_SEL_JUMPLIST)->SetDisplayedPlane(SZSP_HORIZONTAL)) this->ReInit();
this->ReInit();
if (textfile == nullptr) return; if (textfile == nullptr) return;

@ -32,12 +32,12 @@ struct TextfileWindow : public Window, MissingGlyphSearcher {
TextfileWindow(TextfileType file_type); TextfileWindow(TextfileType file_type);
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override; void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override;
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override; void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override;
void DrawWidget(const Rect &r, int widget) const override; void DrawWidget(const Rect &r, WidgetID widget) const override;
void OnResize() override; void OnResize() override;
void OnInvalidateData(int data = 0, bool gui_scope = true) override; void OnInvalidateData(int data = 0, bool gui_scope = true) override;
void OnDropdownSelect(int widget, int index) override; void OnDropdownSelect(WidgetID widget, int index) override;
void Reset() override; void Reset() override;
FontSize DefaultSize() override; FontSize DefaultSize() override;

@ -17,7 +17,7 @@
void PlaceProc_DemolishArea(TileIndex tile); void PlaceProc_DemolishArea(TileIndex tile);
bool GUIPlaceProcDragXY(ViewportDragDropSelectionProcess proc, TileIndex start_tile, TileIndex end_tile); bool GUIPlaceProcDragXY(ViewportDragDropSelectionProcess proc, TileIndex start_tile, TileIndex end_tile);
bool HandlePlacePushButton(Window *w, int widget, CursorID cursor, HighLightStyle mode); bool HandlePlacePushButton(Window *w, WidgetID widget, CursorID cursor, HighLightStyle mode);
void SetObjectToPlaceWnd(CursorID icon, PaletteID pal, HighLightStyle mode, Window *w); void SetObjectToPlaceWnd(CursorID icon, PaletteID pal, HighLightStyle mode, Window *w);
void SetObjectToPlace(CursorID icon, PaletteID pal, HighLightStyle mode, WindowClass window_class, WindowNumber window_num); void SetObjectToPlace(CursorID icon, PaletteID pal, HighLightStyle mode, WindowClass window_class, WindowNumber window_num);
void ResetObjectToPlace(); void ResetObjectToPlace();

@ -400,7 +400,7 @@ struct TimetableWindow : GeneralVehicleWindow {
return (travelling && v->lateness_counter < 0); return (travelling && v->lateness_counter < 0);
} }
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{ {
switch (widget) { switch (widget) {
case WID_VT_ARRIVAL_DEPARTURE_PANEL: case WID_VT_ARRIVAL_DEPARTURE_PANEL:
@ -609,7 +609,7 @@ struct TimetableWindow : GeneralVehicleWindow {
this->DrawWidgets(); this->DrawWidgets();
} }
void SetStringParameters(int widget) const override void SetStringParameters(WidgetID widget) const override
{ {
switch (widget) { switch (widget) {
case WID_VT_CAPTION: SetDParam(0, this->vehicle->index); break; case WID_VT_CAPTION: SetDParam(0, this->vehicle->index); break;
@ -617,7 +617,7 @@ struct TimetableWindow : GeneralVehicleWindow {
} }
} }
bool OnTooltip(Point pt, int widget, TooltipCloseCondition close_cond) override bool OnTooltip(Point pt, WidgetID widget, TooltipCloseCondition close_cond) override
{ {
switch (widget) { switch (widget) {
case WID_VT_CHANGE_TIME: { case WID_VT_CHANGE_TIME: {
@ -649,7 +649,7 @@ struct TimetableWindow : GeneralVehicleWindow {
} }
} }
void DrawWidget(const Rect &r, int widget) const override void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
const Vehicle *v = this->vehicle; const Vehicle *v = this->vehicle;
int selected = this->sel_index; int selected = this->sel_index;
@ -871,7 +871,7 @@ struct TimetableWindow : GeneralVehicleWindow {
} }
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
const Vehicle *v = this->vehicle; const Vehicle *v = this->vehicle;
@ -1071,7 +1071,7 @@ struct TimetableWindow : GeneralVehicleWindow {
this->SetDirty(); this->SetDirty();
} }
void OnDropdownSelect(int widget, int index) override void OnDropdownSelect(WidgetID widget, int index) override
{ {
switch (widget) { switch (widget) {
case WID_VT_EXTRA: case WID_VT_EXTRA:

@ -120,7 +120,7 @@ DropDownListItem *MakeCompanyDropDownListItem(CompanyID cid)
* @param list List of items * @param list List of items
* @param def Default item * @param def Default item
*/ */
static void PopupMainToolbarMenu(Window *w, int widget, DropDownList &&list, int def) static void PopupMainToolbarMenu(Window *w, WidgetID widget, DropDownList &&list, int def)
{ {
ShowDropDownList(w, std::move(list), def, widget, 0, true); ShowDropDownList(w, std::move(list), def, widget, 0, true);
if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP); if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
@ -132,7 +132,7 @@ static void PopupMainToolbarMenu(Window *w, int widget, DropDownList &&list, int
* @param widget Toolbar button * @param widget Toolbar button
* @param strings List of strings for each item in the menu * @param strings List of strings for each item in the menu
*/ */
static void PopupMainToolbarMenu(Window *w, int widget, const std::initializer_list<StringID> &strings) static void PopupMainToolbarMenu(Window *w, WidgetID widget, const std::initializer_list<StringID> &strings)
{ {
DropDownList list; DropDownList list;
int i = 0; int i = 0;
@ -158,7 +158,7 @@ static const int CTMN_SPECTATOR = -3; ///< Show a company window as spectator
* @param widget The button widget id. * @param widget The button widget id.
* @param grey A bitbask of which items to mark as disabled. * @param grey A bitbask of which items to mark as disabled.
*/ */
static void PopupMainCompanyToolbMenu(Window *w, int widget, int grey = 0) static void PopupMainCompanyToolbMenu(Window *w, WidgetID widget, int grey = 0)
{ {
DropDownList list; DropDownList list;
@ -845,7 +845,7 @@ static CallBackFunction MenuClickShowAir(int index)
static CallBackFunction ToolbarZoomInClick(Window *w) static CallBackFunction ToolbarZoomInClick(Window *w)
{ {
if (DoZoomInOutWindow(ZOOM_IN, GetMainWindow())) { if (DoZoomInOutWindow(ZOOM_IN, GetMainWindow())) {
w->HandleButtonClick((_game_mode == GM_EDITOR) ? (byte)WID_TE_ZOOM_IN : (byte)WID_TN_ZOOM_IN); w->HandleButtonClick((_game_mode == GM_EDITOR) ? (WidgetID)WID_TE_ZOOM_IN : (WidgetID)WID_TN_ZOOM_IN);
if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP); if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
} }
return CBF_NONE; return CBF_NONE;
@ -856,7 +856,7 @@ static CallBackFunction ToolbarZoomInClick(Window *w)
static CallBackFunction ToolbarZoomOutClick(Window *w) static CallBackFunction ToolbarZoomOutClick(Window *w)
{ {
if (DoZoomInOutWindow(ZOOM_OUT, GetMainWindow())) { if (DoZoomInOutWindow(ZOOM_OUT, GetMainWindow())) {
w->HandleButtonClick((_game_mode == GM_EDITOR) ? (byte)WID_TE_ZOOM_OUT : (byte)WID_TN_ZOOM_OUT); w->HandleButtonClick((_game_mode == GM_EDITOR) ? (WidgetID)WID_TE_ZOOM_OUT : (WidgetID)WID_TN_ZOOM_OUT);
if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP); if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
} }
return CBF_NONE; return CBF_NONE;
@ -1005,7 +1005,7 @@ static CallBackFunction MenuClickForest(int index)
static CallBackFunction ToolbarMusicClick(Window *w) static CallBackFunction ToolbarMusicClick(Window *w)
{ {
PopupMainToolbarMenu(w, _game_mode == GM_EDITOR ? (int)WID_TE_MUSIC_SOUND : (int)WID_TN_MUSIC_SOUND, {STR_TOOLBAR_SOUND_MUSIC}); PopupMainToolbarMenu(w, _game_mode == GM_EDITOR ? (WidgetID)WID_TE_MUSIC_SOUND : (WidgetID)WID_TN_MUSIC_SOUND, {STR_TOOLBAR_SOUND_MUSIC});
return CBF_NONE; return CBF_NONE;
} }
@ -1167,7 +1167,7 @@ static CallBackFunction PlacePickerTool()
static CallBackFunction ToolbarHelpClick(Window *w) static CallBackFunction ToolbarHelpClick(Window *w)
{ {
int widget = (_game_mode == GM_EDITOR) ? (int)WID_TE_HELP : (int)WID_TN_HELP; WidgetID widget = (_game_mode == GM_EDITOR) ? (WidgetID)WID_TE_HELP : (WidgetID)WID_TN_HELP;
DropDownList list; DropDownList list;
list.emplace_back(new DropDownListStringItem(STR_ABOUT_MENU_LAND_BLOCK_INFO, HME_LANDINFO, false)); list.emplace_back(new DropDownListStringItem(STR_ABOUT_MENU_LAND_BLOCK_INFO, HME_LANDINFO, false));
@ -1291,7 +1291,7 @@ static CallBackFunction ToolbarSwitchClick(Window *w)
} }
w->ReInit(); w->ReInit();
w->SetWidgetLoweredState(_game_mode == GM_EDITOR ? (uint)WID_TE_SWITCH_BAR : (uint)WID_TN_SWITCH_BAR, _toolbar_mode == TB_LOWER); w->SetWidgetLoweredState(_game_mode == GM_EDITOR ? (WidgetID)WID_TE_SWITCH_BAR : (WidgetID)WID_TN_SWITCH_BAR, _toolbar_mode == TB_LOWER);
if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP); if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
return CBF_NONE; return CBF_NONE;
} }
@ -1495,7 +1495,7 @@ public:
uint nbuttons = 0; uint nbuttons = 0;
/* First initialise some variables... */ /* First initialise some variables... */
for (NWidgetBase *child_wid = this->head; child_wid != nullptr; child_wid = child_wid->next) { for (const auto &child_wid : this->children) {
child_wid->SetupSmallestSize(w); child_wid->SetupSmallestSize(w);
this->smallest_y = std::max(this->smallest_y, child_wid->smallest_y + child_wid->padding.Vertical()); this->smallest_y = std::max(this->smallest_y, child_wid->smallest_y + child_wid->padding.Vertical());
if (this->IsButton(child_wid->type)) { if (this->IsButton(child_wid->type)) {
@ -1507,7 +1507,7 @@ public:
} }
/* ... then in a second pass make sure the 'current' heights are set. Won't change ever. */ /* ... then in a second pass make sure the 'current' heights are set. Won't change ever. */
for (NWidgetBase *child_wid = this->head; child_wid != nullptr; child_wid = child_wid->next) { for (const auto &child_wid : this->children) {
child_wid->current_y = this->smallest_y; child_wid->current_y = this->smallest_y;
if (!this->IsButton(child_wid->type)) { if (!this->IsButton(child_wid->type)) {
child_wid->current_x = child_wid->smallest_x; child_wid->current_x = child_wid->smallest_x;
@ -1527,14 +1527,15 @@ public:
/* Figure out what are the visible buttons */ /* Figure out what are the visible buttons */
uint arrangable_count, button_count, spacer_count; uint arrangable_count, button_count, spacer_count;
const byte *arrangement = GetButtonArrangement(given_width, arrangable_count, button_count, spacer_count); const WidgetID *arrangement = GetButtonArrangement(given_width, arrangable_count, button_count, spacer_count);
/* Create us ourselves a quick lookup table */ /* Create us ourselves a quick lookup table from WidgetID to slot. */
NWidgetBase *widgets[WID_TN_END]; std::map<WidgetID, uint> lookup;
for (NWidgetBase *child_wid = this->head; child_wid != nullptr; child_wid = child_wid->next) { for (auto it = std::begin(this->children); it != std::end(this->children); ++it) {
child_wid->current_x = 0; /* Hide widget, it will be revealed in the next step. */ NWidgetBase *nwid = it->get();
if (child_wid->type == NWID_SPACER) continue; nwid->current_x = 0; /* Hide widget, it will be revealed in the next step. */
widgets[((NWidgetCore*)child_wid)->index] = child_wid; if (nwid->type == NWID_SPACER) continue;
lookup[dynamic_cast<NWidgetCore *>(nwid)->index] = std::distance(this->children.begin(), it);
} }
/* Now assign the widgets to their rightful place */ /* Now assign the widgets to their rightful place */
@ -1545,12 +1546,13 @@ public:
uint button_i = 0; uint button_i = 0;
/* Index into the arrangement indices. The macro lastof cannot be used here! */ /* Index into the arrangement indices. The macro lastof cannot be used here! */
const byte *cur_wid = rtl ? &arrangement[arrangable_count - 1] : arrangement; const WidgetID *slotp = rtl ? &arrangement[arrangable_count - 1] : arrangement;
for (uint i = 0; i < arrangable_count; i++) { for (uint i = 0; i < arrangable_count; i++) {
NWidgetBase *child_wid = widgets[*cur_wid]; uint slot = lookup[*slotp];
/* If we have to give space to the spacers, do that */ auto &child_wid = this->children[slot];
if (spacer_space != 0) { /* If we have space to give to the spacers, do that. */
NWidgetBase *possible_spacer = rtl ? child_wid->next : child_wid->prev; if (spacer_space > 0 && slot > 0 && slot < this->children.size() - 1) {
const auto &possible_spacer = this->children[slot + (rtl ? 1 : -1)];
if (possible_spacer != nullptr && possible_spacer->type == NWID_SPACER) { if (possible_spacer != nullptr && possible_spacer->type == NWID_SPACER) {
uint add = spacer_space / (spacer_count - spacer_i); uint add = spacer_space / (spacer_count - spacer_i);
position += add; position += add;
@ -1571,9 +1573,9 @@ public:
position += child_wid->current_x; position += child_wid->current_x;
if (rtl) { if (rtl) {
cur_wid--; slotp--;
} else { } else {
cur_wid++; slotp++;
} }
} }
} }
@ -1596,12 +1598,12 @@ public:
* @param spacer_count output of the number of spacers. * @param spacer_count output of the number of spacers.
* @return the button configuration. * @return the button configuration.
*/ */
virtual const byte *GetButtonArrangement(uint &width, uint &arrangable_count, uint &button_count, uint &spacer_count) const = 0; virtual const WidgetID *GetButtonArrangement(uint &width, uint &arrangable_count, uint &button_count, uint &spacer_count) const = 0;
}; };
/** Container for the 'normal' main toolbar */ /** Container for the 'normal' main toolbar */
class NWidgetMainToolbarContainer : public NWidgetToolbarContainer { class NWidgetMainToolbarContainer : public NWidgetToolbarContainer {
const byte *GetButtonArrangement(uint &width, uint &arrangable_count, uint &button_count, uint &spacer_count) const override const WidgetID *GetButtonArrangement(uint &width, uint &arrangable_count, uint &button_count, uint &spacer_count) const override
{ {
static const uint SMALLEST_ARRANGEMENT = 14; static const uint SMALLEST_ARRANGEMENT = 14;
static const uint BIGGEST_ARRANGEMENT = 20; static const uint BIGGEST_ARRANGEMENT = 20;
@ -1612,7 +1614,7 @@ class NWidgetMainToolbarContainer : public NWidgetToolbarContainer {
* pause button appearing on the right of the lower toolbar and weird resizing of the widgets even if there is * pause button appearing on the right of the lower toolbar and weird resizing of the widgets even if there is
* enough space. * enough space.
*/ */
static const byte arrange14[] = { static const WidgetID arrange14[] = {
WID_TN_PAUSE, WID_TN_PAUSE,
WID_TN_FAST_FORWARD, WID_TN_FAST_FORWARD,
WID_TN_TRAINS, WID_TN_TRAINS,
@ -1643,7 +1645,7 @@ class NWidgetMainToolbarContainer : public NWidgetToolbarContainer {
WID_TN_HELP, WID_TN_HELP,
WID_TN_SWITCH_BAR, WID_TN_SWITCH_BAR,
}; };
static const byte arrange15[] = { static const WidgetID arrange15[] = {
WID_TN_PAUSE, WID_TN_PAUSE,
WID_TN_FAST_FORWARD, WID_TN_FAST_FORWARD,
WID_TN_SMALL_MAP, WID_TN_SMALL_MAP,
@ -1676,7 +1678,7 @@ class NWidgetMainToolbarContainer : public NWidgetToolbarContainer {
WID_TN_HELP, WID_TN_HELP,
WID_TN_SWITCH_BAR, WID_TN_SWITCH_BAR,
}; };
static const byte arrange16[] = { static const WidgetID arrange16[] = {
WID_TN_PAUSE, WID_TN_PAUSE,
WID_TN_FAST_FORWARD, WID_TN_FAST_FORWARD,
WID_TN_SETTINGS, WID_TN_SETTINGS,
@ -1711,7 +1713,7 @@ class NWidgetMainToolbarContainer : public NWidgetToolbarContainer {
WID_TN_ZOOM_OUT, WID_TN_ZOOM_OUT,
WID_TN_SWITCH_BAR, WID_TN_SWITCH_BAR,
}; };
static const byte arrange17[] = { static const WidgetID arrange17[] = {
WID_TN_PAUSE, WID_TN_PAUSE,
WID_TN_FAST_FORWARD, WID_TN_FAST_FORWARD,
WID_TN_SETTINGS, WID_TN_SETTINGS,
@ -1748,7 +1750,7 @@ class NWidgetMainToolbarContainer : public NWidgetToolbarContainer {
WID_TN_ZOOM_OUT, WID_TN_ZOOM_OUT,
WID_TN_SWITCH_BAR, WID_TN_SWITCH_BAR,
}; };
static const byte arrange18[] = { static const WidgetID arrange18[] = {
WID_TN_PAUSE, WID_TN_PAUSE,
WID_TN_FAST_FORWARD, WID_TN_FAST_FORWARD,
WID_TN_SETTINGS, WID_TN_SETTINGS,
@ -1787,7 +1789,7 @@ class NWidgetMainToolbarContainer : public NWidgetToolbarContainer {
WID_TN_ZOOM_OUT, WID_TN_ZOOM_OUT,
WID_TN_SWITCH_BAR, WID_TN_SWITCH_BAR,
}; };
static const byte arrange19[] = { static const WidgetID arrange19[] = {
WID_TN_PAUSE, WID_TN_PAUSE,
WID_TN_FAST_FORWARD, WID_TN_FAST_FORWARD,
WID_TN_SETTINGS, WID_TN_SETTINGS,
@ -1828,7 +1830,7 @@ class NWidgetMainToolbarContainer : public NWidgetToolbarContainer {
WID_TN_ZOOM_OUT, WID_TN_ZOOM_OUT,
WID_TN_SWITCH_BAR, WID_TN_SWITCH_BAR,
}; };
static const byte arrange20[] = { static const WidgetID arrange20[] = {
WID_TN_PAUSE, WID_TN_PAUSE,
WID_TN_FAST_FORWARD, WID_TN_FAST_FORWARD,
WID_TN_SETTINGS, WID_TN_SETTINGS,
@ -1871,7 +1873,7 @@ class NWidgetMainToolbarContainer : public NWidgetToolbarContainer {
WID_TN_ZOOM_OUT, WID_TN_ZOOM_OUT,
WID_TN_SWITCH_BAR, WID_TN_SWITCH_BAR,
}; };
static const byte arrange_all[] = { static const WidgetID arrange_all[] = {
WID_TN_PAUSE, WID_TN_PAUSE,
WID_TN_FAST_FORWARD, WID_TN_FAST_FORWARD,
WID_TN_SETTINGS, WID_TN_SETTINGS,
@ -1913,7 +1915,7 @@ class NWidgetMainToolbarContainer : public NWidgetToolbarContainer {
} }
/* Introduce the split toolbar */ /* Introduce the split toolbar */
static const byte * const arrangements[] = { arrange14, arrange15, arrange16, arrange17, arrange18, arrange19, arrange20 }; static const WidgetID * const arrangements[] = { arrange14, arrange15, arrange16, arrange17, arrange18, arrange19, arrange20 };
button_count = arrangable_count = full_buttons; button_count = arrangable_count = full_buttons;
spacer_count = this->spacers; spacer_count = this->spacers;
@ -1931,7 +1933,7 @@ class NWidgetScenarioToolbarContainer : public NWidgetToolbarContainer {
/* Find the size of panel_widths */ /* Find the size of panel_widths */
uint i = 0; uint i = 0;
for (NWidgetBase *child_wid = this->head; child_wid != nullptr; child_wid = child_wid->next) { for (const auto &child_wid : this->children) {
if (child_wid->type == NWID_SPACER || this->IsButton(child_wid->type)) continue; if (child_wid->type == NWID_SPACER || this->IsButton(child_wid->type)) continue;
assert(i < lengthof(this->panel_widths)); assert(i < lengthof(this->panel_widths));
@ -1940,9 +1942,9 @@ class NWidgetScenarioToolbarContainer : public NWidgetToolbarContainer {
} }
} }
const byte *GetButtonArrangement(uint &width, uint &arrangable_count, uint &button_count, uint &spacer_count) const override const WidgetID *GetButtonArrangement(uint &width, uint &arrangable_count, uint &button_count, uint &spacer_count) const override
{ {
static const byte arrange_all[] = { static const WidgetID arrange_all[] = {
WID_TE_PAUSE, WID_TE_PAUSE,
WID_TE_FAST_FORWARD, WID_TE_FAST_FORWARD,
WID_TE_SETTINGS, WID_TE_SETTINGS,
@ -1963,7 +1965,7 @@ class NWidgetScenarioToolbarContainer : public NWidgetToolbarContainer {
WID_TE_MUSIC_SOUND, WID_TE_MUSIC_SOUND,
WID_TE_HELP, WID_TE_HELP,
}; };
static const byte arrange_nopanel[] = { static const WidgetID arrange_nopanel[] = {
WID_TE_PAUSE, WID_TE_PAUSE,
WID_TE_FAST_FORWARD, WID_TE_FAST_FORWARD,
WID_TE_SETTINGS, WID_TE_SETTINGS,
@ -1983,7 +1985,7 @@ class NWidgetScenarioToolbarContainer : public NWidgetToolbarContainer {
WID_TE_MUSIC_SOUND, WID_TE_MUSIC_SOUND,
WID_TE_HELP, WID_TE_HELP,
}; };
static const byte arrange_switch[] = { static const WidgetID arrange_switch[] = {
WID_TE_DATE_PANEL, WID_TE_DATE_PANEL,
WID_TE_SMALL_MAP, WID_TE_SMALL_MAP,
WID_TE_LAND_GENERATE, WID_TE_LAND_GENERATE,
@ -2121,12 +2123,12 @@ struct MainToolbarWindow : Window {
this->DrawWidgets(); this->DrawWidgets();
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
if (_game_mode != GM_MENU && !this->IsWidgetDisabled(widget)) _toolbar_button_procs[widget](this); if (_game_mode != GM_MENU && !this->IsWidgetDisabled(widget)) _toolbar_button_procs[widget](this);
} }
void OnDropdownSelect(int widget, int index) override void OnDropdownSelect(WidgetID widget, int index) override
{ {
CallBackFunction cbf = _menu_clicked_procs[widget](index); CallBackFunction cbf = _menu_clicked_procs[widget](index);
if (cbf != CBF_NONE) _last_started_action = cbf; if (cbf != CBF_NONE) _last_started_action = cbf;
@ -2238,7 +2240,7 @@ struct MainToolbarWindow : Window {
{ {
/* We do not want to automatically raise the pause, fast forward and /* We do not want to automatically raise the pause, fast forward and
* switchbar buttons; they have to stay down when pressed etc. */ * switchbar buttons; they have to stay down when pressed etc. */
for (uint i = WID_TN_SETTINGS; i < WID_TN_SWITCH_BAR; i++) { for (WidgetID i = WID_TN_SETTINGS; i < WID_TN_SWITCH_BAR; i++) {
this->RaiseWidgetWhenLowered(i); this->RaiseWidgetWhenLowered(i);
} }
} }
@ -2316,7 +2318,7 @@ static Hotkey maintoolbar_hotkeys[] = {
}; };
HotkeyList MainToolbarWindow::hotkeys("maintoolbar", maintoolbar_hotkeys); HotkeyList MainToolbarWindow::hotkeys("maintoolbar", maintoolbar_hotkeys);
static NWidgetBase *MakeMainToolbar(int *biggest_index) static std::unique_ptr<NWidgetBase> MakeMainToolbar()
{ {
/** Sprites to use for the different toolbar buttons */ /** Sprites to use for the different toolbar buttons */
static const SpriteID toolbar_button_sprites[] = { static const SpriteID toolbar_button_sprites[] = {
@ -2353,8 +2355,8 @@ static NWidgetBase *MakeMainToolbar(int *biggest_index)
SPR_IMG_SWITCH_TOOLBAR, // WID_TN_SWITCH_BAR SPR_IMG_SWITCH_TOOLBAR, // WID_TN_SWITCH_BAR
}; };
NWidgetMainToolbarContainer *hor = new NWidgetMainToolbarContainer(); auto hor = std::make_unique<NWidgetMainToolbarContainer>();
for (uint i = 0; i < WID_TN_END; i++) { for (WidgetID i = 0; i < WID_TN_END; i++) {
switch (i) { switch (i) {
case WID_TN_SMALL_MAP: case WID_TN_SMALL_MAP:
case WID_TN_FINANCES: case WID_TN_FINANCES:
@ -2362,15 +2364,14 @@ static NWidgetBase *MakeMainToolbar(int *biggest_index)
case WID_TN_ZOOM_IN: case WID_TN_ZOOM_IN:
case WID_TN_BUILDING_TOOLS_START: case WID_TN_BUILDING_TOOLS_START:
case WID_TN_MUSIC_SOUND: case WID_TN_MUSIC_SOUND:
hor->Add(new NWidgetSpacer(0, 0)); hor->Add(std::make_unique<NWidgetSpacer>(0, 0));
break; break;
} }
NWidgetLeaf *leaf = new NWidgetLeaf(i == WID_TN_SAVE ? WWT_IMGBTN_2 : WWT_IMGBTN, COLOUR_GREY, i, toolbar_button_sprites[i], STR_TOOLBAR_TOOLTIP_PAUSE_GAME + i); auto leaf = std::make_unique<NWidgetLeaf>(i == WID_TN_SAVE ? WWT_IMGBTN_2 : WWT_IMGBTN, COLOUR_GREY, i, toolbar_button_sprites[i], STR_TOOLBAR_TOOLTIP_PAUSE_GAME + i);
leaf->SetMinimalSize(20, 20); leaf->SetMinimalSize(20, 20);
hor->Add(leaf); hor->Add(std::move(leaf));
} }
*biggest_index = std::max<int>(*biggest_index, WID_TN_SWITCH_BAR);
return hor; return hor;
} }
@ -2504,7 +2505,7 @@ struct ScenarioEditorToolbarWindow : Window {
this->DrawWidgets(); this->DrawWidgets();
} }
void SetStringParameters(int widget) const override void SetStringParameters(WidgetID widget) const override
{ {
switch (widget) { switch (widget) {
case WID_TE_DATE: case WID_TE_DATE:
@ -2513,7 +2514,7 @@ struct ScenarioEditorToolbarWindow : Window {
} }
} }
void DrawWidget(const Rect &r, int widget) const override void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
switch (widget) { switch (widget) {
case WID_TE_SPACER: { case WID_TE_SPACER: {
@ -2529,7 +2530,7 @@ struct ScenarioEditorToolbarWindow : Window {
} }
} }
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{ {
switch (widget) { switch (widget) {
case WID_TE_SPACER: case WID_TE_SPACER:
@ -2543,14 +2544,14 @@ struct ScenarioEditorToolbarWindow : Window {
} }
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
if (_game_mode == GM_MENU) return; if (_game_mode == GM_MENU) return;
CallBackFunction cbf = _scen_toolbar_button_procs[widget](this); CallBackFunction cbf = _scen_toolbar_button_procs[widget](this);
if (cbf != CBF_NONE) _last_started_action = cbf; if (cbf != CBF_NONE) _last_started_action = cbf;
} }
void OnDropdownSelect(int widget, int index) override void OnDropdownSelect(WidgetID widget, int index) override
{ {
CallBackFunction cbf = _scen_toolbar_dropdown_procs[widget](index); CallBackFunction cbf = _scen_toolbar_dropdown_procs[widget](index);
if (cbf != CBF_NONE) _last_started_action = cbf; if (cbf != CBF_NONE) _last_started_action = cbf;
@ -2734,9 +2735,9 @@ static const NWidgetPart _nested_toolb_scen_inner_widgets[] = {
NWidget(WWT_IMGBTN, COLOUR_GREY, WID_TE_SWITCH_BAR), SetDataTip(SPR_IMG_SWITCH_TOOLBAR, STR_TOOLBAR_TOOLTIP_SWITCH_TOOLBAR), NWidget(WWT_IMGBTN, COLOUR_GREY, WID_TE_SWITCH_BAR), SetDataTip(SPR_IMG_SWITCH_TOOLBAR, STR_TOOLBAR_TOOLTIP_SWITCH_TOOLBAR),
}; };
static NWidgetBase *MakeScenarioToolbar(int *biggest_index) static std::unique_ptr<NWidgetBase> MakeScenarioToolbar()
{ {
return MakeNWidgets(std::begin(_nested_toolb_scen_inner_widgets), std::end(_nested_toolb_scen_inner_widgets), biggest_index, new NWidgetScenarioToolbarContainer()); return MakeNWidgets(std::begin(_nested_toolb_scen_inner_widgets), std::end(_nested_toolb_scen_inner_widgets), std::make_unique<NWidgetScenarioToolbarContainer>());
} }
static const NWidgetPart _nested_toolb_scen_widgets[] = { static const NWidgetPart _nested_toolb_scen_widgets[] = {

@ -206,7 +206,7 @@ public:
} }
} }
void SetStringParameters(int widget) const override void SetStringParameters(WidgetID widget) const override
{ {
if (widget == WID_TA_CAPTION) { if (widget == WID_TA_CAPTION) {
SetDParam(0, this->window_number); SetDParam(0, this->window_number);
@ -239,7 +239,7 @@ public:
} }
} }
void DrawWidget(const Rect &r, int widget) const override void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
switch (widget) { switch (widget) {
case WID_TA_ACTION_INFO: case WID_TA_ACTION_INFO:
@ -346,7 +346,7 @@ public:
} }
} }
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{ {
switch (widget) { switch (widget) {
case WID_TA_ACTION_INFO: { case WID_TA_ACTION_INFO: {
@ -378,7 +378,7 @@ public:
} }
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
switch (widget) { switch (widget) {
case WID_TA_ZONE_BUTTON: { case WID_TA_ZONE_BUTTON: {
@ -473,7 +473,7 @@ public:
} }
virtual void OnDropdownSelect(int widget, int index) override virtual void OnDropdownSelect(WidgetID widget, int index) override
{ {
switch (widget) { switch (widget) {
case WID_TA_SETTING: { case WID_TA_SETTING: {
@ -541,7 +541,7 @@ public:
this->Window::Close(); this->Window::Close();
} }
void SetStringParameters(int widget) const override void SetStringParameters(WidgetID widget) const override
{ {
if (widget == WID_TV_CAPTION) SetDParam(0, this->town->index); if (widget == WID_TV_CAPTION) SetDParam(0, this->town->index);
} }
@ -556,7 +556,7 @@ public:
this->DrawWidgets(); this->DrawWidgets();
} }
void DrawWidget(const Rect &r, int widget) const override void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
if (widget != WID_TV_INFO) return; if (widget != WID_TV_INFO) return;
@ -649,7 +649,7 @@ public:
} }
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
switch (widget) { switch (widget) {
case WID_TV_CENTER_VIEW: // scroll to location case WID_TV_CENTER_VIEW: // scroll to location
@ -684,7 +684,7 @@ public:
} }
} }
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{ {
switch (widget) { switch (widget) {
case WID_TV_INFO: case WID_TV_INFO:
@ -976,7 +976,7 @@ public:
this->townname_editbox.cancel_button = QueryString::ACTION_CLEAR; this->townname_editbox.cancel_button = QueryString::ACTION_CLEAR;
} }
void SetStringParameters(int widget) const override void SetStringParameters(WidgetID widget) const override
{ {
switch (widget) { switch (widget) {
case WID_TD_WORLD_POPULATION: case WID_TD_WORLD_POPULATION:
@ -1001,7 +1001,7 @@ public:
return t->larger_town ? STR_TOWN_DIRECTORY_CITY : STR_TOWN_DIRECTORY_TOWN; return t->larger_town ? STR_TOWN_DIRECTORY_CITY : STR_TOWN_DIRECTORY_TOWN;
} }
void DrawWidget(const Rect &r, int widget) const override void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
switch (widget) { switch (widget) {
case WID_TD_SORT_ORDER: case WID_TD_SORT_ORDER:
@ -1048,7 +1048,7 @@ public:
} }
} }
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{ {
switch (widget) { switch (widget) {
case WID_TD_SORT_ORDER: { case WID_TD_SORT_ORDER: {
@ -1102,7 +1102,7 @@ public:
} }
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
switch (widget) { switch (widget) {
case WID_TD_SORT_ORDER: // Click on sort order button case WID_TD_SORT_ORDER: // Click on sort order button
@ -1139,7 +1139,7 @@ public:
} }
} }
void OnDropdownSelect(int widget, int index) override void OnDropdownSelect(WidgetID widget, int index) override
{ {
if (widget != WID_TD_SORT_CRITERIA) return; if (widget != WID_TD_SORT_CRITERIA) return;
@ -1167,7 +1167,7 @@ public:
this->vscroll->SetCapacityFromWidget(this, WID_TD_LIST); this->vscroll->SetCapacityFromWidget(this, WID_TD_LIST);
} }
void OnEditboxChanged(int wid) override void OnEditboxChanged(WidgetID wid) override
{ {
if (wid == WID_TD_FILTER) { if (wid == WID_TD_FILTER) {
this->string_filter.SetFilterTerm(this->townname_editbox.text.buf); this->string_filter.SetFilterTerm(this->townname_editbox.text.buf);
@ -1363,13 +1363,13 @@ public:
if (_settings_game.economy.found_town != TF_CUSTOM_LAYOUT) town_layout = _settings_game.economy.town_layout; if (_settings_game.economy.found_town != TF_CUSTOM_LAYOUT) town_layout = _settings_game.economy.town_layout;
} }
for (int i = WID_TF_SIZE_SMALL; i <= WID_TF_SIZE_RANDOM; i++) { for (WidgetID i = WID_TF_SIZE_SMALL; i <= WID_TF_SIZE_RANDOM; i++) {
this->SetWidgetLoweredState(i, i == WID_TF_SIZE_SMALL + this->town_size); this->SetWidgetLoweredState(i, i == WID_TF_SIZE_SMALL + this->town_size);
} }
this->SetWidgetLoweredState(WID_TF_CITY, this->city); this->SetWidgetLoweredState(WID_TF_CITY, this->city);
for (int i = WID_TF_LAYOUT_ORIGINAL; i <= WID_TF_LAYOUT_RANDOM; i++) { for (WidgetID i = WID_TF_LAYOUT_ORIGINAL; i <= WID_TF_LAYOUT_RANDOM; i++) {
this->SetWidgetLoweredState(i, i == WID_TF_LAYOUT_ORIGINAL + this->town_layout); this->SetWidgetLoweredState(i, i == WID_TF_LAYOUT_ORIGINAL + this->town_layout);
} }
@ -1396,7 +1396,7 @@ public:
if (success && !_shift_pressed) this->RandomTownName(); if (success && !_shift_pressed) this->RandomTownName();
} }
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
{ {
switch (widget) { switch (widget) {
case WID_TF_NEW_TOWN: case WID_TF_NEW_TOWN:
@ -1731,7 +1731,7 @@ public:
} }
} }
virtual void SetStringParameters(int widget) const override virtual void SetStringParameters(WidgetID widget) const override
{ {
if (widget == WID_HP_CAPTION) { if (widget == WID_HP_CAPTION) {
if (this->house_list.NumHouseSets() == 1) SetDParamStr(0, this->house_list.GetNameOfHouseSet(0)); if (this->house_list.NumHouseSets() == 1) SetDParamStr(0, this->house_list.GetNameOfHouseSet(0));
@ -1844,7 +1844,7 @@ public:
} }
} }
virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override virtual void UpdateWidgetSize(WidgetID widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override
{ {
switch (widget) { switch (widget) {
case WID_HP_HOUSE_SETS: { case WID_HP_HOUSE_SETS: {
@ -1920,9 +1920,9 @@ public:
} }
} }
virtual void DrawWidget(const Rect &r, int widget) const override virtual void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
switch (GB(widget, 0, 16)) { switch (widget) {
case WID_HP_HOUSE_SETS: { case WID_HP_HOUSE_SETS: {
int y = r.top + WidgetDimensions::scaled.matrix.top; int y = r.top + WidgetDimensions::scaled.matrix.top;
for (uint i = 0; i < this->house_list.NumHouseSets(); i++) { for (uint i = 0; i < this->house_list.NumHouseSets(); i++) {
@ -1940,7 +1940,7 @@ public:
break; break;
case WID_HP_HOUSE_SELECT: { case WID_HP_HOUSE_SELECT: {
HouseID house = this->house_list.GetHouseAtOffset(this->house_set, GB(widget, 16, 16)); HouseID house = this->house_list.GetHouseAtOffset(this->house_set, this->GetWidget<NWidgetBase>(widget)->GetParentWidget<NWidgetMatrix>()->GetCurrentElement());
int lowered = (house == _cur_house) ? 1 : 0; int lowered = (house == _cur_house) ? 1 : 0;
DrawHouseImage(house, DrawHouseImage(house,
r.left + WidgetDimensions::scaled.matrix.left + lowered, r.top + WidgetDimensions::scaled.matrix.top + lowered, r.left + WidgetDimensions::scaled.matrix.left + lowered, r.top + WidgetDimensions::scaled.matrix.top + lowered,
@ -1955,9 +1955,9 @@ public:
} }
} }
virtual void OnClick(Point pt, int widget, int click_count) override virtual void OnClick(Point pt, WidgetID widget, int click_count) override
{ {
switch (GB(widget, 0, 16)) { switch (widget) {
case WID_HP_HOUSE_SETS: { case WID_HP_HOUSE_SETS: {
uint index = (uint)(pt.y - this->GetWidget<NWidgetBase>(widget)->pos_y) / this->line_height; uint index = (uint)(pt.y - this->GetWidget<NWidgetBase>(widget)->pos_y) / this->line_height;
if (index < this->house_list.NumHouseSets() && index != this->house_set) this->SelectOtherHouse(index, 0); if (index < this->house_list.NumHouseSets() && index != this->house_set) this->SelectOtherHouse(index, 0);
@ -1965,7 +1965,7 @@ public:
} }
case WID_HP_HOUSE_SELECT: case WID_HP_HOUSE_SELECT:
this->SelectOtherHouse(this->house_set, GB(widget, 16, 16)); this->SelectOtherHouse(this->house_set, this->GetWidget<NWidgetBase>(widget)->GetParentWidget<NWidgetMatrix>()->GetCurrentElement());
break; break;
} }
} }
@ -2076,7 +2076,7 @@ struct SelectTownWindow : Window {
this->FinishInitNested(); this->FinishInitNested();
} }
void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override void UpdateWidgetSize(WidgetID widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override
{ {
if (widget != WID_ST_PANEL) return; if (widget != WID_ST_PANEL) return;
@ -2094,7 +2094,7 @@ struct SelectTownWindow : Window {
*size = d; *size = d;
} }
void DrawWidget(const Rect &r, int widget) const override void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
if (widget != WID_ST_PANEL) return; if (widget != WID_ST_PANEL) return;
@ -2108,7 +2108,7 @@ struct SelectTownWindow : Window {
} }
} }
void OnClick(Point pt, int widget, int click_count) override void OnClick(Point pt, WidgetID widget, int click_count) override
{ {
if (widget != WID_ST_PANEL) return; if (widget != WID_ST_PANEL) return;

@ -1809,7 +1809,7 @@ public:
this->Window::Close(); this->Window::Close();
} }
virtual void OnClick(Point pt, int widget, int click_count) override virtual void OnClick(Point pt, WidgetID widget, int click_count) override
{ {
switch (widget) { switch (widget) {
case TR_WIDGET_INSTRUCTION_LIST: { case TR_WIDGET_INSTRUCTION_LIST: {
@ -2282,7 +2282,7 @@ public:
TraceRestrictDoCommandP(tile, track, TRDCT_MODIFY_ITEM, this->selected_instruction - 1, item, STR_TRACE_RESTRICT_ERROR_CAN_T_MODIFY_ITEM); TraceRestrictDoCommandP(tile, track, TRDCT_MODIFY_ITEM, this->selected_instruction - 1, item, STR_TRACE_RESTRICT_ERROR_CAN_T_MODIFY_ITEM);
} }
virtual void OnDropdownSelect(int widget, int index) override virtual void OnDropdownSelect(WidgetID widget, int index) override
{ {
TraceRestrictItem item = GetSelected(); TraceRestrictItem item = GetSelected();
if (item == 0 || index < 0 || this->selected_instruction < 1) { if (item == 0 || index < 0 || this->selected_instruction < 1) {
@ -2384,7 +2384,7 @@ public:
virtual void OnPlaceObject(Point pt, TileIndex tile) override virtual void OnPlaceObject(Point pt, TileIndex tile) override
{ {
int widget = this->current_placement_widget; WidgetID widget = this->current_placement_widget;
if (widget != TR_WIDGET_SHARE_ONTO) { if (widget != TR_WIDGET_SHARE_ONTO) {
this->ResetObjectToPlaceAction(); this->ResetObjectToPlaceAction();
@ -2431,7 +2431,7 @@ public:
/** /**
* Common OnPlaceObject handler for program management actions which involve clicking on a signal * Common OnPlaceObject handler for program management actions which involve clicking on a signal
*/ */
void OnPlaceObjectSignal(Point pt, TileIndex source_tile, int widget, int error_message) void OnPlaceObjectSignal(Point pt, TileIndex source_tile, WidgetID widget, int error_message)
{ {
if (!IsPlainRailTile(source_tile) && !IsRailTunnelBridgeTile(source_tile)) { if (!IsPlainRailTile(source_tile) && !IsRailTunnelBridgeTile(source_tile)) {
ShowErrorMessage(error_message, STR_ERROR_THERE_IS_NO_RAILROAD_TRACK, WL_INFO); ShowErrorMessage(error_message, STR_ERROR_THERE_IS_NO_RAILROAD_TRACK, WL_INFO);
@ -2504,7 +2504,7 @@ public:
/** /**
* Common OnPlaceObject handler for instruction value modification actions which involve selecting an order target * Common OnPlaceObject handler for instruction value modification actions which involve selecting an order target
*/ */
void OnPlaceObjectDestination(Point pt, TileIndex tile, int widget, int error_message) void OnPlaceObjectDestination(Point pt, TileIndex tile, WidgetID widget, int error_message)
{ {
TraceRestrictItem item = GetSelected(); TraceRestrictItem item = GetSelected();
if (GetTraceRestrictTypeProperties(item).value_type != TRVT_ORDER) return; if (GetTraceRestrictTypeProperties(item).value_type != TRVT_ORDER) return;
@ -2543,7 +2543,7 @@ public:
/** /**
* Common OnPlaceObject handler for instruction value modification actions which involve selecting a signal tile value * Common OnPlaceObject handler for instruction value modification actions which involve selecting a signal tile value
*/ */
void OnPlaceObjectSignalTileValue(Point pt, TileIndex tile, int widget, int error_message) void OnPlaceObjectSignalTileValue(Point pt, TileIndex tile, WidgetID widget, int error_message)
{ {
TraceRestrictItem item = GetSelected(); TraceRestrictItem item = GetSelected();
TraceRestrictValueType val_type = GetTraceRestrictTypeProperties(item).value_type; TraceRestrictValueType val_type = GetTraceRestrictTypeProperties(item).value_type;
@ -2576,7 +2576,7 @@ public:
/** /**
* Common OnPlaceObject handler for instruction value modification actions which involve selecting a tile value * Common OnPlaceObject handler for instruction value modification actions which involve selecting a tile value
*/ */
void OnPlaceObjectTileValue(Point pt, TileIndex tile, int widget, int error_message) void OnPlaceObjectTileValue(Point pt, TileIndex tile, WidgetID widget, int error_message)
{ {
TraceRestrictItem item = GetSelected(); TraceRestrictItem item = GetSelected();
TraceRestrictValueType val_type = GetTraceRestrictTypeProperties(item).value_type; TraceRestrictValueType val_type = GetTraceRestrictTypeProperties(item).value_type;
@ -2591,7 +2591,7 @@ public:
this->ResetObjectToPlaceAction(); this->ResetObjectToPlaceAction();
} }
virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override virtual void UpdateWidgetSize(WidgetID widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override
{ {
switch (widget) { switch (widget) {
case TR_WIDGET_INSTRUCTION_LIST: case TR_WIDGET_INSTRUCTION_LIST:
@ -2616,7 +2616,7 @@ public:
this->DrawWidgets(); this->DrawWidgets();
} }
virtual void DrawWidget(const Rect &r, int widget) const override virtual void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
if (widget != TR_WIDGET_INSTRUCTION_LIST) return; if (widget != TR_WIDGET_INSTRUCTION_LIST) return;
@ -2659,7 +2659,7 @@ public:
} }
} }
virtual void SetStringParameters(int widget) const override virtual void SetStringParameters(WidgetID widget) const override
{ {
switch (widget) { switch (widget) {
case TR_WIDGET_VALUE_INT: { case TR_WIDGET_VALUE_INT: {
@ -2725,7 +2725,7 @@ public:
} }
} }
bool OnTooltip(Point pt, int widget, TooltipCloseCondition close_cond) override bool OnTooltip(Point pt, WidgetID widget, TooltipCloseCondition close_cond) override
{ {
switch (widget) { switch (widget) {
case TR_WIDGET_SHARE: { case TR_WIDGET_SHARE: {
@ -2929,7 +2929,7 @@ private:
void UpdatePlaceObjectPlanes() void UpdatePlaceObjectPlanes()
{ {
int widget = this->current_placement_widget; WidgetID widget = this->current_placement_widget;
if (!(widget == TR_WIDGET_COPY || widget == TR_WIDGET_COPY_APPEND)) { if (!(widget == TR_WIDGET_COPY || widget == TR_WIDGET_COPY_APPEND)) {
NWidgetStacked *copy_sel = this->GetWidget<NWidgetStacked>(TR_WIDGET_SEL_COPY); NWidgetStacked *copy_sel = this->GetWidget<NWidgetStacked>(TR_WIDGET_SEL_COPY);
@ -3451,7 +3451,7 @@ private:
/** /**
* Helper function to set or unset a SetObjectToPlaceWnd, for the given widget and cursor type * Helper function to set or unset a SetObjectToPlaceWnd, for the given widget and cursor type
*/ */
void SetObjectToPlaceAction(int widget, CursorID cursor) void SetObjectToPlaceAction(WidgetID widget, CursorID cursor)
{ {
if (this->current_placement_widget != -1 && widget != this->current_placement_widget) { if (this->current_placement_widget != -1 && widget != this->current_placement_widget) {
ResetObjectToPlace(); ResetObjectToPlace();
@ -3880,7 +3880,7 @@ public:
this->Window::Close(); this->Window::Close();
} }
virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override virtual void UpdateWidgetSize(WidgetID widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override
{ {
switch (widget) { switch (widget) {
case WID_TRSL_LIST_SLOTS: { case WID_TRSL_LIST_SLOTS: {
@ -3952,7 +3952,7 @@ public:
this->SetDirty(); this->SetDirty();
} }
virtual void SetStringParameters(int widget) const override virtual void SetStringParameters(WidgetID widget) const override
{ {
switch (widget) { switch (widget) {
case WID_TRSL_FILTER_BY_CARGO: case WID_TRSL_FILTER_BY_CARGO:
@ -4000,7 +4000,7 @@ public:
this->DrawWidgets(); this->DrawWidgets();
} }
virtual void DrawWidget(const Rect &r, int widget) const override virtual void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
switch (widget) { switch (widget) {
case WID_TRSL_ALL_VEHICLES: case WID_TRSL_ALL_VEHICLES:
@ -4041,7 +4041,7 @@ public:
} }
} }
virtual void OnClick(Point pt, int widget, int click_count) override virtual void OnClick(Point pt, WidgetID widget, int click_count) override
{ {
switch (widget) { switch (widget) {
case WID_TRSL_SORT_BY_ORDER: // Flip sorting method ascending/descending case WID_TRSL_SORT_BY_ORDER: // Flip sorting method ascending/descending
@ -4116,7 +4116,7 @@ public:
} }
} }
void OnDragDrop_Vehicle(Point pt, int widget) void OnDragDrop_Vehicle(Point pt, WidgetID widget)
{ {
switch (widget) { switch (widget) {
case WID_TRSL_ALL_VEHICLES: // All vehicles case WID_TRSL_ALL_VEHICLES: // All vehicles
@ -4165,7 +4165,7 @@ public:
} }
} }
virtual void OnDragDrop(Point pt, int widget) override virtual void OnDragDrop(Point pt, WidgetID widget) override
{ {
if (this->vehicle_sel != INVALID_VEHICLE) OnDragDrop_Vehicle(pt, widget); if (this->vehicle_sel != INVALID_VEHICLE) OnDragDrop_Vehicle(pt, widget);
@ -4192,7 +4192,7 @@ public:
this->vscroll->SetCapacityFromWidget(this, WID_TRSL_LIST_VEHICLE); this->vscroll->SetCapacityFromWidget(this, WID_TRSL_LIST_VEHICLE);
} }
virtual void OnDropdownSelect(int widget, int index) override virtual void OnDropdownSelect(WidgetID widget, int index) override
{ {
switch (widget) { switch (widget) {
case WID_TRSL_SORT_BY_DROPDOWN: case WID_TRSL_SORT_BY_DROPDOWN:
@ -4226,7 +4226,7 @@ public:
this->SetWidgetDirty(WID_TRSL_LIST_VEHICLE); this->SetWidgetDirty(WID_TRSL_LIST_VEHICLE);
} }
virtual void OnMouseDrag(Point pt, int widget) override virtual void OnMouseDrag(Point pt, WidgetID widget) override
{ {
if (this->vehicle_sel == INVALID_VEHICLE) return; if (this->vehicle_sel == INVALID_VEHICLE) return;
@ -4471,7 +4471,7 @@ public:
this->owner = this->ctr_company; this->owner = this->ctr_company;
} }
virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override virtual void UpdateWidgetSize(WidgetID widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override
{ {
switch (widget) { switch (widget) {
case WID_TRCL_LIST_COUNTERS: { case WID_TRCL_LIST_COUNTERS: {
@ -4534,7 +4534,7 @@ public:
this->DrawWidgets(); this->DrawWidgets();
} }
virtual void DrawWidget(const Rect &r, int widget) const override virtual void DrawWidget(const Rect &r, WidgetID widget) const override
{ {
switch (widget) { switch (widget) {
case WID_TRCL_LIST_COUNTERS: { case WID_TRCL_LIST_COUNTERS: {
@ -4564,7 +4564,7 @@ public:
} }
} }
virtual void OnClick(Point pt, int widget, int click_count) override virtual void OnClick(Point pt, WidgetID widget, int click_count) override
{ {
switch (widget) { switch (widget) {
case WID_TRCL_LIST_COUNTERS: { // Matrix case WID_TRCL_LIST_COUNTERS: { // Matrix

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save