Subversion Repositories Kolibri OS

Rev

Rev 1717 | Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
1714 IgorA 1
;
2
; в этом файле собраны функции нужные для создания и
3
; работы окна со свойствами объекта
4
;
5
 
6
prop_edits_top equ 25
7
prop_edits_height equ 18
8
prop_wnd_width equ 520 ;ширина окна со свойствами объекта
9
 
10
prop_wnd_run db 0 ;переменная следящая за тем что-бы не запускать больше 1-го окна со свойствами одновременно
11
 
12
;даное окно (процесс) вызываеться функцией on_file_object_select
13
align 4
14
prop_start:
15
pushad
16
	mcall 40,0x27 ;маска ожидаемых событий
17
 
18
	; настройка текстовых полей
19
	xor ebx,ebx
20
	mov edi,edit2
21
	@@:
22
		stdcall set_obj_win_param, ebx,edi
23
		inc ebx
24
		add edi,ed_struc_size
25
		cmp edi,prop_wnd_edits_end
26
		jl @b
27
 
28
	; настройка списка объектов, определяющих типы переменных
29
	stdcall dword[tl_data_init], tree3
30
	cmp byte[err_ini0],1
31
	je @f
32
		mov dword[tree3.data_img],bmp_icon
33
	@@:
34
	mov eax,dword[icon_tl_sys]
35
	mov dword[tree3.data_img_sys],eax
36
 
37
	mov edx,[foc_obj]
38
	cmp byte[edx],C_VAR
39
	jne .sel_end
40
 
41
	stdcall [tl_node_poi_get_info], 0,tree2
42
	pop edx
43
	@@:
44
		cmp edx,0
45
		je @f
46
		stdcall [tl_node_poi_get_data], edx,tree2
47
		pop esi ;получаем данные узла
48
;------ добавление объекта в список -------------------------------------------
49
		mov ebx,[foc_obj]
50
		cmp ebx,esi
51
		je .add_end ;избегаем циклической ссылки
52
		mov bl,[esi]
53
		cmp bl,C_TDF
54
		je .add_beg
55
		cmp bl,C_STR
56
		je .add_beg
57
			jmp .add_end
58
		.add_beg:
59
			stdcall get_obj_id,esi
60
			mov edi,u_object
61
			mov dword[edi],eax
62
			add edi,4
63
			inc esi ;переходим на имя объекта
64
			mov ecx,MAX_LEN_OBJ_TXT
65
			cld
66
			rep movsb
67
 
68
			call find_obj_in_opt ;edi = pointer to ObjOpt struct
69
			mov cx,word[edi+obj_opt.img-obj_opt]
70
			cmp cx,0
71
			jge .zero
72
				xor cx,cx ;что-бы не глючило с отрицательным индексом
73
			.zero:
74
			shl ecx,16 ;в ecx индекс иконки
75
 
76
			stdcall dword[tl_node_add], u_object, ecx, tree3 ;структура u_object в данном случае не соблюдается, она нужна просто как память для вставки
77
			stdcall dword[tl_cur_next], tree3 ;переносим курсор вниз, что-бы не поменялся порядок
78
		.add_end:
79
;-------
80
		stdcall [tl_node_poi_get_next_info], edx,tree2
81
		pop edx ;переходим к следущему узлу
82
		jmp @b
83
	@@:
84
 
85
	;ставим курсор на нужную позицию
86
	mov edx,[foc_obj] ;берем указатель на объект
87
	cmp edx,0
88
	je .sel_end
89
		mov edx,dword[edx+u_object.typid-u_object]
90
		stdcall [tl_cur_beg],tree3
91
		@@:
92
			stdcall [tl_node_get_data],tree3
93
			pop eax
94
			cmp eax,0
95
			je .sel_end
96
			cmp dword[eax],edx
97
			je .sel_end ;если нашли указатель
98
			stdcall [tl_cur_next],tree3
99
		jmp @b
100
	.sel_end:
101
 
102
	;чистка подписей
103
	mov dword[ch1.text],ch_text
104
	mov dword[ch2.text],ch_text
105
	mov dword[ch3.text],ch_text
106
	mov dword[ch4.text],ch_text
107
 
108
	;установка новых подписей
109
	mov esi,[foc_obj] ;берем указатель на объект
