╭─────────────╮ │scroll to top│ ╰─────────────╯ ╭ Settings.zig ─────────────────────────────────────────────────╮ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ╰───────────────────────────────────────────────────────────────╯
╭────╮ ╭ clone ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ╮ │http│ ssh │ │ ╰────╯ ╰ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ╯
77 .button_id = button_id, 78 }; 79 } 80 81 pub fn deinit(self: *View, allocator: std.mem.Allocator) void { 82 self.center.deinit(allocator); 83 } 84 85 pub fn build(self: *View, allocator: std.mem.Allocator, constraint: layout.Constraint, root_focus: *Focus) !void { 86 // select the logged-in view when logged in, else the logged-out view. 87 // decided per-frame since the tty doesn't rebuild the page on login. 88 const logged_in = self.session.data.user_id != null; 89 const stack = &self.center.child.stack; 90 if (logged_in) { 91 const box = &stack.children.values()[logged_in_index].box; 92 const button = &box.children.values()[0].widget.text_box; 93 button.box.children.values()[0].widget.text.content = ansiLabel(self.session); 94 } 95 stack.getFocus().child_id = stack.children.keys()[if (logged_in) logged_in_index else logged_out_index]; 96 try self.center.build(allocator, constraint, root_focus); 97 } 98 99 pub fn input(self: *View, allocator: std.mem.Allocator, key: Key, root_focus: *Focus) !void { 100 _ = allocator; 101 if (self.session.data.user_id == null) return; // blank/disabled when logged out 102 switch (key) { 103 .enter => try self.toggle(), 104 .mouse => |mouse| { 105 if (inp.leftClickOn(root_focus, self.button_id, mouse)) { 106 try self.toggle(); 107 } 108 }, 109 else => {}, 110 } 111 } 112 113 fn toggle(self: *View) !void { 114 try self.session.push(.toggle_ansi); 115 } 116 117 pub fn clearGrid(self: *View) void { 118 self.center.clearGrid(); 119 } 120 121 pub fn getGrid(self: View) ?Grid { 122 return self.center.getGrid(); 123 } 124 125 pub fn getFocus(self: *View) *Focus { 126 return self.center.getFocus(); 127 } 128 129 pub fn getSelectedIndex(self: View) ?usize { 130 _ = self; 131 return 0; 132 } 133 }; 134 135 fn ansiLabel(session: *const ui.Session) []const u8 { 136 const label_on = "turn off ANSI art"; 137 const label_off = "turn on ANSI art"; 138 return if (session.data.enable_ansi) label_on else label_off; 139 } 140