Current section

Files

Jump to
shiny src ui@box.erl
Raw

src/ui@box.erl

-module(ui@box).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/ui/box.gleam").
-export([draw_box/5, draw_box_with_title/6, fill_box/5, draw_text_in_box/8, draw_menu_box/7, draw_progress_box/7]).
-file("src/ui/box.gleam", 9).
-spec draw_box(
integer(),
integer(),
integer(),
integer(),
types@box_style:box_style()
) -> nil.
draw_box(X, Y, Width, Height, Style) ->
{Tl, Tr, Bl, Br, H, V} = utils@text:get_box_chars(Style),
utils@misc:print_at(
<<<<Tl/binary, (gleam@string:repeat(H, Width - 2))/binary>>/binary,
Tr/binary>>,
X,
Y
),
_pipe = gleam@list:range(1, Height - 2),
gleam@list:each(
_pipe,
fun(Row) ->
utils@misc:print_at(V, X, Y + Row),
utils@misc:print_at(V, (X + Width) - 1, Y + Row)
end
),
utils@misc:print_at(
<<<<Bl/binary, (gleam@string:repeat(H, Width - 2))/binary>>/binary,
Br/binary>>,
X,
(Y + Height) - 1
).
-file("src/ui/box.gleam", 23).
-spec draw_box_with_title(
integer(),
integer(),
integer(),
integer(),
types@box_style:box_style(),
binary()
) -> nil.
draw_box_with_title(X, Y, Width, Height, Style, Title) ->
draw_box(X, Y, Width, Height, Style),
{_, _, _, _, _, _} = utils@text:get_box_chars(Style),
Title_padded = <<<<" "/utf8, Title/binary>>/binary, " "/utf8>>,
Title_length = string:length(Title_padded),
case Title_length < (Width - 2) of
true ->
Title_x = X + ((Width - Title_length) div 2),
utils@misc:print_at(Title_padded, Title_x, Y);
false ->
nil
end.
-file("src/ui/box.gleam", 46).
-spec fill_box(integer(), integer(), integer(), integer(), binary()) -> nil.
fill_box(X, Y, Width, Height, Fill_char) ->
Fill_line = gleam@string:repeat(Fill_char, Width),
_pipe = gleam@list:range(0, Height - 1),
gleam@list:each(
_pipe,
fun(Row) -> utils@misc:print_at(Fill_line, X, Y + Row) end
).
-file("src/ui/box.gleam", 58).
-spec draw_text_in_box(
integer(),
integer(),
integer(),
integer(),
types@box_style:box_style(),
binary(),
list(binary()),
types@alignment:alignment()
) -> nil.
draw_text_in_box(X, Y, Width, Height, Style, Title, Content, Alignment) ->
draw_box_with_title(X, Y, Width, Height, Style, Title),
Content_width = Width - 2,
Content_y_start = Y + 1,
Max_lines = Height - 2,
_pipe = gleam@list:take(Content, Max_lines),
_pipe@1 = gleam@list:index_map(
_pipe,
fun(Line, Index) ->
Aligned_line = utils@text:align_text(Line, Content_width, Alignment),
utils@misc:print_at(Aligned_line, X + 1, Content_y_start + Index)
end
),
erlang:length(_pipe@1),
nil.
-file("src/ui/box.gleam", 83).
-spec draw_menu_box(
integer(),
integer(),
integer(),
binary(),
list(binary()),
integer(),
types@box_style:box_style()
) -> nil.
draw_menu_box(X, Y, Width, Title, Options, Selected, Style) ->
Height = erlang:length(Options) + 2,
draw_box_with_title(X, Y, Width, Height, Style, Title),
_pipe = gleam@list:index_map(
Options,
fun(Option, Index) ->
Prefix = case Index =:= Selected of
true ->
<<"> "/utf8>>;
false ->
<<" "/utf8>>
end,
Line = <<Prefix/binary, Option/binary>>,
Aligned = utils@text:align_text(Line, Width - 2, left),
utils@misc:print_at(Aligned, X + 1, (Y + 1) + Index)
end
),
erlang:length(_pipe),
nil.
-file("src/ui/box.gleam", 108).
-spec draw_progress_box(
integer(),
integer(),
integer(),
binary(),
integer(),
integer(),
types@box_style:box_style()
) -> nil.
draw_progress_box(X, Y, Width, Title, Current, Total, Style) ->
draw_box_with_title(X, Y, Width, 4, Style, Title),
Bar = ui@progress:progress_bar(Current, Total, Width - 4),
utils@misc:print_at(
utils@text:align_text(Bar, Width - 2, center),
X + 1,
Y + 2
).