Skip to content

Commit ace8b06

Browse files
committed
Position Tabs contents relative to the contentRect when a real rect is available.
1 parent eba5df1 commit ace8b06

File tree

1 file changed

+34
-20
lines changed

1 file changed

+34
-20
lines changed

Lib/vanilla/vanillaTabs.py

Lines changed: 34 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -19,18 +19,38 @@
1919
from 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+
2238
class 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

Comments
 (0)