32 lines
1.2 KiB
Zig
32 lines
1.2 KiB
Zig
const std = @import("std");
|
|
const EventHandler = @import("EventHandler");
|
|
|
|
const status_widget = @import("widget.zig");
|
|
const Widget = @import("../Widget.zig");
|
|
const WidgetList = @import("../WidgetList.zig");
|
|
const Plane = @import("renderer").Plane;
|
|
|
|
pub const Style = enum { none, grip };
|
|
|
|
pub fn create(allocator: std.mem.Allocator, parent: Plane, config: []const u8, style: Style, event_handler: ?EventHandler) error{OutOfMemory}!Widget {
|
|
var w = try WidgetList.createH(allocator, parent, "statusbar", .{ .static = 1 });
|
|
if (style == .grip) w.after_render = render_grip;
|
|
w.ctx = w;
|
|
var it = std.mem.splitScalar(u8, config, ' ');
|
|
while (it.next()) |widget_name| {
|
|
try w.add(status_widget.create(widget_name, allocator, w.plane, event_handler) catch |e| switch (e) {
|
|
error.OutOfMemory => return error.OutOfMemory,
|
|
error.WidgetInitFailed => null,
|
|
} orelse continue);
|
|
}
|
|
return w.widget();
|
|
}
|
|
|
|
fn render_grip(ctx: ?*anyopaque, theme: *const Widget.Theme) void {
|
|
const w: *WidgetList = @ptrCast(@alignCast(ctx.?));
|
|
if (w.hover()) {
|
|
w.plane.set_style(theme.statusbar_hover);
|
|
w.plane.cursor_move_yx(0, 0) catch {};
|
|
_ = w.plane.putstr(" ") catch {};
|
|
}
|
|
}
|