kolibrios-gitea/programs/system/icon_new/DlgAdd.inc
GerdtR f7d0d2b128 Changed the structure icon.ini. Now you can create icons with repetitive or empty names.
git-svn-id: svn://kolibrios.org@4336 a494cfbc-eb01-0410-851d-a64ba20cac60
2013-12-09 21:02:13 +00:00

726 lines
13 KiB
PHP

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 edtName,edtExePath,sc
edit_boxes_set_sys_color edtExePath,edtParams,sc
edit_boxes_set_sys_color edtParams,edtIcon,sc
;edit_boxes_set_sys_color edtIcon,endEdits,sc
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
call DrawSelIcon
jmp DReDraw;DMessages;
;-------------------------------------------------------------------------------
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