1-define(COLUMN, 134).
2-define(INIT_TIME_REF, undefined).
3
4-define(MIN_INTERVAL, 1000).
5-define(DEFAULT_INTERVAL, 1500).
6-define(DISABLE, disable).
7-define(ENABLE, enable).
8
9-record(home, {
10    func = proc_count :: atom(),
11    type = memory :: atom(),
12    cur_page = 1 :: pos_integer(),
13    pages = [{1, 1}] :: list(),
14    interval = ?DEFAULT_INTERVAL :: pos_integer(),
15    scheduler_usage = application:get_env(observer_cli, scheduler_usage, ?DISABLE) ::
16        ?DISABLE | ?ENABLE
17}).
18
19-record(app, {
20    type = {proc_count, 1} :: {atom(), pos_integer()},
21    cur_page = 1 :: pos_integer(),
22    interval = ?DEFAULT_INTERVAL :: pos_integer()
23}).
24
25-record(ets, {
26    interval = 2000 :: integer(),
27    attr = memory :: atom(),
28    cur_page = 1 :: integer()
29}).
30
31-record(system, {interval = 2000 :: integer()}).
32
33-record(db, {
34    interval = ?DEFAULT_INTERVAL :: integer(),
35    hide_sys = true :: boolean(),
36    cur_page = 1 :: integer(),
37    attr = memory :: atom()
38}).
39
40-record(help, {interval = ?DEFAULT_INTERVAL :: integer()}).
41-record(inet, {
42    interval = ?DEFAULT_INTERVAL :: integer(),
43    func = inet_count :: atom(),
44    type = cnt :: atom(),
45    cur_page = 1 :: pos_integer(),
46    pages = [{1, 1}] :: list()
47}).
48
49-record(process, {interval = ?DEFAULT_INTERVAL :: integer()}).
50
51-record(plug, {cur_index = 1 :: pos_integer(), plugs = [] :: map() | []}).
52
53-record(view_opts, {
54    home = #home{} :: home(),
55    ets = #ets{} :: ets(),
56    sys = #system{} :: system(),
57    app = #app{} :: app(),
58    db = #db{} :: db(),
59    help = #help{} :: help(),
60    inet = #inet{} :: inet(),
61    process = #process{} :: process(),
62    port = ?DEFAULT_INTERVAL :: pos_integer(),
63    plug = #plug{} :: plug(),
64    auto_row = true :: boolean()
65}).
66
67-export_type([view_opts/0]).
68
69-type view_opts() :: #view_opts{}.
70-type home() :: #home{}.
71-type app() :: #app{}.
72-type system() :: #system{}.
73-type ets() :: #ets{}.
74-type db() :: #db{}.
75-type help() :: #help{}.
76-type inet() :: #inet{}.
77-type process() :: #process{}.
78-type plug() :: #plug{}.
79
80-define(CURSOR_TOP, <<"\e[H">>).
81-define(CLEAR, <<"\e[H\e[J">>).
82
83-define(RESET_BG, <<"\e[49m">>).
84-define(RESET, <<"\e[0m">>).
85-define(GRAY_BG, <<"\e[7m">>).
86-define(YELLOW, <<"\e[33m">>).
87-define(RED, <<"\e[31m">>).
88-define(L_RED, <<"\e[48m">>).
89-define(GREEN, <<"\e[32;1m">>).
90-define(L_GREEN, <<"\e[92m">>).
91-define(CHOOSE_BG, <<"\e[42m">>).
92-define(RED_BG, <<"\e[48;2;184;0;0m">>).
93-define(L_GRAY_BG, <<"\e[48;2;80;80;80m">>).
94-define(UNDERLINE, <<"\e[4m">>).
95
96-define(NEW_LINE, "\e[0m\n|").
97-define(I, <<" | ">>).
98-define(I2, <<"|">>).
99-define(W(_C_, _A_, _W_), {width_color, _C_, _A_, _W_}).
100-define(W2(_C_, _A_, _W_), {width_color_2, _C_, _A_, _W_}).
101-define(W(_A_, _W_), {width, _A_, _W_}).
102
103-define(SELECT(Text), observer_cli_lib:select(Text)).
104-define(UNSELECT(Text), observer_cli_lib:unselect(Text)).
105
106-define(render(_FA_), observer_cli_lib:render(_FA_)).
107-define(output(_F_, _A_), io:format(iolist_to_binary(_F_), _A_)).
108-define(output(_L_), ?output(_L_, [])).
109