Subversion Repositories Kolibri OS

Rev

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

Rev Author Line No. Line
2165 IgorA 1
;
2
; в этом файле собраны функции нужные для создания и
3
; работы окна с координатами
4
;
5
 
6
prop_wnd_width equ 350 ;ширина окна со свойствами объекта
7
SIZE_ONE_FLOAT equ 14
8
MAX_OBJECT_SIZE equ (4+SIZE_ONE_FLOAT*3+1)
9
 
10
prop_wnd_run db 0 ;переменная следящая за тем что-бы не запускать больше 1-го окна со свойствами одновременно
11
 
2173 IgorA 12
txt_q db '?',0
2165 IgorA 13
txt_space:
14
	db SIZE_ONE_FLOAT dup(' ')
15
.end:
16
	db 0
17
 
18
obj_point: ;добавляемый объект
19
	dd 0   ;указатель
20
.text:
21
	rb MAX_OBJECT_SIZE
22
 
23
 
24
 
25
;даное окно (процесс) вызываеться функцией but_wnd_coords
26
align 4
27
prop_start:
28
pushad
29
	mcall 40,0x27 ;маска ожидаемых событий
30
	inc byte[prop_wnd_run]
31
 
32
	stdcall [tl_node_get_data],tree1
33
	pop ebx
34
	xor edx,edx
4332 IgorA 35
	mov dword[capt_p],txt_q
2165 IgorA 36
	cmp ebx,0
4332 IgorA 37
	je .no_points
2165 IgorA 38
		mov ebx,dword[ebx] ;получаем значение сдвига выбранного блока
39
		add ebx,dword[open_file_lif]
40
 
4332 IgorA 41
		cmp word[ebx],CHUNK_VERTLIST
42
		jne @f
43
			movzx edx,word[ebx+6] ;колличество точек
44
			add ebx,8
45
			mov dword[capt_p],txt_4110
46
			jmp .no_points
47
		@@:
48
		cmp word[ebx],0xb013
49
		jne @f
50
			inc edx
51
			add ebx,6
52
			mov dword[capt_p],txt_b013
53
			jmp .no_points
54
		@@:
55
		cmp word[ebx],0xb014
56
		jne @f
57
			mov edx,2
58
			add ebx,6
59
			mov dword[capt_p],txt_b014
60
			;jmp .no_points
61
		@@:
62
	.no_points:
63
 
2165 IgorA 64
	;настройка списка объектов
65
	mov dword[tree3.info_max_count],2
66
	add dword[tree3.info_max_count],edx ;ставим число узлов, равное колличеству точек (+2 на начало и конец списка)
67
	stdcall dword[tl_data_init], tree3
68
	mov eax,dword[icon_tl_sys]
69
	mov dword[tree3.data_img_sys],eax
70
	mov eax,dword[icon_toolbar]
71
	mov dword[tree3.data_img],eax
72
 
4332 IgorA 73
	cmp edx,0
2165 IgorA 74
	je .no_object
2173 IgorA 75
		mov word[NumberSymbolsAD],5
2165 IgorA 76
		finit
77
		.new_point:
78
			mov dword[obj_point],ebx
79
			mov dword[obj_point.text],0
80
			cld
81
			mov ecx,3
82
			@@:
83
				fld dword[ebx]
84
				fstp qword[Data_Double]
85
				call DoubleFloat_to_String
86
				add ebx,4
87
				stdcall str_len, Data_String
88
				mov esi,txt_space
89
				add esi,eax
90
				cmp esi,txt_space.end
91
				jl .normal_size
92
					mov esi,txt_space.end-1 ;минимум 1 пробел нужно добавить, что-бы цифры не слипались
93
				.normal_size:
94
				stdcall str_cat, obj_point.text,esi
95
				stdcall str_cat, obj_point.text,Data_String
96
				loop @b
97
			stdcall dword[tl_node_add], obj_point, (ID_ICON_DATA shl 16), tree3
98
			stdcall dword[tl_cur_next], tree3
99
			dec edx
100
			cmp edx,0
101
			jg .new_point
102
			stdcall dword[tl_cur_beg], tree3
103
	.no_object:
2173 IgorA 104
	edit_boxes_set_sys_color edit1,editboxes_end,sc ;установка системных цветов
105
	stdcall [edit_box_set_text], edit1, txt_q
106
	stdcall [edit_box_set_text], edit2, txt_q
107
	stdcall [edit_box_set_text], edit3, txt_q
2165 IgorA 108
popad
109
 
110
align 4
111
prop_red_win:
112
pushad
113
	mcall 12,1
