version 1.18, 2002/02/07 05:11:38
|
version 1.50, 2002/03/11 09:23:36
|
Line 1
|
Line 1
|
/* | /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ |
* BrowserWindowController.mm | /* ***** BEGIN LICENSE BLOCK ***** |
*/ | * Version: NPL 1.1/GPL 2.0/LGPL 2.1 |
| * |
| * The contents of this file are subject to the Netscape Public License |
| * Version 1.1 (the "License"); you may not use this file except in |
| * compliance with the License. You may obtain a copy of the License at |
| * http://www.mozilla.org/NPL/ |
| * |
| * Software distributed under the License is distributed on an "AS IS" basis, |
| * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License |
| * for the specific language governing rights and limitations under the |
| * License. |
| * |
| * The Original Code is mozilla.org code. |
| * |
| * The Initial Developer of the Original Code is |
| * Netscape Communications Corporation. |
| * Portions created by the Initial Developer are Copyright (C) 2002 |
| * the Initial Developer. All Rights Reserved. |
| * |
| * Contributor(s): |
| * |
| * Alternatively, the contents of this file may be used under the terms of |
| * either the GNU General Public License Version 2 or later (the "GPL"), or |
| * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), |
| * in which case the provisions of the GPL or the LGPL are applicable instead |
| * of those above. If you wish to allow use of your version of this file only |
| * under the terms of either the GPL or the LGPL, and not to allow others to |
| * use your version of this file under the terms of the NPL, indicate your |
| * decision by deleting the provisions above and replace them with the notice |
| * and other provisions required by the GPL or the LGPL. If you do not delete |
| * the provisions above, a recipient may use your version of this file under |
| * the terms of any one of the NPL, the GPL or the LGPL. |
| * |
| * ***** END LICENSE BLOCK ***** */ |
|
|
#import "BrowserWindowController.h" |
#import "BrowserWindowController.h" |
#import "MyBrowserView.h" |
#import "MyBrowserView.h" |
|
#import "IconTabViewItem.h" |
|
|
|
#include "nsIWebNavigation.h" |
|
|
static NSString *BrowserToolbarIdentifier = @"Browser Window Toolbar"; |
static NSString *BrowserToolbarIdentifier = @"Browser Window Toolbar"; |
static NSString *BackToolbarItemIdentifier = @"Back Toolbar Item"; |
static NSString *BackToolbarItemIdentifier = @"Back Toolbar Item"; |
Line 21 static NSString *PrintToolbarItemIdentif
|
Line 57 static NSString *PrintToolbarItemIdentif
|
|
|
@implementation BrowserWindowController |
@implementation BrowserWindowController |
|
|
- (id)init | -(void)enterModalSession |
| { |
| mModalSession = [NSApp beginModalSessionForWindow: [self window]]; |
| [NSApp runModalSession: mModalSession]; |
| [NSApp endModalSession: mModalSession]; |
| mModalSession = nil; |
| } |
| |
| -(void)mouseMoved:(NSEvent*)aEvent |
| { |
| if (mMoveReentrant) |
| return; |
| |
| mMoveReentrant = YES; |
| NSView* view = [[[self window] contentView] hitTest: [aEvent locationInWindow]]; |
| [view mouseMoved: aEvent]; |
| [super mouseMoved: aEvent]; |
| mMoveReentrant = NO; |
| } |
| |
| - (id)initWithWindowNibName:(NSString *)windowNibName |
| { |
| if ( (self = [super initWithWindowNibName:(NSString *)windowNibName]) ) { |
| mInitialized = NO; |
| mMoveReentrant = NO; |
| mShouldAutosave = YES; |
| } |
| return self; |
| } |
| |
| -(void)autosaveWindowFrame |
{ |
{ |
mInitialized = NO; | if (mShouldAutosave) |
return [super init]; | [[self window] saveFrameUsingName: @"NavigatorWindow"]; |
| } |
| |
| -(void)disableAutosave |
| { |
| mShouldAutosave = NO; |
} |
} |
|
|
- (void)windowWillClose:(NSNotification *)notification |
- (void)windowWillClose:(NSNotification *)notification |
{ |
{ |
[self autorelease]; | printf("Window will close notification.\n"); |
| [mSidebarBookmarksDataSource windowClosing]; |
| |
| [self autosaveWindowFrame]; |
| [self autorelease]; |
} |
} |
|
|
- (void)dealloc |
- (void)dealloc |
{ |
{ |
[mBrowserView windowClosed]; | printf("Browser controller died.\n"); |
[super dealloc]; | |
| // Loop over all tabs, and tell them that the window is closed. |
| int numTabs = [mTabBrowser numberOfTabViewItems]; |
| for (int i = 0; i < numTabs; i++) { |
| NSTabViewItem* item = [mTabBrowser tabViewItemAtIndex: i]; |
| [[item view] windowClosed]; |
| } |
| [mSidebarBrowserView windowClosed]; |
| |
| [mProgress release]; |
| |
| [super dealloc]; |
} |
} |
|
|
- (void)windowDidLoad |
- (void)windowDidLoad |
{ |
{ |
|
[super windowDidLoad]; |
|
|
|
// Get our saved dimensions. |
|
[[self window] setFrameUsingName: @"NavigatorWindow"]; |
|
|
|
if (mModalSession) |
|
[NSApp stopModal: mModalSession]; |
|
|
mInitialized = YES; |
mInitialized = YES; |
|
|
|
// Retain with a single extra refcount. This allows the MyBrowserViews |
|
// to remove the progress meter from its superview without having to |
|
// worry about retaining and releasing it. |
|
[mProgress retain]; |
|
|
|
[[self window] setAcceptsMouseMovedEvents: YES]; |
|
|
[self setupToolbar]; |
[self setupToolbar]; |
|
|
|
// 03/03/2002 mlj Changing strategy a bit here. The addTab: method was |
|
// duplicating a lot of the code found here. I have moved it to that method. |
|
// We now remove the IB tab, then add one of our own. |
|
|
|
[mTabBrowser removeTabViewItem:[mTabBrowser tabViewItemAtIndex:0]]; |
|
[self newTab]; |
|
|
if (mURL) { |
if (mURL) { |
[self loadURL: mURL]; |
[self loadURL: mURL]; |
Line 49 static NSString *PrintToolbarItemIdentif
|
Line 158 static NSString *PrintToolbarItemIdentif
|
} |
} |
|
|
[mSidebarDrawer setDelegate: self]; |
[mSidebarDrawer setDelegate: self]; |
|
|
|
[mSidebarTabView addTabViewItem: //testing... |
|
[[[IconTabViewItem alloc] initWithIdentifier:nil withTabIcon:[NSImage imageNamed:@"bookicon"]] autorelease]]; |
|
} |
|
|
|
- (void)drawerWillOpen: (NSNotification*)aNotification |
|
{ |
|
[mSidebarBookmarksDataSource ensureBookmarks]; |
} |
} |
|
|
- (void)drawerDidOpen:(NSNotification *)aNotification |
- (void)drawerDidOpen:(NSNotification *)aNotification |
{ |
{ |
|
// XXXdwh This is temporary. |
[[mSidebarBrowserView getBrowserView] loadURI: [NSURL URLWithString: @"http://tinderbox.mozilla.org/SeaMonkey/panel.html"] flags:NSLoadFlagsNone]; |
[[mSidebarBrowserView getBrowserView] loadURI: [NSURL URLWithString: @"http://tinderbox.mozilla.org/SeaMonkey/panel.html"] flags:NSLoadFlagsNone]; |
} |
} |
|
|
|
- (void)drawerDidClose:(NSNotification *)aNotification |
|
{ |
|
// Unload the Gecko web page in "My Panels" to save memory. |
|
[[mSidebarBrowserView getBrowserView] loadURI: [NSURL URLWithString: @"about:blank"] flags:NSLoadFlagsNone]; |
|
} |
|
|
- (void)setupToolbar |
- (void)setupToolbar |
{ |
{ |
NSToolbar *toolbar = [[[NSToolbar alloc] initWithIdentifier:BrowserToolbarIdentifier] autorelease]; |
NSToolbar *toolbar = [[[NSToolbar alloc] initWithIdentifier:BrowserToolbarIdentifier] autorelease]; |
Line 231 static NSString *PrintToolbarItemIdentif
|
Line 355 static NSString *PrintToolbarItemIdentif
|
[mLocationSheetWindow orderOut:self]; |
[mLocationSheetWindow orderOut:self]; |
[NSApp endSheet:mLocationSheetWindow returnCode:1]; |
[NSApp endSheet:mLocationSheetWindow returnCode:1]; |
[self loadURL:[NSURL URLWithString:[mLocationSheetURLField stringValue]]]; |
[self loadURL:[NSURL URLWithString:[mLocationSheetURLField stringValue]]]; |
|
|
|
// Focus and activate our content area. |
|
[[mBrowserView getBrowserView] setActive: YES]; |
} |
} |
|
|
- (IBAction)goToLocationFromToolbarURLField:(id)sender |
- (IBAction)goToLocationFromToolbarURLField:(id)sender |
{ |
{ |
[self loadURL:[NSURL URLWithString:[sender stringValue]]]; |
[self loadURL:[NSURL URLWithString:[sender stringValue]]]; |
|
|
|
// Focus and activate our content area. |
|
[[mBrowserView getBrowserView] setActive: YES]; |
} |
} |
|
|
- (void)saveDocument: (NSView*)aFilterView filterList: (NSPopUpButton*)aFilterList |
- (void)saveDocument: (NSView*)aFilterView filterList: (NSPopUpButton*)aFilterList |
Line 263 static NSString *PrintToolbarItemIdentif
|
Line 393 static NSString *PrintToolbarItemIdentif
|
[[mBrowserView getBrowserView] findAgain]; |
[[mBrowserView getBrowserView] findAgain]; |
} |
} |
|
|
|
- (void)addBookmark |
|
{ |
|
// XXXdwh Hack. Just go to the sidebar for now until we get our |
|
// menu data source going. |
|
[mSidebarBookmarksDataSource ensureBookmarks]; |
|
[mSidebarBookmarksDataSource addBookmark: self]; |
|
} |
|
|
- (IBAction)back:(id)aSender |
- (IBAction)back:(id)aSender |
{ |
{ |
[[mBrowserView getBrowserView] goBack]; |
[[mBrowserView getBrowserView] goBack]; |
Line 280 static NSString *PrintToolbarItemIdentif
|
Line 418 static NSString *PrintToolbarItemIdentif
|
|
|
- (IBAction)stop:(id)aSender |
- (IBAction)stop:(id)aSender |
{ |
{ |
[[mBrowserView getBrowserView] stop: 0]; | [[mBrowserView getBrowserView] stop: nsIWebNavigation::STOP_ALL]; |
} |
} |
|
|
- (IBAction)home:(id)aSender |
- (IBAction)home:(id)aSender |
Line 290 static NSString *PrintToolbarItemIdentif
|
Line 428 static NSString *PrintToolbarItemIdentif
|
|
|
- (IBAction)toggleSidebar:(id)aSender |
- (IBAction)toggleSidebar:(id)aSender |
{ |
{ |
if ( ([mSidebarDrawer state] == NSDrawerClosedState) || ([mSidebarDrawer state] == NSDrawerClosingState) ) { | NSResponder* resp = [[self window] firstResponder]; |
| [[self window] makeFirstResponder: nil]; |
| |
| if ( ([mSidebarDrawer state] == NSDrawerClosedState) || ([mSidebarDrawer state] == NSDrawerClosingState) ) { |
| // XXXHack to bypass sidebar crashes. |
[mSidebarDrawer open]; |
[mSidebarDrawer open]; |
} else { |
} else { |
[mSidebarDrawer close]; |
[mSidebarDrawer close]; |
} |
} |
|
|
|
[[self window] makeFirstResponder: resp]; |
} |
} |
|
|
-(void)loadURL:(NSURL*)aURL |
-(void)loadURL:(NSURL*)aURL |
{ |
{ |
if (mInitialized) | if (mInitialized) { |
[[mBrowserView getBrowserView] loadURI:aURL flags:NSLoadFlagsNone]; |
[[mBrowserView getBrowserView] loadURI:aURL flags:NSLoadFlagsNone]; |
|
} |
else { |
else { |
mURL = aURL; |
mURL = aURL; |
[mURL retain]; |
[mURL retain]; |
Line 325 static NSString *PrintToolbarItemIdentif
|
Line 470 static NSString *PrintToolbarItemIdentif
|
[[self window] update]; |
[[self window] update]; |
[[self window] display]; |
[[self window] display]; |
} |
} |
|
|
|
-(void)newTab |
|
{ |
|
NSTabViewItem* newTab = [[[NSTabViewItem alloc] initWithIdentifier: nil] autorelease]; |
|
MyBrowserView* newView = [[[MyBrowserView alloc] initWithFrame: [mBrowserView frame]] autorelease]; |
|
[newView setTab: newTab]; |
|
|
|
[newTab setLabel: @"Untitled"]; |
|
[newTab setView: newView]; |
|
|
|
[mTabBrowser addTabViewItem: newTab]; |
|
|
|
[[newView getBrowserView] loadURI:[NSURL URLWithString:@"about:blank"] flags:NSLoadFlagsNone]; |
|
|
|
[mTabBrowser selectLastTabViewItem: self]; |
|
|
|
if ( [[[self window] toolbar] isVisible] ) { |
|
if ( ([[[self window] toolbar] displayMode] == NSToolbarDisplayModeIconAndLabel) || |
|
([[[self window] toolbar] displayMode] == NSToolbarDisplayModeIconOnly) ) { |
|
[self focusURLBar]; |
|
} |
|
} |
|
} |
|
|
|
-(void)closeTab |
|
{ |
|
if ( [mTabBrowser numberOfTabViewItems] > 1 ) { |
|
[[[mTabBrowser selectedTabViewItem] view] windowClosed]; |
|
[mTabBrowser removeTabViewItem:[mTabBrowser selectedTabViewItem]]; |
|
} |
|
} |
|
|
|
- (void)previousTab |
|
{ |
|
[mTabBrowser selectPreviousTabViewItem:self]; |
|
} |
|
|
|
- (void)nextTab |
|
{ |
|
[mTabBrowser selectNextTabViewItem:self]; |
|
} |
|
|
|
- (void)tabView:(NSTabView *)aTabView didSelectTabViewItem:(NSTabViewItem *)aTabViewItem |
|
{ |
|
// Disconnect the old view, if one has been designated. |
|
// If the window has just been opened, none has been. |
|
if ( mBrowserView ) { |
|
[mBrowserView disconnectView]; |
|
} |
|
// Connect up the new view |
|
mBrowserView = [aTabViewItem view]; |
|
|
|
// Make the new view the primary content area. |
|
[mBrowserView makePrimaryBrowserView: mURLBar status: mStatus |
|
progress: mProgress windowController: self]; |
|
} |
|
|
|
-(MyBrowserView*)getMyBrowserView |
|
{ |
|
return mBrowserView; |
|
} |
|
|
|
-(void)openNewWindowWithURL: (NSURL*)aURL loadInBackground: (BOOL)aLoadInBG |
|
{ |
|
// Autosave our dimensions before we open a new window. That ensures the size ends up matching. |
|
[self autosaveWindowFrame]; |
|
|
|
BrowserWindowController* browser = [[BrowserWindowController alloc] initWithWindowNibName: @"BrowserWindow"]; |
|
[browser loadURL: aURL]; |
|
if (aLoadInBG) |
|
[[browser window] orderWindow: NSWindowBelow relativeTo: [[self window] windowNumber]]; |
|
else |
|
[browser showWindow: self]; |
|
|
|
// XXXdwh Focus the content area. |
|
} |
|
|
|
-(void)openNewTabWithURL: (NSURL*)aURL loadInBackground: (BOOL)aLoadInBG |
|
{ |
|
NSTabViewItem* newTab = [[[NSTabViewItem alloc] initWithIdentifier: nil] autorelease]; |
|
|
|
NSTabViewItem* selectedTab = [mTabBrowser selectedTabViewItem]; |
|
int index = [mTabBrowser indexOfTabViewItem: selectedTab]; |
|
[mTabBrowser insertTabViewItem: newTab atIndex: index+1]; |
|
|
|
MyBrowserView* newView = [[[MyBrowserView alloc] initWithFrame: [mBrowserView frame]] autorelease]; |
|
[newView setTab: newTab]; |
|
|
|
[newTab setLabel: @"Loading..."]; |
|
[newTab setView: newView]; |
|
|
|
[[newView getBrowserView] loadURI:aURL flags:NSLoadFlagsNone]; |
|
|
|
if (!aLoadInBG) |
|
[mTabBrowser selectTabViewItem: newTab]; |
|
|
|
// XXXdwh Focus the content area. |
|
} |
@end |
@end |
|
|