1998-03-28 05:44:41 +03:00
|
|
|
|
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
|
|
|
|
*
|
|
|
|
|
* The contents of this file are subject to the Netscape Public License
|
|
|
|
|
* Version 1.0 (the "NPL"); you may not use this file except in
|
|
|
|
|
* compliance with the NPL. You may obtain a copy of the NPL at
|
|
|
|
|
* http://www.mozilla.org/NPL/
|
|
|
|
|
*
|
|
|
|
|
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
|
|
|
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
|
|
|
|
* for the specific language governing rights and limitations under the
|
|
|
|
|
* NPL.
|
|
|
|
|
*
|
|
|
|
|
* The Initial Developer of this code under the NPL is Netscape
|
|
|
|
|
* Communications Corporation. Portions created by Netscape are
|
|
|
|
|
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
|
|
|
|
* Reserved.
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
#pragma once
|
|
|
|
|
// ===========================================================================
|
|
|
|
|
// UApp.h
|
|
|
|
|
// main application module
|
|
|
|
|
// ===========================================================================
|
|
|
|
|
|
|
|
|
|
#include <LDocApplication.h>
|
|
|
|
|
#include <LPeriodical.h>
|
|
|
|
|
#include <LWindow.h>
|
|
|
|
|
#include <LCaption.h>
|
|
|
|
|
#include "CTaskBarListener.h"
|
|
|
|
|
#include "CURLDispatcher.h"
|
|
|
|
|
|
|
|
|
|
#include <list.h>
|
|
|
|
|
|
|
|
|
|
#ifndef _NetscapeTypes_
|
|
|
|
|
#include "ntypes.h"
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#include "cstring.h"
|
|
|
|
|
|
|
|
|
|
#include "structs.h"
|
|
|
|
|
|
|
|
|
|
class CStr255;
|
|
|
|
|
class EarlManager;
|
|
|
|
|
class LDialogBox;
|
|
|
|
|
class CMimeMapper;
|
|
|
|
|
class StDialogHandler;
|
|
|
|
|
class CBrowseWin;
|
|
|
|
|
class CCheckMailContext;
|
|
|
|
|
class CSplashScreen;
|
|
|
|
|
class CStr255;
|
|
|
|
|
class CMailNewsWindow;
|
|
|
|
|
class CBrowserWindow;
|
|
|
|
|
class CLICommander;
|
|
|
|
|
|
|
|
|
|
/*****************************************************************************
|
|
|
|
|
* CFrontApp
|
|
|
|
|
* the application class. It takes care of managing the documents. Only one
|
|
|
|
|
* preference document can be open at any time, and no documents can be opened
|
|
|
|
|
* before we read in the preferences.
|
|
|
|
|
* The application uses windows in place of documents. We could have discarded
|
|
|
|
|
* documents completely, but this would affect AppleEvent recording (I think).
|
|
|
|
|
*
|
|
|
|
|
* Window is created blank, without the home page. After the window is created,
|
|
|
|
|
* window's function DoOpenURL should be called to open its first document.
|
|
|
|
|
*****************************************************************************/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// ---------------------------------------------------------------------------
|
|
|
|
|
// For the moment CAppleEventHandler requires a small bit of knowledge
|
|
|
|
|
// about uapp.cp. All shared info goes here til the separation can
|
|
|
|
|
// be completed.
|
|
|
|
|
|
|
|
|
|
#define FILE_TYPE_PREFS 1
|
|
|
|
|
#define FILE_TYPE_ODOC 2
|
|
|
|
|
#define FILE_TYPE_GETURL 3
|
|
|
|
|
#define FILE_TYPE_NONE 4
|
|
|
|
|
#define FILE_TYPE_PROFILES 5
|
|
|
|
|
#define FILE_TYPE_ASW 6
|
1998-06-23 05:36:59 +04:00
|
|
|
|
#define FILE_TYPE_LDIF 7
|
|
|
|
|
#define STARTUP_TYPE_NETPROFILE 8
|
1998-03-28 05:44:41 +03:00
|
|
|
|
|
|
|
|
|
char* GetBookmarksPath( FSSpec& spec, Boolean useDefault );
|
|
|
|
|
|
|
|
|
|
// ----- End stuff required by CAppleEvent.cp
|
|
|
|
|
|
|
|
|
|
|
1998-06-23 05:36:59 +04:00
|
|
|
|
//----------------------------------------------------------------------------------------
|
1998-03-28 05:44:41 +03:00
|
|
|
|
class CFrontApp : public LDocApplication, public CTaskBarListener
|
1998-06-23 05:36:59 +04:00
|
|
|
|
//----------------------------------------------------------------------------------------
|
1998-03-28 05:44:41 +03:00
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
static CFrontApp* sApplication; // One and only instance of the application
|
|
|
|
|
// <20><> Constructors/destructors
|
|
|
|
|
CFrontApp();
|
|
|
|
|
virtual ~CFrontApp();
|
|
|
|
|
virtual void Initialize();
|
|
|
|
|
// for changing notification
|
|
|
|
|
virtual void EventSuspend(const EventRecord &inMacEvent);
|
|
|
|
|
virtual void EventResume(const EventRecord &inMacEvent);
|
|
|
|
|
|
|
|
|
|
// <20> patches in Mercutio
|
|
|
|
|
virtual void EventKeyDown( const EventRecord& inMacEvent );
|
|
|
|
|
|
|
|
|
|
// so plug-ins can get key ups (which are ignored by default)
|
|
|
|
|
virtual void ProcessNextEvent();
|
|
|
|
|
virtual void EventKeyUp(const EventRecord &inMacEvent);
|
|
|
|
|
|
|
|
|
|
Boolean HasProperlyStartedUp() const { return fProperStartup; }
|
|
|
|
|
|
|
|
|
|
// Delayed startup. Called with launched open/print file (if any).
|
|
|
|
|
void ProperStartup( FSSpec* fileSpec, short fileType );
|
|
|
|
|
|
|
|
|
|
// Startup w/o any documents
|
|
|
|
|
virtual void StartUp(); // Creates a home page document on startup
|
|
|
|
|
void CreateStartupEnvironment( Boolean openStartupWindows ); // Opens the proper window
|
|
|
|
|
// <20><> documents/windows
|
|
|
|
|
// Startup w/ a document or
|
|
|
|
|
virtual void OpenDocument(FSSpec *inFileSpec);
|
|
|
|
|
virtual void PrintDocument(FSSpec *inFileSpec);
|
|
|
|
|
virtual void ChooseDocument();
|
|
|
|
|
|
|
|
|
|
// Opens a hypertext document
|
|
|
|
|
virtual LModelObject* MakeNewDocument();
|
|
|
|
|
|
|
|
|
|
// <20><> Global static routines. Could not think of better place to put them
|
|
|
|
|
|
|
|
|
|
// Registers types with netlib
|
|
|
|
|
static void RegisterMimeType(CMimeMapper * mapper);
|
|
|
|
|
|
|
|
|
|
// returns application object.
|
|
|
|
|
|
|
|
|
|
static CFrontApp* GetApplication();
|
|
|
|
|
|
|
|
|
|
// <20><> Cached preference values (requires application restart to notice new values)
|
|
|
|
|
|
1998-06-23 05:36:59 +04:00
|
|
|
|
Boolean HasBookmarksMenu() const { return mHasBookmarksMenu; }
|
|
|
|
|
Boolean HasFrontierMenuSharing() const { return mHasFrontierMenuSharing; }
|
|
|
|
|
Boolean HasImportModule() const { return mImportModuleExists; }
|
|
|
|
|
Boolean HasAOLInstantMessenger() const { return mAOLMessengerExists; }
|
1998-03-28 05:44:41 +03:00
|
|
|
|
// <20><><EFBFBD>Menubar management
|
|
|
|
|
|
|
|
|
|
static const list<CommandT>&
|
|
|
|
|
GetCommandsToUpdateBeforeSelectingMenu() {
|
|
|
|
|
return sCommandsToUpdateBeforeSelectingMenu;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
virtual void ClickMenuBar(const EventRecord& inMacEvent);
|
|
|
|
|
|
|
|
|
|
virtual void SetMenubar( ResIDT mbar, Boolean inUpdateNow = false ); // If appleMenu is 0, do not rebuild it
|
|
|
|
|
virtual void UpdateMenus();
|
|
|
|
|
void UpdateHierarchicalMenus();
|
|
|
|
|
|
|
|
|
|
static void InstallMenus();
|
|
|
|
|
static int BuildConfigurableMenu(MenuHandle, const char* xp_name, short stringsID = 0);
|
|
|
|
|
Boolean HandleSyntheticCommand( CommandT inCommand );
|
|
|
|
|
static void DoHelpMenuItem( short itemNum );
|
|
|
|
|
|
|
|
|
|
// <20><> Command handling
|
|
|
|
|
static void DoGetURL (const cstring& url); // DoGetURL loads the given url into the frontmost window, or new one if there is no frontmost
|
|
|
|
|
static void DoOpenDirectoryURL( CommandT menuCommand );
|
|
|
|
|
static void DoOpenLogoURL( CommandT menuCommand );
|
|
|
|
|
void OpenLocalURL( FSSpec* inFileSpec,
|
|
|
|
|
CBrowserWindow * win = NULL,
|
|
|
|
|
char * mime_type = NULL,
|
|
|
|
|
Boolean delayed = FALSE); // use delayed argument if you are using drag'n'drop to avoid errors due to dialogs popping us
|
|
|
|
|
void OpenBookmarksFile( FSSpec* inFileSpec, CBrowserWindow * win, Boolean delayed);
|
|
|
|
|
void DoOpenDoc( FSSpec* initDoc, short fileType );
|
|
|
|
|
|
|
|
|
|
// <20><> Taskbar support
|
|
|
|
|
virtual void ListenToMessage (MessageT inMessage, void *ioParam);
|
|
|
|
|
|
|
|
|
|
virtual void ShowAboutBox();
|
|
|
|
|
|
|
|
|
|
//=== begin: add for TSMSupport
|
|
|
|
|
|
1998-06-23 05:36:59 +04:00
|
|
|
|
virtual Boolean AttemptQuitSelf(Int32 inSaveOption = kAEAsk);
|
1998-03-28 05:44:41 +03:00
|
|
|
|
virtual void DoQuit(Int32 inSaveOption = kAEAsk);
|
|
|
|
|
virtual void DispatchEvent(const EventRecord &inMacEvent);
|
|
|
|
|
|
|
|
|
|
// splash screen
|
|
|
|
|
static void SplashProgress(CStr255 inMessage);
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD>Command and menus setup
|
|
|
|
|
virtual Boolean ObeyCommand(CommandT inCommand, void *ioParam = nil);
|
|
|
|
|
virtual void FindCommandStatus(CommandT inCommand,
|
|
|
|
|
Boolean &outEnabled, Boolean &outUsesMark,
|
|
|
|
|
Char16 &outMark, Str255 outName);
|
|
|
|
|
virtual void ProcessCommandStatus(CommandT inCommand,
|
|
|
|
|
Boolean &outEnabled, Boolean &outUsesMark,
|
|
|
|
|
Char16 &outMark, Str255 outName);
|
1998-06-23 05:36:59 +04:00
|
|
|
|
|
|
|
|
|
|
1998-03-28 05:44:41 +03:00
|
|
|
|
|
|
|
|
|
// <20><> AE handling
|
|
|
|
|
virtual void HandleAppleEvent(const AppleEvent &inAppleEvent,
|
|
|
|
|
AppleEvent &outAEReply,
|
|
|
|
|
AEDesc &outResult,
|
|
|
|
|
long inAENumber);
|
|
|
|
|
virtual void GetAEProperty(DescType inProperty,
|
|
|
|
|
const AEDesc &inRequestedType,
|
|
|
|
|
AEDesc &outPropertyDesc) const;
|
|
|
|
|
virtual void SetAEProperty(DescType inProperty,
|
|
|
|
|
const AEDesc &inRequestedType,
|
|
|
|
|
AEDesc &outPropertyDesc);
|
|
|
|
|
|
|
|
|
|
virtual void SetupPage();
|
|
|
|
|
|
|
|
|
|
// spy Apple Event suite
|
|
|
|
|
|
|
|
|
|
static CMailNewsWindow* GetMailNewsWindow();
|
|
|
|
|
|
|
|
|
|
// EA - Netcaster support
|
|
|
|
|
void LaunchNetcaster(void);
|
|
|
|
|
MWContext* GetNetcasterContext(void);
|
|
|
|
|
void SetNetcasterContext(MWContext *);
|
|
|
|
|
|
|
|
|
|
// 97-05-12 pkc -- dpi support for MWContext
|
|
|
|
|
static double sHRes;
|
|
|
|
|
static double sVRes;
|
|
|
|
|
|
|
|
|
|
static CAutoPtr<CNSContext> sRDFContext;
|
|
|
|
|
|
|
|
|
|
// DW FIX i made these non-static, and protected instead of public
|
|
|
|
|
protected:
|
|
|
|
|
void InitBookmarks();
|
|
|
|
|
#ifdef MOZ_LOC_INDEP
|
|
|
|
|
void InitializeLocationIndependence();
|
|
|
|
|
#endif
|
|
|
|
|
virtual void UpdateMenusSelf();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
virtual void AdjustCursor (const EventRecord &inMacEvent);
|
|
|
|
|
//=== end: add for TSMSupport
|
|
|
|
|
|
|
|
|
|
void ShowSplashScreen(void);
|
|
|
|
|
void DestroySplashScreen(void);
|
|
|
|
|
|
|
|
|
|
CSplashScreen* mSplashScreen;
|
|
|
|
|
|
|
|
|
|
Boolean AgreedToLicense( FSSpec* callbackWith, short fileType );
|
|
|
|
|
|
|
|
|
|
void MemoryIsLow();
|
|
|
|
|
|
|
|
|
|
void DoWindowsMenu(CommandT inCommand); // Execute windows menu command
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void DoOpenURLDialog(void);
|
|
|
|
|
#ifdef EDITOR
|
|
|
|
|
void DoOpenURLDialogInEditor(void);
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
void InsertItemIntoWindowsMenu(CStr255& title,
|
|
|
|
|
int currItem, LWindow * win, short iconID=0); // Utility function to add an item into windows menu
|
|
|
|
|
|
|
|
|
|
void LaunchExternalApp(OSType inAppSig, ResIDT inAppNameStringResourceID);
|
|
|
|
|
Boolean Find3270Applet(FSSpec& tn3270File);
|
|
|
|
|
void Launch3270Applet();
|
|
|
|
|
|
|
|
|
|
Boolean LaunchAccountSetup();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ResIDT fCurrentMbar; // Currently active menu bar
|
|
|
|
|
ResIDT fWantedMbar;
|
|
|
|
|
|
|
|
|
|
LArray fWindowsMenu; // LWindow * of windows in the window menu.
|
|
|
|
|
static short sHelpMenuOrigLength;
|
|
|
|
|
static short sHelpMenuItemCount;
|
|
|
|
|
|
|
|
|
|
Boolean fStartupAborted;
|
|
|
|
|
Boolean fSafeToQuit;
|
|
|
|
|
Boolean fUserWantsToQuit;
|
|
|
|
|
Boolean fProperStartup;
|
|
|
|
|
|
|
|
|
|
LPeriodical* mLibMsgPeriodical;
|
|
|
|
|
|
|
|
|
|
Boolean mConferenceApplicationExists;
|
1998-06-23 05:36:59 +04:00
|
|
|
|
Boolean mImportModuleExists;
|
|
|
|
|
Boolean mAOLMessengerExists;
|
1998-03-28 05:44:41 +03:00
|
|
|
|
Boolean mJavaEnabled;
|
|
|
|
|
|
|
|
|
|
Boolean mHasBookmarksMenu;
|
|
|
|
|
Boolean mHasFrontierMenuSharing;
|
|
|
|
|
|
|
|
|
|
static list<CommandT> sCommandsToUpdateBeforeSelectingMenu;
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
static int SetBooleanWithPref(const char *prefName, void *boolPtr);
|
|
|
|
|
// boolPtr is really a (boolean *)
|
|
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
FSSpec CreateAccountSetupSpec();
|
|
|
|
|
|
|
|
|
|
MWContext* mNetcasterContext; // EA - Track the Netcaster window
|
|
|
|
|
RgnHandle mMouseRgnH;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
#ifdef PROFILE
|
|
|
|
|
void StartProfiling();
|
|
|
|
|
void StopProfiling();
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#ifdef MOZ_MAIL_NEWS
|
|
|
|
|
// TRUE if url *must* be loaded in this context type
|
|
|
|
|
Boolean URLRequiresContextType( const URL_Struct* url , MWContextType &type);
|
|
|
|
|
#endif
|
|
|
|
|
|