Add more settings, bump version to 0.2.0
This commit is contained in:
277
settings.inc
Normal file
277
settings.inc
Normal file
@@ -0,0 +1,277 @@
|
||||
; Copyright (C) KolibriOS team 2025. All rights reserved.
|
||||
; Distributed under terms of the GNU General Public License
|
||||
;
|
||||
; GNU GENERAL PUBLIC LICENSE
|
||||
; Version 2, June 1991
|
||||
|
||||
SETTINGS_WIN_STACK_SIZE = 1024
|
||||
SETTINGS_WIN_WIDTH = 350
|
||||
SETTINGS_WIN_HEIGHT = 250
|
||||
|
||||
SETTINGS_BTN_WIDTH = 60
|
||||
SETTINGS_BTN_HEIGHT = 24
|
||||
|
||||
OPT_HEIGHT = 10
|
||||
COL2 = 190
|
||||
|
||||
SETTINGS_APPEND_NONE = 0
|
||||
SETTINGS_APPEND_LF = 1
|
||||
SETTINGS_APPEND_CRLF = 2
|
||||
|
||||
proc show_settings_win
|
||||
cmp [settings_is_win_opened], 1
|
||||
jne @f
|
||||
mcall SF_SYSTEM, SSF_GET_THREAD_SLOT, [settings_win_pid]
|
||||
xchg eax, ecx
|
||||
mcall SF_SYSTEM, SSF_FOCUS_WINDOW
|
||||
ret
|
||||
@@:
|
||||
mcall SF_CREATE_THREAD, 1, .thread, settings_win_stack + SETTINGS_WIN_STACK_SIZE
|
||||
cmp eax, -1
|
||||
je @f
|
||||
mov [settings_win_pid], eax
|
||||
mov [settings_is_win_opened], 1
|
||||
@@:
|
||||
ret
|
||||
.thread:
|
||||
mcall SF_SET_EVENTS_MASK, EVM_MOUSE + EVM_MOUSE_FILTER + EVM_REDRAW + EVM_BUTTON + EVM_KEY
|
||||
call settings_load
|
||||
call .draw_window
|
||||
.loop:
|
||||
mcall SF_WAIT_EVENT
|
||||
dec eax
|
||||
jz .win
|
||||
dec eax
|
||||
jz .key
|
||||
dec eax
|
||||
jz .btn
|
||||
.mouse:
|
||||
invoke edit_box_mouse, ed_port
|
||||
invoke edit_box_mouse, ed_baud
|
||||
invoke edit_box_mouse, ed_bits
|
||||
invoke option_box_mouse, op_append
|
||||
jmp .loop
|
||||
.win:
|
||||
call .draw_window
|
||||
jmp .loop
|
||||
.key:
|
||||
mcall SF_GET_KEY
|
||||
invoke edit_box_key, ed_port
|
||||
invoke edit_box_key, ed_baud
|
||||
invoke edit_box_key, ed_bits
|
||||
jmp .loop
|
||||
.btn:
|
||||
mcall SF_GET_BUTTON
|
||||
cmp ah, BTN_OK
|
||||
jne @f
|
||||
call settings_save
|
||||
@@:
|
||||
and [settings_is_win_opened], 0
|
||||
mcall SF_TERMINATE_PROCESS
|
||||
|
||||
.draw_window:
|
||||
mcall SF_REDRAW, SSF_BEGIN_DRAW
|
||||
|
||||
mov edx, [sc.work]
|
||||
or edx, 0x34000000
|
||||
mov esi, [sc.work]
|
||||
mov edi, settings_win_name
|
||||
|
||||
mov ebx, [pi.box.width]
|
||||
shr ebx, 1
|
||||
add ebx, [pi.box.left]
|
||||
sub ebx, SETTINGS_WIN_WIDTH / 2
|
||||
shl ebx, 16
|
||||
add ebx, SETTINGS_WIN_WIDTH
|
||||
|
||||
mov ecx, [pi.box.height]
|
||||
shr ecx, 1
|
||||
add ecx, [pi.box.top]
|
||||
sub ecx, SETTINGS_WIN_HEIGHT / 2
|
||||
shl ecx, 16
|
||||
add ecx, SETTINGS_WIN_HEIGHT
|
||||
|
||||
mcall SF_CREATE_WINDOW
|
||||
mcall SF_THREAD_INFO, s_pi, -1
|
||||
|
||||
; prevent drawing if the window is collapsed
|
||||
test [s_pi.wnd_state], 0x04
|
||||
jnz .end_redraw
|
||||
|
||||
mov ecx, 0x90000000
|
||||
or ecx, [sc.work_text]
|
||||
mcall SF_DRAW_TEXT, <WIN_MARGIN, WIN_MARGIN + 2>, , port_conf_lbl
|
||||
|
||||
add ebx, WIN_MARGIN * 2 + FONT_HEIGHT
|
||||
mcall SF_DRAW_TEXT, , , port_lbl
|
||||
mov word [ed_port.top], bx
|
||||
|
||||
add ebx, WIN_MARGIN + ED_HEIGHT
|
||||
mcall SF_DRAW_TEXT, , , baud_lbl
|
||||
mov word [ed_baud.top], bx
|
||||
|
||||
add ebx, WIN_MARGIN + ED_HEIGHT
|
||||
mcall SF_DRAW_TEXT, , , bits_lbl
|
||||
mov word [ed_bits.top], bx
|
||||
|
||||
mcall SF_DRAW_TEXT, <COL2, WIN_MARGIN + 2>, , tx_text_lbl
|
||||
|
||||
|
||||
edit_boxes_set_sys_color settings_win_edits_start, settings_win_edits_end, sc
|
||||
invoke edit_box_draw, ed_port
|
||||
invoke edit_box_draw, ed_baud
|
||||
invoke edit_box_draw, ed_bits
|
||||
option_boxes_set_sys_color sc, op_append
|
||||
invoke option_box_draw, op_append
|
||||
|
||||
mov ebx, WIN_MARGIN shl 16
|
||||
add ebx, [s_pi.client_box.width]
|
||||
sub ebx, WIN_MARGIN + 1
|
||||
mov edx, [s_pi.client_box.height]
|
||||
sub edx, SETTINGS_BTN_HEIGHT + WIN_MARGIN * 2
|
||||
mov ecx, edx
|
||||
shl ecx, 16
|
||||
mov cx, dx
|
||||
mov edx, [sc.work_graph]
|
||||
mcall SF_DRAW_LINE
|
||||
|
||||
mov ebx, [s_pi.client_box.width]
|
||||
sub ebx, (SETTINGS_BTN_WIDTH + WIN_MARGIN) * 2
|
||||
shl ebx, 16
|
||||
add ebx, SETTINGS_BTN_WIDTH
|
||||
mov ecx, [s_pi.client_box.height]
|
||||
sub ecx, SETTINGS_BTN_HEIGHT + WIN_MARGIN
|
||||
shl ecx, 16
|
||||
add ecx, SETTINGS_BTN_HEIGHT
|
||||
mcall SF_DEFINE_BUTTON, , , BTN_OK, [sc.work_button]
|
||||
|
||||
push ebx ecx
|
||||
add ebx, 24 shl 16
|
||||
mov bx, word [s_pi.client_box.height]
|
||||
sub bx, SETTINGS_BTN_HEIGHT + WIN_MARGIN - 5
|
||||
mov ecx, 0x90000000
|
||||
or ecx, [sc.work_button_text]
|
||||
mcall SF_DRAW_TEXT, , , ok_lbl
|
||||
pop ecx ebx
|
||||
|
||||
add ebx, (SETTINGS_BTN_WIDTH + WIN_MARGIN) shl 16
|
||||
mcall SF_DEFINE_BUTTON, , , BTN_CANCEL, [sc.work_button]
|
||||
|
||||
add ebx, 8 shl 16
|
||||
mov bx, word [s_pi.client_box.height]
|
||||
sub bx, SETTINGS_BTN_HEIGHT + WIN_MARGIN - 5
|
||||
mov ecx, 0x90000000
|
||||
or ecx, [sc.work_button_text]
|
||||
mcall SF_DRAW_TEXT, , , cancel_lbl
|
||||
|
||||
.end_redraw:
|
||||
mcall SF_REDRAW, SSF_END_DRAW
|
||||
ret
|
||||
endp
|
||||
|
||||
proc settings_load
|
||||
mov eax, [port_num]
|
||||
mov ecx, 10
|
||||
mov edi, ed_port_val
|
||||
call int_to_str
|
||||
and byte [edi], 0
|
||||
mov esi, ed_port_val
|
||||
call strlen
|
||||
mov [ed_port.size], eax
|
||||
mov [ed_port.pos], eax
|
||||
|
||||
mov eax, [port_conf + SP_CONF.baudrate]
|
||||
mov ecx, 10
|
||||
mov edi, ed_baud_val
|
||||
call int_to_str
|
||||
and byte [edi], 0
|
||||
mov esi, ed_baud_val
|
||||
call strlen
|
||||
mov [ed_baud.size], eax
|
||||
|
||||
mov al, [port_conf + SP_CONF.word_size]
|
||||
add al, '0'
|
||||
mov [ed_bits_val], al
|
||||
mov [ed_bits_val + 1], 0
|
||||
mov [ed_bits.size], 1
|
||||
|
||||
mov al, [text_append]
|
||||
mov ebx, opt_append_none
|
||||
cmp al, SETTINGS_APPEND_NONE
|
||||
je .opt_append_ok
|
||||
mov ebx, opt_append_lf
|
||||
cmp al, SETTINGS_APPEND_LF
|
||||
je .opt_append_ok
|
||||
mov ebx, opt_append_crlf
|
||||
.opt_append_ok:
|
||||
mov [op_append_val], ebx
|
||||
ret
|
||||
endp
|
||||
|
||||
proc settings_save
|
||||
mov esi, ed_port_val
|
||||
call str_to_uint
|
||||
mov [port_num], ebx
|
||||
|
||||
mov esi, ed_baud_val
|
||||
call str_to_uint
|
||||
mov [port_conf + SP_CONF.baudrate], ebx
|
||||
|
||||
mov al, [ed_bits_val]
|
||||
sub al, '0'
|
||||
mov [port_conf + SP_CONF.word_size], al
|
||||
|
||||
mov eax, [op_append_val]
|
||||
mov bl, SETTINGS_APPEND_NONE
|
||||
cmp eax, opt_append_none
|
||||
je .opt_append_ok
|
||||
mov bl, SETTINGS_APPEND_LF
|
||||
cmp eax, opt_append_lf
|
||||
je .opt_append_ok
|
||||
mov bl, SETTINGS_APPEND_CRLF
|
||||
.opt_append_ok:
|
||||
mov [text_append], bl
|
||||
ret
|
||||
endp
|
||||
|
||||
iglobal
|
||||
settings_is_win_opened db 0
|
||||
settings_win_edits_start:
|
||||
ed_port edit_box 70, 100, WIN_MARGIN, 0xffffff, 0x6f9480, \
|
||||
0, 0, 0x10000000, 6, ed_port_val, mouse_dd, \
|
||||
ed_focus + ed_figure_only
|
||||
ed_baud edit_box 70, 100, WIN_MARGIN * 2 + ED_HEIGHT, 0xffffff, 0x6f9480, \
|
||||
0, 0, 0x10000000, 6, ed_baud_val, mouse_dd, \
|
||||
ed_figure_only
|
||||
ed_bits edit_box 40, 100, WIN_MARGIN * 3 + ED_HEIGHT * 2, 0xffffff, 0x6f9480, \
|
||||
0, 0, 0x10000000, 1, ed_bits_val, mouse_dd, \
|
||||
ed_figure_only
|
||||
settings_win_edits_end:
|
||||
opt_append_none option_box op_append_val, COL2, WIN_MARGIN * 2 + FONT_HEIGHT, 6, 12, 0, 0, 0, opt_lbl_nothing, 14
|
||||
opt_append_lf option_box op_append_val, COL2, WIN_MARGIN * 3 + OPT_HEIGHT+ FONT_HEIGHT, 6, 12, 0, 0, 0, opt_lbl_lf, 9
|
||||
opt_append_crlf option_box op_append_val, COL2, WIN_MARGIN * 4 + OPT_HEIGHT * 2+ FONT_HEIGHT, 6, 12, 0, 0, 0, opt_lbl_crlf, 11
|
||||
op_append dd opt_append_none, opt_append_lf, opt_append_crlf, 0
|
||||
|
||||
settings_win_name db 'kterm - settings', 0
|
||||
port_conf_lbl db 'Port settings', 0
|
||||
tx_text_lbl db 'Transmitted text', 0
|
||||
port_lbl db 'Port:', 0
|
||||
baud_lbl db 'Baudrate:', 0
|
||||
bits_lbl db 'Data bits:', 0
|
||||
ok_lbl db 'Ok', 0
|
||||
cancel_lbl db 'Cancel', 0
|
||||
opt_lbl_nothing db 'Append nothing', 0
|
||||
opt_lbl_lf db 'Append LF', 0
|
||||
opt_lbl_crlf db 'Append CRLF', 0
|
||||
endg
|
||||
|
||||
uglobal
|
||||
align 4
|
||||
settings_win_pid dd ?
|
||||
op_append_val dd ?
|
||||
s_pi process_information
|
||||
ed_port_val rb 7
|
||||
ed_baud_val rb 7
|
||||
ed_bits_val rb 2
|
||||
settings_win_stack rb SETTINGS_WIN_STACK_SIZE
|
||||
endg
|
Reference in New Issue
Block a user