110
	mov bl,byte[esi]
111
	call find_obj_in_opt
112
	mov edi,dword[edi+obj_opt.bit_prop-obj_opt]
113
	cmp edi,0
114
	je .no_bit_capts ;если 1-е битовое свойство пустое, то в цикл не заходим
115
	mov edx,ch1.text
116
	xor al,al ;0 - символ конца строки
117
	add edi,obj_opt
118
	@@:
119
		mov [edx],edi ;записываем текст в check_box
120
		xor ecx,ecx
121
		dec ecx ;ecx - число просматриваемых байт
122
		cld
123
		repne scasb ;ищем конец строки (al=0)
124
		cmp byte[edi],0
125
		je .no_bit_capts ;если следующей строки нет выход из цикла
126
 
127
		add edx,ch_struc_size
128
		cmp edx,check_boxes_end
129
		jl @b
130
	.no_bit_capts:
131
 
132
	;установка флажков
133
	mov esi,[foc_obj] ;берем указатель на объект
134
	mov edx,ch1.flags
135
	xor eax,eax
136
	@@:
137
		bt dword[esi+u_object.modif-u_object],eax
138
		jc .flag_set
139
			btr dword[edx],1 ;снимаем галочку
140
			jmp .end_set
141
		.flag_set:
142
			bts dword[edx],1 ;ставим галочку (ch_flag_en = 10b = 2^1)
143
		.end_set:
144
 
145
		inc eax
146
		add edx,ch_struc_size
147
		cmp edx,check_boxes_end
148
	jl @b
149
 
150
	init_checkboxes2 check_boxes,check_boxes_end
151
	check_boxes_set_sys_color2 check_boxes,check_boxes_end,sc
152
popad
153
 
154
align 4
155
prop_red_win:
156
pushad
157
	mcall 12,1
158
 
159
	xor eax,eax
160
	mov edi,hed
161
	mov edx,[foc_obj] ;берем указатель на объект
162
	cmp edx,0
163
	je @f
164
		mov bl,[edx]
165
		call find_obj_in_opt
166
		add edi,obj_opt.info-obj_opt ;edi - подпись (название объекта)
167
	@@:
168
	mov ebx,30*65536+prop_wnd_width
169
	mov ecx,50*65536+250
170
	mov edx,0xffffd0
171
	or  edx,0x33000000
172
	int 0x40
173
 
174
	mov edx,[foc_obj] ;берем указатель на объект
175
	cmp edx,0
176
	je .exit_fun
177
 
178
		mov eax,8 ;кнопка для сохранения изменений
179
		mov ebx,prop_wnd_width-18-20
180
		shl ebx,16
181
		add ebx,18
182
		mov ecx,3
183
		shl ecx,16
184
		add ecx,18
185
		mov edx,10
186
		mov esi,0xd040
187
		int 0x40
188
 
189
		ror ebx,16 ;вычисляем координаты для иконки
190
		ror ecx,16
191
		and ebx,0xffff
192
		and ecx,0xffff
193
		inc ebx
194
		inc ecx
195
		stdcall draw_icon, 17,ebx,ecx ;17 - save
196
 
197
		mov edi,edit2
198
		.cycle:
199
			stdcall [edit_box_draw], edi ;рисуем поля со свойствами объекта
200
			add edi,ed_struc_size
201
			cmp edi,prop_wnd_edits_end
202
		jl .cycle
203
 
204
		cmp [err_ini0],1
205
		je .exit_fun
206
		cmp [err_ini1],1
207
		je .exit_fun
208
 
209
		mov edx,[foc_obj] ;берем указатель на объект
210
		xor ebx,ebx ;номер поля
211
		.draw_column:
212
			mov eax,ebx
213
			imul eax,prop_edits_height
214
			add eax,prop_edits_top
215
			stdcall draw_obj_icon,[edx],ebx,eax
216
			stdcall draw_obj_caption,[edx],ebx,eax
217
 
218
			inc ebx
219
			cmp ebx,MAX_OPT_FIELDS
220
			jl .draw_column
221
 
222
		cmp byte[edx],C_VAR
223
		jne .no_tree
224
			mov dword[w_scr_t3.all_redraw],1
225
			stdcall [tl_draw], tree3
226
		.no_tree:
227
 
