Subversion Repositories Kolibri OS

Rev

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