feat(tree): make left side of the tree only take as much space as necessary
This commit is contained in:
@@ -3,8 +3,8 @@
|
|||||||
.version = "0.0.1",
|
.version = "0.0.1",
|
||||||
.dependencies = .{
|
.dependencies = .{
|
||||||
.zterm = .{
|
.zterm = .{
|
||||||
.url = "git+https://gitea.yves-biener.de/yves-biener/zterm#e972a2ea0f7a9f8caffd439ef206474b46475f91",
|
.url = "git+https://gitea.yves-biener.de/yves-biener/zterm#b1a0d60ae379bb91b862d7c4a8a2210cd74c4387",
|
||||||
.hash = "zterm-0.3.0-1xmmENkhHAB2rmNJFH-9rRqiRLnT673xwuMrqLwOnlT_",
|
.hash = "zterm-0.3.0-1xmmEMotHACXUXNtsX1P2iz3XQgabNz1PfF7oazYtNam",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
.minimum_zig_version = "0.16.0-dev.1254+bf15c791f",
|
.minimum_zig_version = "0.16.0-dev.1254+bf15c791f",
|
||||||
|
|||||||
@@ -59,6 +59,7 @@ pub fn Tree(App: type) type {
|
|||||||
.ptr = this,
|
.ptr = this,
|
||||||
.vtable = &.{
|
.vtable = &.{
|
||||||
.resize = resize,
|
.resize = resize,
|
||||||
|
.minSize = minSize,
|
||||||
.handle = handle,
|
.handle = handle,
|
||||||
.content = content,
|
.content = content,
|
||||||
},
|
},
|
||||||
@@ -70,6 +71,19 @@ pub fn Tree(App: type) type {
|
|||||||
this.size = size;
|
this.size = size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn minSize(ctx: *anyopaque, model: *const App.Model, _: Point) Point {
|
||||||
|
// NOTE as we assume the model contents do not change we could calculate the
|
||||||
|
// maximum width required for this `Element` and return that, instead of
|
||||||
|
// calculating the width every time anew. For now this works fine.
|
||||||
|
const this: *@This() = @ptrCast(@alignCast(ctx));
|
||||||
|
const changes: []const Model.Index = model.changes.keys();
|
||||||
|
const files = changes[this.scrollback..];
|
||||||
|
var width: u16 = 0;
|
||||||
|
for (files) |file| width = @max(@as(u16, @intCast(file.len)), width);
|
||||||
|
return .{ .x = width };
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
fn handle(ctx: *anyopaque, model: *App.Model, event: App.Event) !void {
|
fn handle(ctx: *anyopaque, model: *App.Model, event: App.Event) !void {
|
||||||
const this: *@This() = @ptrCast(@alignCast(ctx));
|
const this: *@This() = @ptrCast(@alignCast(ctx));
|
||||||
switch (event) {
|
switch (event) {
|
||||||
@@ -112,7 +126,6 @@ pub fn Tree(App: type) type {
|
|||||||
const row_color: zterm.Color = if (this.idx == idx) .blue else .default;
|
const row_color: zterm.Color = if (this.idx == idx) .blue else .default;
|
||||||
cell_idx = row * size.x;
|
cell_idx = row * size.x;
|
||||||
for (0..size.x) |_| {
|
for (0..size.x) |_| {
|
||||||
cell_idx += 1;
|
|
||||||
if (value_idx >= value.len) break;
|
if (value_idx >= value.len) break;
|
||||||
const cp = value[value_idx];
|
const cp = value[value_idx];
|
||||||
defer value_idx += 1;
|
defer value_idx += 1;
|
||||||
@@ -128,6 +141,7 @@ pub fn Tree(App: type) type {
|
|||||||
else => cp,
|
else => cp,
|
||||||
};
|
};
|
||||||
cells[cell_idx].style.fg = row_color;
|
cells[cell_idx].style.fg = row_color;
|
||||||
|
cell_idx += 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ pub fn main() !void {
|
|||||||
// tui creation
|
// tui creation
|
||||||
errdefer |err| log.err("Application Error: {any}", .{err});
|
errdefer |err| log.err("Application Error: {any}", .{err});
|
||||||
|
|
||||||
var threaded_io: std.Io.Threaded = .init(allocator);
|
var threaded_io: std.Io.Threaded = .init(allocator, .{});
|
||||||
errdefer threaded_io.deinit();
|
errdefer threaded_io.deinit();
|
||||||
const io = threaded_io.io();
|
const io = threaded_io.io();
|
||||||
|
|
||||||
|
|||||||
@@ -17,7 +17,11 @@ pub fn Container(App: type, gpa: Allocator, element: *elements.Root(App), tree:
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
}, element.element());
|
}, element.element());
|
||||||
try root.append(try .init(gpa, .{}, tree.element()));
|
try root.append(try .init(gpa, .{
|
||||||
|
.size = .{
|
||||||
|
.grow = .vertical,
|
||||||
|
},
|
||||||
|
}, tree.element()));
|
||||||
try root.append(try .init(gpa, .{}, .{})); // empty container holding the scrollable element for the diff of each file
|
try root.append(try .init(gpa, .{}, .{})); // empty container holding the scrollable element for the diff of each file
|
||||||
return root;
|
return root;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user