From f85335a7f9fdbff012409bb2af8fecc81740eab0 Mon Sep 17 00:00:00 2001 From: Sven Weidauer Date: Wed, 19 Jan 2011 20:19:43 +0000 Subject: Implementing tabs and fixing scrolling. svn path=/trunk/netsurf/; revision=11396 --- cocoa/BrowserWindowController.m | 96 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 cocoa/BrowserWindowController.m (limited to 'cocoa/BrowserWindowController.m') diff --git a/cocoa/BrowserWindowController.m b/cocoa/BrowserWindowController.m new file mode 100644 index 000000000..fa53492e9 --- /dev/null +++ b/cocoa/BrowserWindowController.m @@ -0,0 +1,96 @@ +/* + * Copyright 2011 Sven Weidauer + * + * This file is part of NetSurf, http://www.netsurf-browser.org/ + * + * NetSurf is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * NetSurf is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#import "BrowserWindowController.h" + +#import "BrowserViewController.h" +#import "PSMTabBarControl.h" +#import "PSMRolloverButton.h" + +#import "desktop/browser.h" + +@implementation BrowserWindowController + +@synthesize tabBar; +@synthesize tabView; +@synthesize activeBrowser; + +- (id) init; +{ + if (nil == (self = [super initWithWindowNibName: @"BrowserWindow"])) return nil; + + return self; +} + +- (void) awakeFromNib; +{ + [tabBar setShowAddTabButton: YES]; + + NSButton *b = [tabBar addTabButton]; + [b setTarget: self]; + [b setAction: @selector(newTab:)]; + + [[self window] setAcceptsMouseMovedEvents: YES]; +} + +- (void) addTab: (BrowserViewController *)browser; +{ + NSTabViewItem *item = [[[NSTabViewItem alloc] initWithIdentifier: browser] autorelease]; + + [item setView: [browser view]]; + [item bind: @"label" toObject: browser withKeyPath: @"title" options: nil]; + + [tabView addTabViewItem: item]; + [browser setWindowController: self]; + + [tabView selectTabViewItem: item]; +} + +- (void) removeTab: (BrowserViewController *)browser; +{ + NSUInteger itemIndex = [tabView indexOfTabViewItemWithIdentifier: browser]; + if (itemIndex != NSNotFound) { + NSTabViewItem *item = [tabView tabViewItemAtIndex: itemIndex]; + [tabView removeTabViewItem: item]; + [browser setWindowController: nil]; + } +} + +extern NSString * const kHomepageURL; +- (IBAction) newTab: (id) sender; +{ + NSString *homepageURL = [[NSUserDefaults standardUserDefaults] objectForKey: kHomepageURL]; + struct browser_window *clone = [[[tabView selectedTabViewItem] identifier] browser]; + browser_window_create( [homepageURL UTF8String], clone, NULL, false, true ); +} + +- (void) setActiveBrowser: (BrowserViewController *)newBrowser; +{ + activeBrowser = newBrowser; + [self setNextResponder: activeBrowser]; +} + +#pragma mark - +#pragma mark Tab bar delegate + +- (void) tabView: (NSTabView *)tabView didSelectTabViewItem: (NSTabViewItem *)tabViewItem; +{ + [self setActiveBrowser: [tabViewItem identifier]]; +} + +@end -- cgit v1.2.3