//! 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; }