Subversion Repositories Kolibri OS

Rev

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

Rev Author Line No. Line
7573 IgorA 1
 
2
 
3
	mcall SF_REDRAW,SSF_BEGIN_DRAW
4
5
	mov edx,[sc.work]
6
 
7
	mcall SF_CREATE_WINDOW,dword[wnd_s_pos],dword[wnd_s_pos+4],,,hed
8
9
	mcall SF_THREAD_INFO,procinfo,-1
10
 
11
	call EvSize
12
13
	movzx ebx,word[procinfo.client_box.width]
14
 
15
	mcall SF_DRAW_RECT,,ted_wnd_t ;верхний прямоугольник, для очистки верхней панели
16
	call draw_but_toolbar
17
	stdcall [kmainmenu_draw], [main_menu]
18
	stdcall [ted_draw], tedit0
19
20
	mcall SF_REDRAW,SSF_END_DRAW
21
 
22
23
align 4
24
 
1456 IgorA 25
	pushad
1457 IgorA 26
	mov edi,tedit0
6087 IgorA 27
28
	mov ecx,0x40000000+ID_BUT_NEW
1338 IgorA 29
 
7573 IgorA 30
	bt word[panel_but],0
7488 IgorA 31
	jnc @f
32
		call draw_but_icon ;New
33
	@@:
34
35
	mov cx,ID_BUT_OPEN
1338 IgorA 36
 
7573 IgorA 37
	jnc @f
7488 IgorA 38
		add edx,25 shl 16
39
		call draw_but_icon ;Open
40
	@@:
41
42
	stdcall [ted_can_save],edi
1338 IgorA 43
 
6087 IgorA 44
	je @f
45
		and ecx,0xffff
46
	@@:
47
	mov cx,ID_BUT_SAVE
48
	bt word[panel_but+2],0
7573 IgorA 49
	jnc @f
7488 IgorA 50
		add edx,25 shl 16
51
		call draw_but_icon ;Save
52
	@@:
53
	or ecx,0x40000000
54
6087 IgorA 55
	mov cx,ID_BUT_SAVE_AS
1338 IgorA 56
 
7573 IgorA 57
	jnc @f
7488 IgorA 58
		add edx,25 shl 16
59
		call draw_but_icon ;Save as
7571 IgorA 60
	@@:
61
62
	mov cx,ID_BUT_SELECT
63
 
7573 IgorA 64
	jnc @f
7571 IgorA 65
		add edx,30 shl 16
66
		call draw_but_icon ;Select word
7488 IgorA 67
	@@:
68
69
	call [ted_is_select]
1338 IgorA 70
 
6087 IgorA 71
	jnz @f
7488 IgorA 72
		and ecx,0xffff
73
	@@:
6087 IgorA 74
	mov cx,ID_BUT_CUT
75
	bt word[panel_but+5],0
7573 IgorA 76
	jnc @f
7571 IgorA 77
		add edx,25 shl 16
7488 IgorA 78
		call draw_but_icon ;Cut
79
	@@:
80
81
	mov cx,ID_BUT_COPY
1338 IgorA 82
 
7573 IgorA 83
	jnc @f
7571 IgorA 84
		add edx,25 shl 16
7488 IgorA 85
		call draw_but_icon ;Copy
86
	@@:
87
	or ecx,0x40000000
88
6087 IgorA 89
	cmp dword[buf],0
1338 IgorA 90
 
6087 IgorA 91
		and ecx,0xffff
92
	@@:
93
	mov cx,ID_BUT_PASTE
94
	bt word[panel_but+7],0
7573 IgorA 95
	jnc @f
7571 IgorA 96
		add edx,25 shl 16
7488 IgorA 97
		call draw_but_icon ;Paste
98
	@@:
99
	or ecx,0x40000000
100
6087 IgorA 101
	mov cx,ID_BUT_FIND
1338 IgorA 102
 
7573 IgorA 103
	jnc @f
7571 IgorA 104
		add edx,25 shl 16
7488 IgorA 105
		call draw_but_icon ;Found
106
	@@:
107
108
	mov cx,ID_BUT_REPLACE
1338 IgorA 109
 
7573 IgorA 110
	jnc @f
7571 IgorA 111
		add edx,25 shl 16
7488 IgorA 112
		call draw_but_icon ;Replace
113
	@@:
114
115
	mov cx,ID_BUT_KEY_WORDS
1338 IgorA 116
 
7573 IgorA 117
	jnc @f
7571 IgorA 118
		add edx,25 shl 16
7488 IgorA 119
		call draw_but_icon ;Key words
