Subversion Repositories Kolibri OS

Rev

Rev 1031 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
468 Lrz 1
; SEE YOU File FAQ.txt and HISTORY. Good Like!
461 Lrz 2
;;;;;;;;;;;;;;;;;;
3
include 'editbox.mac'    ;макрос который должен облегчить жизнь :) специально для editbox
4
;;;;;;;;;;;;;;;;;;
830 Lrz 5
macro use_edit_box
234 Lrz 6
{
7
edit_box:
461 Lrz 8
ed_width        equ [edi]               ;ширина компонента
9
ed_left         equ [edi+4]             ;положение по оси х
10
ed_top          equ [edi+8]             ;положение по оси у
11
ed_color        equ [edi+12]            ;цвет фона компонента
468 Lrz 12
shift_color     equ [edi+16]            ;=0x6a9480
461 Lrz 13
ed_focus_border_color   equ [edi+20]    ;цвет рамки компонента
14
ed_blur_border_color    equ [edi+24]    ;цвет не активного компонента
15
ed_text_color   equ [edi+28]            ;цвет текста
16
ed_max          equ [edi+32]                    ;кол-во символов которые можно максимально ввести
17
ed_text         equ [edi+36]                    ;указатель на буфер
18
ed_flags        equ [edi+40]            ;флаги
830 Lrz 19
ed_size equ [edi+44]                    ;кол-во символов
20
ed_pos  equ [edi+48]                    ;позиция курсора
21
ed_offset       equ [edi+52]            ;смещение
22
cl_curs_x       equ [edi+56]            ;предыдущее координата курсора по х
23
cl_curs_y       equ [edi+60]            ;предыдущее координата курсора по у
24
ed_shift_pos    equ [edi+64]            ;положение курсора
25
ed_shift_pos_old equ [edi+68]           ;старое положение курсора
234 Lrz 26
;==========================================================
27
;=== процедура прорисовки =================================
28
;==========================================================
29
.draw:
830 Lrz 30
pushad
234 Lrz 31
;--- рисуем рамку ---
461 Lrz 32
        call    .draw_border            ; Функция стабильна
234 Lrz 33
.draw_bg_cursor_text:
34
;--- изменяем смещение, если надо ---
461 Lrz 35
        call    .check_offset           ;вычисление позиции курсора стабильна
234 Lrz 36
;--- рисуем внутреннюю область ---
461 Lrz 37
        call    .draw_bg                ;нарисовать прямоугольник рабочей области
402 Lrz 38
;---- рисуем выделение, по shift если есть
461 Lrz 39
        call    .draw_shift
234 Lrz 40
.draw_cursor_text:
41
;--- рисуем курсор ---
461 Lrz 42
        ;--- может его не надо рисовать ----
43
        test    word ed_flags,ed_focus
44
        je     @f
45
        call    .draw_cursor
234 Lrz 46
@@:
461 Lrz 47
        call    .draw_text
507 Lrz 48
;;;;;;;;;;;;;;;;;;;;;;;;;;
49
;Общий выход из editbox для всех функций и пост обработчиков
50
;;;;;;;;;;;;;;;;;;;;;;;;;;
51
.editbox_exit:
461 Lrz 52
edit_ex
295 Lrz 53
;==========================================================
54
;=== обработка клавиатуры =================================
55
;==========================================================
56
.key:
830 Lrz 57
pushad
461 Lrz 58
        test    word ed_flags,ed_focus ; если не в фокусе, выходим
507 Lrz 59
        je      .editbox_exit
642 Lrz 60
        test    word ed_flags,ed_mouse_on
61
        jne     .editbox_exit
62
 
483 Lrz 63
;Проверка нажат shift ?
461 Lrz 64
        call    .check_shift
234 Lrz 65
;----------------------------------------------------------
66
;--- проверяем, что нажато --------------------------------
67
;----------------------------------------------------------
483 Lrz 68
use_key_process  backspase,delete,left,right,home,end,insert
234 Lrz 69
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
483 Lrz 70
;Заглушка на обработку клавиш вверх и вниз т.е. при обнаружении этих кодов происходит выход из обработчика
461 Lrz 71
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1031 Lrz 72
use_key_no_process   up,down,esc,enter,tab,numl,capsl,scrolll
234 Lrz 73
;--- нажата другая клавиша ---
483 Lrz 74
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
75
;Проверка установлен ли флаг при котором нужно выводить только цифры в нужном боксе если такойнеобходимости нет нужно закоментировать макрос
76
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
77
use_key_figures_only
507 Lrz 78
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
79
;проверка на shift был ли нажат
80
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
81
are_key_shift_press
82
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
83
; проверяем, находится ли курсор в конце + дальнейшая обработка
84
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
85
are_key_cur_end
86
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
87
;Обработка клавиш insert,delete.backspase,home,end,left,right
88
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
89
use_work_key
234 Lrz 90
;==========================================================
91
;=== обработка мыши =======================================
92
;==========================================================
93
.mouse:
830 Lrz 94
pushad
461 Lrz 95
;debug
234 Lrz 96
;----------------------------------------------------------
97
;--- получаем состояние кнопок мыши -----------------------
461 Lrz 98
;----------------------------------------------------------
99
        mcall   37,2
234 Lrz 100
;----------------------------------------------------------
101
;--- проверяем состояние ----------------------------------
102
;----------------------------------------------------------
461 Lrz 103
        test    eax,1
104
        jnz     .mouse_left_button
105
        and     word ed_flags,ed_mouse_on_off
106
        xor     ebx,ebx
107
        mov     dword [mouse_flag],ebx
507 Lrz 108
        jmp     .editbox_exit
461 Lrz 109
.mouse_left_button:
449 Lrz 110
;----------------------------------------------------------
461 Lrz 111
;--- блокировка от фокусировки в других боксах при попадании на них курсора
449 Lrz 112
;----------------------------------------------------------
461 Lrz 113
        mov     eax,dword [mouse_flag]
114
        test    eax,eax
115
        jz      @f
116
        cmp     eax,edi
117
        je      @f
118
        jmp     ._blur
234 Lrz 119
;----------------------------------------------------------
830 Lrz 120
;--- получаем координаты мыши относительно окна
449 Lrz 121
;----------------------------------------------------------
830 Lrz 122
@@:     mcall   37,1
123
 
483 Lrz 124
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
507 Lrz 125
;Функция обработки  мышки получение координат и проверка их + выделения
126
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
830 Lrz 127
use_work_mouse
507 Lrz 128
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
483 Lrz 129
;Общие функции обработки
130
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
131
use_general_func
132
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
133
;Функции для работы с key
134
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
135
use_key_func
507 Lrz 136
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
137
;Функции для работы с mouse
138
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
830 Lrz 139
use_mouse_func
234 Lrz 140
}
507 Lrz 141
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
142
;Bit mask from editbox
143
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
396 Lrz 144
ed_figure_only= 1000000000000000b   ;одни символы
391 Lrz 145
ed_always_focus= 100000000000000b
396 Lrz 146
ed_focus=                     10b   ;фокус приложения
391 Lrz 147
ed_shift_on=                1000b   ;если не установлен -значит впервые нажат shift,если был установлен, значит мы уже что - то делали удерживая shift
439 Lrz 148
ed_shift_on_off=1111111111110111b
391 Lrz 149
ed_shift=                    100b   ;включается при нажатии на shift т.е. если нажимаю
150
ed_shift_off=   1111111111111011b
151
ed_shift_bac=              10000b   ;бит для очистки выделеного shift т.е. при установке говорит что есть выделение
404 Lrz 152
ed_shift_bac_cl=1111111111101111b   ;очистка при удалении выделения
391 Lrz 153
ed_shift_cl=    1111111111100011b
463 Lrz 154
ed_shift_mcl=   1111111111111011b
391 Lrz 155
ed_left_fl=               100000b
156
ed_right_fl=    1111111111011111b
396 Lrz 157
ed_offset_fl=            1000000b
158
ed_offset_cl=   1111111110111111b
391 Lrz 159
ed_insert=              10000000b
160
ed_insert_cl=   1111111101111111b
439 Lrz 161
ed_mouse_on =          100000000b
446 Lrz 162
ed_mous_adn_b=         100011000b
439 Lrz 163
ed_mouse_on_off=1111111011111111b
391 Lrz 164
ed_height=14 ; высота
830 Lrz 165
macro draw_edit_boxes start,_end
234 Lrz 166
{
461 Lrz 167
        mov     edi,start
468 Lrz 168
        mov     ecx,((_end-start)/ed_struc_size)
234 Lrz 169
@@:
461 Lrz 170
        call    edit_box.draw
171
        add     edi,ed_struc_size
172
        loop    @b
234 Lrz 173
}
174
 
468 Lrz 175
macro mouse_edit_boxes start,_end
234 Lrz 176
{
461 L