end: use blue checkbox, code refactoring, UI/UX improvements

git-svn-id: svn://kolibrios.org@9456 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Kirill Lipatov (Leency) 2021-12-22 11:32:12 +00:00
parent 5a5ad5a64e
commit 770f4559be
2 changed files with 174 additions and 238 deletions

View File

@ -1,69 +1,68 @@
empty_label: db ' ',0 WIN_W = 440
WIN_H = 200
BOT_PANEL_H = 70
;---------------------------------------------------------------------
CANCEL_BUTTON_ID = 1+BT_HIDE
HOME_BUTTON_ID = 2
REBOOT_BUTTON_ID = 3
POWEROFF_BUTTON_ID = 4
CHECKBOX_BUTTON_ID = 5+BT_HIDE
;---------------------------------------------------------------------
TEXT_HOME: db 'Home',0 TEXT_HOME: db 'Home',0
TEXT_ENTER: db 'Enter',0 TEXT_ENTER: db 'Enter',0
TEXT_END: db 'End',0 TEXT_END: db 'End',0
TEXT_CANCEL: db 'x',0 TEXT_CANCEL: db 'x',0
;---------------------------------------------------------------------
strlen_var dd 0
if lang eq ru if lang eq ru
TEXT_TITLE: db '‡ ¢¥à襭¨¥ à ¡®âë',0 TEXT_WTITLE: db '‡ ¢¥à襭¨¥ à ¡®âë',0
TEXT_RDSAVE1: db '‘®åà ­¨âì ¨§¬¥­¥­¨ï, ᤥ« ­­ë¥ ¢',0 TEXT_RDSAVE1: db '‘®åà ­¨âì ¨§¬¥­¥­¨ï, ᤥ« ­­ë¥ ¢',0
TEXT_RDSAVE2: db '¯à®æ¥áᥠࠡ®âë ¢ á¨á⥬¥ (Ctrl+S)',0 TEXT_RDSAVE2: db '¯à®æ¥áᥠࠡ®âë ¢ á¨á⥬¥ (Ctrl+S)',0
TEXT_KERNEL: db 'Ÿ¤à®',0 TEXT_KERNEL: db 'Ÿ¤à®',0
TEXT_REBOOT: db '<27>¥à¥§ £à㧪 ',0 TEXT_REBOOT: db '<27>¥à¥§ £à㧪 ',0
TEXT_OFF: db '‚몫î祭¨¥',0 TEXT_OFF: db '‚몫î祭¨¥',0
TEXT_SAVING: db '‘®åà ­¥­¨¥ ®¡à § ...',0
else if lang eq ge else if lang eq ge
TEXT_TITLE: db 'Shutdown computer',0 TEXT_WTITLE: db 'Shutdown computer',0
TEXT_RDSAVE1: db 'Save all changes that were done',0 TEXT_RDSAVE1: db 'Save all changes that were done',0
TEXT_RDSAVE2: db 'during system work (Ctrl+S)',0 TEXT_RDSAVE2: db 'during system work (Ctrl+S)',0
TEXT_KERNEL: db 'Kernel',0 TEXT_KERNEL: db 'Kernel',0
TEXT_REBOOT: db 'Neustart',0 TEXT_REBOOT: db 'Neustart',0
TEXT_OFF: db 'Beenden',0 TEXT_OFF: db 'Beenden',0
TEXT_SAVING: db 'Saving RAM-drive...',0
else if lang eq it else if lang eq it
TEXT_TITLE: db 'Shutdown computer',0 TEXT_WTITLE: db 'Shutdown computer',0
TEXT_RDSAVE1: db 'Save all changes that were done',0 TEXT_RDSAVE1: db 'Save all changes that were done',0
TEXT_RDSAVE2: db 'during system work (Ctrl+S)',0 TEXT_RDSAVE2: db 'during system work (Ctrl+S)',0
TEXT_KERNEL: db 'Kernel',0 TEXT_KERNEL: db 'Kernel',0
TEXT_REBOOT: db 'Riavvio',0 TEXT_REBOOT: db 'Riavvio',0
TEXT_OFF: db 'Spegni',0 TEXT_OFF: db 'Spegni',0
TEXT_SAVING: db 'Saving RAM-drive...',0
else else
TEXT_TITLE: db 'Shutdown computer',0 TEXT_WTITLE: db 'Shutdown computer',0
TEXT_RDSAVE1: db 'Save all changes that were done',0 TEXT_RDSAVE1: db 'Save all changes that were done',0
TEXT_RDSAVE2: db 'during system work (Ctrl+S)',0 TEXT_RDSAVE2: db 'during system work (Ctrl+S)',0
TEXT_KERNEL: db 'Kernel',0 TEXT_KERNEL: db 'Kernel',0
TEXT_REBOOT: db 'Reboot',0 TEXT_REBOOT: db 'Reboot',0
TEXT_OFF: db 'Power off',0 TEXT_OFF: db 'Power off',0
TEXT_SAVING: db 'Saving RAM-drive...',0
end if end if
;---------------------------------------------------------------------
rdsave: rdsave:
dd SSF_START_APP,0,hide,0,0 dd SSF_START_APP,0,hide,0,0
db '/sys/rdsave',0 db '/sys/rdsave',0
hide db 'h',0
asettings db 'settings',0
aautosave db 'autosave',0
ini_file db '/sys/settings/rdsave.ini',0
;--------------------------------------------------------------------- ;---------------------------------------------------------------------
;Lib_DATA ;Lib_DATA
system_dir_Boxlib db '/sys/lib/box_lib.obj',0
system_dir_libini db '/sys/lib/libini.obj',0 system_dir_libini db '/sys/lib/libini.obj',0
;--------------------------------------------------------------------- ;---------------------------------------------------------------------
l_libs_start: l_libs_start:
library01 l_libs system_dir_Boxlib+9, library_path, system_dir_Boxlib, Box_lib_import
library02 l_libs system_dir_libini+9, library_path, system_dir_libini, libini_import library02 l_libs system_dir_libini+9, library_path, system_dir_libini, libini_import
end_l_libs: end_l_libs:
;--------------------------------------------------------------------- ;---------------------------------------------------------------------
align 4 align 4
Box_lib_import:
init_checkbox dd aInit_checkbox
check_box_draw dd aCheck_box_draw
check_box_mouse dd aCheck_box_mouse
;version_ch2 dd aVersion_ch2
dd 0,0
aInit_checkbox db 'init_checkbox2',0
aCheck_box_draw db 'check_box_draw2',0
aCheck_box_mouse db 'check_box_mouse2',0
;aVersion_ch2 db 'version_ch2',0
;---------------------------------------------------------------------
align 4
libini_import: libini_import:
init_lib dd a_init init_lib dd a_init
ini_get_int dd aini_get_int ini_get_int dd aini_get_int
@ -73,36 +72,6 @@ a_init db 'lib_init',0
aini_get_int db 'ini_get_int',0 aini_get_int db 'ini_get_int',0
aini_set_int db 'ini_set_int',0 aini_set_int db 'ini_set_int',0
;--------------------------------------------------------------------- ;---------------------------------------------------------------------
checkbox_sharedname db 'CHECKBOX',0
check1 check_box2 32 shl 16 +15, 70 shl 16 +15,6,0xffffff,0x757575,0x00CC00, empty_label, ch_flag_middle checkbox_img dd ?
;---------------------------------------------------------------------
hide db 'h',0
asettings db 'settings',0
aautosave db 'autosave',0
ini_file db '/sys/settings/rdsave.ini',0
If fade=1
color21 dd 0x01505890
color22 dd 0xbfbfbf
color23 dd 0xa49fa1
color24 dd 0x590011
color25 dd 0x593700
color26 dd 0x373737
color27 dd 0x003700
color28 dd 0x90bfbfbf
else
if lang eq ru
label7:
db '‘®åà ­¥­¨¥ ®¡à § ...',0
else
label7:
db 'Saving RAM-drive...',0
end if
end if

