File:  [mozdev] / chimera / MainController.mm
Revision 1.31: download - view: text, annotated - select for diffs - revision graph
Sun Mar 10 11:51:04 2002 UTC (17 years, 7 months ago) by macserv
Branches: MAIN
CVS tags: HEAD
Moving close method

    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:     BrowserWindowController* controller = [self openBrowserWindowWithURLString:@"about:blank"];
   97:     [controller focusURLBar];
   98: }
   99: 
  100: -(IBAction)newTab:(id)aSender
  101: {
  102:     NSWindow* keyWindow = [mApplication keyWindow];
  103:     if (keyWindow)
  104:         [[keyWindow windowController] newTab];
  105: }
  106: 
  107: -(IBAction)closeTab:(id)aSender
  108: {
  109:     NSWindow* keyWindow = [mApplication keyWindow];
  110:     if (keyWindow)
  111:         [[keyWindow windowController] closeTab];
  112: }
  113: 
  114: -(IBAction) previousTab:(id)aSender
  115: {
  116:     NSWindow* keyWindow = [mApplication keyWindow];
  117:     if (keyWindow)
  118:         [[keyWindow windowController] previousTab];
  119: }
  120: 
  121: -(IBAction) nextTab:(id)aSender;
  122: {
  123:     NSWindow* keyWindow = [mApplication keyWindow];
  124:     if (keyWindow)
  125:         [[keyWindow windowController] nextTab];
  126: }
  127: 
  128: -(IBAction) openFile:(id)aSender
  129: {
  130:     NSOpenPanel* openPanel = [[NSOpenPanel alloc] init];
  131:     [openPanel setCanChooseFiles: YES];
  132:     [openPanel setCanChooseDirectories: NO];
  133:     [openPanel setAllowsMultipleSelection: NO];
  134:     NSArray* array = [NSArray arrayWithObjects: @"htm",@"html",@"shtml",@"xhtml",@"xml",
  135:                                                 @"txt",@"text",
  136:                                                 @"gif",@"jpg",@"jpeg",@"png",@"bmp",
  137:                                                 nil];
  138:     int result = [openPanel runModalForTypes: array];
  139:     if (result == NSOKButton) {
  140:         NSArray* urlArray = [openPanel URLs];
  141:         if ([urlArray count] == 0)
  142:             return;
  143:         NSURL* url = [urlArray objectAtIndex: 0];
  144:         NSWindow* keyWindow = [mApplication keyWindow];
  145:         if (keyWindow)
  146:             return [[keyWindow windowController] loadURL: url];
  147:         else
  148:             [self openBrowserWindowWithURL: url];
  149:     }
  150: }
  151: 
  152: -(IBAction) openLocation:(id)aSender
  153: {
  154:     NSWindow* keyWindow = [mApplication keyWindow];
  155:     if (!keyWindow) {
  156:       [self openBrowserWindowWithURLString: @"about:blank"];
  157:       keyWindow = [mApplication keyWindow];
  158:     }
  159:     
  160:     [[keyWindow windowController] performAppropriateLocationAction];
  161: }
  162: 
  163: -(IBAction) savePage:(id)aSender
  164: {
  165:     NSWindow* keyWindow = [mApplication keyWindow];
  166:     if (keyWindow)
  167:       [[keyWindow windowController] saveDocument: mFilterView filterList: mFilterList];
  168: }
  169: 
  170: -(IBAction) printPage:(id)aSender
  171: {
  172:     NSWindow* keyWindow = [mApplication keyWindow];
  173:     if (keyWindow)
  174:       [[keyWindow windowController] printDocument];
  175: }
  176: 
  177: -(IBAction) printPreview:(id)aSender
  178: {
  179:     NSWindow* keyWindow = [mApplication keyWindow];
  180:     if (keyWindow)
  181:       [[keyWindow windowController] printPreview];
  182: }
  183: 
  184: -(IBAction) toggleOfflineMode:(id)aSender
  185: {
  186:     nsCOMPtr<nsIIOService> ioService(do_GetService(ioServiceContractID));
  187:     if (!ioService)
  188:         return;
  189:     PRBool offline = PR_FALSE;
  190:     ioService->GetOffline(&offline);
  191:     ioService->SetOffline(!offline);
  192:     mOffline = !offline;
  193:     
  194:     // Update the menu item text.
  195:     // Set the menu item's text to "Go Online" if we're currently
  196:     // offline.
  197:     if (mOffline)
  198:         [mOfflineMenuItem setTitle: @"Go Online"];
  199:     else
  200:         [mOfflineMenuItem setTitle: @"Work Offline"];
  201:         
  202:     // Indicate that we are working offline.
  203:     [[NSNotificationCenter defaultCenter] postNotificationName:@"offlineModeChanged" object:nil];
  204: }
  205: 
  206: // Edit menu actions.
  207: -(IBAction) findInPage:(id)aSender
  208: {
  209:     NSWindow* keyWindow = [mApplication keyWindow];
  210:     if (keyWindow)
  211:       [[keyWindow windowController] findInPage];
  212: }
  213: 
  214: -(IBAction) findAgain:(id)aSender
  215: {
  216:     NSWindow* keyWindow = [mApplication keyWindow];
  217:     if (keyWindow)
  218:       [[keyWindow windowController] findAgain];
  219: }
  220: 
  221: -(IBAction) goBack:(id)aSender
  222: {
  223:     [[[mApplication keyWindow] windowController] back: aSender]; 
  224: }
  225: 
  226: -(IBAction) goForward:(id)aSender
  227: {
  228:     [[[mApplication keyWindow] windowController] forward: aSender]; 
  229: }
  230: 
  231: -(IBAction) doReload:(id)aSender
  232: {
  233:     [(BrowserWindowController*)([[mApplication keyWindow] windowController]) reload: aSender]; 
  234: }
  235: 
  236: -(IBAction) doStop:(id)aSender
  237: {
  238:     [(BrowserWindowController*)([[mApplication keyWindow] windowController]) stop: aSender]; 
  239: }
  240: 
  241: -(IBAction) goHome:(id)aSender
  242: {
  243:     [[[mApplication keyWindow] windowController] home: aSender];
  244: }
  245: 
  246: -(BrowserWindowController*)openBrowserWindowWithURLString: (NSString*)aURL
  247: {
  248:     return [self openBrowserWindowWithURL: [NSURL URLWithString:aURL]];
  249: }
  250: 
  251: -(BrowserWindowController*)openBrowserWindowWithURL: (NSURL*)aURL
  252: {
  253: 	BrowserWindowController* browser = [[BrowserWindowController alloc] initWithWindowNibName: @"BrowserWindow"];
  254:     [browser loadURL: aURL];
  255: 	[browser showWindow: self];
  256:     return browser;
  257: }
  258: 
  259: -(void)applicationWillTerminate: (NSNotification*)aNotification
  260: {
  261:     printf("Termination notification.\n");
  262:     mMenuBookmarks->RemoveObserver();
  263:     delete mMenuBookmarks;
  264:     mMenuBookmarks = nsnull;
  265:     nsCocoaBrowserService::TermEmbedding();
  266: }
  267: 
  268: // Bookmarks menu actions.
  269: -(IBAction) addBookmark:(id)aSender
  270: {
  271:     NSWindow* keyWindow = [mApplication keyWindow];
  272:     if (keyWindow)
  273:       [[keyWindow windowController] addBookmark];
  274: }
  275: 
  276: -(IBAction) openMenuBookmark:(id)aSender
  277: {
  278:     NSWindow* keyWindow = [mApplication keyWindow];
  279:     if (!keyWindow) {
  280:         [self openBrowserWindowWithURLString: @"about:blank"];
  281:         keyWindow = [mApplication keyWindow];
  282:     }
  283: 
  284:     BookmarksService::OpenMenuBookmark([keyWindow windowController], aSender);
  285: }
  286: 
  287: - (MVPreferencesController *)preferencesController
  288: {
  289:     if (!preferencesController) {
  290:         preferencesController = [[MVPreferencesController sharedInstance] retain];
  291:     }
  292:     return preferencesController;
  293: }
  294: 
  295: - (void)displayPreferencesWindow:sender
  296: {
  297:     [[self preferencesController] showPreferences:nil] ;
  298: }
  299: 
  300: - (IBAction)showAboutBox:(id)sender
  301: {
  302:     [[AboutBox sharedInstance] showPanel:sender];
  303: }
  304: 
  305: @end

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