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 Lrz 177
        mov     edi,start
468 Lrz 178
        mov     ecx,((_end-start)/ed_struc_size)
234 Lrz 179
@@:
461 Lrz 180
        call    edit_box.mouse
181
        add     edi,ed_struc_size
182
        loop    @b
234 Lrz 183
}
184
 
185
macro key_edit_boxes start,end
186
{
461 Lrz 187
        mov     edi,start
188
        mov     ecx,((end-start)/ed_struc_size)
234 Lrz 189
@@:
461 Lrz 190
        call    edit_box.key
191
        add     edi,ed_struc_size
192
        loop    @b
234 Lrz 193
}
830 Lrz 194
ed_struc_size=72
461 Lrz 195
struc  edit_box width,left,top,color,shift_color,focus_border_color,\
196
       blur_border_color,text_color,max,text,flags,size,pos
234 Lrz 197
{
198
.width dd width
199
.left dd left
200
.top dd top
201
.color dd color
461 Lrz 202
.shift_color dd shift_color
234 Lrz 203
.focus_border_color dd focus_border_color
204
.blur_border_color dd blur_border_color
205
.text_color dd text_color
206
.max dd max
282 Lrz 207
.text dd text
830 Lrz 208
.flags dd flags+0
403 Lrz 209
.size dd size+0
461 Lrz 210
.pos dd pos+0
234 Lrz 211
.offset dd 0
212
.cl_curs_x dd 0
213
.cl_curs_y dd 0
391 Lrz 214
.shift   dd 0
215
.shift_old   dd 0
234 Lrz 216
}
217
 
402 Lrz 218
 
234 Lrz 219
macro edit_boxes_set_sys_color start,end,color_table
220
{
461 Lrz 221
        mov     edi,start
222
        mov     ecx,((end-start)/ed_struc_size)
223
        mov     esi,color_table
234 Lrz 224
@@:
461 Lrz 225
        mov     eax,[esi+36]
226
        mov     ebx,[esi+20]
227
        mov     ed_focus_border_color,eax
228
        shr     bh,1
229
        shr     bl,1
230
        shr     ah,1
231
        shr     al,1
232
        add     ah,bh
233
        add     al,bl
234
        ror     eax,16
235
        ror     ebx,16
236
        shr     bl,1
237
        shr     al,1
238
        add     al,bl
239
        ror     eax,16
240
        mov     ed_blur_border_color,eax
241
        add     edi,ed_struc_size
242
        loop    @b
306 Lrz 243
}
244
 
830 Lrz 245
macro draw_edit_box ed_ptr
306 Lrz 246
{
247
        mov     edi,ed_ptr
248
        call    edit_box.draw
249
}
250
 
251
macro mouse_edit_box ed_ptr
252
{
253
        mov     edi,ed_ptr
254
        call    edit_box.mouse
255
}
256
 
257
macro key_edit_box ed_ptr
258
{
259
        mov     edi,ed_ptr
260
        call    edit_box.key
468 Lrz 261
}
262
macro default_box ed_ptr
263
{
264
pusha
483 Lrz 265
;       xor     eax,eax
266
;       mov     ed_shift_pos,eax
267
;       mov     ed_shift_pos_old,eax
268
        and     word ed_flags,ed_shift_cl
269
;       mov     ed_offset,eax
468 Lrz 270
popa
234 Lrz 271
}