Subversion Repositories Kolibri OS

Rev

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

Rev Author Line No. Line
3244 IgorA 1
;
2
; в этом файле собраны функции нужные для создания и
3
; работы окна с поиском в ключевых словах
4
;
5
 
6
prop_wnd_width equ 350 ;ширина окна с поиском
7
SIZE_ONE_FLOAT equ 14
8
 
9
IMAGE_TOOLBAR_ICON_SIZE equ 20*20*3
10
 
11
wnd_k_words_run db 0 ;переменная следящая за тем что-бы не запускать больше 1-го окна одновременно
12
 
13
if lang eq ru
14
txt_caption db 'Поиск в ключевых словах',0
15
else
16
txt_caption db 'Search in keywords',0
17
end if
18
 
19
;даное окно (процесс) вызываеться функцией but_wnd_coords
20
align 4
21
prop_start:
22
pushad
6087 IgorA 23
	mcall SF_SET_EVENTS_MASK,0xC0000027 ;маска ожидаемых событий
3244 IgorA 24
	inc byte[wnd_k_words_run]
25
 
26
	;настройка списка объектов
27
	mov dword[tree3.info_max_count],2
28
	mov edi,tedit0
29
	mov edx,ted_key_words_count
30
	add dword[tree3.info_max_count],edx ;ставим число узлов, равное колличеству ключевых слов в файле подсветки (+2 на начало и конец списка)
31
	stdcall dword[tl_data_init], tree3
32
	mov eax,dword[icon_tl_sys]
33
	mov dword[tree3.data_img],eax
34
	mov eax,dword[tree1.data_img_sys]
35
	mov dword[tree3.data_img_sys],eax
36
 
37
	edit_boxes_set_sys_color edit3,editboxes_end,sc ;установка системных цветов
38
	;stdcall [edit_box_set_text], edit3, txt_q
39
popad
40
 
41
align 4
42
prop_red_win:
43
pushad
6087 IgorA 44
	mcall SF_REDRAW,SSF_BEGIN_DRAW
3244 IgorA 45
 
46
	mov bx,word[procinfo.box.left]
47
	add bx,5 ;word[buf_0.l]
48
	shl ebx,16
49
	mov bx,prop_wnd_width
50
	mov cx,word[procinfo.box.top]
5831 IgorA 51
	add cx,42 ;word[buf_0.t]
3244 IgorA 52
	shl ecx,16
53
	mov cx,250
6087 IgorA 54
	mcall SF_CREATE_WINDOW,,,0x33ffffd0,,txt_caption
3244 IgorA 55
 
6087 IgorA 56
	mcall SF_DEFINE_BUTTON,(5 shl 16)+19,(5 shl 16)+19,3,[sc.work_button]
3244 IgorA 57
	add ebx,(25 shl 16)
6087 IgorA 58
	mcall ,,,4
3244 IgorA 59
 
60
	mov ebx,[bmp_icon]
61
	add ebx,7*IMAGE_TOOLBAR_ICON_SIZE
6087 IgorA 62
	mcall SF_PUT_IMAGE,,(20 shl 16)+20,(5 shl 16)+5 ;найти
3244 IgorA 63
 
64
	sub ebx,2*IMAGE_TOOLBAR_ICON_SIZE
65
	mov edx,(30 shl 16)+5 ;копировать
66
	int 0x40
67
 
68
	mov dword[w_scr_t3.all_redraw],1
6087 IgorA 69
	stdcall [scrollbar_ver_draw], w_scr_t3
3244 IgorA 70
	stdcall [tl_draw], tree3
71
	stdcall [edit_box_draw], edit3
6087 IgorA 72
	mcall SF_REDRAW,SSF_END_DRAW
3244 IgorA 73
popad
74
 
75
;не отрывать эту функцию от предыдущей
76
align 4
77
prop_still:
6087 IgorA 78
	mcall SF_WAIT_EVENT
3244 IgorA 79
 
80
	cmp al,1 ;изм. положение окна
81
	jz prop_red_win
82
	cmp al,2
83
	jne @f
84
		call prop_key
85
	@@:
86
	cmp al,3
87
	jne @f
88
		call prop_button
89
	@@:
90
	cmp al,6
91
	jne @f
92
		call prop_mouse
93
	@@:
94
	jmp prop_still
95
.exit:
96
	mov dword[tree3.data_img],0 ;чистим указатели на иконки что-бы их не удалил деструктор
