GarethPrice
GarethPrice

Reputation: 1104

Adding a toolbar to INAppStoreWindow

I'm trying to add a toolbar to INAppStoreWindow.

It has this property:

/** The title bar view itself. Add subviews to this view that you want to show in
 the title bar (e.g. buttons, a toolbar, etc.). This view can also be set if 
you want to use a different styled title bar aside from the default one 
(textured, etc.). **/

@property (nonatomic, retain) NSView *titleBarView;

I have a toolbar created, and linked to an outlet in my code, but how can I add it as a subview if it has a class of NSToolbar, when it requires a NSView?

This throws an exception: [aWindow.titleBarView addSubview:toolbar];

Many thanks in advance

Upvotes: 0

Views: 762

Answers (1)

Daniel Eckhart
Daniel Eckhart

Reputation: 1099

INAppStoreWindow weasels that titleBarView between the window's widgets and the content view:

INAppStoreWindow.m:

- (void)setTitleBarView:(NSView *)newTitleBarView
{
if ((_titleBarView != newTitleBarView) && newTitleBarView)  {
    [_titleBarView removeFromSuperview];
    [_titleBarView release];
    _titleBarView = [newTitleBarView retain];

    // Configure the view properties and add it as a subview of the theme frame
    NSView *contentView = [self contentView];
    NSView *themeFrame = [contentView superview];
    NSView *firstSubview = [[themeFrame subviews] objectAtIndex:0];
    [_titleBarView setAutoresizingMask:(NSViewMinYMargin | NSViewWidthSizable)];
    [self _recalculateFrameForTitleBarView];
    [themeFrame addSubview:_titleBarView positioned:NSWindowBelow relativeTo:firstSubview];
    [self _layoutTrafficLightsAndContent];
    [self display];
    }
}

NSToolbar isn't an NSView subclass, it's meant to work in conjunction with the window itself, which is obscured by the titleBarView. Just for kicks, set alphas of the gradient colors in INAppStoreWindow.m and run the app; you'll can see the "real" window is still there underneath.

If you're set on using INAppStoreWindow, your best bet would probably be to use your own custom view with buttons to fake a toolbar and adding that as a subview of the titleBarView. Of course, in that case you'll have to do all the layout yourself.

Upvotes: 2

Related Questions