114
 
115
	xor eax,eax
4332 IgorA 116
	mov edi,dword[capt_p] ;children window caption
2165 IgorA 117
	mov bx,word[procinfo.box.left]
118
	add bx,word[buf_0.l]
119
	shl ebx,16
120
	mov bx,prop_wnd_width
121
	mov cx,word[procinfo.box.top]
2173 IgorA 122
	add cx,word[buf_0.t]
2165 IgorA 123
	shl ecx,16
124
	mov cx,250
125
	mov edx,0xffffd0
126
	or  edx,0x33000000
127
	int 0x40
128
 
2173 IgorA 129
	mov eax,8
130
	mov ebx,(5 shl 16)+20
131
	mov ecx,(195 shl 16)+20
132
	mov edx,3
133
	mov esi,[sc.work_button]
134
	int 0x40
135
 
136
	mov ebx,(30 shl 16)+20
137
	mov ecx,(195 shl 16)+20
138
	mov edx,4
139
	int 0x40
140
 
141
	mov eax,7
142
	mov ebx,[image_data_toolbar]
143
	add ebx,4*IMAGE_TOOLBAR_ICON_SIZE
144
	mov ecx,(16 shl 16)+16
145
	mov edx,(7 shl 16)+197 ;load
146
	int 0x40
147
 
148
	sub ebx,IMAGE_TOOLBAR_ICON_SIZE
149
	mov edx,(32 shl 16)+197 ;save
150
	int 0x40
151
 
2165 IgorA 152
	mov dword[w_scr_t3.all_redraw],1
153
	stdcall [scrollbar_ver_draw],dword w_scr_t3
154
	stdcall [tl_draw], tree3
2173 IgorA 155
	stdcall [edit_box_draw], edit1
156
	stdcall [edit_box_draw], edit2
157
	stdcall [edit_box_draw], edit3
2165 IgorA 158
	mcall 12,2
159
popad
160
 
161
;не отрывать эту функцию от предыдущей
162
align 4
163
prop_still:
164
	pushad
165
	mcall 10
166
 
167
	cmp al,1 ;изм. положение окна
168
	jz prop_red_win
169
	cmp al,2
170
	jne @f
171
		call prop_key
172
	@@:
173
	cmp al,3
174
	jz prop_button
175
	cmp al,6
176
	jne @f
177
		call prop_mouse
178
	@@:
179
	popad
180
	jmp prop_still
181
 
182
align 4
183
prop_key:
184
push eax
185
	mcall 2
2173 IgorA 186
	stdcall [edit_box_key], edit1
187
	stdcall [edit_box_key], edit2
188
	stdcall [edit_box_key], edit3
2165 IgorA 189
	stdcall [tl_key], tree3
190
pop eax
191
	ret
192
 
193
align 4
194
prop_mouse:
195
	;push ecx edi
196
	stdcall [tl_mouse], tree3
2173 IgorA 197
	stdcall [edit_box_mouse], edit1
198
	stdcall [edit_box_mouse], edit2
199
	stdcall [edit_box_mouse], edit3
2165 IgorA 200
	;pop edi ecx
201
	ret
202
 
203
align 4
204
prop_button:
205
	mcall 17 ;получить код нажатой кнопки
206
 
2173 IgorA 207
	cmp ah,3
2165 IgorA 208
	jne @f
2173 IgorA 209
		;загрузка координат в editbox-ы
210
		push ebx
211
		stdcall [tl_node_get_data],tree3
212
		pop ebx
213
		cmp ebx,0
214
		je .no_select_0
215
			mov ebx,[ebx]
216
			mov word[NumberSymbolsAD],8
217
			finit
218
			fld dword[ebx]
219
			fstp qword[Data_Double]
220
			call DoubleFloat_to_String
221
			stdcall [edit_box_set_text], edit1, Data_String
222
			fld dword[ebx+4]
223
			fstp qword[Data_Double]
224
			call DoubleFloat_to_String
225
			stdcall [edit_box_set_text], edit2, Data_String
226
			fld dword[ebx+8]
227
			fstp qword[Data_Double]
228
			call DoubleFloat_to_String
229
			stdcall [edit_box_set_text], edit3, Data_String
230
			stdcall [edit_box_draw], edit1
231
			stdcall [edit_box_draw], edit2
232
			stdcall [edit_box_draw], edit3
233
		.no_select_0:
234
		pop ebx
2165 IgorA 235
	@@:
2173 IgorA 236
	cmp ah,4
237
	jne @f
238
		push ebx ecx esi edi
239
		stdcall [tl_node_get_data],tree3