120
	@@:
121
122
	call [ted_is_select]
1338 IgorA 123
 
7488 IgorA 124
	jnz @f
125
		and ecx,0xffff
126
	@@:
127
	mov cx,ID_BUT_UPPER
128
	bt word[panel_but+11],0
7573 IgorA 129
	jnc @f
7571 IgorA 130
		add edx,30 shl 16
7488 IgorA 131
		call draw_but_icon ;Upper
132
	@@:
133
134
	mov cx,ID_BUT_LOWER
135
 
7573 IgorA 136
	jnc @f
7571 IgorA 137
		add edx,25 shl 16
7488 IgorA 138
		call draw_but_icon ;Lower
139
	@@:
140
141
	mov cx,ID_BUT_REVERSE
142
 
7573 IgorA 143
	jnc @f
7571 IgorA 144
		add edx,25 shl 16
7488 IgorA 145
		call draw_but_icon ;Reverse
146
	@@:
147
	or ecx,0x40000000
148
149
	mov ebx,ted_tim_undo
150
 
6087 IgorA 151
	jg @f
152
		and ecx,0xffff
153
	@@:
154
	mov cx,ID_BUT_UNDO
155
	bt word[panel_but+14],0
7573 IgorA 156
	jnc @f
7571 IgorA 157
		add edx,30 shl 16
7488 IgorA 158
		call draw_but_icon ;Undo
159
	@@:
160
	or ecx,0x40000000
161
6087 IgorA 162
	cmp ted_tim_undo,1
1338 IgorA 163
 
6087 IgorA 164
		and ecx,0xffff
165
	@@:
166
	mov cx,ID_BUT_REDO
167
	bt word[panel_but+15],0
7573 IgorA 168
	jnc @f
7571 IgorA 169
		add edx,25 shl 16
7488 IgorA 170
		call draw_but_icon ;Redo
171
	@@:
172
	or ecx,0x40000000
173
6087 IgorA 174
	mov cx,ID_BUT_INVISIBLE
1338 IgorA 175
 
7573 IgorA 176
	jnc @f
7571 IgorA 177
		add edx,30 shl 16
7488 IgorA 178
		call draw_but_icon ;Invisible on|off
179
	@@:
180
181
	mov cx,ID_BUT_SYNTAX_LIST
1338 IgorA 182
 
7573 IgorA 183
	jnc @f
7571 IgorA 184
		add edx,25 shl 16
7488 IgorA 185
		call draw_but_icon ;Выбор файла подсветки
186
	@@:
7571 IgorA 187
7488 IgorA 188
	mov cx,ID_BUT_SYNTAX_MODE
1338 IgorA 189
 
7573 IgorA 190
	jnc @f
7571 IgorA 191
		add edx,25 shl 16
7488 IgorA 192
		call draw_but_icon ;Подсветка вкл|выкл
193
	@@:
7571 IgorA 194
7488 IgorA 195
	mov cx,ID_BUT_CONVERT_1251_866
1338 IgorA 196
 
7573 IgorA 197
	jnc @f
7571 IgorA 198
		add edx,30 shl 16
7488 IgorA 199
		call draw_but_icon ;cp 1251 -> 866
200
	@@:
201
202
	mov cx,ID_BUT_CONVERT_866_1251
1338 IgorA 203
 
7573 IgorA 204
	jnc @f
7571 IgorA 205
		add edx,25 shl 16
7488 IgorA 206
		call draw_but_icon ;cp 866 -> 1251
207
	@@:
208
209
	popad
4308 IgorA 210
 
211
212
;txtBUp db 24
213
 
1338 IgorA 214
;txtBRi db 26
215
;txtBLe db 27
216
217
align 4
1457 IgorA 218
 
1456 IgorA 219
	mov edi,[edit]
7583 IgorA 220
	cmp ted_panel_id,TED_PANEL_FIND
7579 IgorA 221
	jne @f
7576 IgorA 222
		mcall SF_DEFINE_BUTTON,,,0x80000000+200
6087 IgorA 223
		mcall ,,,0x80000000+202
7583 IgorA 224
		mcall ,,,0x80000000+203
225
		mcall ,,,0x80000000+204
226
		call p_find
227
		jmp .end_f
7576 IgorA 228
	@@:
229
	cmp ted_panel_id,TED_PANEL_REPLACE
230
	jne @f
231
		mcall SF_DEFINE_BUTTON,,,0x80000000+200
232
		mcall ,,,0x80000000+201
7583 IgorA 233
		mcall ,,,0x80000000+204