View File

@ -1,20 +1,17 @@
; END ; END
; KolibriOS Team 2005-2021 ; KolibriOS Team 2005-2021
fade equ 0 use32 ; ¢ª«îç¨âì 32-¡¨â­ë© ०¨¬  áᥬ¡«¥à 
org 0x0 ;  ¤à¥á æ¨ï á ­ã«ï
use32 ; ¢ª«îç¨âì 32-¡¨â­ë© ०¨¬  áᥬ¡«¥à  db 'MENUET01' ; 8-¡ ©â­ë© ¨¤¥­â¨ä¨ª â®à MenuetOS
org 0x0 ;  ¤à¥á æ¨ï á ­ã«ï dd 0x01 ; ¢¥àá¨ï § £®«®¢ª  (¢á¥£¤  1)
dd START ;  ¤à¥á ¯¥à¢®© ª®¬ ­¤ë
db 'MENUET01' ; 8-¡ ©â­ë© ¨¤¥­â¨ä¨ª â®à MenuetOS dd IM_END ; à §¬¥à ¯à®£à ¬¬ë
dd 0x01 ; ¢¥àá¨ï § £®«®¢ª  (¢á¥£¤  1) dd I_END ; ª®«¨ç¥á⢮ ¯ ¬ïâ¨
dd START ;  ¤à¥á ¯¥à¢®© ª®¬ ­¤ë dd stacktop ;  ¤à¥á ¢¥à設ë á⥪ 
dd IM_END ; à §¬¥à ¯à®£à ¬¬ë dd 0x0 ;  ¤à¥á ¡ãä¥à  ¤«ï ¯ à ¬¥â஢
dd I_END ; ª®«¨ç¥á⢮ ¯ ¬ï⨠dd 0x0
dd stacktop ;  ¤à¥á ¢¥à設ë á⥪ 
dd 0x0 ;  ¤à¥á ¡ãä¥à  ¤«ï ¯ à ¬¥â஢
dd cur_dir_path
include 'lang.inc' include 'lang.inc'
include '../../../macros.inc' include '../../../macros.inc'
@ -22,67 +19,40 @@ include '../../../proc32.inc'
include '../../../dll.inc' include '../../../dll.inc'
include '../../../KOSfuncs.inc' include '../../../KOSfuncs.inc'
include '../../../load_lib.mac' include '../../../load_lib.mac'
include '../../../develop/libraries/box_lib/trunk/box_lib.mac'
include '../../../gui_patterns.inc' include '../../../gui_patterns.inc'
include "../../../string.inc" include '../../../string.inc'
WIN_W equ 440
WIN_H equ 200
BOT_PANEL_H equ 70
CANCEL_BUTTON_ID equ 1+BT_HIDE
HOME_BUTTON_ID equ 2
REBOOT_BUTTON_ID equ 3
POWEROFF_BUTTON_ID equ 4
@use_library @use_library
align 4
START: START:
mcall SF_SYS_MISC, SSF_HEAP_INIT
mcall SF_SYS_MISC, SSF_MEM_OPEN, checkbox_sharedname
mov [checkbox_img], eax
load_libraries l_libs_start,end_l_libs
inc eax
test eax,eax
jz close
load_libraries l_libs_start,end_l_libs stdcall dll.Init,[init_lib]
inc eax
test eax,eax
jz close
stdcall [init_checkbox], check1 invoke ini_get_int,ini_file,asettings,aautosave,0
mov [autosave],eax
stdcall dll.Init,[init_lib]
invoke ini_get_int,ini_file,asettings,aautosave,0
mov [autosave],eax
dec eax
jnz @f
bts dword [check1.flags],1
@@:
mcall SF_SET_EVENTS_MASK,0x80000027
redraw: redraw:
call draw_window call draw_window
still: still:
mov al,SF_WAIT_EVENT mcall SF_WAIT_EVENT ;wait here for event
mcall ;wait here for event dec eax
dec eax jz redraw
jz redraw dec eax
dec eax jz key
jz key dec eax
dec eax jz button
jz button jmp still
stdcall [check_box_mouse], check1
bt dword [check1.flags],1
jnc @f
mov [autosave],1
jmp still
@@:
mov [autosave],0
jmp still
key: key:
mov al,SF_GET_KEY mcall SF_GET_KEY ;get key code
mcall ;get key code mov al,ah
mov al,ah
cmp al,13 cmp al,13
je restart je restart
cmp al,19 cmp al,19
@ -92,60 +62,44 @@ key:
cmp al,181 cmp al,181
je power_off je power_off
cmp al,27 cmp al,27
jne still jne still
close: close:
mcall SF_TERMINATE_PROCESS mcall SF_TERMINATE_PROCESS
button: button:
mcall SF_GET_BUTTON ;get pressed button id mcall SF_GET_BUTTON ;get pressed button id
xchg al,ah xchg al,ah
dec eax dec eax
jz close jz close
dec eax dec eax
jz restart_kernel jz restart_kernel
dec eax dec eax
jz restart jz restart
dec eax dec eax
jnz checkbox jnz checkbox
power_off: power_off:
push 2 push 2
jmp mcall_and_close jmp mcall_and_close
restart: restart:
push 3 push 3
jmp mcall_and_close jmp mcall_and_close
restart_kernel: restart_kernel:
push 4 push 4
mcall_and_close: mcall_and_close:
if fade=1 invoke ini_set_int,ini_file,asettings,aautosave,[autosave]
; === FADE IN === cmp [autosave],1
mov eax, color1
@@:
mov ebx, [eax + 32]
mov [eax], ebx
add eax, 4
cmp eax, color21
jne @b
call draw_window
end if
invoke ini_set_int,ini_file,asettings,aautosave,[autosave]
cmp [autosave],1
jne no_save jne no_save
if fade=0 mcall SF_DRAW_TEXT,<55,108>,0x90FF990A,TEXT_SAVING
mov al,SF_DRAW_TEXT
mcall ,<50,120> ,0x800000cc,label7
end if
mcall SF_FILE,rdsave mcall SF_FILE,rdsave
test eax,eax test eax,eax
js no_save js no_save
mov ecx,eax mov ecx,eax
mcall SF_SYSTEM,SSF_GET_THREAD_SLOT mcall SF_SYSTEM,SSF_GET_THREAD_SLOT
mov ecx,eax mov ecx,eax
@ -154,35 +108,34 @@ end if
mcall SF_WAIT_EVENT_TIMEOUT,100 mcall SF_WAIT_EVENT_TIMEOUT,100
dec eax dec eax
jnz no_red jnz no_red
call draw_window call draw_window
no_red: no_red:
pop ecx pop ecx
mcall SF_THREAD_INFO,proc_info mcall SF_THREAD_INFO,proc_info
cmp [proc_info+50],9 cmp [proc_info+50],9
je no_save je no_save
jmp @b jmp @b
no_save: no_save:
pop ecx pop ecx
mcall SF_SYSTEM,SSF_SHUTDOWN mcall SF_SYSTEM,SSF_SHUTDOWN
mcall SF_TERMINATE_PROCESS mcall SF_TERMINATE_PROCESS
ret ret
checkbox: checkbox:
btc dword [check1.flags],1 cmp [autosave],1
jc .1 je .1
mov [autosave],1 mov [autosave],1
jmp .draw jmp .draw
.1: .1:
mov [autosave],0 mov [autosave],0
.draw: .draw:
stdcall [check_box_draw], check1 call draw_checkbox_flag
jmp still jmp still
draw_window: draw_window:
mcall SF_REDRAW,SSF_BEGIN_DRAW mcall SF_REDRAW,SSF_BEGIN_DRAW
mov al,SF_GET_SCREEN_SIZE mcall SF_GET_SCREEN_SIZE
mcall ;get screen max x & max y
movzx ecx,ax movzx ecx,ax
shr eax,17 shr eax,17
shl eax,16 shl eax,16
@ -192,73 +145,87 @@ draw_window:
lea ecx,[ecx-(WIN_H/2) shl 16+WIN_H-1] lea ecx,[ecx-(WIN_H/2) shl 16+WIN_H-1]
xor eax,eax xor eax,eax
mov edx, 0x41000000 mov edx, 0x41000000
mcall ;define and draw window mcall ;define and draw window
DrawWideRectangle 0, 0, WIN_W, WIN_H, 2, 0xA3A7AA DrawWideRectangle 0, 0, WIN_W, WIN_H, 2, 0xA3A7AA
DrawBar 2, 2, WIN_W-4, WIN_H-BOT_PANEL_H-2, 0x202020 mcall SF_DRAW_RECT, <2,WIN_W-4>, <2,WIN_H-BOT_PANEL_H-2>, 0x202020
DrawBar 2, WIN_H-BOT_PANEL_H-2, WIN_W-4, BOT_PANEL_H, 0x4B4B4B mcall SF_DRAW_RECT, <2,WIN_W-4>, <WIN_H-BOT_PANEL_H-2,BOT_PANEL_H>, 0x4B4B4B
WriteText 30, 27, 10010001b, 0xFFFfff, TEXT_TITLE
WriteText 55, 70, 10010000b, 0xFFFfff, TEXT_RDSAVE1
WriteText 55, 86, 10010000b, 0xFFFfff, TEXT_RDSAVE2
DefineButton WIN_W-33, 2, 32, 20, CANCEL_BUTTON_ID, 0 mcall SF_DRAW_TEXT, <30,27>, 0x91FFFfff, TEXT_WTITLE
WriteText WIN_W-23, 5, 10000001b, 0xFFFfff, TEXT_CANCEL mcall SF_DRAW_TEXT, <55,70>, 0x90FFFfff, TEXT_RDSAVE1
mcall SF_DRAW_TEXT, <55,86>, 0x90FFFfff, TEXT_RDSAVE2
mcall SF_DRAW_TEXT, <WIN_W-23,5>, 0x81FFFfff, TEXT_CANCEL
stdcall [check_box_draw], check1 mcall SF_DEFINE_BUTTON, <WIN_W-35,32>, <2,22>, CANCEL_BUTTON_ID
mcall SF_DEFINE_BUTTON, <32,14>, <70,14>, CHECKBOX_BUTTON_ID
mcall SF_DEFINE_BUTTON, <47,WIN_W-47>, <68,34>, CHECKBOX_BUTTON_ID+BT_NOFRAME
;DefineButton WIN_W-33, 2, 32, 20, CANCEL_BUTTON_ID, 0
;DefineButton 32, 70, 14, 14, CHECKBOX_BUTTON_ID, 0
;DefineButton 47, 68, WIN_W-47, 34, CHECKBOX_BUTTON_ID+BT_NOFRAME, 0
DrawRectangle3D 32, 70, 14, 14, 0x606060, 0xAFAFAF
call draw_checkbox_flag
macro EndButton x, bgcol, id, but_text, hotkey_text stdcall EndButton, 20, 0x4E91C5, HOME_BUTTON_ID, TEXT_KERNEL, TEXT_HOME
{ stdcall EndButton, 160, 0x55C891, REBOOT_BUTTON_ID, TEXT_REBOOT, TEXT_ENTER
buty equ WIN_H-60 stdcall EndButton, 300, 0xC75C54, POWEROFF_BUTTON_ID, TEXT_OFF, TEXT_END
butw equ 116
buth equ 43
DrawWideRectangle x-3, buty-3, butw+6, buth+6, 3, 0x202020
DefineButton x, buty, butw-1, buth-1, id, bgcol
; WriteTextBold -strlen(but_text)*8 + butw / 2 + x, buty+8, 10010000b, 0xFFFfff, but_text
; WriteText -strlen(but_text)*6 + butw / 2 + x, buty+26, 10000000b, 0xFFFfff, hotkey_text
stdcall string.length, but_text
mov ebx,eax
imul ebx,4
neg ebx
add ebx,butw / 2 + x
shl ebx,16
add ebx,buty+8
mcall SF_DRAW_TEXT, , 10010000b shl 24 + 0xFFFfff, but_text
add ebx,1 shl 16
mcall
stdcall string.length, hotkey_text
mov ebx,eax
imul ebx,3
neg ebx
add ebx,butw / 2 + x
shl ebx,16
add ebx,buty+26
mcall SF_DRAW_TEXT, , 10000000b shl 24 + 0xFFFfff, hotkey_text
}
EndButton 20, 0x4E91C5, HOME_BUTTON_ID, TEXT_KERNEL, TEXT_HOME mcall SF_REDRAW,SSF_END_DRAW
EndButton 160, 0x55C891, REBOOT_BUTTON_ID, TEXT_REBOOT, TEXT_ENTER ret
EndButton 300, 0xC75C54, POWEROFF_BUTTON_ID, TEXT_OFF, TEXT_END
mov al,SF_REDRAW proc EndButton x, bgcol, id, but_text, hotkey_text
mcall ,SSF_END_DRAW BUTY = WIN_H-60
BUTW = 116
mov ebx,[x]
sub ebx,3
mcall SF_DRAW_RECT, <ebx,BUTW+6>, <BUTY-3,43+6>, 0x202020
mcall SF_DEFINE_BUTTON, <[x],BUTW>, <BUTY,43-1>, [id], [bgcol]
; -strlen(but_text)*8 + BUTW / 2 + x, BUTY+8
stdcall string.length, [but_text]
neg eax
lea ebx,[eax*4+BUTW/2]
add ebx,[x]
mcall SF_DRAW_TEXT, <ebx,BUTY+8>, 0x90FFFfff, [but_text]
add ebx,1 shl 16
mcall
stdcall string.length, [hotkey_text]
neg eax
lea ebx,[eax*3+BUTW/2]
add ebx,[x]
shl ebx,16
add ebx,BUTY+26
mcall SF_DRAW_TEXT, , 0x80FFFfff, [hotkey_text]
ret
endp
draw_checkbox_flag:
cmp [autosave],0
je .flag_unset
cmp [checkbox_img],0
je .flag_set_but_no_checkbox_img
.flag_set:
mcall SF_PUT_IMAGE, [checkbox_img], <13,13>, <33,71>
ret
.flag_set_but_no_checkbox_img:
mcall SF_DRAW_RECT, <33,13>, <71,13>, 0xffffff
mcall SF_DRAW_RECT, <34,11>, <72,11>, 0x58C33C
ret
.flag_unset:
DrawRectangle3D 33, 71, 12, 12, 0xDDDddd, 0xffffff
mcall SF_DRAW_RECT, <34,12>, <72,12>, 0xFFFfff
ret ret
;--------------------------------------------------------------------- ;---------------------------------------------------------------------
;data
include 'data.inc' include 'data.inc'
;--------------------------------------------------------------------- ;---------------------------------------------------------------------
IM_END: IM_END:
;--------------------------------------------------------------------- ;---------------------------------------------------------------------
align 4 align 4
proc_info rb 1024 proc_info rb 1024
autosave rd 1 autosave rd 1
;--------------------------------------------------------------------- ;---------------------------------------------------------------------
cur_dir_path rb 4096
library_path rb 4096 library_path rb 4096
;--------------------------------------------------------------------- ;---------------------------------------------------------------------
align 32 align 32
rb 4096 rb 4096
stacktop: stacktop:
I_END: ; ¬¥âª  ª®­æ  ¯à®£à ¬¬ë I_END: ; ¬¥âª  ª®­æ  ¯à®£à ¬¬ë