From 66a0391246bae2b2d148b7065dc9fee92f03289d Mon Sep 17 00:00:00 2001 From: theonlymirage Date: Fri, 5 Oct 2018 18:58:13 +0000 Subject: [PATCH] HotAngles 0.3.5: ability to select programs through OpenDialog and mode 2 "hotkey activation" in test mode, updated file ReadMe git-svn-id: svn://kolibrios.org@7436 a494cfbc-eb01-0410-851d-a64ba20cac60 --- programs/other/ha/HACONFIG.ASM | 292 +++++++++++++++++++++-- programs/other/ha/HOTANGLES.ASM | 207 +++++++++++----- programs/other/ha/ReadMe.txt | 35 ++- programs/other/ha/SETTINGS/HOTANGLES.CFG | 2 +- 4 files changed, 460 insertions(+), 76 deletions(-) diff --git a/programs/other/ha/HACONFIG.ASM b/programs/other/ha/HACONFIG.ASM index a4975be714..79b18602e7 100644 --- a/programs/other/ha/HACONFIG.ASM +++ b/programs/other/ha/HACONFIG.ASM @@ -2,7 +2,7 @@ ; Hot Angles Config ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Compile with FASM -; Version 0.3.2: Sep 24, 2018 +; Version 0.3.5: Oct 5, 2018 ; Copyright (c) 2018, Efremenkov Sergey aka TheOnlyMirage ; All rights reserved. @@ -45,20 +45,24 @@ include '../../macros.inc' include '../../proc32.inc' include '../../dll.inc' include '../../develop/libraries/box_lib/trunk/box_lib.mac' ;компоненты checkBox и editBox - +;![ +include '../../develop/libraries/box_lib/load_lib.mac' ;макрос для загрузки библиотек +@use_library +;@use_library_mem mem.Alloc,mem.Free,mem.ReAlloc,dll.Load +;!] Otstup = 30 START: call copyKill ;простейшая защита от запуска второй копии приложения mcall 68, 11 ;инициализация кучи + ;mcall 48,3,sc,sizeof.system_colors ;получить системные цвета mov eax,48 ;получить системные цвета mov ebx,3 mov ecx, sc mov edx, sizeof.system_colors mcall - stdcall dll.Load, @IMPORT or eax, eax jnz exit @@ -69,6 +73,10 @@ START: mov ebx,0x27 ;система будет реагировать только на сообщение о перерисовке, нажата кнопка, определённая ранее, событие от мыши (что-то случилось - нажатие на кнопку мыши или перемещение; сбрасывается при прочтении) mcall + load_libraries l_libs_start,load_lib_end ;загрузка библиотек(и) + ;mcall 48,3,sc,sizeof.system_colors ;получить системные цвета + stdcall [OpenDialog_Init],OpenDialog_data ;подготовка диалога + call loadConfig ;загружаем конфигурацию из файла, если нет - то выставляем параметры по умолчанию call draw_window ;отрисовать окно приложения @@ -123,8 +131,34 @@ exit: mcall noclose: cmp ah, 2 ;кнопка "Применить" - jne butend + jne @f ;butend call applyButton ;вызов нашего обработчика нажатия кнопки + jmp event_wait +@@: + cmp ah, 4 + jne @f + mov byte[editID], 4 + call but_open_dlg + jmp event_wait +@@: + cmp ah, 5 + jne @f + mov byte[editID], 5 + call but_open_dlg + jmp event_wait +@@: + cmp ah, 6 + jne @f + mov byte[editID], 6 + call but_open_dlg + jmp event_wait +@@: + cmp ah, 7 + jne @f + mov byte[editID], 7 + call but_open_dlg + jmp event_wait +@@: butend: jmp event_wait ;this is for ignored events, useful at development @@ -217,10 +251,14 @@ applyButton: mov dword[createFile.data_adr], eax ;сохраняем адрес буфера в структуру ;заполним буфер содержимого: - mov byte[eax], 110; 'n' ;по умолчанию флаг снят + ;cmp byte[mode], 0 + ;jne @f + ;@@: + ; + mov byte[eax], 48;'0' ;110; 'n' ;по умолчанию флаг снят cmp word[ch1.flags], 110b ;ch_flag_en and ch_flag_middle ;выставлен checkBox или нет? jne applyButton.no - mov byte[eax], 121 ;иначе кладём 'y' + mov byte[eax], 49;'1' ;121 ;иначе кладём 'y' .no: inc eax call addPerenos @@ -376,11 +414,14 @@ loadConfig: add edx, eax ;кладём в edx - адрес конца конфиг.данных .chStart: - cmp byte[eax], 121 ;'y' ;выставляем checkBox - параметр активности приложения - jne loadConfig.no + cmp byte[eax], 49;'1' ;121 ;'y' ;выставляем checkBox - параметр активности приложения + jne @f ;loadConfig.no .yes: mov word[ch1.flags], 110b ;ch_flag_en and ch_flag_middle jmp loadConfig.chEnd +@@: + cmp byte[eax], 50;'2' ;второй режим активирован + je loadConfig.yes .no: mov word[ch1.flags], 100b ;ch_flag_middle .chEnd: @@ -556,6 +597,16 @@ draw_window: mov edx, 0x80000002 mcall 8 + ;удаляем ещё 4 кнопки если они есть + mov edx, 0x80000004 + mcall 8 + mov edx, 0x80000005 + mcall 8 + mov edx, 0x80000006 + mcall 8 + mov edx, 0x80000007 + mcall 8 + mov eax, 12 ; function 12: tell os about windowdraw mov ebx, 1 ; 1, start of draw mcall @@ -608,6 +659,52 @@ draw_window: mov esi, buttonTextSize ;5 ;размер текста в символах mcall 4 + ;рисуем ещё 4 кнопки для диалогового окна выбора файла + ;номера 4,5,6 и 7 + buttonH = 14 ;20 + buttonW = 30 + ;левый верхний угол + mov ebx, Otstup*65536 + buttonW ;координата X, ширина кнопки + mov ecx, 85*65536 + buttonH ;координата Y, высота кнопки + mov edx, 0x00000004 ;номер кнопки + mov esi, 0x00AABBCC ;цвет кнопки + mcall 8 + ;левый нижний угол + mov ebx, Otstup*65536 + buttonW ;координата X, ширина кнопки + mov ecx, 120*65536 + buttonH ;координата Y, высота кнопки + mov edx, 0x00000005 ;номер кнопки + mov esi, 0x00AABBCC ;цвет кнопки + mcall 8 + ;правый верхний угол + mov ebx, (WindowsWidth-Otstup-buttonW)*65536 + buttonW ;координата X, ширина кнопки + mov ecx, 85*65536 + buttonH ;координата Y, высота кнопки + mov edx, 0x00000006 ;номер кнопки + mov esi, 0x00AABBCC ;цвет кнопки + mcall 8 + ;правый нижний угол + mov ebx, (WindowsWidth-Otstup-buttonW)*65536 + buttonW ;координата X, ширина кнопки + mov ecx, 120*65536 + buttonH ;координата Y, высота кнопки + mov edx, 0x00000007 ;номер кнопки + mov esi, 0x00AABBCC ;цвет кнопки + mcall 8 + + ;рисуем тексты для этих 4 кнопок + mov ecx, 0xFFFFFF ;белый цвет текста + mov edx, commonButtonText ;строка текста + mov esi, commonButtonTextSize ;размер текста в символах + ;координаты текста (x, y) + deltaCommonTextX = 7 + deltaCommonTextY = 2 + mov ebx, (Otstup+deltaCommonTextX) * 65536 + (85 + deltaCommonTextY) + mcall 4 + mov ebx, (Otstup+deltaCommonTextX) * 65536 + (120 + deltaCommonTextY) + mcall 4 + mov ebx, (WindowsWidth-Otstup-buttonW+deltaCommonTextX) * 65536 + (85 + deltaCommonTextY) + mcall 4 + mov ebx, (WindowsWidth-Otstup-buttonW+deltaCommonTextX) * 65536 + (120 + deltaCommonTextY) + mcall 4 + + call draw_super_text LineLength = 62 @@ -654,6 +751,8 @@ import box_lib,\ ;координаты (x,y) = (30, 160) размер чекбокса 12, цвет текста 0x224466 ch1 check_box2 30 shl 16 + 12, 160 shl 16 + 12, 6, 0xFFFFFFFF, 0xAABBCC, 0x224466, ch_text, 110b ; ch_flag_en and ch_flag_middle +commonButtonText db '...', 0 ;текст для кнопок вызова OpenDial +commonButtonTextSize = 3 if lang eq ru ;если язык сборки русский @@ -725,15 +824,182 @@ draw_super_text: pop esi edi edx ecx ebx eax ret +;![ +editID db 0 +initEBX: + cmp byte[editID], 4 + jne @f + mov ebx, dataBuffer.1 + ret +@@: + cmp byte[editID], 5 + jne @f + mov ebx, dataBuffer.2 + ret +@@: + cmp byte[editID], 6 + jne @f + mov ebx, dataBuffer.3 + ret +@@: + cmp byte[editID], 7 + jne @f + mov ebx, dataBuffer.4 + ret +@@: + ret +setRESULT: + cmp byte[editID], 4 + jne @f + mov dword[dataBuffer.size1], ecx + mov dword[editLU.size], ecx + mov dword[editLU.pos], ecx + ret +@@: + cmp byte[editID], 5 + jne @f + mov dword[dataBuffer.size2], ecx + mov dword[editLD.size], ecx + mov dword[editLD.pos], ecx + ret +@@: + cmp byte[editID], 6 + jne @f + mov dword[dataBuffer.size3], ecx + mov dword[editRU.size], ecx + mov dword[editRU.pos], ecx + ret +@@: + cmp byte[editID], 7 + jne @f + mov dword[dataBuffer.size4], ecx + mov dword[editRD.size], ecx + mov dword[editRD.pos], ecx + ret +@@: + ret +copyPath: + push eax ebx ecx edx ;copy file name path + mov eax, openfile_path ;dword[OpenDialog_data.openfile_path] + call initEBX ;mov ebx, dataBuffer.1 ;.data + mov ecx, 0 + @@: + mov dl, byte[eax] + cmp dl, 0 ;byte[eax], 0 + je @f + mov byte[ebx], dl + inc eax + inc ebx + inc ecx + jmp @b + @@: + mov byte[ebx], 0 + call setRESULT + pop edx ecx ebx eax + ret + + +align 4 +but_open_dlg: + pushad + copy_path open_dialog_name,communication_area_default_path,file_name,0 + mov [OpenDialog_data.type],0 + stdcall[OpenDialog_Start], OpenDialog_data + cmp [OpenDialog_data.status],2 + je @f + cmp [OpenDialog_data.status],0 ;пользователь нажал Cancel? + je .end_open + ;код при удачном открытии диалога + call copyPath + jmp .end_open + @@: + ;код при не удачном открытии диалога + ;... + .end_open: + popad + ret + +;дынные для диалога открытия файлов +align 4 +OpenDialog_data: +.type dd 0 ;0 - открыть, 1 - сохранить, 2 - выбрать директорию +.procinfo dd procinfo +.com_area_name dd communication_area_name ;+8 +.com_area dd 0 ;+12 +.opendir_path dd plugin_path ;+16 +.dir_default_path dd default_dir ;+20 +.start_path dd file_name ;+24 путь к диалогу открытия файлов +.draw_window dd draw_window ;+28 +.status dd 0 ;+32 +.openfile_path dd openfile_path ;+36 путь к открываемому файлу +.filename_area dd filename_area ;+40 +.filter_area dd Filter +.x: +.x_size dw 420 ;+48 ; Window X size +.x_start dw 10 ;+50 ; Window X position +.y: +.y_size dw 320 ;+52 ; Window y size +.y_start dw 10 ;+54 ; Window Y position + +default_dir db '/rd/1',0 ;директория по умолчанию +communication_area_name: db 'FFFFFFFF_open_dialog',0 +open_dialog_name: db 'opendial',0 +communication_area_default_path: db '/rd/1/File managers/',0 + +Filter: +dd Filter.end - Filter.1 +.1: +;db 'ASM',0 +;db 'KEX',0 +;db 'TXT',0 +.end: +db 0 + +align 4 +proclib_import: ;описание экспортируемых функций + OpenDialog_Init dd aOpenDialog_Init + OpenDialog_Start dd aOpenDialog_Start +dd 0,0 + aOpenDialog_Init db 'OpenDialog_init',0 + aOpenDialog_Start db 'OpenDialog_start',0 + +head_f_i: + head_f_l db 'Системная ошибка',0 + err_message_found_lib0 db 'Не найдена библиотека ',39,'proc_lib.obj',39,0 + err_message_import0 db 'Ошибка при импорте библиотеки ',39,'proc_lib.obj',39,0 + +system_dir0 db '/sys/lib/' +lib0_name db 'proc_lib.obj',0 + +;library structures +l_libs_start: + lib0 l_libs lib0_name, sys_path, file_name, system_dir0, err_message_found_lib0, head_f_l, proclib_import,err_message_import0, head_f_i +load_lib_end: + +;txt_open db 'Открыть',0 + +sys_path: rb 4096 +file_name: rb 4096 +plugin_path: rb 4096 +openfile_path: rb 4096 +filename_area: rb 256 +rb 1024 +procinfo process_information +;!] + + edMaxSize = 510 ;теперь с новым компонентом можно и 511 указать edMax = 0 ;max, size, pos align 4 -editLU edit_box 180,Otstup,85, 0xffffff, 0x6a9480, 0, 0xAABBCC, 0, edMaxSize, dataBuffer.1, mouse_dd, 0, edMax, edMax ;ed_focus -editLD edit_box 180,Otstup,120, 0xffffff, 0x6a9480, 0, 0xAABBCC, 0, edMaxSize, dataBuffer.2, mouse_dd, 0, edMax, edMax -editRU edit_box 180,240,85, 0xffffff, 0x6a9480, 0, 0xAABBCC, 0, edMaxSize, dataBuffer.3, mouse_dd, 0, edMax, edMax -editRD edit_box 180,240,120, 0xffffff, 0x6a9480, 0, 0xAABBCC, 0, edMaxSize, dataBuffer.4, mouse_dd, 0, edMax, edMax +editLU edit_box 180-buttonW,Otstup+buttonW,85, 0xffffff, 0x6a9480, 0, 0xAABBCC, 0, edMaxSize, dataBuffer.1, mouse_dd, 0, edMax, edMax ;ed_focus +editLD edit_box 180-buttonW,Otstup+buttonW,120, 0xffffff, 0x6a9480, 0, 0xAABBCC, 0, edMaxSize, dataBuffer.2, mouse_dd, 0, edMax, edMax +editRU edit_box 180-buttonW,240,85, 0xffffff, 0x6a9480, 0, 0xAABBCC, 0, edMaxSize, dataBuffer.3, mouse_dd, 0, edMax, edMax +editRD edit_box 180-buttonW,240,120, 0xffffff, 0x6a9480, 0, 0xAABBCC, 0, edMaxSize, dataBuffer.4, mouse_dd, 0, edMax, edMax + +mouse_dd dd ? +sc system_colors dataBuffer: .1: rb 512 @@ -748,8 +1014,6 @@ dataBuffer: ;два запасных байта необходимы для того что бы не пепереписать следующией байты, в конце буфера 0 dataBufferEnd: -mouse_dd dd ? -sc system_colors I_END: rb 4096 diff --git a/programs/other/ha/HOTANGLES.ASM b/programs/other/ha/HOTANGLES.ASM index 0acd6f7f57..ef08c8f219 100644 --- a/programs/other/ha/HOTANGLES.ASM +++ b/programs/other/ha/HOTANGLES.ASM @@ -2,7 +2,7 @@ ; Hot Angles ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Compile with FASM -; Version 0.3.3: Sep 25, 2018 +; Version 0.3.5: Oct 5, 2018 ; Copyright (c) 2018, Efremenkov Sergey aka TheOnlyMirage ; All rights reserved. @@ -30,12 +30,12 @@ use32 org 0x0 ; базовый адрес размещения кода, всегда 0x0 UNLOCKd = 0 -LOCKd = 1 +LOCKd = 1 ; заголовок db 'MENUET01' ;магический идентификатор dd 0x01 ;версия -dd START_DEBUG ;адрес точки старта программы +dd START_DEBUG ;адрес точки старта программы dd I_END ;адрес конца, по факту размер файла программы dd 0x100000 ;требуемое кол-во памяти для загрузки программы dd 0x7fff0 ;начальное значение регистра esp - адрес конца области стэка так как стэк растет в сторону меньших адресов @@ -48,21 +48,104 @@ START_DEBUG: call copyKill ;простейшая защита от повторного запуска mcall 68, 11 ;инициализация кучи call loadConfig ;загружаем конфигурацию приложения - mov ebx, 00000100000000000000000000100000b ;подписываемся на интересные нам события - mcall 40 -START: + cmp byte[mode], 0 ;функция отключена - выход + jne @f + mcall -1 +@@: + ;режим активации горячей клавишей? + cmp byte[mode], 2 ;подписываемся на интересные нам события в зависимости от режима работы + jne @f + mov ebx, 00000100000000000000000000100010b ;если да, то подписываемся на клавиши + mcall 40 + jmp init02 +@@: + ; во всех остальных случаях - классический режим работы + ;mode=1 классический режим работы - реакция при наведении в угол + mov byte[mode], 1 + mov ebx, 00000100000000000000000000100000b + mcall 40 + jmp init01 + + + +init02: + mov dword[backAdr], mode02 + call setHotKey +mode02: + mcall 10 + cmp eax, 2 ;обработка нажатия клавиши + je hotkey + + cmp byte[keyState], 0 + je mode02 + cmp eax, 6 ;обработка перемещений и нажатия мыши + je mouse + + jmp mode02 + + +setHotKey: ;установить горячую клавишу + push eax ebx ecx edx + xor ecx, ecx + mov cl, byte[keyActivate] ;нажатие горячей клавиши + mov edx, 0x000 + mcall 66, 4, ecx, edx + + ;mov cl, byte[keyActivate] + add cl, 128 ;отпускание горячей клавиши + ;mov edx, 0x000 + mcall 66, 4, ecx, edx + pop edx ecx ebx eax + ret + + +hotkey: + mcall 2 + cmp eax, 1 ;буфер клавиш пуст? + je hotkey.end + + cmp al, 2 ;нас интересует только скан код горячей клавиши, иначе выходим + jne hotkey.end + + cmp ah, byte[keyActivate] ;если нажата наша горячая клавиша + jne @f + mov byte[keyState], 1 + mov byte[state], UNLOCKd + jmp hotkey.end +@@: + push edx + xor edx, edx + mov dl, byte[keyActivate] + add dl, 128 + cmp ah, dl ;если отпущена наша горячая клавиша + jne @f ;hotkey.end + ;mov ecx, 0 ;строки для отладки и теста + ;call run_command + mov byte[keyState], 0 + mov byte[state], LOCKd +@@: + pop edx +.end: + jmp mode02 + + +init01: + mov dword[backAdr], mode01 +mode01: mov eax, 10 ; function 10 : wait until event mcall ; event type is returned in eax cmp eax, 6 ;обработка перемещений и нажатия мыши je mouse - jmp START + jmp mode01 + mouse: - ;основной цикл программы - call get_mouse_pos ;получаем текущие координаты мыши + push ebx + mcall 37, 0 ;получаем текущие координаты мыши + pop ebx cmp eax, 0 ;левый верхний угол jne @f @@ -72,7 +155,7 @@ mouse: call run_command pop ecx - jmp START ;finish + jmp dword[backAdr] ;finish @@: call get_screen_size ;иначе обновляем размеры экрана @@ -91,7 +174,7 @@ mouse: call run_command pop ecx - jmp START + jmp dword[backAdr] Ytrue: ;если Y равны, то нас интересует X=0 (левый нижний угол) или X=ScreenWidth (правый нижний) shr eax, 16 @@ -102,7 +185,7 @@ Ytrue: mov ecx, 1 call run_command pop ecx - jmp START + jmp dword[backAdr] @@: cmp ax, word[screen.width] jne unlockend @@ -112,17 +195,14 @@ Ytrue: call run_command pop ecx - jmp START + jmp dword[backAdr] unlockend: mov byte[state], UNLOCKd - jmp START + jmp dword[backAdr] + -;структурка данных для хранения параметров экрана -screen: - .width dw 0 - .height dw 0 ;получить размер экрана get_screen_size: push eax @@ -136,14 +216,7 @@ get_screen_size: ret -;получить позицию мыши -get_mouse_pos: - ;push eax - push ebx - mcall 37, 0 - pop ebx - ;pop eax - ret + ;запуск приложения: ecx - активный угол: lu=0, ld=1, ru=2, rd=3 @@ -151,14 +224,14 @@ run_command: cmp byte[state], UNLOCKd jne run_command.end - push eax - push ebx - push ecx +; cmp byte[mode], 2 ;если режим второй +; jne @f + push eax ebx ecx cmp ecx, 0 jne @f - mov eax, dword[newData.lu] ;testData.lu + mov eax, dword[newData.lu] mov dword[struct70.path_adr], eax jmp .end_set_path @@: @@ -196,10 +269,9 @@ run_command: mcall 70, struct70 @@: mov byte[state], LOCKd + ;mov byte[keyState], 0 - pop ecx - pop ebx - pop eax + pop ecx ebx eax .end: ret @@ -211,23 +283,6 @@ struct70: ; .path db 0 ; "/rd/1/TINYPAD",0 ; путь .path_adr dd 0 ;testData.lu - -state: db 0 ; 0=unlock, 1=lock -mode: db 0 ;режим работы (для будущего расширения функционала) - -;testData: -; .lu db '/rd/1/SHELL', 0 -; .ld db '/rd/1/RUN', 0 -; .ru db "/rd/1/TINYPAD", 0 -; .rd db '/rd/1/File Managers/EOLITE', 0 - -newData: ;табличка адресов командных строк - .lu dd 0 - .ld dd 0 - .ru dd 0 - .rd dd 0 -newDataEnd: - ;имя конфигурационного файла fileName: db 'SETTINGS/HOTANGLES.CFG', 0 @@ -242,8 +297,25 @@ loadConfig: add edx, eax ;иначе кладём в edx - адрес конца файла - cmp byte[eax], 121 ;'y' ;если параметр активности приложения имеет статус: не активно - jne loadConfig.exit ;то завершаем работу приложения + mov byte[mode], 0 + cmp byte[eax], '0' ;121 ;'y' ;если параметр активности приложения имеет статус: не активно + je loadConfig.exit ;то завершаем работу приложения + cmp byte[eax], 110 ;'n' + je loadConfig.exit + + ;иначе выставляем режим + cmp byte[eax], '2' ;режим активации по горячей клавише + jne @f + mov byte[mode], 2 + jmp loadConfig.modeEnd +@@: + cmp byte[eax], '3' ;режим жеста при зажатой клавише + jne @f + mov byte[mode], 3 + jmp loadConfig.modeEnd +@@: + mov byte[mode], 1 ;во всех остальных случаях - классический режим +.modeEnd: push edi push esi @@ -316,7 +388,7 @@ selfNameSize = 10 ; ; compareBytes: push edi esi ecx ebx - mov eax, 0 ;xor eax, eax + xor eax, eax mov ecx, selfNameSize ;max размер строк 11 @@: mov bl, byte[edi] @@ -334,9 +406,6 @@ compareBytes: pop ebx ecx esi edi ret ; -slotMax dd 0 -selfPID dd 0 -buf db 1024 dup(0) copyKill: push eax ebx ecx esi edi @@ -380,5 +449,31 @@ copyKill: ret +keyActivate db 41 ;16 ;'Q' ;клавиша активации +keyState db 0 ;0-клавиша не активна, 1 - клавиша активна + +backAdr rd 1 ;dd 0 ; адрес для возврата из проверки мыши + +;slotMax dd 0 +;selfPID dd 0 +;buf db 1024 dup(0) +slotMax rd 1 +selfPID rd 1 +buf rb 1024 + +;структурка данных для хранения параметров экрана +screen: + .width rw 1 ;dw 0 + .height rw 1 ;dw 0 + +state: rb 1 ;состояние: 0=unlock, 1=lock +mode: rb 1 ;режим работы приложения: 0=не работает, 1=классический, 2=по горячей клавише + +newData: ;табличка адресов командных строк + .lu rd 1 + .ld rd 1 + .ru rd 1 + .rd rd 1 +newDataEnd: I_END: diff --git a/programs/other/ha/ReadMe.txt b/programs/other/ha/ReadMe.txt index 480128fe13..6fe326129c 100644 --- a/programs/other/ha/ReadMe.txt +++ b/programs/other/ha/ReadMe.txt @@ -1,13 +1,16 @@ Hot Angles -Version 0.3.3: Sep 25, 2018 +Version 0.3.5: Oct 5, 2018 RU Комплект утилит (аналог Hot Corners в других ОС) для расширения возможностей рабочего стола пользователя. Название выбрано путём голосования. В комплект входят две утилиты: @HOTANGLES - основная утилита, позволяющая запускать приложения путём наведения курсора в угол экрана (угол рабочей области); HACONFIG - утилита конфигуратор, позволяющая настроить действия на каждый угол и активировать/деактивировать эту опцию. Файл конфигурации: RD/1/SETTINGS/HOTANGLES.CFG (где RD/1/ это тот же SYS - путь к системной директории). Файл состоит из пяти строк: -1) состояние активности опции: y - опция активна, n или любой другой символ - опция отключена; +1) состояние активности опции (один символ): + 1 или y - опция активна, активирован классический режим работы уголков, + 2 - опция активна, активирован режим работы по горячей клавише, + n или любой другой символ - опция отключена; 2) команда (полное имя приложения) для верхнего левого угла экрана; 3) команда (полное имя приложения) для левого нижнего угла экрана; 4) команда (полное имя приложения) для правого верхнего угла экрана; @@ -19,16 +22,38 @@ HACONFIG - @HOTANGLES не запустится, если конфигурационный файл отсутствует или был переименован. HACONFIG при отсутствии конфигурационного файла выставляет все поля по умолчанию, но не создаёт файл конфигурации самостоятельно (для этого необходимо нажать кнопку "Применить", тогда отсутствующий файл конфигурации будет создан, а существующий перезаписан). При первом старте утилиты все углы рабочей области настроены на запуск конфигуратора, где вы можете настроить утилиту под себя или отключить её. -Hot Angles начиная с revision #7392 включен в состав дистрибутива и добавлен в автозапуск при старте системы. Поддержка русского языка добавлена в revision #7395. +Hot Angles начиная с revision #7392 включен в состав дистрибутива и добавлен в автозапуск при старте системы. Поддержка русского языка добавлена в revision #7395. Начиная с версии 0.3.5 добавлен второй режим работы утилиты и возможность выбора программ через Open Dialog. В директории extra, рядом с исходным кодом утилит, расположены дополнительные функциональные блоки. На текущий момент директория содержит: 1 утилиту. MIN - минимизировать/свернуть все окна (кроме системных). Вы можете назначить запуск MIN на любой активный угол вашего рабочего стола, чтобы одним движением курсора в этот угол свернуть все окна на экране. +См. подробнее раздел "Extra-расширения функциональности". + + +Режимы работы: +-------------------------------------------------- +Текущая версия конфигуратора и утилиты работают стабильно только в классическом режиме. +В классическом режиме угол активируется путём наведения курсора. Всё происходит автоматически. Вы наводите мышь в заданный угол рабочего стола, и запускается приложение, связанное с этим углом. +Этот режим активируется символом '1' или символом 'y' в начале конфигурационного файла. + +Начиная с версии 0.3.5 утилита @HOTANGLES поддерживает второй режим работы - активацию углов по горячей клавише. Эта функциональность тестируется, поэтому настроить её через конфигуратор нельзя. +Активируется режим символом '2' в начале конфигурационного файла. Изменить клавишу активации нельзя, по умолчанию это символ тильда '~' или '`'. В этом режиме для активации угла требуется зажать клавишу тильда и, одновременно с этим, навести курсор в нужный угол рабочего стола. + Прочие рекомендации: -Некоторым пользователям может быть удобно настроить открытие меню при попадании в угол его расположения. Например, если у вас кнопка "Меню" рассположена в левом нижнем углу, то задайте для этого угла команду: +-------------------------------------------------- +Некоторым пользователям может быть удобно настроить открытие меню при попадании в угол его расположения. Например, если у вас кнопка "Меню" расположена в левом нижнем углу, то задайте для этого угла команду: /rd/1/@MENU + +Extra-расширения функциональности: +-------------------------------------------------- +Утилита MIN - сворачивает окна на рабочем столе (кроме окон системных процессов с именем, начинающимся с символа @). MIN можно назначить как действие для запуска в Hot Angles, тогда при наведении курсора в заданный угол все окна будут свёрнуты. MIN, как и остальные (extra-расширения) функциональные блоки, не входит в дистрибутив. К тому же утилита очень проста и дублирует функционал панели задач (taskbar). Каждый сам решает о необходимости её использования. +СКАЧАТЬ MIN (rev.7417): +http://websvn.kolibrios.org/dl.php?repname=Kolibri+OS&path=%2Fprograms%2Fother%2Fha%2Fextra%2FMIN&rev=7417&peg=7417 + + Влияние на производительность: +-------------------------------------------------- Если вы используете систему в задачах реального времени или в задачах с высокой нагрузкой на CPU отключите эту опцию. Так же, если вы желаете добиться максимальной скорости работы ОС, то использование этой опции не рекомендуется. Приложение может увеличивать нагрузку на систему в два раза при обычном использовании мыши (перемещение курсора, клики в определённых областях экрана). При выполнении основной функции (запуск любого приложения при наведении курсора в угол экрана) нагрузка на систему возрастает естественным образом. @@ -42,7 +67,7 @@ MIN - [-] повреждение файла конфигурации после многократного вкл./выкл. опции Hot Angles; [-] режим явной команды клавишей активации: зажимаем горячую клавишу (например, shift), наводим курсор в угол - происходит реакция; [-] режим жеста/направления: зажимаем активирующую клавишу, после этого приложение анализирует мышь, в зависимости от направления движения мыши (от начальных координат в момент активации опции) выбирается активируемый угол - происходит реакция; -[-] добавить диалог выбора пути OpenDialog в конфигураторе; +[+] добавить диалог выбора пути OpenDialog в конфигураторе; [+] переход на EditBox из библиотеки box_lib; [+] размазывание текста или его наслоение при вводе в поле EditBox'а; [+] после запуска приложения, все поля находятся в фокусе (это фича из-за бага в компоненте EditBox); diff --git a/programs/other/ha/SETTINGS/HOTANGLES.CFG b/programs/other/ha/SETTINGS/HOTANGLES.CFG index 39663a95d8..482017834e 100644 --- a/programs/other/ha/SETTINGS/HOTANGLES.CFG +++ b/programs/other/ha/SETTINGS/HOTANGLES.CFG @@ -1,4 +1,4 @@ -y +1 /rd/1/HACONFIG /rd/1/HACONFIG /rd/1/HACONFIG