228
		checkboxes_draw2 check_boxes,check_boxes_end
229
 
230
	.exit_fun:
231
	mcall 12,2
232
popad
233
 
234
align 4
235
prop_still:
236
	pushad
237
	mcall 10
238
 
239
	cmp al,1 ;изм. положение окна
240
	jz prop_red_win
241
	cmp al,2
242
	jne @f
243
		call prop_key
244
	@@:
245
	cmp al,3
246
	jz prop_button
247
	cmp al,6
248
	jne @f
249
		call prop_mouse
250
	@@:
251
	popad
252
	jmp prop_still
253
 
254
align 4
255
prop_key:
256
push eax edi
257
	mcall 2
258
	mov edi,edit2
259
	.cycle:
260
		stdcall [edit_box_key], edi
261
		add edi,ed_struc_size
262
		cmp edi,prop_wnd_edits_end
263
		jl .cycle
264
 
265
	mov edi,[foc_obj]
266
	cmp byte[edi],C_VAR
267
	jne @f
268
		stdcall [tl_key], tree3
269
	@@:
270
pop edi eax
271
	ret
272
 
273
align 4
274
prop_mouse:
275
	push edi
276
	mov edi,edit2
277
	.cycle:
278
		stdcall [edit_box_mouse], edi
279
		add edi,ed_struc_size
280
		cmp edi,prop_wnd_edits_end
281
		jl .cycle
282
 
283
	mov edi,[foc_obj]
284
	cmp byte[edi],C_VAR
285
	jne @f
286
		stdcall [tl_mouse], tree3
287
	@@:
288
 
289
	checkboxes_mouse2 check_boxes,check_boxes_end
290
 
291
	pop edi
292
	ret
293
 
294
align 4
295
prop_button:
296
	mcall 17 ;получить код нажатой кнопки
297
 
298
	cmp ah,10
299
	jne @f
300
		call but_element_change
301
		mov ah,1 ;для закрытия окна
302
	@@:
303
 
304
	cmp ah,1
305
	jne prop_still
306
.exit:
307
	mov dword[tree3.data_img],0 ;чистим указатели на иконки что-бы их не удалил деструктор
308
	mov dword[tree3.data_img_sys],0 ;т. к. они еще используються в других элементах
309
	stdcall dword[tl_data_clear], tree3
310
	mov byte[prop_wnd_run],0 ;обнуляем счетчик окон
311
	mcall -1 ;выход из программы
312
 
313
;дерево с объектами в пользовательском файле
314
tree3 tree_list sizeof.object,(MAX_CED_OBJECTS shr 2)+2, tl_key_no_edit+tl_list_box_mode,\
315
	16,16, 0xffffff,0xb0d0ff,0xd000ff, 320,30,165,125, 0,4,MAX_LEN_OBJ_TXT, el_focus,\
316
	w_scr_t3,0
317
 
318
align 4
319
w_scr_t3:
320
.size_x     dw 16 ;+0
321
rb 2+2+2
322
.btn_high   dd 15 ;+8
323
.type	    dd 1  ;+12
324
.max_area   dd 100  ;+16
325
rb 4+4
326
.bckg_col   dd 0xeeeeee ;+28
327
.frnt_col   dd 0xbbddff ;+32
328
.line_col   dd 0  ;+36
329
rb 4+2+2
330
.run_x:
331
rb 2+2+2+2+4+4+4+4+4+4
332
.all_redraw dd 0 ;+80
333
.ar_offset  dd 1 ;+84
334
 
335
check_boxes:
336
ch1 check_box2 (320 shl 16+11),(160 shl 16 +11),5,0xffffff,0,0x80000000,ch_text,ch_flag_en+ch_flag_middle
337
ch2 check_box2 (320 shl 16+11),(175 shl 16 +11),5,0xffffff,0,0x80000000,ch_text,ch_flag_en+ch_flag_middle
338
ch3 check_box2 (320 shl 16+11),(190 shl 16 +11),5,0xffffff,0,0x80000000,ch_text,ch_flag_en+ch_flag_middle
339
ch4 check_box2 (320 shl 16+11),(205 shl 16 +11),5,0xffffff,0,0x80000000,ch_text,ch_flag_en+ch_flag_middle
340
check_boxes_end:
341
 
342
ch_text db 0