version 1.1, 2002/01/29 10:01:11
|
version 1.44, 2002/04/17 07:38:31
|
Line 1
|
Line 1
|
// | /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ |
// MainController.mm | /* ***** BEGIN LICENSE BLOCK ***** |
// Chimera | * Version: NPL 1.1/GPL 2.0/LGPL 2.1 |
// | * |
// Created by David Hyatt on Tue Jan 29 2002. | * The contents of this file are subject to the Netscape Public License |
// Copyright (c) 2001 __MyCompanyName__. All rights reserved. | * 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 "MainController.h" |
#import "MainController.h" |
#import "BrowserWindowController.h" |
#import "BrowserWindowController.h" |
|
#include "BookmarksService.h" |
|
#include "nsCOMPtr.h" |
|
#include "nsIServiceManager.h" |
|
#include "nsIIOService.h" |
|
#include "nsCocoaBrowserService.h" |
|
#import "AboutBox.h" |
|
|
|
|
|
static const char* ioServiceContractID = "@mozilla.org/network/io-service;1"; |
|
|
@implementation MainController |
@implementation MainController |
|
|
-(void)awakeFromNib | -(id)init |
{ |
{ |
NSLog(@"HELLO?"); | if ( (self = [super init]) ) { |
[self newWindow: nil]; | mSplashScreen = [[SplashScreenWindow alloc] splashImage:nil withFade:YES withStatusRect:NSMakeRect(0,0,0,0)]; |
| } |
| mFindDialog = nil; |
| mMenuBookmarks = nil; |
| return self; |
| } |
| |
| -(void)dealloc |
| { |
| [super dealloc]; |
| [mFindDialog release]; |
| printf("Main controller died.\n"); |
| } |
| |
| -(void)awakeFromNib |
| { |
| [self newWindow: self]; |
| |
| [mSplashScreen close]; |
| |
| [mBookmarksMenu setAutoenablesItems: NO]; |
| mMenuBookmarks = new BookmarksService((BookmarksDataSource*)nil); |
| mMenuBookmarks->AddObserver(); |
| mMenuBookmarks->ConstructBookmarksMenu(mBookmarksMenu, nsnull); |
| BookmarksService::gMainController = self; |
| |
| // Initialize offline mode. |
| mOffline = NO; |
| nsCOMPtr<nsIIOService> ioService(do_GetService(ioServiceContractID)); |
| if (!ioService) |
| return; |
| PRBool offline = PR_FALSE; |
| ioService->GetOffline(&offline); |
| mOffline = offline; |
| |
| // Set the menu item's text to "Go Online" if we're currently |
| // offline. |
| if (mOffline) |
| [mOfflineMenuItem setTitle: @"Go Online"]; |
| |
} |
} |
|
|
-(IBAction)newWindow:(id)aSender |
-(IBAction)newWindow:(id)aSender |
{ |
{ |
[self openBrowserWindowWithURL: @"about:blank"]; | // If we have a key window, have it autosave its dimensions before |
| // we open a new window. That ensures the size ends up matching. |
| NSWindow* keyWindow = [mApplication keyWindow]; |
| if ( keyWindow && [keyWindow respondsToSelector:@selector(autosaveWindowFrame)] ) |
| [[keyWindow windowController] autosaveWindowFrame]; |
| |
| // Now open the new window. |
| BrowserWindowController* controller = [self openBrowserWindowWithURLString:@"about:blank"]; |
| [controller focusURLBar]; |
| } |
| |
| -(IBAction)newTab:(id)aSender |
| { |
| NSWindow* keyWindow = [mApplication keyWindow]; |
| if (keyWindow) |
| [[keyWindow windowController] newTab]; |
| } |
| |
| -(IBAction)closeTab:(id)aSender |
| { |
| NSWindow* keyWindow = [mApplication keyWindow]; |
| if (keyWindow) |
| [[keyWindow windowController] closeTab]; |
| } |
| |
| -(IBAction) previousTab:(id)aSender |
| { |
| NSWindow* keyWindow = [mApplication keyWindow]; |
| if (keyWindow) |
| [[keyWindow windowController] previousTab]; |
| } |
| |
| -(IBAction) nextTab:(id)aSender; |
| { |
| NSWindow* keyWindow = [mApplication keyWindow]; |
| if (keyWindow) |
| [[keyWindow windowController] nextTab]; |
| } |
| |
| -(IBAction) openFile:(id)aSender |
| { |
| NSOpenPanel* openPanel = [[NSOpenPanel alloc] init]; |
| [openPanel setCanChooseFiles: YES]; |
| [openPanel setCanChooseDirectories: NO]; |
| [openPanel setAllowsMultipleSelection: NO]; |
| NSArray* array = [NSArray arrayWithObjects: @"htm",@"html",@"shtml",@"xhtml",@"xml", |
| @"txt",@"text", |
| @"gif",@"jpg",@"jpeg",@"png",@"bmp", |
| nil]; |
| int result = [openPanel runModalForTypes: array]; |
| if (result == NSOKButton) { |
| NSArray* urlArray = [openPanel URLs]; |
| if ([urlArray count] == 0) |
| return; |
| NSURL* url = [urlArray objectAtIndex: 0]; |
| // ---------------------- |
| [[NSDocumentController sharedDocumentController] noteNewRecentDocumentURL:url]; |
| // ---------------------- |
| NSWindow* keyWindow = [mApplication keyWindow]; |
| if (keyWindow) { |
| [[keyWindow windowController] loadURL: url]; |
| [[[[keyWindow windowController] getMyBrowserView] getBrowserView] setActive: YES]; |
| } |
| else |
| [self openBrowserWindowWithURL: url]; |
| } |
} |
} |
|
|
-(void)openBrowserWindowWithURL: (NSString*)aURL | -(IBAction) openLocation:(id)aSender |
{ |
{ |
NSLog(@"YARF!"); | NSWindow* keyWindow = [mApplication keyWindow]; |
BrowserWindowController* browser = [[BrowserWindowController alloc] initWithWindowNibName: @"BrowserWindow"]; | if (!keyWindow) { |
| [self openBrowserWindowWithURLString: @"about:blank"]; |
| keyWindow = [mApplication keyWindow]; |
| } |
| |
| [[keyWindow windowController] performAppropriateLocationAction]; |
| } |
| |
| -(IBAction) savePage:(id)aSender |
| { |
| NSWindow* keyWindow = [mApplication keyWindow]; |
| if (keyWindow) |
| [[keyWindow windowController] saveDocument: mFilterView filterList: mFilterList]; |
| } |
| |
| -(IBAction) printPage:(id)aSender |
| { |
| NSWindow* keyWindow = [mApplication keyWindow]; |
| if (keyWindow) |
| [[keyWindow windowController] printDocument]; |
| } |
| |
| -(IBAction) printPreview:(id)aSender |
| { |
| NSWindow* keyWindow = [mApplication keyWindow]; |
| if (keyWindow) |
| [[keyWindow windowController] printPreview]; |
| } |
| |
| -(IBAction) toggleOfflineMode:(id)aSender |
| { |
| nsCOMPtr<nsIIOService> ioService(do_GetService(ioServiceContractID)); |
| if (!ioService) |
| return; |
| PRBool offline = PR_FALSE; |
| ioService->GetOffline(&offline); |
| ioService->SetOffline(!offline); |
| mOffline = !offline; |
| |
| // Update the menu item text. |
| // Set the menu item's text to "Go Online" if we're currently |
| // offline. |
| if (mOffline) |
| [mOfflineMenuItem setTitle: @"Go Online"]; |
| else |
| [mOfflineMenuItem setTitle: @"Work Offline"]; |
| |
| // Indicate that we are working offline. |
| [[NSNotificationCenter defaultCenter] postNotificationName:@"offlineModeChanged" object:nil]; |
| } |
| |
| // Edit menu actions. |
| |
| |
| // |
| // -findInPage |
| // |
| // Called in response to "Find" in edit menu. Opens the find dialog. We only keep |
| // one around for the whole app to use, showing/hiding as we see fit. |
| // |
| -(IBAction) findInPage:(id)aSender |
| { |
| if ( !mFindDialog ) |
| mFindDialog = [[FindDlgController alloc] initWithWindowNibName: @"FindDialog"]; |
| [mFindDialog showWindow:self]; |
| } |
| |
| |
| // |
| // -findAgain |
| // |
| // Called in response to "Find Again" in edit menu. Tells the find controller |
| // to find the next occurrance of what's already been found. |
| // |
| -(IBAction) findAgain:(id)aSender |
| { |
| if ( mFindDialog ) |
| [mFindDialog findAgain:aSender]; |
| else |
| NSBeep(); |
| } |
| |
| -(IBAction) goBack:(id)aSender |
| { |
| [[[mApplication keyWindow] windowController] back: aSender]; |
| } |
| |
| -(IBAction) goForward:(id)aSender |
| { |
| [[[mApplication keyWindow] windowController] forward: aSender]; |
| } |
| |
| -(IBAction) doReload:(id)aSender |
| { |
| [(BrowserWindowController*)([[mApplication keyWindow] windowController]) reload: aSender]; |
| } |
| |
| -(IBAction) doStop:(id)aSender |
| { |
| [(BrowserWindowController*)([[mApplication keyWindow] windowController]) stop: aSender]; |
| } |
| |
| -(IBAction) goHome:(id)aSender |
| { |
| [[[mApplication keyWindow] windowController] home: aSender]; |
| } |
| |
| -(BrowserWindowController*)openBrowserWindowWithURLString: (NSString*)aURL |
| { |
| return [self openBrowserWindowWithURL: [NSURL URLWithString:aURL]]; |
| } |
| |
| -(BrowserWindowController*)openBrowserWindowWithURL: (NSURL*)aURL |
| { |
| BrowserWindowController* browser = [[BrowserWindowController alloc] initWithWindowNibName: @"BrowserWindow"]; |
[browser loadURL: aURL]; |
[browser loadURL: aURL]; |
[browser showWindow: self]; | [browser showWindow: self]; |
| return browser; |
| } |
| |
| -(void)applicationWillTerminate: (NSNotification*)aNotification |
| { |
| printf("Termination notification.\n"); |
| |
| // Autosave one of the windows. |
| NSWindow* keyWindow = [mApplication keyWindow]; |
| if (keyWindow) |
| [[keyWindow windowController] autosaveWindowFrame]; |
| |
| mMenuBookmarks->RemoveObserver(); |
| delete mMenuBookmarks; |
| mMenuBookmarks = nsnull; |
| nsCocoaBrowserService::TermEmbedding(); |
| } |
| |
| // Bookmarks menu actions. |
| -(IBAction) addBookmark:(id)aSender |
| { |
| NSWindow* keyWindow = [mApplication keyWindow]; |
| if (keyWindow) |
| [[keyWindow windowController] addBookmarkExtended: YES]; |
} |
} |
|
|
|
-(IBAction) openMenuBookmark:(id)aSender |
|
{ |
|
NSWindow* keyWindow = [mApplication keyWindow]; |
|
if (!keyWindow) { |
|
[self openBrowserWindowWithURLString: @"about:blank"]; |
|
keyWindow = [mApplication keyWindow]; |
|
} |
|
|
|
BookmarksService::OpenMenuBookmark([keyWindow windowController], aSender); |
|
} |
|
|
|
-(IBAction)manageBookmarks: (id)aSender |
|
{ |
|
NSWindow* keyWindow = [mApplication keyWindow]; |
|
if (!keyWindow) { |
|
[self openBrowserWindowWithURLString: @"about:blank"]; |
|
keyWindow = [mApplication keyWindow]; |
|
} |
|
|
|
[[keyWindow windowController] manageBookmarks: aSender]; |
|
} |
|
|
|
- (MVPreferencesController *)preferencesController |
|
{ |
|
if (!preferencesController) { |
|
preferencesController = [[MVPreferencesController sharedInstance] retain]; |
|
} |
|
return preferencesController; |
|
} |
|
|
|
- (void)displayPreferencesWindow:sender |
|
{ |
|
[[self preferencesController] showPreferences:nil] ; |
|
} |
|
|
|
- (IBAction)showAboutBox:(id)sender |
|
{ |
|
[[AboutBox sharedInstance] showPanel:sender]; |
|
} |
|
|
|
- (BOOL)application:(NSApplication *)theApplication openFile:(NSString *)filename |
|
{ |
|
NSWindow* keyWindow = [mApplication keyWindow]; |
|
|
|
if (keyWindow) { |
|
[[keyWindow windowController] loadURL:[NSURL fileURLWithPath:filename]]; |
|
} else { |
|
[self openBrowserWindowWithURL:[NSURL fileURLWithPath:filename]]; |
|
} |
|
|
|
return YES; |
|
|
|
} |
|
|
|
- (IBAction)biggerTextSize:(id)aSender |
|
{ |
|
NSWindow* keyWindow = [mApplication keyWindow]; |
|
if (keyWindow) |
|
[[keyWindow windowController] biggerTextSize]; |
|
} |
|
|
|
- (IBAction)smallerTextSize:(id)aSender |
|
{ |
|
NSWindow* keyWindow = [mApplication keyWindow]; |
|
if (keyWindow) |
|
[[keyWindow windowController] smallerTextSize]; |
|
} |
|
|
|
- (IBAction)toggleSmoothText:(id)aSender |
|
{ |
|
// XXXdwh Grab the prefs service and just set the pref directly. |
|
|
|
} |
|
|
|
|
@end |
@end |