234
		call p_replace
235
		jmp .end_f
7576 IgorA 236
	@@:
237
	cmp ted_panel_id,TED_PANEL_GOTO
238
	jne @f
7579 IgorA 239
		mcall SF_DEFINE_BUTTON,,,0x80000000+200
240
		mcall ,,,0x80000000+201
7583 IgorA 241
		mcall ,,,0x80000000+202
242
		mcall ,,,0x80000000+203
243
		call p_goto
244
		jmp .end_f
7579 IgorA 245
	@@:
246
	cmp ted_panel_id,TED_PANEL_SYNTAX
247
	jne @f
248
		mcall SF_DEFINE_BUTTON,,,0x80000000+201
249
		mcall ,,,0x80000000+202
7583 IgorA 250
		mcall ,,,0x80000000+203
7576 IgorA 251
		mcall ,,,0x80000000+204
252
		call p_syntax
7579 IgorA 253
		;jmp .end_f
7583 IgorA 254
	@@:
255
	.end_f:
256
	ret
7576 IgorA 257
endp
258
259
align 4
260
 
261
	push eax ebx ecx edx
262
		mov ecx,ted_wnd_t
6087 IgorA 263
		shl ecx,16
264
		mov cx,20
265
		mcall SF_DRAW_RECT,TED_PANEL_WIDTH,,[sc.work]
266
267
		mov ecx,ted_wnd_t
1338 IgorA 268
 
7576 IgorA 269
		shl ecx,16
270
		add ecx,ted_wnd_h
271
		mov edx,ted_scr_h
272
		add cx,word[edx+sb_offs_size_y]
273
		sub cx,20+15-1 ; 15 - height text box
274
		mcall ,,,[sc.work]
275
276
		stdcall [edit_box_draw], edit_find
277
 
7579 IgorA 278
		mov ecx,ted_wnd_t
7576 IgorA 279
 
280
		add ecx,(111 shl 16)+20
281
		mcall SF_DEFINE_BUTTON,(5 shl 16)+85,,201,[sc.work_button] ;201 - button id
7583 IgorA 282
7576 IgorA 283
		mov ebx,(23 shl 16)+7
284
 
285
		mov ecx,[sc.work_text]
6087 IgorA 286
		or ecx,0x80000000
287
		mcall SF_DRAW_TEXT,,,txtFindCapt
288
289
		mov ecx,[sc.work_button_text]
1338 IgorA 290
 
7576 IgorA 291
		mov ebx,(15 shl 16)+118
292
		add ebx,ted_wnd_t
7583 IgorA 293
		mcall ,,,txtFindNext
7576 IgorA 294
295
		stdcall [option_box_draw], opt_grlist1
1338 IgorA 296
 
7576 IgorA 297
	pop edx ecx ebx eax
7583 IgorA 298
	ret
7576 IgorA 299
300
align 4
301
 
302
	push eax ebx ecx edx
303
		mov ecx,ted_wnd_t
304
		shl ecx,16
6087 IgorA 305
		mov cx,20
7576 IgorA 306
		mcall SF_DRAW_RECT,TED_PANEL_WIDTH,,[sc.work]
307
308
		mov ecx,ted_wnd_t
309
 
310
		shl ecx,16
6087 IgorA 311
		add ecx,ted_wnd_h
312
		mov edx,ted_scr_h
313
		add cx,word[edx+sb_offs_size_y]
314
		sub cx,20+15-1 ; 15 - height text box
315
		mcall ,,,[sc.work]
316
7576 IgorA 317
		stdcall [edit_box_draw], edit_replace
1338 IgorA 318
 
7579 IgorA 319
320
		mov ecx,ted_wnd_t
7576 IgorA 321
 
6087 IgorA 322
		add ecx,(133 shl 16)+20
323
		mcall SF_DEFINE_BUTTON,(5 shl 16)+95,,202,[sc.work_button] ;replace next
7576 IgorA 324
325
		add ecx,(26 shl 16)
1338 IgorA 326
 
7576 IgorA 327
328
		mov ebx,ted_wnd_t
329
 
330
		mov ecx,[sc.work_text]
331
		or ecx,0x80000000
6087 IgorA 332
		mcall SF_DRAW_TEXT,,,txtFindCapt
333
		add ebx,93
7576 IgorA 334
		mcall SF_DRAW_TEXT,,,txtRerlaceCapt
335
336
		mov ecx,[sc.work_button_text]
337
 
338
		mov ebx,ted_wnd_t
339
		add ebx,(15 shl 16)+140
