File:  [mozdev] / chimera / MainController.mm
Revision 1.34: download - view: text, annotated - select for diffs - revision graph
Wed Mar 27 23:55:06 2002 UTC (17 years, 6 months ago) by hyatt
Branches: MAIN
CVS tags: HEAD
Fix Chimera build bustage.

    1: /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
    2: /* ***** BEGIN LICENSE BLOCK *****
    3:  * Version: NPL 1.1/GPL 2.0/LGPL 2.1
    4:  *
    5:  * The contents of this file are subject to the Netscape Public License
    6:  * Version 1.1 (the "License"); you may not use this file except in
    7:  * compliance with the License. You may obtain a copy of the License at
    8:  * http://www.mozilla.org/NPL/
    9:  *
   10:  * Software distributed under the License is distributed on an "AS IS" basis,
   11:  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
   12:  * for the specific language governing rights and limitations under the
   13:  * License.
   14:  *
   15:  * The Original Code is mozilla.org code.
   16:  *
   17:  * The Initial Developer of the Original Code is 
   18:  * Netscape Communications Corporation.
   19:  * Portions created by the Initial Developer are Copyright (C) 2002
   20:  * the Initial Developer. All Rights Reserved.
   21:  *
   22:  * Contributor(s):
   23:  *
   24:  * Alternatively, the contents of this file may be used under the terms of
   25:  * either the GNU General Public License Version 2 or later (the "GPL"), or 
   26:  * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
   27:  * in which case the provisions of the GPL or the LGPL are applicable instead
   28:  * of those above. If you wish to allow use of your version of this file only
   29:  * under the terms of either the GPL or the LGPL, and not to allow others to
   30:  * use your version of this file under the terms of the NPL, indicate your
   31:  * decision by deleting the provisions above and replace them with the notice
   32:  * and other provisions required by the GPL or the LGPL. If you do not delete
   33:  * the provisions above, a recipient may use your version of this file under
   34:  * the terms of any one of the NPL, the GPL or the LGPL.
   35:  *
   36:  * ***** END LICENSE BLOCK ***** */
   37: 
   38: #import "MainController.h"
   39: #import "BrowserWindowController.h"
   40: #include "BookmarksService.h"
   41: #include "nsCOMPtr.h"
   42: #include "nsIServiceManager.h"
   43: #include "nsIIOService.h"
   44: #include "nsCocoaBrowserService.h"
   45: #import	"AboutBox.h"
   46: 
   47: static const char* ioServiceContractID = "@mozilla.org/network/io-service;1";
   48: 
   49: @implementation MainController
   50: 
   51: -(id)init
   52: {
   53:     if ( (self = [super init]) ) {
   54:         mSplashScreen = [[SplashScreenWindow alloc] splash];
   55:     }
   56:     return self;
   57: }
   58: 
   59: -(void)dealloc
   60: {
   61:     [super dealloc];
   62:     printf("Main controller died.\n");
   63: }
   64: 
   65: -(void)awakeFromNib
   66: {
   67:     [self newWindow: self];
   68: 
   69:     [mSplashScreen close];
   70:     
   71:     [mBookmarksMenu setAutoenablesItems: NO];
   72:     
   73:     mMenuBookmarks = new BookmarksService(nil);
   74:     mMenuBookmarks->AddObserver();
   75:     mMenuBookmarks->ConstructBookmarksMenu(mBookmarksMenu, nsnull);
   76:     BookmarksService::gMainController = self;
   77:     
   78:     // Initialize offline mode.
   79:     mOffline = NO;
   80:     nsCOMPtr<nsIIOService> ioService(do_GetService(ioServiceContractID));
   81:     if (!ioService)
   82:         return;
   83:     PRBool offline = PR_FALSE;
   84:     ioService->GetOffline(&offline);
   85:     mOffline = offline;
   86:     
   87:     // Set the menu item's text to "Go Online" if we're currently
   88:     // offline.
   89:     if (mOffline)
   90:         [mOfflineMenuItem setTitle: @"Go Online"];
   91: 
   92: }
   93: 
   94: -(IBAction)newWindow:(id)aSender
   95: {
   96:   // If we have a key window, have it autosave its dimensions before
   97:   // we open a new window.  That ensures the size ends up matching.
   98:   NSWindow* keyWindow = [mApplication keyWindow];
   99:   if (keyWindow)
  100:     [[keyWindow windowController] autosaveWindowFrame];
  101: 
  102:   // Now open the new window.
  103:   BrowserWindowController* controller = [self openBrowserWindowWithURLString:@"about:blank"];
  104:   [controller focusURLBar];
  105: }	
  106: 
  107: -(IBAction)newTab:(id)aSender
  108: {
  109:     NSWindow* keyWindow = [mApplication keyWindow];
  110:     if (keyWindow)
  111:         [[keyWindow windowController] newTab];
  112: }
  113: 
  114: -(IBAction)closeTab:(id)aSender
  115: {
  116:     NSWindow* keyWindow = [mApplication keyWindow];
  117:     if (keyWindow)
  118:         [[keyWindow windowController] closeTab];
  119: }
  120: 
  121: -(IBAction) previousTab:(id)aSender
  122: {
  123:     NSWindow* keyWindow = [mApplication keyWindow];
  124:     if (keyWindow)
  125:         [[keyWindow windowController] previousTab];
  126: }
  127: 
  128: -(IBAction) nextTab:(id)aSender;
  129: {
  130:     NSWindow* keyWindow = [mApplication keyWindow];
  131:     if (keyWindow)
  132:         [[keyWindow windowController] nextTab];
  133: }
  134: 
  135: -(IBAction) openFile:(id)aSender
  136: {
  137:     NSOpenPanel* openPanel = [[NSOpenPanel alloc] init];
  138:     [openPanel setCanChooseFiles: YES];
  139:     [openPanel setCanChooseDirectories: NO];
  140:     [openPanel setAllowsMultipleSelection: NO];
  141:     NSArray* array = [NSArray arrayWithObjects: @"htm",@"html",@"shtml",@"xhtml",@"xml",
  142:                                                 @"txt",@"text",
  143:                                                 @"gif",@"jpg",@"jpeg",@"png",@"bmp",
  144:                                                 nil];
  145:     int result = [openPanel runModalForTypes: array];
  146:     if (result == NSOKButton) {
  147:         NSArray* urlArray = [openPanel URLs];
  148:         if ([urlArray count] == 0)
  149:             return;
  150:         NSURL* url = [urlArray objectAtIndex: 0];
  151:         // ----------------------
  152:         [[NSDocumentController sharedDocumentController] noteNewRecentDocumentURL:url];
  153:         // ----------------------
  154:         NSWindow* keyWindow = [mApplication keyWindow];
  155:         if (keyWindow)
  156:             return [[keyWindow windowController] loadURL: url];
  157:         else
  158:             [self openBrowserWindowWithURL: url];
  159:     }
  160: }
  161: 
  162: -(IBAction) openLocation:(id)aSender
  163: {
  164:     NSWindow* keyWindow = [mApplication keyWindow];
  165:     if (!keyWindow) {
  166:       [self openBrowserWindowWithURLString: @"about:blank"];
  167:       keyWindow = [mApplication keyWindow];
  168:     }
  169:     
  170:     [[keyWindow windowController] performAppropriateLocationAction];
  171: }
  172: 
  173: -(IBAction) savePage:(id)aSender
  174: {
  175:     NSWindow* keyWindow = [mApplication keyWindow];
  176:     if (keyWindow)
  177:       [[keyWindow windowController] saveDocument: mFilterView filterList: mFilterList];
  178: }
  179: 
  180: -(IBAction) printPage:(id)aSender
  181: {
  182:     NSWindow* keyWindow = [mApplication keyWindow];
  183:     if (keyWindow)
  184:       [[keyWindow windowController] printDocument];
  185: }
  186: 
  187: -(IBAction) printPreview:(id)aSender
  188: {
  189:     NSWindow* keyWindow = [mApplication keyWindow];
  190:     if (keyWindow)
  191:       [[keyWindow windowController] printPreview];
  192: }
  193: 
  194: -(IBAction) toggleOfflineMode:(id)aSender
  195: {
  196:     nsCOMPtr<nsIIOService> ioService(do_GetService(ioServiceContractID));
  197:     if (!ioService)
  198:         return;
  199:     PRBool offline = PR_FALSE;
  200:     ioService->GetOffline(&offline);
  201:     ioService->SetOffline(!offline);
  202:     mOffline = !offline;
  203:     
  204:     // Update the menu item text.
  205:     // Set the menu item's text to "Go Online" if we're currently
  206:     // offline.
  207:     if (mOffline)
  208:         [mOfflineMenuItem setTitle: @"Go Online"];
  209:     else
  210:         [mOfflineMenuItem setTitle: @"Work Offline"];
  211:         
  212:     // Indicate that we are working offline.
  213:     [[NSNotificationCenter defaultCenter] postNotificationName:@"offlineModeChanged" object:nil];
  214: }
  215: 
  216: // Edit menu actions.
  217: -(IBAction) findInPage:(id)aSender
  218: {
  219:     NSWindow* keyWindow = [mApplication keyWindow];
  220:     if (keyWindow)
  221:       [[keyWindow windowController] findInPage];
  222: }
  223: 
  224: -(IBAction) findAgain:(id)aSender
  225: {
  226:     NSWindow* keyWindow = [mApplication keyWindow];
  227:     if (keyWindow)
  228:       [[keyWindow windowController] findAgain];
  229: }
  230: 
  231: -(IBAction) goBack:(id)aSender
  232: {
  233:     [[[mApplication keyWindow] windowController] back: aSender]; 
  234: }
  235: 
  236: -(IBAction) goForward:(id)aSender
  237: {
  238:     [[[mApplication keyWindow] windowController] forward: aSender]; 
  239: }
  240: 
  241: -(IBAction) doReload:(id)aSender
  242: {
  243:     [(BrowserWindowController*)([[mApplication keyWindow] windowController]) reload: aSender]; 
  244: }
  245: 
  246: -(IBAction) doStop:(id)aSender
  247: {
  248:     [(BrowserWindowController*)([[mApplication keyWindow] windowController]) stop: aSender]; 
  249: }
  250: 
  251: -(IBAction) goHome:(id)aSender
  252: {
  253:     [[[mApplication keyWindow] windowController] home: aSender];
  254: }
  255: 
  256: -(BrowserWindowController*)openBrowserWindowWithURLString: (NSString*)aURL
  257: {
  258:     return [self openBrowserWindowWithURL: [NSURL URLWithString:aURL]];
  259: }
  260: 
  261: -(BrowserWindowController*)openBrowserWindowWithURL: (NSURL*)aURL
  262: {
  263: 	BrowserWindowController* browser = [[BrowserWindowController alloc] initWithWindowNibName: @"BrowserWindow"];
  264:   [browser loadURL: aURL];
  265: 	[browser showWindow: self];
  266:   return browser;
  267: }
  268: 
  269: -(void)applicationWillTerminate: (NSNotification*)aNotification
  270: {
  271:     printf("Termination notification.\n");
  272:     mMenuBookmarks->RemoveObserver();
  273:     delete mMenuBookmarks;
  274:     mMenuBookmarks = nsnull;
  275:     nsCocoaBrowserService::TermEmbedding();
  276: }
  277: 
  278: // Bookmarks menu actions.
  279: -(IBAction) addBookmark:(id)aSender
  280: {
  281:     NSWindow* keyWindow = [mApplication keyWindow];
  282:     if (keyWindow)
  283:       [[keyWindow windowController] addBookmark];
  284: }
  285: 
  286: -(IBAction) openMenuBookmark:(id)aSender
  287: {
  288:     NSWindow* keyWindow = [mApplication keyWindow];
  289:     if (!keyWindow) {
  290:         [self openBrowserWindowWithURLString: @"about:blank"];
  291:         keyWindow = [mApplication keyWindow];
  292:     }
  293: 
  294:     BookmarksService::OpenMenuBookmark([keyWindow windowController], aSender);
  295: }
  296: 
  297: - (MVPreferencesController *)preferencesController
  298: {
  299:     if (!preferencesController) {
  300:         preferencesController = [[MVPreferencesController sharedInstance] retain];
  301:     }
  302:     return preferencesController;
  303: }
  304: 
  305: - (void)displayPreferencesWindow:sender
  306: {
  307:     [[self preferencesController] showPreferences:nil] ;
  308: }
  309: 
  310: - (IBAction)showAboutBox:(id)sender
  311: {
  312:     [[AboutBox sharedInstance] showPanel:sender];
  313: }
  314: 
  315: - (BOOL)application:(NSApplication *)theApplication openFile:(NSString *)filename
  316: {
  317:     NSWindow* keyWindow = [mApplication keyWindow];
  318: 
  319:     if (keyWindow) {
  320:         [[keyWindow windowController] loadURL:[NSURL fileURLWithPath:filename]];
  321:     } else {
  322:         [self openBrowserWindowWithURL:[NSURL fileURLWithPath:filename]];
  323:     }
  324:     
  325:     return YES;
  326:     
  327: }
  328: 
  329: 
  330: @end

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>