Subversion Repositories Kolibri OS

Rev

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

Rev Author Line No. Line
31 halyavin 1
;
51 mikedld 2
;    UNIFORM WINDOW COLOURS & SKIN
31 halyavin 3
;
4
;    Compile with FASM for Menuet
5
;
6
;    < russian edition by Ivan Poddubny >
51 mikedld 7
;    < skin selection by Mike Semenyako >
3435 mario79 8
;******************************************************************************
9
; last update:  01/04/2013
10
; written by:   Marat Zakiyanov aka Mario79, aka Mario
11
; changes:      select colors with ColorDialog
12
;               some redesign of the look of the program
13
;******************************************************************************
1611 mario79 14
; last update:  10/09/2010
15
; written by:   Marat Zakiyanov aka Mario79, aka Mario
16
; changes:      select path with OpenDialog
31 halyavin 17
;******************************************************************************
3271 mario79 18
	use32
19
	org 0
20
	db 'MENUET01'	; identifier
21
	dd 1		; header version
22
	dd START	; start address
3435 mario79 23
	dd IM_END	; file size
24
	dd I_END	; memory
3271 mario79 25
	dd stacktop	; stack pointer
7937 leency 26
	dd app_param	; parameters
3271 mario79 27
	dd cur_dir_path	; path to file
28
 
1611 mario79 29
include 'lang.inc'
7639 leency 30
include '../../../proc32.inc'
1702 Lrz 31
include '../../../config.inc'		;for nightbuild
1611 mario79 32
include '../../../macros.inc'
7937 leency 33
include '../../../string.inc'
7639 leency 34
include '../../../dll.inc'
1611 mario79 35
include 'kglobals.inc'
36
include 'unpacker.inc'
37
include '../../../develop/libraries/box_lib/load_lib.mac'
38
	@use_library
31 halyavin 39
;******************************************************************************
3435 mario79 40
;--------------------------------------
51 mikedld 41
struct SKIN_HEADER
485 heavyiron 42
  ident   dd ?
43
  version dd ?
44
  params  dd ?
45
  buttons dd ?
46
  bitmaps dd ?
51 mikedld 47
ends
3435 mario79 48
;--------------------------------------
51 mikedld 49
struct SKIN_PARAMS
485 heavyiron 50
  skin_height    dd ?
51
  margin.right   dw ?
52
  margin.left    dw ?
53
  margin.bottom  dw ?
54
  margin.top     dw ?
55
  colors.inner   dd ?
56
  colors.outer   dd ?
57
  colors.frame   dd ?
58
  colors_1.inner dd ?
59
  colors_1.outer dd ?
60
  colors_1.frame dd ?
61
  dtp.size       dd ?
62
  dtp.data       db 40 dup (?)
51 mikedld 63
ends
3435 mario79 64
;--------------------------------------
51 mikedld 65
struct SKIN_BUTTONS
485 heavyiron 66
  type     dd ?
67
  pos:
68
    left   dw ?
69
    top    dw ?
70
  size:
71
    width  dw ?
72
    height dw ?
51 mikedld 73
ends
3435 mario79 74
;--------------------------------------
51 mikedld 75
struct SKIN_BITMAPS
485 heavyiron 76
  kind  dw ?
77
  type  dw ?
78
  _data  dd ?
51 mikedld 79
ends
3435 mario79 80
;--------------------------------------
81
frame_1:
82
  .x      = 5
83
  .y      = 220
84
  .width  = 420
85
  .height = 50
86
;--------------------------------------
87
frame_2:
88
  .x      = 5
89
  .y      = 280
90
  .width  = 420
91
  .height = 50
1611 mario79 92
;---------------------------------------------------------------------
3271 mario79 93
START:		; start of execution
94
;---------------------------------------------------------------------
1611 mario79 95
	mcall	68,11
96
 
97
	test	eax,eax
98
	jz	close
99
 
7639 leency 100
stdcall dll.Load,LibIniImportTable
1611 mario79 101
load_libraries l_libs_start,end_l_libs
102
 
