feat: auto hide tabs widget if there are less than {n} tabs
This can be configured via an integer argument in the bar widget descriptor, or via the tab styles configuration file. A value of 0 will effectively disable auto hide.
This commit is contained in:
parent
dfcc825e4b
commit
b97b8e8fb7
1 changed files with 14 additions and 4 deletions
|
@ -11,7 +11,11 @@ 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 = "|",
|
||||
|
@ -52,10 +56,11 @@ const @"style.config" = struct {
|
|||
};
|
||||
pub const Style = @"style.config";
|
||||
|
||||
pub fn create(allocator: std.mem.Allocator, parent: Plane, event_handler: ?EventHandler, _: ?[]const u8) @import("widget.zig").CreateError!Widget {
|
||||
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;
|
||||
const self = try allocator.create(TabBar);
|
||||
errdefer allocator.destroy(self);
|
||||
self.* = try TabBar.init(allocator, parent, event_handler);
|
||||
self.* = try TabBar.init(allocator, parent, event_handler, min_tabs);
|
||||
return Widget.to(self);
|
||||
}
|
||||
|
||||
|
@ -67,6 +72,7 @@ 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,
|
||||
|
@ -78,7 +84,7 @@ const TabBar = struct {
|
|||
widget: Widget,
|
||||
};
|
||||
|
||||
fn init(allocator: std.mem.Allocator, parent: Plane, event_handler: ?EventHandler) !Self {
|
||||
fn init(allocator: std.mem.Allocator, parent: Plane, event_handler: ?EventHandler, min_tabs: ?usize) !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);
|
||||
|
@ -90,6 +96,7 @@ 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,
|
||||
};
|
||||
}
|
||||
|
||||
|
@ -101,7 +108,10 @@ const TabBar = struct {
|
|||
}
|
||||
|
||||
pub fn layout(self: *Self) Widget.Layout {
|
||||
return self.widget_list_widget.layout();
|
||||
return if (self.tabs.len >= self.minimum_tabs_shown)
|
||||
self.widget_list_widget.layout()
|
||||
else
|
||||
.{ .static = 0 };
|
||||
}
|
||||
|
||||
pub fn update(self: *Self) void {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue