5252 }
5353class _TTkKodeTab (TTkTabWidget ):
5454 __slots__ = (
55- '_frameOverlay' ,'_baseWidget' )
55+ '_frameOverlay' ,'_baseWidget' ,
56+ #Signals
57+ 'kodeTabCloseRequested' )
5658 def __init__ (self , * ,
5759 baseWidget = None ,
5860 ** kwargs ) -> None :
61+ self .kodeTabCloseRequested = pyTTkSignal (_TTkKodeTab ,int )
5962 self ._baseWidget :TTkKodeTab = baseWidget
6063 self ._frameOverlay = None
6164 super ().__init__ (** kwargs )
6265 self .tabBarClicked .connect ( lambda i :self ._baseWidget .tabBarClicked .emit ( self , i , self .widget (i ), self .tabData (i )))
6366 self .currentChanged .connect ( lambda i :self ._baseWidget .currentChanged .emit ( self , i , self .widget (i ), self .tabData (i )))
64- self .tabCloseRequested .connect (lambda i :self ._baseWidget .tabCloseRequested .emit (self , i ))
65- self .tabCloseRequested .connect ( self ._kodeTabClosed )
67+ self .tabCloseRequested .connect (self ._handleTabCloseRequested )
68+
69+ def _handleTabCloseRequested (self , index ):
70+ self .kodeTabCloseRequested .emit (self ,index )
6671
6772 def _hasMenu (self ):
6873 return True if (self ._topLeftLayout or self ._topRightLayout ) else False
@@ -112,7 +117,7 @@ def dragMoveEvent(self, evt:TTkDnDEvent) -> bool:
112117 elif y > h * 3 // 4 :
113118 self ._frameOverlay = (0 ,k + h - h // 4 ,w ,h // 4 )
114119 else :
115- self ._frameOverlay = None
120+ self ._frameOverlay = ( 0 , k , w , h )
116121 self .update ()
117122 return True
118123
@@ -133,10 +138,12 @@ def _processDrop(widget, label, orientation, offset):
133138 index = splitter .indexOf (self )
134139 if splitter .orientation () != orientation :
135140 splitter .replaceWidget (index , splitter := TTkSplitter (orientation = orientation , style = self .parentWidget ().classStyle ))
141+ splitter .mergeStyle (_splitter_NERD_1_style )
136142 splitter .addWidget (self )
137143 index = offset
138144 splitter .insertWidget (index + offset , kt := _TTkKodeTab (baseWidget = self ._baseWidget , border = self .border (), barType = self ._barType , closable = self .tabsClosable ()))
139145 kt ._dropEventProxy = self ._dropEventProxy
146+ kt .kodeTabCloseRequested .connect (self ._baseWidget ._handleKodeTabCloseRequested )
140147 ret = kt .addTab (widget ,label )
141148 self ._baseWidget .tabAdded .emit (kt , ret )
142149 if fwold != (fwnew := self ._baseWidget ._getFirstWidget ()) and fwold ._hasMenu ():
@@ -206,6 +213,7 @@ def _kodeTabClosed(self, widget=None):
206213 widget = splitter
207214 splitter = widget .parentWidget ()
208215 splitter .removeWidget (widget )
216+ widget .kodeTabCloseRequested .clear ()
209217 if splitter == self ._baseWidget and splitter .count () == 0 :
210218 splitter .addWidget (self )
211219 if fwold != (fwnew := self ._baseWidget ._getFirstWidget ()) and fwold ._hasMenu ():
@@ -224,26 +232,33 @@ class TTkKodeTab(TTkSplitter):
224232 __slots__ = (
225233 '_lastKodeTabWidget' , '_barType' ,
226234 # Signals
227- 'currentChanged' ,'tabBarClicked' ,'tabCloseRequested ' , 'tabAdded' )
235+ 'currentChanged' ,'tabBarClicked' ,'kodeTabCloseRequested ' , 'tabAdded' )
228236
229237 def __init__ (self ,
230238 barType :TTkBarType = TTkBarType .NONE ,
231239 ** kwargs ) -> None :
232240 self .currentChanged = pyTTkSignal (TTkTabWidget ,int ,TTkWidget ,object )
233241 self .tabBarClicked = pyTTkSignal (TTkTabWidget ,int ,TTkWidget ,object )
234- self .tabCloseRequested = pyTTkSignal (TTkTabWidget ,int )
242+ self .kodeTabCloseRequested = pyTTkSignal (TTkTabWidget ,int )
235243 self .tabAdded = pyTTkSignal (TTkTabWidget , int )
236244 self ._barType = barType
237245
238- self .classStyle |= _splitter_NERD_1_style
239-
240246 super ().__init__ (** kwargs | {'layout' :TTkGridLayout ()})
247+
248+ self .mergeStyle (_splitter_NERD_1_style )
241249 kwargs .pop ('parent' ,None )
242250 kwargs .pop ('visible' ,None )
243251 # self.layout().addWidget(splitter := TTkSplitter())
244- self ._lastKodeTabWidget = _TTkKodeTab (baseWidget = self , barType = self ._barType , ** kwargs )
252+ self ._lastKodeTabWidget = kt = _TTkKodeTab (baseWidget = self , barType = self ._barType , ** kwargs )
245253 self ._lastKodeTabWidget ._dropEventProxy = self ._dropEventProxy
246254 self .addWidget (self ._lastKodeTabWidget )
255+ kt .kodeTabCloseRequested .connect (self ._handleKodeTabCloseRequested )
256+
257+ @pyTTkSlot (_TTkKodeTab ,int )
258+ def _handleKodeTabCloseRequested (self , kt :_TTkKodeTab , index :int ) -> None :
259+ TTkLog .debug (f"{ kt } -> { index } " )
260+ self .kodeTabCloseRequested .emit (kt , index )
261+ # kt.removeTab(index)
247262
248263 def _getFirstWidget (self ):
249264 kt = self
0 commit comments