mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-24 18:55:30 +00:00
547 lines
17 KiB
C++
547 lines
17 KiB
C++
/* -*- 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.
|
|
*/
|
|
|
|
// CNSContext.h
|
|
|
|
|
|
#pragma once
|
|
|
|
|
|
#include <LBroadcaster.h>
|
|
#include <LSharable.h>
|
|
|
|
#include "structs.h"
|
|
#include "cstring.h"
|
|
|
|
class CHTMLView;
|
|
class CNSContext;
|
|
|
|
|
|
inline CNSContext* ExtractNSContext(MWContext* inContext)
|
|
{ return inContext->fe.newContext; }
|
|
|
|
inline const CNSContext* ExtractConstNSContext(const MWContext* inContext)
|
|
{ return inContext->fe.newContext; }
|
|
|
|
inline CHTMLView* ExtractHyperView(const MWContext* inContext)
|
|
{ return inContext->fe.newView; }
|
|
|
|
|
|
// ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
|
|
// This enumeration contains all of the possible broadcast messages that
|
|
// a CNSContext can give.
|
|
// ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
|
|
|
|
enum {
|
|
// These messages notify thge clients about the layout state.
|
|
msg_NSCDocTitleChanged = 'DTCG', // cstring* theNewTitle
|
|
msg_NSCInternetKeywordChanged = 'IKEY', // char* keyword
|
|
msg_NSCLayoutNewDocument = 'LOND', // URL_Struct* theURL
|
|
msg_NSCFinishedLayout = 'FNLO', // < none >
|
|
|
|
// These messages notify thge clients about the repagination state.
|
|
msg_NSCPEmptyRepagination = 'NLPG', // < none >
|
|
msg_NSCPAboutToRepaginate = 'ABPG', // < none >
|
|
msg_NSCPEditorRepaginate = 'EDPG', // < none >
|
|
|
|
// These messages are key to the whole process of loading a URL.
|
|
// The start loading and all connections complete notifications are
|
|
// guaranteed to be symmetrical.
|
|
msg_NSCStartLoadURL = 'SLUB', // URL_Struct* theURL
|
|
msg_NSCConfirmLoadNewURL = 'CLNU', // Boolean*
|
|
msg_NSCAllConnectionsComplete = 'ACCP', // < none >
|
|
|
|
// A message to all context clients that this grid context is about to die.
|
|
// Clients should clean up and remove their shared references to the context
|
|
// upon receiving this message.
|
|
msg_NSCGridContextPreDispose = 'GCPD', // Boolean* isSavingHistory
|
|
|
|
// A message to all context clients that a child grid context has been
|
|
// created or disposed. Clients will want to know if a grid is created
|
|
// so that they can add themselves as a listener or add a shared reference
|
|
// to the new context.
|
|
msg_NSCGridContextCreated = 'GCCR', // CNSContext* new grid
|
|
msg_NSCGridContextDisposed = 'GCDP', // < none >
|
|
|
|
// Progress notifications, like the url loading notifications are
|
|
// guaranteed to be symmetric. There will always be one begin,
|
|
// n updates, and one end notification.
|
|
msg_NSCProgressBegin = 'PGST', // CContextProgress*
|
|
msg_NSCProgressUpdate = 'PGUP', // CContextProgress*
|
|
msg_NSCProgressEnd = 'PGED', // CContextProgress*
|
|
|
|
// These are progress messages that are not guaranteed to be sent
|
|
// between bind and end progress notifications.
|
|
// msg_NSCProgressMessageChanged = 'PGMC', // cstring* theNewMessage
|
|
msg_NSCProgressMessageChanged = 'PGMC', // const char* theNewMessage
|
|
msg_NSCProgressPercentChanged = 'PGPC' // Int32* theNewPercent
|
|
};
|
|
|
|
// ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
|
|
// The progress of a particular url loading operation is encapsulated in the
|
|
// following object. Accessors are provided in the context to support this.
|
|
// This object is only instantiated during the actual load itself, begining
|
|
// with msg_NSCStartLoadURL notification and ending with the
|
|
// msg_NSCAllConnectionsComplete notification. At all other (inactive) times
|
|
// the accessors for this object will return NULL. See the accessor comments
|
|
// for further information.
|
|
// ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
|
|
|
|
class CContextProgress : public LSharable
|
|
{
|
|
public:
|
|
CContextProgress();
|
|
|
|
Int32 mTotal; // Total bytes tracked
|
|
Int32 mRead; // How many have been read
|
|
Int32 mUnknownCount; // How many connections of the unknown length do we have
|
|
Int32 mPercent; // Percent complete
|
|
Int32 mInitCount;
|
|
Uint32 mStartTime;
|
|
|
|
cstring mAction;
|
|
cstring mMessage;
|
|
cstring mComment;
|
|
};
|
|
|
|
// ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
|
|
//
|
|
// ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
|
|
|
|
class CNSContext : public LBroadcaster, public LSharable
|
|
{
|
|
friend class CNSContextCallbacks;
|
|
friend class CPlainTextConversionContext;
|
|
|
|
public:
|
|
CNSContext(MWContextType inType);
|
|
CNSContext(const CNSContext& inOriginal);
|
|
|
|
virtual ~CNSContext();
|
|
|
|
virtual void NoMoreUsers();
|
|
|
|
operator MWContext*();
|
|
operator const MWContext*() const;
|
|
operator MWContext&();
|
|
operator const MWContext&() const;
|
|
|
|
virtual CContextProgress* GetContextProgress();
|
|
|
|
protected:
|
|
virtual void SetContextProgress(CContextProgress* inProgress);
|
|
public:
|
|
void EnsureContextProgress();
|
|
|
|
virtual cstring GetDescriptor() const;
|
|
virtual void SetDescriptor(const char* inDescriptor);
|
|
|
|
virtual Boolean IsCloneRequired() const;
|
|
virtual void SetRequiresClone(Boolean inClone);
|
|
|
|
virtual CContextProgress* GetCurrentProgressStats();
|
|
virtual void UpdateCurrentProgressStats();
|
|
|
|
virtual void WaitWhileBusy();
|
|
|
|
// FIX ME!!! ACCESSOR for unique ID
|
|
|
|
// CHARACTER SET ACCESSORS
|
|
|
|
void InitDefaultCSID();
|
|
virtual void SetDefaultCSID(Int16 inDefaultCSID);
|
|
virtual Int16 GetDefaultCSID() const;
|
|
virtual void SetDocCSID(Int16 inDocCSID);
|
|
virtual Int16 GetDocCSID() const;
|
|
virtual void SetWinCSID(Int16 inWinCSID);
|
|
virtual Int16 GetWinCSID() const;
|
|
virtual Int16 GetWCSIDFromDocCSID(
|
|
Int16 inDocCSID);
|
|
|
|
|
|
class IndexOutOfRangeException { };
|
|
virtual History_entry* GetCurrentHistoryEntry();
|
|
virtual Int32 GetHistoryListCount();
|
|
virtual cstring* GetHistoryEntryTitleByIndex(Int32 inIndex); // one-based index
|
|
virtual Int32 GetIndexOfCurrentHistoryEntry();
|
|
virtual void GetHistoryURLByIndex(cstring& outURL, Int32 inIndex); // one-based index
|
|
|
|
// URL MANIPULATION
|
|
// 97-10-29 pchen -- Fix bug #90892, prefer origin_url in history entry to address
|
|
virtual cstring GetURLForReferral();
|
|
|
|
virtual cstring GetCurrentURL();
|
|
|
|
virtual void SwitchLoadURL(
|
|
URL_Struct* inURL,
|
|
FO_Present_Types inOutputFormat);
|
|
|
|
virtual void ImmediateLoadURL(
|
|
URL_Struct* inURL,
|
|
FO_Present_Types inOutputFormat);
|
|
|
|
// Need to make Alert public because we need to be able to call it from FE_Alert
|
|
virtual void Alert(
|
|
const char* inAlertText);
|
|
|
|
// STATUS
|
|
|
|
virtual const char* GetDefaultStatus() const;
|
|
virtual void ClearDefaultStatus();
|
|
virtual void SetStatus(const char* inStatus);
|
|
|
|
// STUFF
|
|
virtual void CompleteLoad(URL_Struct* inURL, int inStatus);
|
|
virtual void ClearMWContextViewPtr();
|
|
|
|
virtual void CopyListenersToContext(CNSContext* aSubContext); // used when spawning grid contexts
|
|
|
|
protected:
|
|
|
|
|
|
// CALLBACK IMPLEMENTATION
|
|
|
|
virtual MWContext* CreateNewDocWindow(
|
|
URL_Struct* inURL);
|
|
|
|
virtual void LayoutNewDocument(
|
|
URL_Struct* inURL,
|
|
Int32* inWidth,
|
|
Int32* inHeight,
|
|
Int32* inMarginWidth,
|
|
Int32* inMarginHeight);
|
|
|
|
virtual void SetDocTitle(
|
|
char* inTitle);
|
|
|
|
virtual void FinishedLayout();
|
|
|
|
virtual char* TranslateISOText(
|
|
int inCharset,
|
|
char* inISOText);
|
|
|
|
virtual int GetTextInfo(
|
|
LO_TextStruct* inText,
|
|
LO_TextInfo* inTextInfo);
|
|
|
|
virtual int MeasureText(
|
|
LO_TextStruct* inText,
|
|
short* outCharLocs);
|
|
|
|
virtual void GetEmbedSize(
|
|
LO_EmbedStruct* inEmbedStruct,
|
|
NET_ReloadMethod inReloadMethod);
|
|
|
|
virtual void GetJavaAppSize(
|
|
LO_JavaAppStruct* inJavaAppStruct,
|
|
NET_ReloadMethod inReloadMethod);
|
|
|
|
virtual void GetFormElementInfo(
|
|
LO_FormElementStruct* inElement);
|
|
|
|
virtual void GetFormElementValue(
|
|
LO_FormElementStruct* inElement,
|
|
XP_Bool inHide,
|
|
XP_Bool inSubmit);
|
|
|
|
virtual void ResetFormElement(
|
|
LO_FormElementStruct* inElement);
|
|
|
|
virtual void SetFormElementToggle(
|
|
LO_FormElementStruct* inElement,
|
|
XP_Bool inToggle);
|
|
|
|
virtual void FreeEmbedElement(
|
|
LO_EmbedStruct* inEmbedStruct);
|
|
|
|
virtual void CreateEmbedWindow(
|
|
NPEmbeddedApp* inEmbeddedApp);
|
|
|
|
virtual void SaveEmbedWindow(
|
|
NPEmbeddedApp* inEmbeddedApp);
|
|
|
|
virtual void RestoreEmbedWindow(
|
|
NPEmbeddedApp* inEmbeddedApp);
|
|
|
|
virtual void DestroyEmbedWindow(
|
|
NPEmbeddedApp* inEmbeddedApp);
|
|
|
|
virtual void FreeJavaAppElement(
|
|
LJAppletData* inAppletData);
|
|
|
|
virtual void HideJavaAppElement(
|
|
LJAppletData* inAppletData);
|
|
|
|
virtual void FreeEdgeElement(
|
|
LO_EdgeStruct* inEdgeStruct);
|
|
|
|
virtual void FormTextIsSubmit(
|
|
LO_FormElementStruct* inElement);
|
|
|
|
virtual void DisplaySubtext(
|
|
int inLocation,
|
|
LO_TextStruct* inText,
|
|
Int32 inStartPos,
|
|
Int32 inEndPos,
|
|
XP_Bool inNeedBG);
|
|
|
|
virtual void DisplayText(
|
|
int inLocation,
|
|
LO_TextStruct* inText,
|
|
XP_Bool inNeedBG);
|
|
|
|
virtual void DisplayEmbed(
|
|
int inLocation,
|
|
LO_EmbedStruct* inEmbedStruct);
|
|
|
|
virtual void DisplayJavaApp(
|
|
int inLocation,
|
|
LO_JavaAppStruct* inJavaAppStruct);
|
|
|
|
virtual void DisplayEdge (
|
|
int inLocation,
|
|
LO_EdgeStruct* inEdgeStruct);
|
|
|
|
virtual void DisplayTable(
|
|
int inLocation,
|
|
LO_TableStruct* inTableStruct);
|
|
|
|
virtual void DisplayCell(
|
|
int inLocation,
|
|
LO_CellStruct* inCellStruct);
|
|
|
|
virtual void InvalidateEntireTableOrCell(
|
|
LO_Element* inElement);
|
|
|
|
virtual void DisplayAddRowOrColBorder(
|
|
XP_Rect* inRect,
|
|
XP_Bool inDoErase);
|
|
|
|
virtual void DisplaySubDoc(
|
|
int inLocation,
|
|
LO_SubDocStruct* inSubdocStruct);
|
|
|
|
virtual void DisplayLineFeed(
|
|
int inLocation,
|
|
LO_LinefeedStruct* inLinefeedStruct,
|
|
XP_Bool inNeedBG);
|
|
|
|
virtual void DisplayHR(
|
|
int inLocation,
|
|
LO_HorizRuleStruct* inRuleStruct);
|
|
|
|
virtual void DisplayBullet(
|
|
int inLocation,
|
|
LO_BullettStruct* inBullettStruct);
|
|
|
|
virtual void DisplayFormElement(
|
|
int inLocation,
|
|
LO_FormElementStruct* inFormElement);
|
|
|
|
virtual void DisplayBorder(
|
|
int inLocation,
|
|
int inX,
|
|
int inY,
|
|
int inWidth,
|
|
int inHeight,
|
|
int inBW,
|
|
LO_Color* inColor,
|
|
LO_LineStyle inStyle);
|
|
|
|
virtual void UpdateEnableStates();
|
|
|
|
virtual void DisplayFeedback(
|
|
int inLocation,
|
|
LO_Element* inElement);
|
|
|
|
virtual void ClearView(
|
|
int inWhich);
|
|
|
|
virtual void SetDocDimension(
|
|
int inLocation,
|
|
Int32 inWidth,
|
|
Int32 inLength);
|
|
|
|
virtual void SetDocPosition(
|
|
int inLocation,
|
|
Int32 inX,
|
|
Int32 inY);
|
|
|
|
virtual void GetDocPosition(
|
|
int inLocation,
|
|
Int32* outX,
|
|
Int32* outY);
|
|
|
|
virtual void BeginPreSection();
|
|
|
|
virtual void EndPreSection();
|
|
|
|
virtual void SetProgressBarPercent(
|
|
Int32 inPercent);
|
|
|
|
virtual void SetBackgroundColor(
|
|
Uint8 inRed,
|
|
Uint8 inGreen,
|
|
Uint8 inBlue);
|
|
|
|
public:
|
|
virtual void Progress(
|
|
const char* inMessageText);
|
|
protected:
|
|
virtual void SetCallNetlibAllTheTime();
|
|
|
|
virtual void ClearCallNetlibAllTheTime();
|
|
|
|
virtual void GraphProgressInit(
|
|
URL_Struct* inURL,
|
|
Int32 inContentLength);
|
|
|
|
virtual void GraphProgressDestroy(
|
|
URL_Struct* inURL,
|
|
Int32 inContentLength,
|
|
Int32 inTotalRead);
|
|
|
|
virtual void GraphProgress(
|
|
URL_Struct* inURL,
|
|
Int32 inBytesReceived,
|
|
Int32 inBytesSinceLast,
|
|
Int32 inContentLength);
|
|
|
|
virtual XP_Bool UseFancyFTP();
|
|
|
|
virtual XP_Bool UseFancyNewsgroupListing();
|
|
|
|
virtual int FileSortMethod();
|
|
|
|
virtual XP_Bool ShowAllNewsArticles();
|
|
|
|
virtual XP_Bool Confirm(
|
|
const char* inMessage);
|
|
|
|
virtual XP_Bool CheckConfirm(
|
|
const char* pConfirmMessage,
|
|
const char* pCheckMessage,
|
|
const char* pOKMessage,
|
|
const char* pCancelMessage,
|
|
XP_Bool* pChecked);
|
|
|
|
virtual XP_Bool SelectDialog(
|
|
const char* pMessage,
|
|
char** pList,
|
|
int16* pCount);
|
|
|
|
virtual char* Prompt(
|
|
const char* inMessage,
|
|
const char* inDefaultText);
|
|
|
|
virtual char* PromptWithCaption(
|
|
const char* inCaption,
|
|
const char* inMessage,
|
|
const char* inDefaultText);
|
|
|
|
virtual XP_Bool PromptUsernameAndPassword(
|
|
const char* inMessage,
|
|
char** outUserName,
|
|
char** outPassword);
|
|
|
|
virtual char* PromptPassword(
|
|
const char* inMessage);
|
|
|
|
virtual void EnableClicking();
|
|
|
|
virtual void AllConnectionsComplete();
|
|
|
|
virtual void EraseBackground(
|
|
int inLocation,
|
|
Int32 inX,
|
|
Int32 inY,
|
|
Uint32 inWidth,
|
|
Uint32 inHieght,
|
|
LO_Color* inColor);
|
|
|
|
virtual void SetDrawable(
|
|
CL_Drawable* inDrawable);
|
|
|
|
virtual void GetTextFrame(
|
|
LO_TextStruct* inTextStruct,
|
|
Int32 inStartPos,
|
|
Int32 inEndPos,
|
|
XP_Rect* outFrame);
|
|
|
|
virtual void GetDefaultBackgroundColor(
|
|
LO_Color* outColor) const;
|
|
|
|
virtual void DrawJavaApp(
|
|
int inLocation,
|
|
LO_JavaAppStruct* inJavaAppStruct);
|
|
|
|
virtual void HandleClippingView(
|
|
struct LJAppletData *appletD,
|
|
int x,
|
|
int y,
|
|
int width,
|
|
int height);
|
|
|
|
virtual void FreeBuiltinElement(
|
|
LO_BuiltinStruct * inBuiltinStruct) ;
|
|
virtual void DisplayBuiltin(
|
|
int inLocation,
|
|
LO_BuiltinStruct* inBuiltinStruct) ;
|
|
|
|
public:
|
|
|
|
static UInt32 sNSCWindowID; // Unique ID, incremented for each context
|
|
UInt32 fNSCWindowID; // ID of this window
|
|
Int32 fNSCProgressID; //
|
|
|
|
Int32 GetTransactionID() { return fNSCProgressID; }
|
|
Int32 GetContextUniqueID() { return fNSCWindowID; }
|
|
CommandT GetCurrentCommand() const { return mCurrentCommand; }
|
|
void SetCurrentCommand(CommandT inCommand) { mCurrentCommand = inCommand; }
|
|
// Window ID. Used to identify the context
|
|
|
|
|
|
// There are listeners that listen to several contexts (eg, in mail windows).
|
|
// This works by reference counting, and such listeners assume calls to
|
|
// SwitchLoadURL and AllConnectionsComplete are balanced. Each context must
|
|
// therefore ensure that they are, even if it is done artificially.
|
|
Int32 mLoadRefCount;
|
|
|
|
|
|
protected:
|
|
|
|
|
|
MWContext mContext;
|
|
|
|
Int16 mDefaultCSID;
|
|
Boolean mRequiresClone;
|
|
CContextProgress* mProgress;
|
|
CommandT mCurrentCommand; // command being executed
|
|
};
|
|
|
|
|
|
inline CNSContext::operator MWContext*()
|
|
{ return &mContext; };
|
|
inline CNSContext::operator const MWContext*() const
|
|
{ return &mContext; };
|
|
inline CNSContext::operator MWContext&()
|
|
{ return mContext; };
|
|
inline CNSContext::operator const MWContext&() const
|
|
{ return mContext; };
|
|
|