Subversion Repositories Kolibri OS

Rev

Rev 9896 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
9896 akron1 1
(*
9898 akron1 2
    Copyright 2016, 2017, 2020, 2022, 2023 Anton Krotov
9896 akron1 3
 
4
    This file is part of fb2read.
5
 
6
    fb2read is free software: you can redistribute it and/or modify
7
    it under the terms of the GNU General Public License as published by
8
    the Free Software Foundation, either version 3 of the License, or
9
    (at your option) any later version.
10
 
11
    fb2read is distributed in the hope that it will be useful,
12
    but WITHOUT ANY WARRANTY; without even the implied warranty of
13
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
    GNU General Public License for more details.
15
 
16
    You should have received a copy of the GNU General Public License
17
    along with fb2read. If not, see .
18
*)
19
 
20
MODULE box_lib;
21
 
22
IMPORT sys := SYSTEM, KOSAPI;
23
 
24
 
25
CONST
26
 
27
  CHECKBOX_IS_SET* = 1;
28
 
29
 
30
TYPE
31
 
32
  checkbox* = POINTER TO RECORD
33
 
34
    left_s: INTEGER;
35
    top_s: INTEGER;
36
    ch_text_margin*: INTEGER;
37
    color: INTEGER;
38
    border_color: INTEGER;
39
    text_color: INTEGER;
40
    text: INTEGER;
41
    flags*: SET;
42
 
43
    (* Users can use members above this *)
44
    size_of_str: INTEGER
45
 
46
  END;
47
 
48
 
49
  scrollbar* = POINTER TO RECORD
50
 
9898 akron1 51
    x_w*: INTEGER;
9896 akron1 52
    y_h*: INTEGER;
53
    btn_height: INTEGER;
54
    typ: INTEGER;
55
    max_area*: INTEGER;
56
    cur_area*: INTEGER;
57
    position*: INTEGER;
58
    back_color: INTEGER;
59
    front_color: INTEGER;
60
    line_color: INTEGER;
61
    redraw: INTEGER;
62
 
63
    delta: WCHAR;
64
    delta2: WCHAR;
65
    r_size_x: WCHAR;
66
    r_start_x: WCHAR;
67
    r_size_y: WCHAR;
68
    r_start_y: WCHAR;
69
 
70
    m_pos: INTEGER;
71
    m_pos2: INTEGER;
72
    m_keys: INTEGER;
73
    run_size: INTEGER;
74
    position2: INTEGER;
75
    work_size: INTEGER;
76
    all_redraw: INTEGER;
77
    ar_offset: INTEGER
78
 
79
  END;
80
 
81
  edit_box* = POINTER TO RECORD
82
    width*,
83
    left,
84
    top,
85
    color,
86
    shift_color,
87
    focus_border_color,
88
    blur_border_color,
89
    text_color*,
90
    max: INTEGER;
91
    text*: INTEGER;
92
    mouse_variable: INTEGER;
93
    flags*,
94
 
95
    size,
96
    pos: INTEGER;
97
    (* The following struct members are not used by the users of API *)
98
    offset, cl_curs_x, cl_curs_y, shift, shift_old, height, char_width: INTEGER
99
  END;
100
 
101
 
102
PROCEDURE [stdcall, "box_lib.obj", ""] check_box_draw2* (cb: checkbox); END;
103
PROCEDURE [stdcall, "box_lib.obj", ""] check_box_mouse2* (cb: checkbox); END;
104
PROCEDURE [stdcall, "box_lib.obj", ""] init_checkbox2 (cb: checkbox); END;
105
 
106
PROCEDURE [stdcall, "box_lib.obj", ""] scrollbar_h_draw* (sb: scrollbar); END;
107
PROCEDURE [stdcall, "box_lib.obj", ""] scrollbar_h_mouse* (sb: scrollbar); END;
108
PROCEDURE [stdcall, "box_lib.obj", ""] scrollbar_v_draw* (sb: scrollbar); END;
109
PROCEDURE [stdcall, "box_lib.obj", ""] scrollbar_v_mouse* (sb: scrollbar); END;
110
 
111
PROCEDURE [stdcall, "box_lib.obj", ""] edit_box_draw* (eb: edit_box); END;
112
PROCEDURE [stdcall, "box_lib.obj", ""] edit_box_key_safe* (eb: edit_box; key: INTEGER); END;
113
PROCEDURE [stdcall, "box_lib.obj", ""] edit_box_mouse* (eb: edit_box); END;
114
PROCEDURE [stdcall, "box_lib.obj", ""] edit_box_set_text* (eb: edit_box; text: INTEGER); END;
115
 
116
 
117
PROCEDURE edit_box_get_value* (text: edit_box; VAR str: ARRAY OF CHAR);
118
VAR
119
    ptr, max, i: INTEGER;