103
;if return code =-1 then exit, else nornary work
104
	inc	eax
105
	test	eax,eax
106
	jz	close
107
;---------------------------------------------------------------------
7937 leency 108
; set default pathes
109
	mov	edi,skin_info
110
	mov	esi,default_skin
1611 mario79 111
	xor	eax,eax
112
	cld
113
@@:
114
	lodsb
115
	stosb
116
	test	eax,eax
117
	jnz	@b
7937 leency 118
 
119
	mov	edi,dtp_name
1611 mario79 120
	mov	esi,default_dtp
121
	xor	eax,eax
122
	cld
123
@@:
124
	lodsb
125
	stosb
126
	test	eax,eax
127
	jnz	@b
128
;---------------------------------------------------------------------
7937 leency 129
; check app param
130
	stdcall string.length, app_param
131
	add eax, app_param
132
	mov ecx, [eax-4]
133
	cmp ecx, '.skn'
134
	je  load_skin_from_param
135
	cmp ecx, '.dtp'
136
	jne no_param
137
 
138
load_dtp_from_param:
139
	mov	edi,dtp_name
140
	mov	esi,app_param
1611 mario79 141
	xor	eax,eax
142
	cld
143
@@:
144
	lodsb
145
	stosb
7937 leency 146
	test   eax,eax
147
	jnz    @b
148
	call   load_dtp_file.1
149
	jmp    skin_path_ready
150
 
151
load_skin_from_param:
152
	mov    edi,skin_info
153
	mov    esi,app_param
154
	xor    eax,eax
155
	cld
156
@@:
157
	lodsb
158
	stosb
159
	test    eax,eax
160
	jnz     @b
161
	call    load_skin_file.2
162
	jmp     skin_path_ready
163
 
164
no_param:
165
	mcall	48,3,color_table,4*10	; get current colors
166
	call	load_skin_file.2
167
 
1611 mario79 168
skin_path_ready:
169
;---------------------------------------------------------------------
170
;OpenDialog	initialisation
3271 mario79 171
	push	dword OpenDialog_data
172
	call	[OpenDialog_Init]
1611 mario79 173
 
3271 mario79 174
	push	dword OpenDialog_data2
175
	call	[OpenDialog_Init]
3435 mario79 176
;--------------------------------------------------------------------
177
;init_ColorDialog	ColorDialog_data
178
	push    dword ColorDialog_data
179
	call    [ColorDialog_Init]
180
;--------------------------------------------------------------------
1611 mario79 181
; prepare for PathShow
182
	push	dword PathShow_data_1
183
	call	[PathShow_prepare]
184
 
185
	push	dword PathShow_data_2
186
	call	[PathShow_prepare]
187
;---------------------------------------------------------------------
31 halyavin 188
red:
3271 mario79 189
	call	draw_window		; at first, draw the window
190
;---------------------------------------------------------------------
31 halyavin 191
still:
3435 mario79 192
	mcall	10	; wait here for event
31 halyavin 193
 
3271 mario79 194
	dec	eax	; redraw request ?
195
	jz	red
3435 mario79 196
 
3271 mario79 197
	dec	eax	; key in buffer ?
198
	jz	key
3435 mario79 199
 
3271 mario79 200
	dec	eax	; button in buffer ?
201
	jz	button
31 halyavin 202
 
3271 mario79 203
	jmp	still
204
;---------------------------------------------------------------------
205
key:		; key
206
	mcall	2	; just read it and ignore
207
	jmp	still
208
;---------------------------------------------------------------------
209
button:		; button
210
	mcall	17	; get id
31 halyavin 211
 
3271 mario79 212
 	cmp	ah,12	; load file
213
 	jne	no_load
31 halyavin 214
 
7937 leency 215
	call	load_dtp_file
3271 mario79 216
	call	draw_window
217
 	jmp	still
218
;--------------------------------------
219
no_load:
220
 	cmp	ah,13	; save file
221
 	jne	no_save
31 halyavin 222
 
