Subversion Repositories Kolibri OS

Rev

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