Browse Source

Add line name to NS display

master
Kenneth Bruen 9 months ago
parent
commit
cf9f72459d
Signed by: kbruen
GPG Key ID: C1980A470C3EE5B1
  1. 72
      src/departure.zig

72
src/departure.zig

@ -386,6 +386,29 @@ fn draw_db1(state: *AppState) !void {
}
}
const categories = .{
.{ "ICE", "ICE" },
.{ "IC", "Intercity" },
.{ "Flix", "FlixTrain" },
.{ "FLX", "FlixTrain" },
.{ "EST", "Eurostar" },
.{ "EUR", "Eurostar" },
.{ "EC", "Eurocity" },
.{ "EN", "Euronight" },
.{ "RJ", "Railjet" },
.{ "TGV", "TGV INOUI" },
.{ "FEX", "FEX" },
};
fn full_category_name(line_name: []const u8) ?[]const u8 {
inline for (categories) |category| {
if (std.mem.indexOf(u8, line_name, category[0])) |_| {
return category[1];
}
}
return null;
}
fn draw_ns(state: *AppState) !void {
const allocator = state.allocator;
const ds = &state.departure_screen_state;
@ -490,8 +513,11 @@ fn draw_ns(state: *AppState) !void {
if (train.get("platform")) |platform_raw| {
switch (platform_raw) {
.string => |p| {
const platform = std.fmt.allocPrintZ(allocator, "{s}", .{p}) catch continue;
const maybe_space = std.mem.indexOf(u8, p, " ") orelse p.len;
const platform = std.fmt.allocPrintZ(allocator, "{s}", .{p[0..maybe_space]}) catch continue;
defer allocator.free(platform);
const maybe_platform_area = if (maybe_space != p.len) std.fmt.allocPrintZ(allocator, "{s}", .{p[maybe_space + 1 ..]}) catch null else null;
defer if (maybe_platform_area) |platform_area| allocator.free(platform_area);
rl.DrawRectangle(sw - 200, @intFromFloat(y + 2), 12, 12, if (cancelled) ns_fg2 else ns_fg1);
rl.DrawLine(sw - 200, @intFromFloat(y + 2), sw - 200, @intFromFloat(y + 2 + square_side), if (cancelled) ns_fg2 else ns_fg1);
@ -509,6 +535,21 @@ fn draw_ns(state: *AppState) !void {
1,
if (cancelled) ns_fg2 else ns_fg1,
);
if (!cancelled) {
if (maybe_platform_area) |platform_area| {
const ptext_size = rl.MeasureTextEx(font, platform_area.ptr, 14, 0.8);
raylib.DrawTextEx(
font,
platform_area,
@as(f32, @floatFromInt(sw - 200)) + @divTrunc(square_side, 2) - (ptext_size.x / 2),
y + 2 + square_side - ptext_size.y - 2,
14,
0.8,
ns_fg1,
);
}
}
},
else => {
if (cancelled) {
@ -534,7 +575,34 @@ fn draw_ns(state: *AppState) !void {
}
y += line1h + 4;
const cancelled_h = raylib.DrawAndMeasureTextEx(font, if (cancelled) (if (language == 0) "Rijdt niet" else "Cancelled") else " ", 8 + col1w + 8, y, cancel_fs, 1, ns_fg3).y;
const cancelled_h = raylib.DrawAndMeasureTextEx(
font,
if (cancelled) (if (language == 0) "Rijdt niet" else "Cancelled") else " ",
8 + col1w + 8,
y,
cancel_fs,
1,
ns_fg3,
).y;
const line_name = train.get("line").?.object.get("name").?.string;
const maybe_line_name_str = std.fmt.allocPrintZ(
allocator,
"{s}",
.{if (full_category_name(line_name)) |s| s else line_name},
) catch null;
if (maybe_line_name_str) |line_name_str| {
raylib.DrawTextEx(
font,
line_name_str,
@as(f32, @floatFromInt(sw - 200)) + square_side + 4,
y,
cancel_fs,
1,
if (cancelled) ns_fg2 else ns_fg1,
);
}
y += cancelled_h + 4;
}
}

Loading…
Cancel
Save