3271 mario79 223
	call	save_file
224
 	jmp	still
225
;--------------------------------------
226
no_save:
227
 	cmp	ah,14	; set 3d buttons
228
 	jne	no_3d
31 halyavin 229
 
3271 mario79 230
	mcall	48,1,1
7639 leency 231
	invoke  ini_set_int, aIni, aSectionSkn, aButtonStyle, 1
3271 mario79 232
 	jmp	doapply
233
;--------------------------------------
234
no_3d:
235
 	cmp	ah,15	; set flat buttons
236
 	jne	no_flat
31 halyavin 237
 
7639 leency 238
	invoke  ini_set_int, aIni, aSectionSkn, aButtonStyle, 0
3271 mario79 239
	mcall	48, 1, 0
240
;--------------------------------------
484 diamond 241
doapply:
3271 mario79 242
	mcall	48, 0, 0
243
 	jmp	still
244
;--------------------------------------
245
no_flat:
246
 	cmp	ah,16	; apply
247
 	jne	no_apply
248
;--------------------------------------
249
apply_direct:
250
	mcall	48,2,color_table,10*4
251
 	jmp	doapply
252
;--------------------------------------
253
 no_apply:
254
 	cmp	ah,17	; load skin file
255
 	jne	no_load_skin
31 halyavin 256
 
3271 mario79 257
	call	load_skin_file
258
	call	draw_window
259
 	jmp	still
260
;--------------------------------------
261
no_load_skin:
262
 	cmp	ah,18	; apply skin
263
 	jne	no_apply_skin
31 halyavin 264
 
3271 mario79 265
 	cmp	[skin_info],0
266
 	je	no_apply_skin
51 mikedld 267
 
3271 mario79 268
	mcall	48,8,skin_info
269
	call	draw_window
270
 	jmp	still
271
;--------------------------------------
272
no_apply_skin:
273
	cmp	ah,31
274
	jb	no_new_colour
51 mikedld 275
 
3271 mario79 276
	cmp	ah,41
277
	jg	no_new_colour
278
 
3435 mario79 279
;---------------------------------------------------------------------
280
.start_ColorDialog:
281
	push    dword ColorDialog_data
282
	call    [ColorDialog_Start]
283
; 2 - use another method/not found program
284
	cmp	[ColorDialog_data.status],2
285
	je	still
286
; 1 - OK, color selected
287
	cmp	[ColorDialog_data.status],1
288
	jne	still
289
;---------------------------------------------------------------------
290
 
3271 mario79 291
	shr	eax,8
292
	sub	eax,31
293
	shl	eax,2
3435 mario79 294
	mov	ebx,[ColorDialog_data.color]
295
	and	ebx,0xffffff	; temporary for ColorDialog!!!!!!!!!!
3271 mario79 296
	mov	[eax+color_table],ebx
297
 	cmp	dword[not_packed_area+SKIN_HEADER.ident],'SKIN'
298
 	jne	@f
31 halyavin 299
 
3271 mario79 300
	mov	edi,[not_packed_area+SKIN_HEADER.params]
301
	mov	dword[edi+not_packed_area+SKIN_PARAMS.dtp.data+eax],ebx
302
	call	draw_skin
303
;--------------------------------------
304
@@:
305
	call	draw_colours
306
 	jmp	still
307
;--------------------------------------
308
no_new_colour:
309
	cmp	ah,1	; terminate
310
	jnz	noid1
311
;--------------------------------------
1611 mario79 312
close:
3271 mario79 313
	or	eax,-1
314
	mcall
315
;--------------------------------------
316
noid1:
317
 	jmp	still
318
;---------------------------------------------------------------------
7937 leency 319
load_dtp_file:
1611 mario79 320
;---------------------------------------------------------------------
321
; invoke OpenDialog
322
	mov	[OpenDialog_data.type],dword 0
3271 mario79 323
	push	dword OpenDialog_data
324
	call	[OpenDialog_Start]
1611 mario79 325
	cmp	[OpenDialog_data.status],1