340
		mcall ,,,txtRerlace
341
		add ebx,26
342
		mcall ,,,txtRerlaceAll
343
344
		stdcall [option_box_draw], opt_grlist1
345
 
346
	ret
6087 IgorA 347
348
align 4
1338 IgorA 349
 
7579 IgorA 350
	push eax ebx ecx edx
351
		mov ecx,ted_wnd_t
352
		shl ecx,16
353
		mov cx,20
354
		mcall SF_DRAW_RECT,TED_PANEL_WIDTH,,[sc.work]
355
356
		mov ecx,ted_wnd_t
357
 
358
		shl ecx,16
359
		add ecx,ted_wnd_h
360
		mov edx,ted_scr_h
361
		add cx,word[edx+sb_offs_size_y]
362
		sub cx,20+15-1 ; 15 - height text box
363
		mcall ,,,[sc.work]
364
365
		stdcall [edit_box_draw], edit_goto
366
 
367
		mov ecx,ted_wnd_t
368
 
369
		add ecx,(40 shl 16)+20
370
		mcall SF_DEFINE_BUTTON,(5 shl 16)+85,,204,[sc.work_button]
371
372
		mov ebx,(23 shl 16)+7
373
 
374
		mov ecx,[sc.work_text]
375
		or ecx,0x80000000
376
		mcall SF_DRAW_TEXT,,,txtGotoCapt
377
378
		mov ecx,[sc.work_button_text]
379
 
380
		mov ebx,(15 shl 16)+47
381
		add ebx,ted_wnd_t
382
		mcall ,,,txtGoto
383
	pop edx ecx ebx eax
384
	ret
385
386
;input:
387
 
1457 IgorA 388
align 4
389
p_syntax:
1456 IgorA 390
	pushad
7579 IgorA 391
6087 IgorA 392
	mov ecx,ted_wnd_t
1338 IgorA 393
 
6087 IgorA 394
	mov cx,20
395
	mcall SF_DRAW_RECT,TED_PANEL_WIDTH,,[sc.work] ;рисование верхнего фонового прямоугольника
396
397
	stdcall [tl_draw], tree1
1338 IgorA 398
 
7577 IgorA 399
	stdcall [scrollbar_ver_draw], ws_dir_lbox
6087 IgorA 400
7577 IgorA 401
	ror ecx,16
1338 IgorA 402
 
6087 IgorA 403
	add ecx,20
7577 IgorA 404
	and ecx,0xffff
6087 IgorA 405
	ror ecx,16
406
	add ecx,ted_wnd_h
407
	mov esi,ted_scr_h
408
	add cx,word[esi+sb_offs_size_y]
409
	sub cx,20
410
	sub ecx,[tree1.box_height]
411
	inc cx
7577 IgorA 412
	int 0x40 ;рисование нижнего фонового прямоугольника
6087 IgorA 413
414
	mov ecx,ted_wnd_t
1338 IgorA 415
 
6087 IgorA 416
	add ecx,[tree1.box_height]
417
	shl ecx,16
7577 IgorA 418
	mov cx,20
6087 IgorA 419
	mcall SF_DEFINE_BUTTON,(5 shl 16)+65,,200,[sc.work_button] ;200 - button id
420
421
	mov ebx,(30 shl 16)+5
1338 IgorA 422
 
6087 IgorA 423
	mov ecx,[sc.work_text]
424
	or ecx,0x80000000
425
	mcall SF_DRAW_TEXT,,,txtFormatCapt
426
427
	mov ebx,(10 shl 16)+31
1338 IgorA 428
 
6087 IgorA 429
	add ebx,ted_wnd_t
7577 IgorA 430
	mov ecx,[sc.work_button_text]
6087 IgorA 431
	or ecx,0x80000000
7577 IgorA 432
	mcall ,,,txtFormatApply
433
6087 IgorA 434
	popad
1338 IgorA 435
 
6087 IgorA 436
437
MIN_M_WND_H equ 100 ;минимальная высота главного окна
1338 IgorA 438
 
2125 IgorA 439
; edi = pointer to tedit struct
440
align 4
441
EvSize:
1456 IgorA 442
	pushad
2125 IgorA 443
	mov ebx,ted_scr_h
6087 IgorA 444
	mov esi,ted_scr_w
445
446
	m2m ted_wnd_w,[procinfo.client_box.width] ;ставим ширину окна редактора равной ширине всего окна
1338 IgorA 447
 
6087 IgorA 448
	sub ted_wnd_w,eax ;отнимаем отступ слева
449
	movzx eax,word[esi+sb_offs_size_x]
