flow/src/tui/status/widget.zig

40 lines
1.7 KiB
Zig

const std = @import("std");
const EventHandler = @import("EventHandler");
const Plane = @import("renderer").Plane;
const log = @import("log");
const Widget = @import("../Widget.zig");
const widgets = std.static_string_map.StaticStringMap(CreateFunction).initComptime(.{
.{ "mode", @import("modestate.zig").create },
.{ "file", @import("filestate.zig").create },
.{ "log", @import("minilog.zig").create },
.{ "selection", @import("selectionstate.zig").create },
.{ "diagnostics", @import("diagstate.zig").create },
.{ "linenumber", @import("linenumstate.zig").create },
.{ "modifiers", @import("modstate.zig").create },
.{ "keystate", @import("keystate.zig").create },
.{ "expander", @import("blank.zig").Create(.dynamic) },
.{ "spacer", @import("blank.zig").Create(.{ .static = 1 }) },
.{ "clock", @import("clock.zig").create },
.{ "keybind", @import("keybindstate.zig").create },
.{ "tabs", @import("tabs.zig").create },
});
pub const CreateError = error{ OutOfMemory, WidgetInitFailed };
pub const CreateFunction = *const fn (allocator: std.mem.Allocator, parent: Plane, event_handler: ?EventHandler) CreateError!Widget;
pub fn create(name: []const u8, allocator: std.mem.Allocator, parent: Plane, event_handler: ?EventHandler) CreateError!?Widget {
const create_ = widgets.get(name) orelse {
const logger = log.logger("statusbar");
logger.print_err("config", "unknown widget \"{s}\" (see log)", .{name});
log_widgets(logger);
return null;
};
return try create_(allocator, parent, event_handler);
}
fn log_widgets(logger: anytype) void {
logger.print("available widgets:", .{});
for (widgets.keys()) |name|
logger.print(" {s}", .{name});
}