326
	je	.1
327
	ret
328
.1:
329
; prepare for PathShow
330
	push	dword PathShow_data_1
331
	call	[PathShow_prepare]
31 halyavin 332
 
1611 mario79 333
	call	draw_PathShow
334
;---------------------------------------------------------------------
7937 leency 335
.2:
3271 mario79 336
	xor	eax, eax
337
	mov	ebx, read_info
338
	mov	dword [ebx], eax	; subfunction: read
339
	mov	dword [ebx+4], eax	; offset (low dword)
340
	mov	dword [ebx+8], eax	; offset (high dword)
341
	mov	dword [ebx+12], 40     ; read colors file: 4*10 bytes
342
	mov	dword [ebx+16], color_table ; address
343
	mcall	70
344
	ret
1611 mario79 345
;---------------------------------------------------------------------
346
load_skin_file:
347
;---------------------------------------------------------------------
348
; invoke OpenDialog
3271 mario79 349
	push	dword OpenDialog_data2
350
	call	[OpenDialog_Start]
1611 mario79 351
	cmp	[OpenDialog_data2.status],1
352
	je	.1
353
	ret
354
.1:
355
; prepare for PathShow
356
	push	dword PathShow_data_2
357
	call	[PathShow_prepare]
31 halyavin 358
 
1611 mario79 359
	call	draw_PathShow
360
;---------------------------------------------------------------------
361
.2:
3271 mario79 362
	xor	eax,eax
363
	mov	ebx,read_info2
364
	mov	dword [ebx], eax	; subfunction: read
365
	mov	dword [ebx+4], eax	; offset (low dword)
366
	mov	dword [ebx+8], eax	; offset (high dword)
367
	mov	dword [ebx+12], 32*1024 ; read: max 32 KBytes
368
	mov	dword [ebx+16], file_load_area ; address
369
	mcall	70
31 halyavin 370
 
3271 mario79 371
	mov	esi, file_load_area
179 mikedld 372
 
3271 mario79 373
	cmp	dword [esi], 'KPCK'
374
	jnz	notpacked
31 halyavin 375
 
3271 mario79 376
	cmp	dword [esi+4], 32*1024 ; max 32 KBytes
377
	ja	doret
51 mikedld 378
 
3271 mario79 379
	push	unpack_area
380
	push	esi
381
	call	unpack
382
	mov	esi,unpack_area
383
;--------------------------------------
384
notpacked:
385
 	cmp	[esi+SKIN_HEADER.ident],dword 'SKIN'
386
 	jne	doret
51 mikedld 387
 
3271 mario79 388
	mov	edi,not_packed_area
389
	mov	ecx,0x8000/4
390
	rep	movsd
51 mikedld 391
 
3271 mario79 392
	mov	ebp,not_packed_area
393
	mov	esi,[ebp+SKIN_HEADER.params]
394
	add	esi,ebp
395
	lea	esi,[esi+SKIN_PARAMS.dtp.data]
396
	mov	edi,color_table
397
	mov	ecx,10
398
	rep	movsd
399
;--------------------------------------
400
doret:
401
	ret
1611 mario79 402
;---------------------------------------------------------------------
403
save_file:
404
;---------------------------------------------------------------------
405
; invoke OpenDialog
406
	mov	[OpenDialog_data.type],dword 1
3271 mario79 407
	push	dword OpenDialog_data
408
	call	[OpenDialog_Start]
1611 mario79 409
	cmp	[OpenDialog_data.status],1
410
	je	.1
411
	ret
412
.1:
413
; prepare for PathShow
414
	push	dword PathShow_data_1
415
	call	[PathShow_prepare]
31 halyavin 416
 
1611 mario79 417
	call	draw_PathShow
418
;---------------------------------------------------------------------
3271 mario79 419
	xor	eax,eax
420
	mov	ebx,write_info
421
	mov	[ebx],dword 2			; subfunction: write
422
	and	[ebx+4],eax			; (reserved)
423
	and	[ebx+8],eax			; (reserved)
