tally/src/tui/help.zig
2026-07-25 11:18:34 -07:00

74 lines
2.6 KiB
Zig

//! Help overlay for the TUI.
const vaxis = @import("vaxis");
const vxfw = vaxis.vxfw;
const draw = @import("draw.zig");
const C = draw.C;
pub fn drawHelp(surface: *vxfw.Surface, width: u16, height: u16) void {
for (0..height) |r| {
draw.fillRow(surface, @intCast(r), ' ', .{});
}
var row: u16 = 1;
draw.writeStr(surface, row, 2, "Tally - Help", .{ .fg = C.cyan, .bold = true });
row += 2;
draw.writeStr(surface, row, 2, "Keybindings", .{ .fg = C.purple, .bold = true });
row += 1;
const keys = [_][2][]const u8{
.{ "Enter", "Evaluate expression" },
.{ "Tab", "Switch mode (Standard/Programmer)" },
.{ "Ctrl-C/D", "Quit" },
.{ "Ctrl-L", "Clear history" },
.{ "Up/Down", "Browse history" },
.{ "?", "Toggle this help" },
};
for (keys) |kv| {
draw.writeStr(surface, row, 4, kv[0], .{ .fg = C.yellow });
draw.writeStr(surface, row, 18, kv[1], .{ .fg = C.fg });
row += 1;
}
row += 1;
draw.writeStr(surface, row, 2, "Programmer Mode", .{ .fg = C.purple, .bold = true });
row += 1;
const prog_keys = [_][2][]const u8{
.{ "`", "Toggle input / value zone" },
.{ "Ctrl-W", "Cycle bit width (8/16/32/64/128)" },
.{ "Ctrl-E", "Toggle endianness (BE / LE)" },
.{ "Ctrl-F", "IEEE 754 float view (Ctrl-W: f32/f64)" },
.{ "Space", "Toggle bit (in grid)" },
.{ "Arrows", "Navigate fields and bits (value zone)" },
};
for (prog_keys) |kv| {
if (row >= height -| 4) break;
draw.writeStr(surface, row, 4, kv[0], .{ .fg = C.yellow });
draw.writeStr(surface, row, 18, kv[1], .{ .fg = C.fg });
row += 1;
}
row += 1;
if (row < height -| 6) {
draw.writeStr(surface, row, 2, "Functions", .{ .fg = C.purple, .bold = true });
row += 1;
draw.writeStr(surface, row, 4, "sin cos tan asin acos atan log ln sqrt abs", .{ .fg = C.fg });
row += 1;
draw.writeStr(surface, row, 4, "ceil floor round factorial max min exp", .{ .fg = C.fg });
row += 1;
}
if (row < height -| 4) {
row += 1;
draw.writeStr(surface, row, 2, "Operators", .{ .fg = C.purple, .bold = true });
row += 1;
draw.writeStr(surface, row, 4, "Standard: + - * / % ^ (power)", .{ .fg = C.fg });
row += 1;
draw.writeStr(surface, row, 4, "Programmer: & | ~ << >> >>> ^/** (pow) and or xor not rol ror", .{ .fg = C.fg });
row += 1;
}
draw.fillRow(surface, height -| 1, ' ', .{ .fg = C.muted });
draw.writeStr(surface, height -| 1, 1, "Press any key to return", .{ .fg = C.muted });
_ = width;
}