240
		pop ebx
241
		cmp ebx,0
242
		je .no_select_1
243
			mov ebx,[ebx]
244
			finit
2165 IgorA 245
 
2173 IgorA 246
			mov esi,string1
247
			mov edi,Data_String
248
			cld
249
			mov ecx,32
250
			rep movsb
251
			call String_to_DoubleFloat
252
			fld  qword[Data_Double] ;считываем как double
253
			fstp dword[ebx] ;сохраняем как float
254
 
255
			mov esi,string2
256
			mov edi,Data_String
257
			cld
258
			mov ecx,32
259
			rep movsb
260
			call String_to_DoubleFloat
261
			fld  qword[Data_Double] ;считываем как double
262
			fstp dword[ebx+4] ;сохраняем как float
263
 
264
			mov esi,string3
265
			mov edi,Data_String
266
			cld
267
			mov ecx,32
268
			rep movsb
269
			call String_to_DoubleFloat
270
			fld  qword[Data_Double] ;считываем как double
271
			fstp dword[ebx+8] ;сохраняем как float
272
 
273
			;обновление измененного узла в списке tree3 и главного окна (по таймеру)
274
			mov word[NumberSymbolsAD],5
275
			mov dword[obj_point],ebx
276
			mov dword[obj_point.text],0
277
			cld
278
			mov ecx,3
279
			.coord:
280
				fld dword[ebx]
281
				fstp qword[Data_Double]
282
				call DoubleFloat_to_String
283
				add ebx,4
284
				stdcall str_len, Data_String
285
				mov esi,txt_space
286
				add esi,eax
287
				cmp esi,txt_space.end
288
				jl .normal_size
289
					mov esi,txt_space.end-1 ;минимум 1 пробел нужно добавить, что-бы цифры не слипались
290
				.normal_size:
291
				stdcall str_cat, obj_point.text,esi
292
				stdcall str_cat, obj_point.text,Data_String
293
				loop .coord
294
			stdcall dword[tl_node_set_data], obj_point, tree3
295
			stdcall dword[tl_draw], tree3
296
			mov byte[can_save],1 ;для показа кнопки 'Сохранить'
297
			mov dword[offs_last_timer],0 ;для обновления блока в таймере
298
		.no_select_1:
299
		pop edi esi ecx ebx
300
	@@:
301
 
2165 IgorA 302
	cmp ah,1
303
	jne prop_still
304
.exit:
305
	mov dword[tree3.data_img],0 ;чистим указатели на иконки что-бы их не удалил деструктор
306
	mov dword[tree3.data_img_sys],0 ;т. к. они еще используються в других элементах
307
	stdcall dword[tl_data_clear], tree3
308
	mov byte[prop_wnd_run],0 ;обнуляем счетчик окон
309
	mcall -1 ;выход из программы
310
 
4332 IgorA 311
capt_p dd 0
312
 
2165 IgorA 313
;дерево с объектами в пользовательском файле
314
tree3 tree_list MAX_OBJECT_SIZE,3,\
315
	tl_key_no_edit+tl_list_box_mode,\
2173 IgorA 316
	16,16, 0xffffff,0xb0d0ff,0xd000ff, 5,30,300,160, 16, 4,0, el_focus,\
2165 IgorA 317
	w_scr_t3,0
318
 
2173 IgorA 319
edit1 edit_box 80,  70, 200, 0xffffff, 0xff, 0x80ff, 0, 0x8000, 34, string1, mouse_dd, 0
320
edit2 edit_box 80, 154, 200, 0xffffff, 0xff, 0x80ff, 0, 0x8000, 34, string2, mouse_dd, 0
321
edit3 edit_box 80, 238, 200, 0xffffff, 0xff, 0x80ff, 0, 0x8000, 34, string3, mouse_dd, 0
322
editboxes_end:
323
 
324
string1 rb 34
325
string2 rb 34
326
string3 rb 34
327
 
2165 IgorA 328
align 4
329
w_scr_t3:
330
.size_x     dw 16 ;+0
331
rb 2+2+2
332
.btn_high   dd 15 ;+8
333
.type	    dd 1  ;+12
334
.max_area   dd 100  ;+16
335
rb 4+4
336
.bckg_col   dd 0xeeeeee ;+28
337
.frnt_col   dd 0xbbddff ;+32
338
.line_col   dd 0  ;+36
339
rb 4+2+2
340
.run_x:
341
rb 2+2+2+2+4+4+4+4+4+4
342
.all_redraw dd 0 ;+80
343
.ar_offset  dd 1 ;+84
344