Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. (*
  2.     Copyright 2016, 2017, 2020, 2022 Anton Krotov
  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 <http://www.gnu.org/licenses/>.
  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.  
  51.     x_w: INTEGER;
  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.
  237.