0,0 → 1,294 |
|
sz s_defname,'Untitled',0 |
|
;----------------------------------------------------------------------------- |
func flush_cur_tab ;////////////////////////////////////////////////////////// |
;----------------------------------------------------------------------------- |
; EBP = TABITEM* |
;----------------------------------------------------------------------------- |
push ecx esi edi |
mov esi,cur_tab |
mov edi,[tab_bar.Current.Ptr] |
mov ecx,sizeof.TABITEM/4 |
cld |
rep movsd |
pop edi esi ecx |
ret |
endf |
|
;----------------------------------------------------------------------------- |
func set_cur_tab ;//////////////////////////////////////////////////////////// |
;----------------------------------------------------------------------------- |
; EBP = TABITEM* |
;----------------------------------------------------------------------------- |
push ecx esi edi |
cmp [tab_bar.Current.Ptr],0 |
je @f |
call flush_cur_tab |
@@: mov esi,ebp |
mov edi,cur_tab |
mov ecx,sizeof.TABITEM/4 |
rep movsd |
mov [tab_bar.Current.Ptr],ebp |
call update_caption |
pop edi esi ecx |
ret |
endf |
|
;----------------------------------------------------------------------------- |
func create_tab ;///////////////////////////////////////////////////////////// |
;----------------------------------------------------------------------------- |
push eax ecx esi edi |
|
inc [tab_bar.Items.Count] |
imul ebx,[tab_bar.Items.Count],sizeof.TABITEM |
mov eax,[tab_bar.Items] |
mov ecx,eax |
call mem.ReAlloc |
mov [tab_bar.Items],eax |
sub ecx,eax |
sub [tab_bar.Current.Ptr],ecx |
lea ebp,[eax+ebx-sizeof.TABITEM] |
call set_cur_tab |
|
mov eax,1024 |
call mem.Alloc |
mov [cur_tab.Editor.Data],eax |
mov [cur_tab.Editor.Lines],1 |
mov [cur_tab.Editor.Columns],1 |
xor eax,eax |
mov [cur_tab.Editor.TopLeft.X],eax |
mov [cur_tab.Editor.TopLeft.Y],eax |
mov [cur_tab.Editor.Caret.X],eax |
mov [cur_tab.Editor.Caret.Y],eax |
mov [cur_tab.Editor.SelStart.X],eax |
mov [cur_tab.Editor.SelStart.Y],eax |
mov edi,[cur_tab.Editor.Data] |
add edi,4 |
mov ecx,10 |
mov [edi-4],ecx |
mov [edi+10],eax |
mov al,' ' |
cld |
rep stosb |
|
mov esi,s_defname |
mov edi,cur_tab.Editor.FilePath |
mov ecx,s_defname.size |
rep movsb |
mov [cur_tab.Editor.FileName],0 |
|
mov [f_info.length],0 |
mov [cur_tab.Editor.Modified],0 |
mov [cur_tab.Editor.AsmMode],0 |
|
call flush_cur_tab |
call update_caption |
call drawwindow |
|
mov ebp,cur_tab |
pop edi esi ecx eax |
ret |
endf |
|
;----------------------------------------------------------------------------- |
func delete_tab ;///////////////////////////////////////////////////////////// |
;----------------------------------------------------------------------------- |
ret |
endf |
|
;----------------------------------------------------------------------------- |
func get_tab_size ;/////////////////////////////////////////////////////////// |
;----------------------------------------------------------------------------- |
; EBP = TABITEM* |
;----------------------------------------------------------------------------- |
push eax |
cmp [tab_bar.Style],3 |
jae .lp1 |
lea eax,[ebp+TABITEM.Editor.FilePath] |
add eax,[ebp+TABITEM.Editor.FileName] |
call strlen |
imul ebx,eax,6 |
add ebx,9 |
jmp .lp2 |
.lp1: call get_max_tab_width |
mov ebx,eax |
.lp2: mov ecx,TBARH-1 |
pop eax |
ret |
endf |
|
;----------------------------------------------------------------------------- |
func draw_tabctl ;//////////////////////////////////////////////////////////// |
;----------------------------------------------------------------------------- |
|
mov ebx,[tab_bar.Bounds.Left-2] |
mov bx,word[tab_bar.Bounds.Right] |
sub bx,word[tab_bar.Bounds.Left] |
inc ebx |
mov ecx,[tab_bar.Bounds.Top-2] |
mov cx,word[tab_bar.Bounds.Bottom] |
sub cx,word[tab_bar.Bounds.Top] |
inc ecx |
mov edx,[cl_3d_normal] |
call draw_framerect |
|
mov al,[tab_bar.Style] |
dec al |
jz .tabs_on_top |
dec al |
jz .tabs_on_bottom |
dec al |
jz .tabs_on_left |
dec al |
jz .tabs_on_right |
ret |
|
.tabs_on_top: |
add ebx,1*65536-2 |
mov ecx,[tab_bar.Bounds.Top-2] |
xor cx,cx |
add ecx,1*65536+TBARH |
mcall 13 |
add ecx,(TBARH-2)*65536-(TBARH-3) |
mov edx,[cl_3d_inset] |
call draw_framerect |
ret |
|
.tabs_on_bottom: |
add ebx,1*65536-2 |
mov ecx,[tab_bar.Bounds.Bottom-2] |
xor cx,cx |
add ecx,-TBARH*65536+TBARH |
mcall 13 |
mov cx,1 |
mcall ,,,[sc.work] |
add ecx,-1*65536+2;-(TBARH-3) |
mov edx,[cl_3d_inset] |
call draw_framerect |
|
mov ecx,[tab_bar.Items.Count] |
mov ebp,[tab_bar.Items] |
mov esi,[tab_bar.Bounds.Left] |
inc esi |
mov edi,[tab_bar.Bounds.Bottom] |
add edi,-TBARH+1 |
@@: push ecx |
|
call get_tab_size |
rol ebx,16 |
mov bx,si |
rol ebx,16 |
rol ecx,16 |
mov cx,di |
rol ecx,16 |
mov edx,[cl_3d_inset] |
call draw_framerect |
|
cmp ebp,[tab_bar.Current.Ptr] |
jne .lp1 |
push ebx ecx |
add ebx,1*65536-2 |
dec ecx |
mcall 13,,,[sc.work] |
pop ecx ebx |
.lp1: |
pushad |
lea eax,[ebp+TABITEM.Editor.FilePath] |
add eax,[ebp+TABITEM.Editor.FileName] |
mov edx,eax |
call strlen |
mov esi,eax |
shr ecx,16 |
mov bx,cx |
add ebx,0x00050005 |
mcall 4,,0x00000000 |
popad |
|
movzx ebx,bx |
lea esi,[esi+ebx+1] |
add ebp,sizeof.TABITEM |
|
pop ecx |
dec ecx |
jnz @b |
|
ret |
|
.tabs_on_left: |
call get_max_tab_width |
mov ebx,[tab_bar.Bounds.Left-2] |
mov bx,ax |
add ebx,1*65536 |
add ecx,1*65536-2 |
push eax |
mcall 13 |
pop eax |
add eax,-2 |
shl eax,16 |
add ebx,eax |
mov bx,3 |
mov edx,[cl_3d_inset] |
call draw_framerect |
ret |
|
.tabs_on_right: |
call get_max_tab_width |
mov ebx,[tab_bar.Bounds.Right-2] |
mov bx,ax |
shl eax,16 |
sub ebx,eax |
add ecx,1*65536-2 |
mcall 13 |
add ebx,-1*65536 |
mov bx,3 |
mov edx,[cl_3d_inset] |
call draw_framerect |
ret |
endf |
|
func get_max_tab_width |
mov eax,100 |
ret |
endf |
|
func align_editor_in_tab |
m2m [cur_tab.Editor.Bounds.Left],[tab_bar.Bounds.Left] |
m2m [cur_tab.Editor.Bounds.Top],[tab_bar.Bounds.Top] |
m2m [cur_tab.Editor.Bounds.Right],[tab_bar.Bounds.Right] |
m2m [cur_tab.Editor.Bounds.Bottom],[tab_bar.Bounds.Bottom] |
|
inc [cur_tab.Editor.Bounds.Left] |
inc [cur_tab.Editor.Bounds.Top] |
dec [cur_tab.Editor.Bounds.Right] |
dec [cur_tab.Editor.Bounds.Bottom] |
|
mov al,[tab_bar.Style] |
dec al |
jz .tabs_on_top |
dec al |
jz .tabs_on_bottom |
dec al |
jz .tabs_on_left |
dec al |
jz .tabs_on_right |
ret |
|
.tabs_on_top: |
add [cur_tab.Editor.Bounds.Top],TBARH |
ret |
|
.tabs_on_bottom: |
sub [cur_tab.Editor.Bounds.Bottom],TBARH |
ret |
|
.tabs_on_left: |
call get_max_tab_width |
add [cur_tab.Editor.Bounds.Left],eax |
ret |
|
.tabs_on_right: |
call get_max_tab_width |
sub [cur_tab.Editor.Bounds.Right],eax |
ret |
endf |