Subversion Repositories Kolibri OS

Rev

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