From 51f79424338113d9db27ebd2b01e0e0d5007b46c Mon Sep 17 00:00:00 2001 From: rich2014 Date: Sun, 8 Oct 2023 23:47:15 +0800 Subject: [PATCH] Cocoa/TabControl: TCocoaTabControl.exttabMoveTabViewItem_toIndex() improved --- lcl/interfaces/cocoa/cocoatabcontrols.pas | 33 +++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/lcl/interfaces/cocoa/cocoatabcontrols.pas b/lcl/interfaces/cocoa/cocoatabcontrols.pas index 3d00161df6..5de7461536 100644 --- a/lcl/interfaces/cocoa/cocoatabcontrols.pas +++ b/lcl/interfaces/cocoa/cocoatabcontrols.pas @@ -103,6 +103,8 @@ type // lcl procedure exttabInsertTabViewItem_atIndex(lTabPage: NSTabViewItem; index: integer); message 'exttabInsertTabViewItem:atIndex:'; + procedure exttabMoveTabViewItem_toIndex(lTabPage: NSTabViewItem; NewIndex: integer); + message 'exttabMoveTabViewItem:toIndex:'; procedure exttabRemoveTabViewItem(lTabPage: NSTabViewItem); message 'exttabRemoveTabViewItem:'; function exttabIndexOfTabViewItem(lTabPage: NSTabViewItem): NSInteger; @@ -799,6 +801,37 @@ begin inherited mouseMoved(event); end; +procedure TCocoaTabControl.exttabMoveTabViewItem_toIndex( + lTabPage: NSTabViewItem; NewIndex: integer); +var + isMovingCurrentPage: Boolean; + OldIndex: Integer; +begin + if fulltabs.count=0 then + Exit; + if NewIndex > fulltabs.count then + NewIndex:= fulltabs.count; + + OldIndex := exttabIndexOfTabViewItem( lTabPage ); + isMovingCurrentPage := (OldIndex=currentIndex); + + fulltabs.removeObjectAtIndex( OldIndex ); + fulltabs.insertObject_atIndex( lTabPage, NewIndex ); + + if isMovingCurrentPage then begin + currentIndex:= NewIndex; + leftKeepAmount:= currentIndex - visibleLeftIndex; + selectTabViewItem( lTabPage ); + end else begin + if (OldIndexcurrentIndex) then + dec( currentIndex ) + else if (OldIndex>currentIndex) and (NewIndex<=currentIndex) then + inc( currentIndex ); + end; + + UpdateTabAndArrowVisibility( self ); +end; + procedure TCocoaTabControl.exttabInsertTabViewItem_atIndex( lTabPage:NSTabViewItem; index:integer ); begin