Subversion Repositories Kolibri OS

Rev

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