feat: add basic widget style switching support
This commit is contained in:
		
							parent
							
								
									d872e2e734
								
							
						
					
					
						commit
						4f912cebeb
					
				
					 1 changed files with 73 additions and 14 deletions
				
			
		| 
						 | 
				
			
			@ -59,39 +59,98 @@ pub const Border = struct {
 | 
			
		|||
    const @"round thick box": Border = .{ .nw = "█", .n = "▀", .ne = "█", .e = "█", .se = "█", .s = "▄", .sw = "█", .w = "█" };
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
pub const default_static: @This() = .{};
 | 
			
		||||
pub const default = &default_static;
 | 
			
		||||
const compact: @This() = .{};
 | 
			
		||||
 | 
			
		||||
pub const boxed_static: @This() = .{
 | 
			
		||||
const boxed: @This() = .{
 | 
			
		||||
    .padding = Margin.@"1",
 | 
			
		||||
    .border = Border.box,
 | 
			
		||||
};
 | 
			
		||||
pub const boxed = &boxed_static;
 | 
			
		||||
 | 
			
		||||
pub const thick_boxed_static: @This() = .{
 | 
			
		||||
const thick_boxed: @This() = .{
 | 
			
		||||
    .padding = Margin.@"1/2",
 | 
			
		||||
    .border = Border.@"thick box (octant)",
 | 
			
		||||
};
 | 
			
		||||
pub const thick_boxed = &thick_boxed_static;
 | 
			
		||||
 | 
			
		||||
pub const bars_top_bottom_static: @This() = .{
 | 
			
		||||
const bars_top_bottom: @This() = .{
 | 
			
		||||
    .padding = Margin.@"top/bottom/1",
 | 
			
		||||
    .border = Border.@"thick box (octant)",
 | 
			
		||||
};
 | 
			
		||||
pub const bars_top_bottom = &bars_top_bottom_static;
 | 
			
		||||
 | 
			
		||||
pub const bars_left_right_static: @This() = .{
 | 
			
		||||
const bars_left_right: @This() = .{
 | 
			
		||||
    .padding = Margin.@"left/right/1",
 | 
			
		||||
    .border = Border.@"thick box (octant)",
 | 
			
		||||
};
 | 
			
		||||
pub const bars_left_right = &bars_left_right_static;
 | 
			
		||||
 | 
			
		||||
pub fn from_type(style_type: Type) *const @This() {
 | 
			
		||||
    return switch (style_type) {
 | 
			
		||||
        .none => default,
 | 
			
		||||
        .palette => bars_top_bottom,
 | 
			
		||||
        .panel => default,
 | 
			
		||||
        .home => bars_left_right,
 | 
			
		||||
        .none => none_style,
 | 
			
		||||
        .palette => palette_style,
 | 
			
		||||
        .panel => panel_style,
 | 
			
		||||
        .home => home_style,
 | 
			
		||||
    };
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
pub const Styles = enum {
 | 
			
		||||
    compact,
 | 
			
		||||
    boxed,
 | 
			
		||||
    thick_boxed,
 | 
			
		||||
    bars_top_bottom,
 | 
			
		||||
    bars_left_right,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
pub fn from_tag(tag: Styles) *const @This() {
 | 
			
		||||
    return switch (tag) {
 | 
			
		||||
        .compact => &compact,
 | 
			
		||||
        .boxed => &boxed,
 | 
			
		||||
        .thick_boxed => &thick_boxed,
 | 
			
		||||
        .bars_top_bottom => &bars_top_bottom,
 | 
			
		||||
        .bars_left_right => &bars_left_right,
 | 
			
		||||
    };
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
pub fn next_tag(tag: Styles) Styles {
 | 
			
		||||
    const new_value = @intFromEnum(tag) + 1;
 | 
			
		||||
    return if (new_value > @intFromEnum(Styles.bars_left_right)) .compact else @enumFromInt(new_value);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
pub fn set_type_style(style_type: Type, tag: Styles) void {
 | 
			
		||||
    const ref = type_style(style_type);
 | 
			
		||||
    ref.* = from_tag(tag);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
pub fn set_next_style(style_type: Type) void {
 | 
			
		||||
    const tag_ref = type_tag(style_type);
 | 
			
		||||
    const new_tag = next_tag(tag_ref.*);
 | 
			
		||||
    const style_ref = type_style(style_type);
 | 
			
		||||
    tag_ref.* = new_tag;
 | 
			
		||||
    style_ref.* = from_tag(new_tag);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var none_style: *const @This() = &compact;
 | 
			
		||||
var palette_style: *const @This() = &bars_top_bottom;
 | 
			
		||||
var panel_style: *const @This() = &compact;
 | 
			
		||||
var home_style: *const @This() = &bars_left_right;
 | 
			
		||||
 | 
			
		||||
fn type_style(style_type: Type) **const @This() {
 | 
			
		||||
    return switch (style_type) {
 | 
			
		||||
        .none => &none_style,
 | 
			
		||||
        .palette => &palette_style,
 | 
			
		||||
        .panel => &panel_style,
 | 
			
		||||
        .home => &home_style,
 | 
			
		||||
    };
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var none_tag: Styles = .compact;
 | 
			
		||||
var palette_tag: Styles = .bars_top_bottom;
 | 
			
		||||
var panel_tag: Styles = .compact;
 | 
			
		||||
var home_tag: Styles = .bars_left_right;
 | 
			
		||||
 | 
			
		||||
fn type_tag(style_type: Type) *Styles {
 | 
			
		||||
    return switch (style_type) {
 | 
			
		||||
        .none => &none_tag,
 | 
			
		||||
        .palette => &palette_tag,
 | 
			
		||||
        .panel => &panel_tag,
 | 
			
		||||
        .home => &home_tag,
 | 
			
		||||
    };
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue