idbChange	equ 2
idbCreate	equ 3
idbLeft 	equ 4
idbRight	equ 5
idbCancel	equ 1

DlgAdd:
DlgProp:

	mov	eax,[SelIcon]
	mov	[DlgSelIcon],eax
	cmp	eax,-1
	jne	SetProp

    ;-----------
	mov	eax,[MouseX]
	mov	ebx,[MouseY]

	cmp	ax,[wsX]
	jae	@f
	mov	ax,[wsX]
      @@:

	cmp	bx,[wsY]
	jae	@f
	mov	bx,[wsY]
      @@:			    ;eax,ebx - ॠ«ì­ ï ª®®à¤¨­ â . ‚ᥠª®®à¤¨­ âë ¢ ¯à®£¥ ®â­®á¨â¥«ì­® «¥¢®£® ¢¥àå­¥£® 㣫  à ¡®ç¥© ®¡« áâ¨

	xor	edx,edx
	mov	dx,[wsXe]
	sub	edx,ICON_SIZE
	cmp	eax,edx
	jbe	@f
	mov	eax,edx
      @@:

	mov	dx,[wsYe]
	sub	edx,ICON_SIZE
	cmp	ebx,edx
	jbe	@f
	mov	ebx,edx
      @@:

	xor	edx,edx 	     ;¯à¥®¡à §®¢ë¢ ¥¬ ¢ ®â­®á¨â¥«ì­ë¥
	mov	dx,[wsW]
	shr	edx,1
	add	dx,[wsX]
	cmp	eax,edx
	jbe	@f
	sub	ax,[wsXe]
	inc	ax
	jmp	.dlg1
      @@:
	sub	ax,[wsX]
    .dlg1:

	xor	edx,edx
	mov	dx,[wsH]
	shr	edx,1
	add	dx,[wsY]
	cmp	ebx,edx
	jbe	@f
	sub	bx,[wsYe]
	inc	bx
	jmp	.dlg2
      @@:
	sub	bx,[wsY]
    .dlg2:

	mov	[AddX],eax
	mov	[AddY],ebx
    ;-----------

	mov	ecx,NAME_LENGTH
	mov	edi,DAreaName
	xor	al,al
	rep	stosb
	mov	dword[edtName.size],0
	mov	dword[edtName.pos],0

	mov	ecx,256
	mov	edi,DAreaPath
	rep	stosb
	mov	dword[edtExePath.size],0
	mov	dword[edtExePath.pos],0

	mov	ecx,256
	mov	edi,DAreaParams
	rep	stosb
	mov	dword[edtParams.size],0
	mov	dword[edtParams.pos],0

	mov	ecx,256
	mov	edi,DAreaIcon
	rep	stosb
	mov	dword[edtIcon.size],0
	mov	dword[edtIcon.pos],0

	jmp	startDlg
    ;--------
SetProp:
	mov	esi,[IconsOffs+eax*4]
	mov	edi,DAreaName
	xor	ecx,ecx
     @@:
	lodsb
	stosb
	inc	ecx
	test	al,al
	jnz	@b
	dec	ecx
	mov	dword[edtName.size],ecx
	mov	dword[edtName.pos],ecx

	xor	ecx,ecx
	mov	edi,DAreaPath
     @@:
	lodsb
	stosb
	inc	ecx
	test	al,al
	jnz	@b
	dec	ecx
	mov	dword[edtExePath.size],ecx
	mov	dword[edtExePath.pos],ecx

	xor	ecx,ecx
	mov	edi,DAreaParams
     @@:
	lodsb
	stosb
	inc	ecx
	test	al,al
	jnz	@b
	dec	ecx
	mov	dword[edtParams.size],ecx
	mov	dword[edtParams.pos],ecx

	xor	ecx,ecx
	mov	edi,DAreaIcon
     @@:
	lodsb
	stosb
	inc	ecx
	test	al,al
	jnz	@b
	dec	ecx
	mov	dword[edtIcon.size],ecx
	mov	dword[edtIcon.pos],ecx


startDlg:
	mcall	9,RBProcInfo,-1
	mcall	18,21,dword[RBProcInfo+30]
	mov	[slotDlgAdd],eax

	or	[edtName.flags],ed_focus

	mcall	40,100111b	;SetMaskMessage 100111b
	xor	eax,eax
	mov	dword[MaxPage],0
      @@:
	add	eax,ICONS_DRAW_COUNTW
	inc	dword[MaxPage]
	cmp	eax,[icon_count]
	jb	@b
	dec	dword[MaxPage]
	cmp	dword[MaxPage],0
	jne	@f
	mov	dword[MaxPage],1
      @@:

DReDraw:
	mcall	48,3,sc,40

	mov	eax,[sc.work]
	rol	eax,16
	add	al,9
	jnc	@f
	mov	al,0FFh
      @@:
	rol	eax,16
	add	al,9
	jnc	@f
	mov	al,0FFh
      @@:
	add	ah,9
	jnc	@f
	mov	ah,0FFh
      @@:

	mov	[sbIcons.bckg_col],eax
	m2m	[sbIcons.frnt_col],[sc.work]
	m2m	[sbIcons.line_col],[sc.work_graph]

	;edit_boxes_set_sys_color edtIcon,endEdits,sc
	edit_boxes_set_sys_color edtName,endEdits,sc
	
	m2m	[edtIcon.color],[sc.work]
	m2m	[edtIcon.blur_border_color],[sc.work]

	call	DRedrawWin

DMessages:
	mcall	10		;WaitMessage

	dec	eax
	jz	DReDraw
	dec	eax
	jz	DKey
	dec	eax
	jz	DButton
	sub	eax,3
	jz	DMouse

	jmp  DMessages


;---------------------------------------------------------------------
DKey:
	mcall	2		;GetKeyPressed
	cmp	ah,1Bh
	je	DExit
	cmp	ah,9  ;Tab
	je	DNextEdit
	stdcall [edit_box_key],edtName
	stdcall [edit_box_key],edtExePath
	stdcall [edit_box_key],edtParams
	;stdcall [edit_box_key],edtIcon

	jmp	DMessages


DNextEdit:
	test	[edtName.flags],ed_focus
	jne	 .DNE1
	test	[edtExePath.flags],ed_focus
	jne	 .DNE2
	test	[edtParams.flags],ed_focus
	jne	 .DNE3
	;test    [edtIcon.flags],ed_focus
	;jne      .DNE4
	jmp	DMessages

    .DNE1:
	and	[edtName.flags],not ed_focus
	or	[edtExePath.flags],ed_focus
	stdcall [edit_box_draw],edtName
	stdcall [edit_box_draw],edtExePath
	jmp	DMessages

    .DNE2:
	and	[edtExePath.flags],not ed_focus
	or	[edtParams.flags],ed_focus
	stdcall [edit_box_draw],edtExePath
	stdcall [edit_box_draw],edtParams
	jmp	DMessages

    .DNE3:
	and	[edtParams.flags],not ed_focus
	or	[edtName.flags],ed_focus
	stdcall [edit_box_draw],edtParams
	stdcall [edit_box_draw],edtName
	jmp	DMessages

    ;.DNE4:
    ;    and     [edtIcon.flags],not ed_focus
    ;    or      [edtName.flags],ed_focus
    ;    stdcall [edit_box_draw],edtName
    ;    stdcall [edit_box_draw],edtIcon
    ;    jmp     DMessages
;---------------------------------------------------------------------
DButton:
	mcall	17		;GetButtonPressed
	cmp	ah, idbCancel
	je	DExit
	cmp	ah,idbChange
	je	DSetExePath
	cmp	ah,idbCreate
	je	DSaveIcon

	jmp	DMessages
;-------------------------------------------------------------------------------
DMouse:
	stdcall [edit_box_mouse],edtName
	stdcall [edit_box_mouse],edtExePath
	stdcall [edit_box_mouse],edtParams
;        stdcall [edit_box_mouse],edtIcon

	push	[sbIcons.position]
	stdcall [scrollbar_h_mouse],sbIcons
	pop	eax
	cmp	eax,[sbIcons.position]
	je	@f
	call	DrawStdIcons
      @@:

	mcall	37,2		;GetMouseKey
	test	eax,1
	jz	DMessages
	mcall	37,1		;GetMouseWinPos

	test	eax,10001000h
	jne	DMessages
	xor	edx,edx
	mov	dx,ax	  ;y
	shr	eax,16	  ;x

	sub	eax,ICONSX
	js	DMessages
	sub	edx,ICONSY
	js	DMessages

	cmp	eax,(IMG_SIZE+SPCW)*ICONS_DRAW_COUNTW-SPCW
	ja	DMessages
	cmp	edx,(IMG_SIZE+SPCH)*ICONS_DRAW_COUNTH-SPCH
	ja	DMessages

	xor	ebx,ebx
	mov	ecx,[sbIcons.position]
	test	ecx,ecx
	jz	.DM
     @@:
	add	ebx,ICONS_DRAW_COUNTH
	loop	@b
     .DM:

	sub	eax,IMG_SIZE+SPCW
	js     .DM1
     @@:
	add	ebx,ICONS_DRAW_COUNTH
	sub	eax,IMG_SIZE+SPCW
	jns	@b
     .DM1:


	sub	edx,IMG_SIZE+SPCH
	js     .DM2
     @@:
	inc	ebx
	sub	edx,IMG_SIZE+SPCH
	jns	@b
     .DM2:

	mov	eax,ebx

	cmp	eax,[icon_count]
	jae	DMessages

	mov	bl,10
	div	bl

	add	ah,30h
	test	al,al
	jz	@f

	add	al,30h
	mov	byte[DAreaIcon],al
	mov	byte[DAreaIcon+1],ah
	mov	byte[DAreaIcon+2],0
	mov	dword[edtIcon.size],2
	jmp	.RedrawNum

      @@:
	mov	byte[DAreaIcon],ah
	mov	byte[DAreaIcon+1],0
	mov	dword[edtIcon.size],1
	jmp	.RedrawNum
    .RedrawNum:
	
    ; stdcall [edit_box_draw],edtIcon

	; need to optimize redraw
	; call	DrawSelIcon
	; jmp	DMessages
	jmp	DReDraw
;-------------------------------------------------------------------------------
DSetExePath:
	stdcall [OpenDialog_Start],OpenDialog_data
	mov	edi,DAreaPath
	xor	al,al
	or	ecx,-1
	repne	scasb
	sub	edi,DAreaPath
	dec	edi
	mov	dword[edtExePath+12*4],edi

	jmp	DMessages;DReDraw;

DSaveIcon:
	mov	edi,DAreaName
	mov	esi,secRButt
    @@: lodsb
	scasb
	jne	@f
	test	al,al
	jnz	@b

	mov	dword[fiRunProg+8],ErrName
	mov	dword[fiRunProg+21],pthNotify
	mcall	70,fiRunProg

	jmp	DMessages
    @@:
	mov	dword[fiRunProg+8],WarningSave
	mov	dword[fiRunProg+21],pthNotify
	mcall	70,fiRunProg


	cmp	[DlgSelIcon],-1
	je	@f

	stdcall EditIcon,[DlgSelIcon],DAreaIcon,DAreaName,DAreaPath,DAreaParams
	mov	ebx,[DlgSelIcon]
	mov	eax,[IconsID+ebx*4]
	jmp	DExitAndSave
     @@:

	call	GenerateID

	mov	ebx,[MaxNumIcon]
	mov	[IconsID+ebx*4],eax
	push	eax
	stdcall AddIcon,[AddX],[AddY],DAreaIcon,DAreaName,DAreaPath,DAreaParams
	pop	eax

;-------------------------------------------------------------------------------
DExitAndSave:

	mov	dword[nameSection],eax
	stdcall [ini_set_str],IconIni,nameSection,keyName,DAreaName,dword[edtName.size]
	stdcall [ini_set_str],IconIni,nameSection,keyPath,DAreaPath,dword[edtExePath.size]
	stdcall [ini_set_str],IconIni,nameSection,keyParams,DAreaParams,dword[edtParams.size]
	stdcall [ini_set_str],IconIni,nameSection,keyIco,DAreaIcon,dword[edtIcon.size]

	cmp	[DlgSelIcon],-1
	jne	@f
	stdcall [ini_set_int],IconIni,nameSection,keyX,[MouseX]
	stdcall [ini_set_int],IconIni,nameSection,keyY,[MouseY]
      @@:
DExit:
	mov	[DlgAddActiv],0
	mov	[slotDlgAdd],0
	mcall	-1		;ExitThread

;##################################################################
proc DRedrawWin
	mcall	12,1		;RedrawWinBeg
	mov	edx,[sc.work]
	or	edx,34000000h
	cmp	[DlgSelIcon],-1
	jne	 @f
	mov	edi,DTitleAdd
	jmp	.l1
      @@:
	mov	edi,DTitleProp
      .l1:
	mcall	0,<100,400>,<100,(IMG_SIZE+SPCH)*ICONS_DRAW_COUNTH+165>,,,

	stdcall [edit_box_draw],edtName
	stdcall [edit_box_draw],edtExePath
	stdcall [edit_box_draw],edtParams
    stdcall [edit_box_draw],edtIcon

	call	DrawStdIcons


	stdcall [scrollbar_h_draw],sbIcons
	mcall	38,<ICONSX+1,END_ICONS_AREAW-2>,\
		   <END_ICONS_AREAH+3,END_ICONS_AREAH+3>,\
		[sc.work_graph]
	mcall	  ,<ICONSX+1,END_ICONS_AREAW-2>,\
		   <END_ICONS_AREAH+3+15,END_ICONS_AREAH+3+15>,\
		[sc.work_graph]

	mcall	  ,<ICONSX,ICONSX>,\
		   <END_ICONS_AREAH+3+1,END_ICONS_AREAH+3+15-1>,\
		[sc.work_graph]
	mcall	  ,<END_ICONS_AREAW-1,END_ICONS_AREAW-1>,\
		   <END_ICONS_AREAH+3+1,END_ICONS_AREAH+3+15-1>,\
		[sc.work_graph]

				  ;BUTTONS
	mcall	8,<250,49>,<30+END_ICONS_AREAH,16>,idbCreate,[sc.work_button]
	mcall	 ,<305,54>,			  ,idbCancel
	mcall	 ,<351,14>,<26,14>	       ,idbChange

				  ;CAPTIONS
	mov	ecx,[sc.work_text]
	or	ecx,80000000h
	mcall	4,<30+IMG_SIZE,10>,,DCaptName
	mcall	 ,<30+IMG_SIZE,30>,,DCaptPath
	mcall	 ,<30+IMG_SIZE,50>,,DCaptParams
	;mcall    ,<30+IMG_SIZE,70>,,DCaptIcon

if lang eq ru
	mov	ecx,[sc.work_button_text]
	or	ecx,80000000h
	mcall	 ,<309,35+END_ICONS_AREAH>,,DCaptCancel

	cmp	[DlgSelIcon],-1
	jne	@f
	mpack	ebx,255,35+END_ICONS_AREAH
	mov	edx,DCaptCreate
	jmp	.DRD1
      @@:
	mpack	ebx,252,35+END_ICONS_AREAH
	mov	edx,DCaptProperties
     .DRD1:
else
	mov	ecx,[sc.work_button_text]
	or	ecx,80000000h
	mcall	 ,<315,35+END_ICONS_AREAH>,,DCaptCancel


	cmp	[DlgSelIcon],-1
	jne	@f
	mpack	ebx,257,35+END_ICONS_AREAH
	mov	edx,DCaptCreate
	jmp	.DRD1
      @@:
	mpack	ebx,257,35+END_ICONS_AREAH
	mov	edx,DCaptProperties
     .DRD1:
end if
	mcall

	mcall	1,351+4  ,26+10,[sc.work_button_text]
	mcall	 ,351+4+3,26+10,
	mcall	 ,351+4+6,26+10,

	call DrawSelIcon

	mcall	12,2		;RedrawWinEnd
	ret
endp


proc DrawStdIcons
local IcoX:DWORD,\
      IcoY:DWORD,\
      iIcon:DWORD

	mov	ecx,[sbIcons.position]
	xor	eax,eax
	m2m	dword[iIcon],0

	test	ecx,ecx
	jz	.DST1
     @@:
	add	[iIcon],ICONS_DRAW_COUNTH
	add	eax,IMG_SIZE*IMG_SIZE*4*ICONS_DRAW_COUNTH
	loop	@b
   .DST1:

	lea	esi,[eax+44]
	add	esi,[raw_pointer]

	mov	[IcoX],ICONSX

	mov	ecx,ICONS_DRAW_COUNTW
  .DrawIcons:
	push	ecx

	mov	[IcoY],ICONSY

	mov	ecx,ICONS_DRAW_COUNTH
  .DrawIcoStolb:
	push	ecx

	mov	edi,DlgBufImg
	mov	edx,IMG_SIZE

    .DrawLine:


	mov	ecx,IMG_SIZE
     .DrawPix:

	lodsd
	test	eax,0FF000000h
	jnz	@f
	mov	eax,[sc.work]
     @@:

	mov	[edi],ax
	shr	eax,16
	mov	[edi+2],al
	add	edi,3

	loop	.DrawPix

	dec	edx
	jnz    .DrawLine

	mov	edx,[IcoX]
	shl	edx,16
	mov	dx,word[IcoY]
	mcall	7,DlgBufImg,<IMG_SIZE,IMG_SIZE>

	inc	[iIcon]
	mov	eax,[iIcon]
	cmp	eax,[icon_count]
	jae	.endDrawIcon

	add	dword[IcoY],IMG_SIZE+SPCH
	pop	ecx
	loop	.DrawIcoStolb

	add	dword[IcoX],IMG_SIZE+SPCW
	pop	ecx
	loop	.DrawIcons
	jmp	.endProc

    .endDrawIcon:

	mov	ecx,IMG_SIZE*IMG_SIZE
	mov	edi,DlgBufImg
	mov	eax,[sc.work]
	mov	ebx,eax
	shr	ebx,16
     @@:
	mov	word[edi],ax
	mov	[edi+2],bl
	add	edi,3
	loop	@b

				     ;§ â¨à ­¨¥ ­¥ ¨á¯®«ì§®¢ ­ëå ¬¥áâ
	jmp	.Dalee

  .DrawIcons2:
	push	ecx

	mov	[IcoY],ICONSY
	mov	ecx,ICONS_DRAW_COUNTH
  .DrawIcoStolb2:
	push	ecx

	mov	edx,[IcoX]
	shl	edx,16
	mov	dx,word[IcoY]
	mcall	7,DlgBufImg,<IMG_SIZE,IMG_SIZE>

     .Dalee:
	add	dword[IcoY],IMG_SIZE+SPCH
	pop	ecx
	loop	.DrawIcoStolb2

	add	dword[IcoX],IMG_SIZE+SPCW
	pop	ecx
	loop	.DrawIcons2

   .endProc:

	ret
endp

proc DrawSelIcon
	mov	edi,DAreaIcon
	cmp	byte[edi],0
	jne	@f
	ret
      @@:

	mov	al,[edi]
	cmp	al,'9'
	ja	.PathToIcon
	cmp	al,'/'
	jne	.GetIconInd
   .PathToIcon:
	mov	al,30h		 ;§ £«ã誠!!!!!!!!!!!!!
	mov	byte[edi+1],0
   .GetIconInd:
;int3
	sub	al,30h
	cmp	byte[edi+1],0
	je	@f
	shl	eax,1
	lea	eax,[eax*4+eax]
	xor	edx,edx
	mov	dl,[edi+1]
	sub	dl,30h
	add	eax,edx
     @@:	     ;eax=num icon
	cmp	eax,[icon_count]
	jb	@f
	xor	eax,eax
     @@:
	test	eax,eax
	je	.DI1
	mov	ecx,eax
	xor	eax,eax
      @@:
	add	eax,IMG_SIZE*IMG_SIZE*4
	loop	@b
     .DI1:
	mov	esi,eax
	add	esi,[raw_pointer]
	add	esi,44

	mov	edi,DlgBufImg
	mov	edx,IMG_SIZE
    .DrawLine:

	mov	ecx,IMG_SIZE
     .DrawPix:

	lodsd
	test	eax,0FF000000h
	jnz	@f
	mov	eax,[sc.work]
     @@:

	mov	word[edi],ax
	shr	eax,16
	mov	[edi+2],al
	add	edi,3

	loop	.DrawPix

	dec	edx
	jnz	.DrawLine

	mcall	7,DlgBufImg,<IMG_SIZE,IMG_SIZE>,<15,15>

	ret
endp