450
	sub ted_wnd_w,eax ;отнимаем ширину верт. скроллинга
451
452
	m2m ted_wnd_h,[procinfo.client_box.height] ;ставим высоту окна редактора равной высоте всего окна
1449 IgorA 453
 
6087 IgorA 454
	jg @f
455
		mov ted_wnd_h,MIN_M_WND_H
456
	@@:
457
458
	movzx eax,word[ebx+sb_offs_size_y]
1338 IgorA 459
 
6087 IgorA 460
	mov eax,ted_wnd_t
461
	sub ted_wnd_h,eax	      ;отнимаем отступ сверху
462
463
	stdcall [ted_init_scroll_bars], tedit0,2
1338 IgorA 464
 
6087 IgorA 465
	mov eax,ted_wnd_t
1338 IgorA 466
 
6087 IgorA 467
	mov tl_box_top,eax ;=ted_wnd_t
7576 IgorA 468
	add tl_box_top,20
6087 IgorA 469
470
	mov [edit_find.top],eax ;=ted_wnd_t
1338 IgorA 471
 
7579 IgorA 472
	mov [edit_replace.top],eax
473
	add dword[edit_replace.top],113
474
	mov [edit_goto.top],eax
475
	add dword[edit_goto.top],20
476
	popad
477
	ret
6087 IgorA 478
479
;input:
1338 IgorA 480
 
1456 IgorA 481
;   cx = ID button
1338 IgorA 482
;  edx = x*2^16+y
7573 IgorA 483
align 4
1338 IgorA 484
draw_but_icon:
1456 IgorA 485
	push eax ebx
1338 IgorA 486
1457 IgorA 487
	mov eax,SF_DEFINE_BUTTON
1338 IgorA 488
 
6087 IgorA 489
		mov ebx,edx
1457 IgorA 490
		mov edx,ecx
491
		mov cx,bx
492
		shl ecx,16
493
		mov cx,19 ;=20-1
494
		mov bx,19 ;=20-1
495
		mov esi,ebx
496
		shr esi,16
497
		add esi,20
498
		cmp esi,[procinfo.client_box.width]
499
		jge @f ;кнопка не влезла в окно
500
			mov esi,[sc.work_button]
4128 IgorA 501
			int 0x40 ;ставим кнопку
1457 IgorA 502
			mov eax,SF_PUT_IMAGE
503
		@@:
6087 IgorA 504
	pop esi edx ecx
1457 IgorA 505
506
	cmp eax,SF_PUT_IMAGE
1338 IgorA 507
 
6087 IgorA 508
		mov ebx,[bmp_icon]
4128 IgorA 509
		bt ecx,30 ;if (ecx & 0x40000000)
1457 IgorA 510
		jc .gray
4308 IgorA 511
			add ebx,TOOLBAR_ICONS_SIZE ;перемещаемся на серые кнопки
4128 IgorA 512
		.gray:
513
		push ecx
514
		sub ecx,ID_BUT_0
1457 IgorA 515
		and ecx,0xffff
7573 IgorA 516
		imul ecx,1200
1457 IgorA 517
		add ebx,ecx
518
		mov ecx,(20 shl 16)+20
519
		int 0x40 ;ставим рисунок на кнопку
7488 IgorA 520
		pop ecx
1457 IgorA 521
	@@:
522
	pop ebx eax
523
	ret
524
525
;descrition:
1338 IgorA 526
 
4128 IgorA 527
;input:
528
; buf_rgb - буфер с входным 24 битным цветным изображением
529
; buf_g24 - буфер с выходным 24 битным серым изображением
530
; pixels - число пикселей в изображении
531
align 4
532
proc img_to_gray, buf_rgb:dword, buf_g24:dword, pixels:dword
533
pushad
4228 IgorA 534
	mov esi,[buf_rgb]
535
	mov edi,[buf_g24]
4128 IgorA 536
	mov ecx,[pixels]
537
	mov ebx,3
538
	@@:
4228 IgorA 539
		movzx eax,byte[esi]
4128 IgorA 540
		movzx edx,byte[esi+1]
541
		add eax,edx
4228 IgorA 542
		movzx edx,byte[esi+2]
543
		add eax,edx
544
		xor edx,edx
545
		div ebx ;shr eax,2
546
		mov ah,al
547
		mov word[edi],ax
4128 IgorA 548
		mov byte[edi+2],al
549
		add esi,3
550
		add edi,3
551
		loop @b
552
popad
553
	ret
4228 IgorA 554
endp
4128 IgorA 555