diff --git a/src/tui/WidgetList.zig b/src/tui/WidgetList.zig index c40ff2c..1024ece 100644 --- a/src/tui/WidgetList.zig +++ b/src/tui/WidgetList.zig @@ -24,14 +24,12 @@ parent: Plane, allocator: Allocator, widgets: ArrayList(WidgetState), layout_: Layout, -layout_empty: bool = true, direction: Direction, box: ?Widget.Box = null, ctx: ?*anyopaque = null, on_render: *const fn (ctx: ?*anyopaque, theme: *const Widget.Theme) void = on_render_default, after_render: *const fn (ctx: ?*anyopaque, theme: *const Widget.Theme) void = on_render_default, on_resize: *const fn (ctx: ?*anyopaque, self: *Self, pos_: Widget.Box) void = on_resize_default, -on_layout: *const fn (ctx: ?*anyopaque, self: *Self) Widget.Layout = on_layout_default, pub fn createH(allocator: Allocator, parent: Plane, name: [:0]const u8, layout_: Layout) error{OutOfMemory}!*Self { const self = try allocator.create(Self); @@ -73,7 +71,7 @@ pub fn widget(self: *Self) Widget { } pub fn layout(self: *Self) Widget.Layout { - return self.on_layout(self.ctx, self); + return self.layout_; } pub fn deinit(self: *Self, allocator: std.mem.Allocator) void { @@ -216,10 +214,6 @@ fn on_resize_default(_: ?*anyopaque, self: *Self, pos: Widget.Box) void { self.resize(pos); } -fn on_layout_default(_: ?*anyopaque, self: *Self) Widget.Layout { - return self.layout_; -} - pub fn resize(self: *Self, pos_: Widget.Box) void { self.box = pos_; var pos = pos_; @@ -241,7 +235,6 @@ pub fn resize(self: *Self, pos_: Widget.Box) void { }, } } - self.layout_empty = avail == total and dynamics == 0; const dyn_size = avail / if (dynamics > 0) dynamics else 1; const rounded: usize = if (dyn_size * dynamics < avail) avail - dyn_size * dynamics else 0; diff --git a/src/tui/status/bar.zig b/src/tui/status/bar.zig index c9f8a63..98d4c25 100644 --- a/src/tui/status/bar.zig +++ b/src/tui/status/bar.zig @@ -12,7 +12,6 @@ pub fn create(allocator: std.mem.Allocator, parent: Plane, config: []const u8, s var w = try WidgetList.createH(allocator, parent, "statusbar", .{ .static = 1 }); if (style == .grip) w.after_render = render_grip; w.ctx = w; - w.on_layout = on_layout; 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) { @@ -23,13 +22,6 @@ pub fn create(allocator: std.mem.Allocator, parent: Plane, config: []const u8, s return w.widget(); } -fn on_layout(_: ?*anyopaque, w: *WidgetList) Widget.Layout { - return if (w.layout_empty) - .{ .static = 0 } - else - .{ .static = 1 }; -} - fn render_grip(ctx: ?*anyopaque, theme: *const Widget.Theme) void { const w: *WidgetList = @ptrCast(@alignCast(ctx.?)); if (w.hover()) { diff --git a/src/tui/status/modestate.zig b/src/tui/status/modestate.zig index bc91fcd..16ab14d 100644 --- a/src/tui/status/modestate.zig +++ b/src/tui/status/modestate.zig @@ -12,16 +12,9 @@ const Button = @import("../Button.zig"); const tui = @import("../tui.zig"); const CreateError = @import("widget.zig").CreateError; -const Style = enum { - plain, - fancy, -}; -const default_style = .fancy; - -pub fn create(allocator: Allocator, parent: Plane, event_handler: ?EventHandler, arg: ?[]const u8) CreateError!Widget { - const style_ = if (arg) |str_style| std.meta.stringToEnum(Style, str_style) orelse default_style else default_style; - return Button.create_widget(Style, allocator, parent, .{ - .ctx = style_, +pub fn create(allocator: Allocator, parent: Plane, event_handler: ?EventHandler, _: ?[]const u8) CreateError!Widget { + return Button.create_widget(void, allocator, parent, .{ + .ctx = {}, .label = tui.get_mode(), .on_click = on_click, .on_click2 = toggle_panel, @@ -32,7 +25,7 @@ pub fn create(allocator: Allocator, parent: Plane, event_handler: ?EventHandler, }); } -pub fn layout(_: *Style, btn: *Button.State(Style)) Widget.Layout { +pub fn layout(_: *void, btn: *Button.State(void)) Widget.Layout { const name = btn.plane.egc_chunk_width(tui.get_mode(), 0, 1); const logo = if (is_mini_mode() or is_overlay_mode()) 1 else btn.plane.egc_chunk_width(left ++ symbol ++ right, 0, 1); const padding: usize = 2; @@ -48,12 +41,9 @@ fn is_overlay_mode() bool { return tui.input_mode_outer() != null; } -pub fn render(ctx: *Style, self: *Button.State(Style), theme: *const Widget.Theme) bool { +pub fn render(_: *void, self: *Button.State(void), theme: *const Widget.Theme) bool { const style_base = theme.statusbar; - const style_label = switch (ctx.*) { - .fancy => if (self.active) theme.editor_cursor else if (self.hover) theme.editor_selection else theme.statusbar_hover, - .plain => if (self.active) theme.editor_cursor else if (self.hover or is_mini_mode()) theme.statusbar_hover else style_base, - }; + const style_label = if (self.active) theme.editor_cursor else if (self.hover) theme.editor_selection else theme.statusbar_hover; self.plane.set_base_style(theme.editor); self.plane.erase(); self.plane.home(); @@ -78,7 +68,7 @@ pub fn render(ctx: *Style, self: *Button.State(Style), theme: *const Widget.Them return false; } -fn render_separator(self: *Button.State(Style), theme: *const Widget.Theme) void { +fn render_separator(self: *Button.State(void), theme: *const Widget.Theme) void { self.plane.reverse_style(); self.plane.set_base_style(.{ .bg = theme.editor.bg }); if (theme.statusbar.bg) |bg| self.plane.set_style(.{ .bg = bg }); @@ -89,13 +79,15 @@ const left = " "; const symbol = "󱞏"; const right = " "; -fn render_logo(self: *Button.State(Style), theme: *const Widget.Theme, style_label: Widget.Theme.Style) void { - const style_braces: Widget.Theme.Style = if (tui.find_scope_style(theme, "punctuation")) |sty| .{ .fg = sty.style.fg, .bg = style_label.bg, .fs = style_label.fs } else style_label; +fn render_logo(self: *Button.State(void), theme: *const Widget.Theme, base_style: Widget.Theme.Style) void { + // const style_symbol: Widget.Theme.Style = if (tui.find_scope_style(theme, "number")) |sty| .{ .fg = sty.style.fg, .bg = base_style.bg, .fs = base_style.fs } else base_style; + const style_symbol = if (self.active) theme.editor_cursor else if (self.hover) theme.editor_selection else theme.statusbar_hover; + const style_braces: Widget.Theme.Style = if (tui.find_scope_style(theme, "punctuation")) |sty| .{ .fg = sty.style.fg, .bg = base_style.bg, .fs = base_style.fs } else base_style; if (left.len > 0) { self.plane.set_style(style_braces); _ = self.plane.putstr(" " ++ left) catch {}; } - self.plane.set_style(style_label); + self.plane.set_style(style_symbol); _ = self.plane.putstr(symbol) catch {}; if (right.len > 0) { self.plane.set_style(style_braces); @@ -103,7 +95,7 @@ fn render_logo(self: *Button.State(Style), theme: *const Widget.Theme, style_lab } } -fn on_click(_: *Style, _: *Button.State(Style)) void { +fn on_click(_: *void, _: *Button.State(void)) void { if (is_mini_mode()) { command.executeName("exit_mini_mode", .{}) catch {}; } else if (is_overlay_mode()) { @@ -113,6 +105,6 @@ fn on_click(_: *Style, _: *Button.State(Style)) void { } } -fn toggle_panel(_: *Style, _: *Button.State(Style)) void { +fn toggle_panel(_: *void, _: *Button.State(void)) void { command.executeName("toggle_panel", .{}) catch {}; } diff --git a/src/tui/status/selectionstate.zig b/src/tui/status/selectionstate.zig index a8beb49..6e0fec9 100644 --- a/src/tui/status/selectionstate.zig +++ b/src/tui/status/selectionstate.zig @@ -69,7 +69,7 @@ fn format(self: *Self) void { sel.normalize(); const lines = sel.end.row - sel.begin.row; if (lines == 0) { - std.fmt.format(writer, "({d} columns selected)", .{sel.end.col - sel.begin.col}) catch {}; + std.fmt.format(writer, "({d} selected)", .{sel.end.col - sel.begin.col}) catch {}; } else { std.fmt.format(writer, "({d} lines selected)", .{if (sel.end.col == 0) lines else lines + 1}) catch {}; } diff --git a/src/tui/status/tabs.zig b/src/tui/status/tabs.zig index 58ede12..f6bfad6 100644 --- a/src/tui/status/tabs.zig +++ b/src/tui/status/tabs.zig @@ -11,11 +11,7 @@ const Widget = @import("../Widget.zig"); const WidgetList = @import("../WidgetList.zig"); const Button = @import("../Button.zig"); -const default_min_tabs = 2; - const @"style.config" = struct { - default_minimum_tabs_shown: usize = 2, - dirty_indicator: []const u8 = " ", spacer: []const u8 = "|", @@ -56,11 +52,10 @@ const @"style.config" = struct { }; pub const Style = @"style.config"; -pub fn create(allocator: std.mem.Allocator, parent: Plane, event_handler: ?EventHandler, arg: ?[]const u8) @import("widget.zig").CreateError!Widget { - const min_tabs = if (arg) |str_size| std.fmt.parseInt(usize, str_size, 10) catch null else null; +pub fn create(allocator: std.mem.Allocator, parent: Plane, event_handler: ?EventHandler, _: ?[]const u8) @import("widget.zig").CreateError!Widget { const self = try allocator.create(TabBar); errdefer allocator.destroy(self); - self.* = try TabBar.init(allocator, parent, event_handler, min_tabs); + self.* = try TabBar.init(allocator, parent, event_handler); return Widget.to(self); } @@ -72,7 +67,6 @@ const TabBar = struct { event_handler: ?EventHandler, tabs: []TabBarTab = &[_]TabBarTab{}, active_buffer_ref: ?usize = null, - minimum_tabs_shown: usize, tab_style: Style, tab_style_bufs: [][]const u8, @@ -84,7 +78,7 @@ const TabBar = struct { widget: Widget, }; - fn init(allocator: std.mem.Allocator, parent: Plane, event_handler: ?EventHandler, min_tabs: ?usize) !Self { + fn init(allocator: std.mem.Allocator, parent: Plane, event_handler: ?EventHandler) !Self { var w = try WidgetList.createH(allocator, parent, "tabs", .dynamic); w.ctx = w; const tab_style, const tab_style_bufs = root.read_config(Style, allocator); @@ -96,7 +90,6 @@ const TabBar = struct { .event_handler = event_handler, .tab_style = tab_style, .tab_style_bufs = tab_style_bufs, - .minimum_tabs_shown = min_tabs orelse tab_style.default_minimum_tabs_shown, }; } @@ -108,10 +101,7 @@ const TabBar = struct { } pub fn layout(self: *Self) Widget.Layout { - return if (self.tabs.len >= self.minimum_tabs_shown) - self.widget_list_widget.layout() - else - .{ .static = 0 }; + return self.widget_list_widget.layout(); } pub fn update(self: *Self) void {