120
 
121
BEGIN
122
    ptr := text.text;
123
    max := text.max;
124
    ASSERT(max < LEN(str));
125
    i := 0;
126
    REPEAT
127
        sys.GET(ptr, str[i]);
128
        INC(i);
129
        INC(ptr)
130
    UNTIL (str[i - 1] = 0X) OR (i = max);
131
    str[i] := 0X
132
END edit_box_get_value;
133
 
134
 
135
PROCEDURE memset(adr: INTEGER; c: CHAR; n: INTEGER);
136
BEGIN
137
  WHILE n > 0 DO
138
    sys.PUT(adr, c);
139
    INC(adr);
140
    DEC(n)
141
  END
142
END memset;
143
 
144
 
145
PROCEDURE check_box_set_value* (cb: checkbox; value: BOOLEAN);
146
BEGIN
147
  IF cb # NIL THEN
148
    IF value THEN
149
      INCL(cb.flags, CHECKBOX_IS_SET)
150
    ELSE
151
      EXCL(cb.flags, CHECKBOX_IS_SET)
152
    END
153
  END
154
END check_box_set_value;
155
 
156
 
157
PROCEDURE check_box_get_value* (cb: checkbox): BOOLEAN;
158
VAR res: BOOLEAN;
159
BEGIN
160
  res := FALSE;
161
  IF cb # NIL THEN
162
    res := CHECKBOX_IS_SET IN cb.flags
163
  END
164
  RETURN res
165
END check_box_get_value;
166
 
167
 
168
PROCEDURE kolibri_new_check_box* (tlx, tly, sizex, sizey, label_text, text_margin: INTEGER): checkbox;
169
VAR new_checkbox: checkbox;
170
BEGIN
171
  NEW(new_checkbox);
172
  new_checkbox.left_s := tlx * 65536 + sizex;
173
  new_checkbox.top_s  := tly * 65536 + sizey;
174
  new_checkbox.ch_text_margin := text_margin;
175
  new_checkbox.color := 80808080H;
176
  new_checkbox.border_color := 0000FF00H;
177
  new_checkbox.text_color := 00000000H;
178
  new_checkbox.text := label_text;
179
  new_checkbox.flags := {3};
180
  init_checkbox2(new_checkbox)
181
  RETURN new_checkbox
182
END kolibri_new_check_box;
183
 
184
 
185
PROCEDURE kolibri_scrollbar*(sb: scrollbar; x_w, y_h, btn_height, max_area, cur_area, position, back_color, front_color, line_color, typ: INTEGER): scrollbar;
186
BEGIN
187
  memset(sys.ADR(sb^), 0X, sys.SIZE(scrollbar));
188
  sb.x_w := x_w;
189
  sb.y_h := y_h;
190
  sb.btn_height := btn_height;
191
  sb.typ := typ;
192
  sb.max_area := max_area;
193
  sb.cur_area := cur_area;
194
  sb.position := position;
195
  sb.line_color := line_color;
196
  sb.back_color := back_color;
197
  sb.front_color := front_color;
198
  sb.ar_offset := 1;
199
  sb.all_redraw := 1
200
  RETURN sb
201
END kolibri_scrollbar;
202
 
203
 
204
PROCEDURE kolibri_new_scrollbar*(x_w, y_h, btn_height, max_area, cur_area, position, back_color, front_color, line_color, typ: INTEGER): scrollbar;
205
VAR sb: scrollbar;
206
BEGIN
207
  NEW(sb);
208
  RETURN kolibri_scrollbar(sb, x_w, y_h, btn_height, max_area, cur_area, position, back_color, front_color, line_color, typ)
209
END kolibri_new_scrollbar;
210
 
211
 
212
PROCEDURE kolibri_new_edit_box* (tlx, tly, width, max_chars: INTEGER): edit_box;
213
VAR
214
    new_textbox: edit_box;
215
 
216
BEGIN
217
    NEW(new_textbox);
218
 
219
    new_textbox.width := width;
220
    new_textbox.left := tlx;
221
    new_textbox.top := tly;
222
    new_textbox.color := 0FFFFFFH;
223
    new_textbox.shift_color := 06A9480H;
224
    new_textbox.focus_border_color := 0;
225
    new_textbox.blur_border_color := 06A9480H;
226
    new_textbox.text_color := 30000000H;
227
    new_textbox.max := max_chars;
228
    new_textbox.text := KOSAPI.malloc(max_chars + 2);
229
    new_textbox.mouse_variable := 0;
230
    new_textbox.flags := 0
231
 
232
    RETURN new_textbox
233
END kolibri_new_edit_box;
234
 
235
 
236
END box_lib.