97
	mov dword[tree3.data_img_sys],0 ;т. к. они еще используються в других элементах
98
	stdcall dword[tl_data_clear], tree3
99
	mov byte[wnd_k_words_run],0 ;обнуляем счетчик окон
6087 IgorA 100
	mcall SF_TERMINATE_PROCESS
3244 IgorA 101
 
102
align 4
103
prop_key:
104
push eax
6087 IgorA 105
	mcall SF_GET_KEY
3244 IgorA 106
	stdcall [edit_box_key], edit3
107
	stdcall [tl_key], tree3
108
pop eax
109
	ret
110
 
111
align 4
112
prop_mouse:
113
	;push ecx edi
114
	stdcall [tl_mouse], tree3
115
	stdcall [edit_box_mouse], edit3
116
	;pop edi ecx
117
	ret
118
 
119
align 4
120
prop_button:
121
	pushad
6087 IgorA 122
	mcall SF_GET_BUTTON
3244 IgorA 123
 
124
	cmp ah,1
125
	je prop_still.exit
126
 
127
	cmp ah,3
128
	jne @f
129
		;найти слова
130
		mov edi,tedit0
131
		cmp ted_syntax_file,0
132
		je @f
133
		stdcall dword[tl_info_clear], tree3
134
 
135
		mov ebx,ted_key_words_data
136
		mov ecx,ted_key_words_count
137
		cld
138
		.cycle_0:
139
		stdcall str_instr, ebx,[edit3.text]
140
		test al,al
141
		jnz .end_add
6087 IgorA 142
			;ключевое слово
143
			stdcall dword[tl_node_add], tree3, (1 shl 16), ebx
3244 IgorA 144
			stdcall dword[tl_cur_next], tree3
6087 IgorA 145
			mov edx,[ebx+MAX_COLOR_WORD_LEN]
146
			or edx,edx
147
			jz .end_add
148
				;справка по ключевому слову
149
				add edx,ted_help_text_f1
150
				stdcall dword[tl_node_add], tree3, 1, edx
151
				stdcall dword[tl_cur_next], tree3
3244 IgorA 152
		.end_add:
153
		add ebx,MAX_COLOR_WORD_LEN+8 ;sizeof.TexColViv
154
		loop .cycle_0
155
 
156
		stdcall dword[tl_cur_beg], tree3
157
		stdcall dword[tl_draw], tree3
6087 IgorA 158
		jmp .no_select_0
3244 IgorA 159
	@@:
160
	cmp ah,4
161
	jne @f
162
		;копировать в буфер
163
		stdcall [tl_node_get_data],tree3
5911 IgorA 164
		or eax,eax
5831 IgorA 165
		jz .no_select_0
5911 IgorA 166
			mov esi,eax
3244 IgorA 167
			mov edi,[tedit0.buffer]
5831 IgorA 168
			mov dword[edi],MAX_COLOR_WORD_LEN
169
			mov dword[edi+4],0 ;text data
170
			mov dword[edi+8],1 ;code 866
171
			add edi,12 ;system buffer header size
3244 IgorA 172
			mov byte[edi+MAX_COLOR_WORD_LEN],0
173
			mov ecx,MAX_COLOR_WORD_LEN
174
			cld
175
			rep movsb
6087 IgorA 176
			mcall SF_CLIPBOARD,SSF_WRITE_CB,12+MAX_COLOR_WORD_LEN,[tedit0.buffer]
3244 IgorA 177
		.no_select_0:
178
	@@:
179
 
180
	popad
181
	ret
182
 
183
;дерево с объектами в пользовательском файле
184
align 4
6087 IgorA 185
tree3 tree_list MAX_COLOR_WORD_LEN,3,tl_key_no_edit,\
186
	16,16, 0x8080ff,0x0000ff,0xffffff, 5,30,300,160, 16, 0,0, el_focus, w_scr_t3,0
3244 IgorA 187
 
188
align 4
6254 leency 189
edit3 edit_box 80, 70, 8, 0xffffff, 0xff, 0x80ff, 0, 0x8000, MAX_COLOR_WORD_LEN+2, string1, mouse_dd, ed_focus
3244 IgorA 190
editboxes_end:
191
 
192
string1 rb MAX_COLOR_WORD_LEN
193
 
194
align 4
5911 IgorA 195
w_scr_t3 scrollbar 16,0, 3,0, 15, 100, 0,0, 0xeeeeee, 0xbbddff, 0, 1