1919from vanilla .nsSubclasses import getNSSubclass
2020
2121
22+ class VanillaTabView (NSTabView ):
23+
24+ def viewDidMoveToWindow (self ):
25+ wrapper = self .vanillaWrapper ()
26+ wrapper ._positionViews ()
27+ super ().viewDidMoveToWindow ()
28+
29+
30+ class VanillaTabViewController (NSTabViewController ):
31+
32+ def tabView_didSelectTabViewItem_ (self , tabView , tabViewItem ):
33+ if hasattr (self , "_target" ):
34+ self ._target .action_ (tabView .vanillaWrapper ())
35+ super ().tabView_didSelectTabViewItem_ (tabView , tabViewItem )
36+
37+
2238class VanillaTabItem (VanillaBaseObject ):
2339
2440 nsTabViewItemClass = NSTabViewItem
2541 nsViewControllerClass = NSViewController
2642
2743 def __init__ (self , title ):
44+ self ._haveSetFrame = False
2845 self ._autoLayoutViews = {}
29- self ._tabItem = self .nsTabViewItemClass .alloc ().initWithIdentifier_ (title )
46+ self ._tabItem = getNSSubclass (self .nsTabViewItemClass ).alloc ().initWithIdentifier_ (title )
47+ self ._tabItem .setVanillaWrapper_ (self )
3048 self ._tabItem .setLabel_ (title )
31- viewController = self .nsViewControllerClass .alloc ().init ()
49+ viewController = getNSSubclass ( self .nsViewControllerClass ) .alloc ().init ()
3250 viewController .setView_ (self ._tabItem .view ())
3351 self ._tabItem .setViewController_ (viewController )
52+ self ._posSize = (0 , 0 , 0 , 0 )
53+ self ._nsObject = self ._tabItem .view ()
3454
3555 def getNSTabViewItem (self ):
3656 return self ._tabItem
@@ -43,19 +63,6 @@ def _breakCycles(self):
4363 self ._autoLayoutViews .clear ()
4464
4565
46- class VanillaTabViewController (NSTabViewController ):
47-
48- def tabView_willSelectTabViewItem_ (self , tabView , tabViewItem ):
49- # XXX do the vanilla positioning here and set a flag
50- # that indicates that it has been done.
51- super ().tabView_willSelectTabViewItem_ (tabView , tabViewItem )
52-
53- def tabView_didSelectTabViewItem_ (self , tabView , tabViewItem ):
54- if hasattr (self , "_target" ):
55- self ._target .action_ (tabView .vanillaWrapper ())
56- super ().tabView_didSelectTabViewItem_ (tabView , tabViewItem )
57-
58-
5966_tabTransitionMap = {
6067 None : NSViewControllerTransitionNone ,
6168 "crossfade" : NSViewControllerTransitionCrossfade ,
@@ -120,9 +127,9 @@ def __init__(self):
120127 +-----------+
121128 """
122129
123- nsTabViewClass = NSTabView
130+ nsTabViewClass = VanillaTabView
124131 nsTabViewControllerClass = VanillaTabViewController
125- vanillaTabViewItemClass = VanillaTabItem
132+ vanillaTabItemClass = VanillaTabItem
126133
127134 allFrameAdjustments = {
128135 # The sizeStyle will be part of the
@@ -136,7 +143,8 @@ def __init__(self, posSize, titles=["Tab"], callback=None, sizeStyle="regular",
136143 showTabs = True , transitionStyle = None ,
137144 ):
138145 self ._setupView (self .nsTabViewClass , posSize , callback = None )
139- self ._tabViewController = self .nsTabViewControllerClass .alloc ().init ()
146+ self ._nsObject .setVanillaWrapper_ (self )
147+ self ._tabViewController = getNSSubclass (self .nsTabViewControllerClass ).alloc ().init ()
140148 self ._tabViewController .setTabView_ (self ._nsObject )
141149 self ._tabViewController .loadView ()
142150 if not showTabs :
@@ -145,8 +153,9 @@ def __init__(self, posSize, titles=["Tab"], callback=None, sizeStyle="regular",
145153 self ._setSizeStyle (sizeStyle )
146154 self ._tabViewController .setTransitionOptions_ (_tabTransitionMap [transitionStyle ])
147155 self ._tabItems = []
156+ contentRect = self ._nsObject .contentRect ()
148157 for title in titles :
149- tab = self .vanillaTabViewItemClass (title )
158+ tab = self .vanillaTabItemClass (title )
150159 self ._tabItems .append (tab )
151160 self ._tabViewController .addTabViewItem_ (tab ._tabItem )
152161 # now that the tabs are all set, set the callback.
@@ -163,6 +172,11 @@ def getNSTabView(self):
163172 """
164173 return self ._nsObject
165174
175+ def _positionViews (self ):
176+ contentRect = self .getNSTabView ().contentRect ()
177+ for item in self ._tabItems [1 :]:
178+ item ._setFrame (contentRect )
179+
166180 def _adjustPosSize (self , frame ):
167181 if self ._nsObject .tabViewType () == NSNoTabsNoBorder :
168182 return frame
@@ -176,7 +190,7 @@ def _setCallback(self, callback):
176190 self ._target = VanillaCallbackWrapper (callback )
177191 delegate = self ._nsObject .delegate ()
178192 if delegate is None :
179- self ._delegate = delegate = VanillaTabsDelegate .alloc ().init ()
193+ self ._delegate = delegate = getNSSubclass ( VanillaTabsDelegate ) .alloc ().init ()
180194 self ._nsObject .setDelegate_ (delegate )
181195 delegate ._target = self ._target
182196
0 commit comments