424
	mov	[ebx+12],dword 10*4		; bytes to write
425
	mov	[ebx+16],dword color_table	; address
426
	mcall	70
427
	ret
1611 mario79 428
;---------------------------------------------------------------------
3435 mario79 429
draw_button_row:
430
	mov	edx,0x60000000 + 31		; BUTTON ROW
431
	mov	ebx,220*65536+14
432
	mov	ecx,10*65536+14
433
	mov	eax,8
434
;-----------------------------------
435
.newb:
436
	mcall
437
	add	ecx,20*65536
438
	inc	edx
439
	cmp	edx,0x60000000 + 40
440
	jbe	.newb
3271 mario79 441
	ret
3435 mario79 442
;---------------------------------------------------------------------
443
draw_button_row_of_texts:
444
	mov	ebx,240*65536+13	; ROW OF TEXTS
445
	mov	ecx,[w_work_text]
446
	mov	edx,text
447
	mov	esi,32
448
	mov	eax,4
449
;-----------------------------------
450
.newline:
451
	mcall
452
	add	ebx,20
453
	add	edx,32
454
	cmp	[edx],byte 'x'
455
	jne	.newline
456
	ret
457
;---------------------------------------------------------------------
31 halyavin 458
draw_colours:
3271 mario79 459
	pusha
460
	mov	esi,color_table
3435 mario79 461
	mov	ebx,220*65536+14
462
	mov	ecx,10*65536+14
463
	mov	eax,13
3472 mario79 464
	mov	[frame_data.draw_text_flag],dword 0
3271 mario79 465
;--------------------------------------
466
newcol:
467
	mov	edx,[esi]
3435 mario79 468
	mcall
3472 mario79 469
 
470
	push	ebx ecx
471
 
472
	sub	ebx,2 shl 16
473
	add	bx,4
474
	sub	ecx,2 shl 16
475
	add	cx,4
476
 
477
	mov	[frame_data.x],ebx
478
	mov	[frame_data.y],ecx
479
 
480
	push	dword frame_data
481
	call	[Frame_draw]
482
 
483
	pop	ecx ebx
484
 
3435 mario79 485
	add	ecx,20*65536
3271 mario79 486
	add	esi,4
3435 mario79 487
	cmp	esi,color_table+4*9
3271 mario79 488
	jbe	newcol
31 halyavin 489
 
3271 mario79 490
	popa
491
	ret
2068 mario79 492
;----------------------------------------------------------------------
1611 mario79 493
draw_PathShow:
494
	pusha
3435 mario79 495
	mcall	13,,,0xffffff
496
	mcall	13,,,0xffffff
1611 mario79 497
; draw for PathShow
498
	push	dword PathShow_data_1
499
	call	[PathShow_draw]
500
 
501
	push	dword PathShow_data_2
502
	call	[PathShow_draw]
503
	popa
504
	ret
505
;---------------------------------------------------------------------
31 halyavin 506
;   *********************************************
507
;   *******  WINDOW DEFINITIONS AND DRAW ********
508
;   *********************************************
509
draw_window:
2068 mario79 510
	mcall	12,1
511
	mcall	48,3,app_colours,10*4
512
	mcall	14
3435 mario79 513
	mcall	48,4
514
	mov	[current_skin_high],eax
2068 mario79 515
; DRAW WINDOW
516
	xor	eax,eax		; function 0 : define and draw window
517
	xor	esi,esi
518
	mov	edx,[w_work]	; color of work area RRGGBB,8->color
3435 mario79 519
	or	edx,0x34000000
520
	mov	ecx,50 shl 16 + 346
521
	add	ecx,[current_skin_high]
522
	mcall	,<110,440>,,,,title
31 halyavin 523
 
2068 mario79 524
	mcall	9,procinfo,-1
525
 
526
	mov	eax,[procinfo+70] ;status of window
527
	test	eax,100b
528
	jne	.end
3271 mario79 529
 
3435 mario79 530
;if lang eq ru
51 mikedld 531
  load_w  = (5*2+6*9)
