-module(etui@widgets@fieldset).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/etui/widgets/fieldset.gleam").
-export([fieldset_new/1, with_align/2, with_line_char/2, with_pad/2, with_colors/3, with_title_color/2, render/3]).
-export_type([fieldset_align/0, fieldset/0]).
-type fieldset_align() :: align_left | align_center | align_right.
-type fieldset() :: {fieldset,
binary(),
fieldset_align(),
binary(),
integer(),
etui@style:color(),
etui@style:color(),
etui@style:color()}.
-file("src/etui/widgets/fieldset.gleam", 36).
-spec fieldset_new(binary()) -> fieldset().
fieldset_new(Title) ->
{fieldset, Title, align_left, <<"─"/utf8>>, 2, default, default, default}.
-file("src/etui/widgets/fieldset.gleam", 48).
-spec with_align(fieldset(), fieldset_align()) -> fieldset().
with_align(Fs, A) ->
{fieldset,
erlang:element(2, Fs),
A,
erlang:element(4, Fs),
erlang:element(5, Fs),
erlang:element(6, Fs),
erlang:element(7, Fs),
erlang:element(8, Fs)}.
-file("src/etui/widgets/fieldset.gleam", 52).
-spec with_line_char(fieldset(), binary()) -> fieldset().
with_line_char(Fs, C) ->
{fieldset,
erlang:element(2, Fs),
erlang:element(3, Fs),
C,
erlang:element(5, Fs),
erlang:element(6, Fs),
erlang:element(7, Fs),
erlang:element(8, Fs)}.
-file("src/etui/widgets/fieldset.gleam", 56).
-spec with_pad(fieldset(), integer()) -> fieldset().
with_pad(Fs, P) ->
{fieldset,
erlang:element(2, Fs),
erlang:element(3, Fs),
erlang:element(4, Fs),
gleam@int:max(0, P),
erlang:element(6, Fs),
erlang:element(7, Fs),
erlang:element(8, Fs)}.
-file("src/etui/widgets/fieldset.gleam", 60).
-spec with_colors(fieldset(), etui@style:color(), etui@style:color()) -> fieldset().
with_colors(Fs, Fg, Bg) ->
{fieldset,
erlang:element(2, Fs),
erlang:element(3, Fs),
erlang:element(4, Fs),
erlang:element(5, Fs),
Fg,
Bg,
erlang:element(8, Fs)}.
-file("src/etui/widgets/fieldset.gleam", 64).
-spec with_title_color(fieldset(), etui@style:color()) -> fieldset().
with_title_color(Fs, Fg) ->
{fieldset,
erlang:element(2, Fs),
erlang:element(3, Fs),
erlang:element(4, Fs),
erlang:element(5, Fs),
erlang:element(6, Fs),
erlang:element(7, Fs),
Fg}.
-file("src/etui/widgets/fieldset.gleam", 71).
-spec render(etui@buffer:buffer(), etui@geometry:rect(), fieldset()) -> etui@buffer:buffer().
render(Buf, Area, Fs) ->
case (erlang:element(2, erlang:element(3, Area)) =< 0) orelse (erlang:element(
3,
erlang:element(3, Area)
)
=< 0) of
true ->
Buf;
false ->
W = erlang:element(2, erlang:element(3, Area)),
Title_w = etui@text:cell_width(erlang:element(2, Fs)),
case Title_w of
0 ->
Line = gleam@string:repeat(erlang:element(4, Fs), W),
etui@buffer:set_string(
Buf,
erlang:element(2, Area),
Line,
erlang:element(6, Fs),
erlang:element(7, Fs),
etui@style:none()
);
_ ->
Label_w = Title_w + 2,
Avail = gleam@int:max(0, W - Label_w),
{Left_n, Right_n} = case erlang:element(3, Fs) of
align_left ->
{erlang:element(5, Fs),
gleam@int:max(0, Avail - erlang:element(5, Fs))};
align_right ->
{gleam@int:max(0, Avail - erlang:element(5, Fs)),
erlang:element(5, Fs)};
align_center ->
Half = Avail div 2,
{Half, Avail - Half}
end,
Left = gleam@string:repeat(erlang:element(4, Fs), Left_n),
Right = gleam@string:repeat(erlang:element(4, Fs), Right_n),
Buf2 = etui@buffer:set_string(
Buf,
erlang:element(2, Area),
Left,
erlang:element(6, Fs),
erlang:element(7, Fs),
etui@style:none()
),
Buf3 = etui@buffer:set_string(
Buf2,
{position,
erlang:element(2, erlang:element(2, Area)) + Left_n,
erlang:element(3, erlang:element(2, Area))},
<<<<" "/utf8, (erlang:element(2, Fs))/binary>>/binary,
" "/utf8>>,
erlang:element(8, Fs),
erlang:element(7, Fs),
etui@style:bold()
),
etui@buffer:set_string(
Buf3,
{position,
(erlang:element(2, erlang:element(2, Area)) + Left_n)
+ Label_w,
erlang:element(3, erlang:element(2, Area))},
Right,
erlang:element(6, Fs),
erlang:element(7, Fs),
etui@style:none()
)
end
end.