532
  save_w  = (5*2+6*9)
533
  flat_w  = (5*2+6*7)
534
  apply_w = (5*2+6*9)
3435 mario79 535
;else
536
;  load_w  = (5*2+6*6)
537
;  save_w  = (5*2+6*8)
538
;  flat_w  = (5*2+6*4)
539
;  apply_w = (5*2+6*7)
540
;end if
541
;-----------------------------------
542
; select color DTP frame
543
; LOAD BUTTON	; button 12
6033 leency 544
	mcall	8,,,12,[w_work_button]
2068 mario79 545
; SAVE BUTTON
546
	add	ebx,(load_w+2)*65536-load_w+save_w
547
	inc	edx
3435 mario79 548
	mcall		; button 13
549
; APPLY BUTTON
550
	mov	ebx,(frame_1.x + frame_1.width - apply_w - 15)*65536+apply_w
551
	mcall	8,,,16	; button 17
552
; select color DTP button text
6033 leency 553
	mcall	4,,[w_work_button_text],t1,t1.size
3435 mario79 554
;-----------------------------------
555
; select skin frame
556
; LOAD SKIN BUTTON	; button 17
6033 leency 557
	mcall	8,,,17,[w_work_button]
2068 mario79 558
; 3D
3435 mario79 559
	mov	ebx,(frame_2.x+155)*65536+34
560
	mcall	,,,14	; button 14
2068 mario79 561
; FLAT
3435 mario79 562
	add	ebx,36*65536-34+flat_w
2068 mario79 563
	inc	edx
3435 mario79 564
	mcall		; button 15
2068 mario79 565
; APPLY SKIN BUTTON
3435 mario79 566
	mov	ebx,(frame_2.x + frame_2.width - apply_w -15)*65536+apply_w
567
	mcall	,,,18		; button 18
568
; select skin button text
6033 leency 569
	mcall	4,,[w_work_button_text],t2,t2.size
3435 mario79 570
;-----------------------------------
571
	call	draw_button_row
572
	call	draw_button_row_of_texts
573
	call	draw_colours
2068 mario79 574
;-----------------------------------
3472 mario79 575
	mov	[frame_data.x],dword frame_1.x shl 16+frame_1.width
576
	mov	[frame_data.y],dword frame_1.y shl 16+frame_1.height
577
	mov	[frame_data.text_pointer],dword select_dtp_text
578
	mov	eax,[w_work]
579
	mov	[frame_data.font_backgr_color],eax
580
	mov	eax,[w_work_text]
581
	mov	[frame_data.font_color],eax
582
	mov	[frame_data.draw_text_flag],dword 1
583
 
584
	push	dword frame_data
585
	call	[Frame_draw]
586
;-----------------------------------
587
	mov	[frame_data.x],dword frame_2.x shl 16+frame_2.width
588
	mov	[frame_data.y],dword frame_2.y shl 16+frame_2.height
589
	mov	[frame_data.text_pointer],dword select_skin_text
31 halyavin 590
 
3472 mario79 591
	push	dword frame_data
592
	call	[Frame_draw]
2068 mario79 593
;-----------------------------------
3435 mario79 594
	call	draw_PathShow
595
;-----------------------------------
2068 mario79 596
	cmp	dword[not_packed_area+SKIN_HEADER.ident],'SKIN'
597
	jne	@f
598
	call	draw_skin
599
@@:
600
.end:
601
	mcall	12,2
602
	ret
3435 mario79 603
;-----------------------------------------------------------------------------
604
include 'drawskin.inc'
605
;-----------------------------------------------------------------------------
31 halyavin 606
; DATA AREA
3435 mario79 607
;-----------------------------------------------------------------------------
608
include 'idata.inc'
609
;-----------------------------------------------------------------------------
610
IM_END:
611
;-----------------------------------------------------------------------------
612
include 'udata.inc'
613
;-----------------------------------------------------------------------------
31 halyavin 614
I_END:
3435 mario79 615
;-----------------------------------------------------------------------------