mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-05 08:35:26 +00:00
192 lines
6.9 KiB
C++
192 lines
6.9 KiB
C++
/* -*- Mode: C++; tab-width: 3; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
|
*
|
|
* The contents of this file are subject to the Mozilla Public
|
|
* License 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/MPL/
|
|
*
|
|
* 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 the Mozilla browser.
|
|
*
|
|
* The Initial Developer of the Original Code is Netscape
|
|
* Communications, Inc. Portions created by Netscape are
|
|
* Copyright (C) 1999, Mozilla. All Rights Reserved.
|
|
*
|
|
* Contributor(s):
|
|
* Conrad Carlen <conrad@ingress.com>
|
|
*/
|
|
|
|
#include <LWindow.h>
|
|
#include <LListener.h>
|
|
|
|
#ifndef nsError_h
|
|
#include "nsError.h"
|
|
#endif
|
|
|
|
#ifndef nsCom_h__
|
|
#include "nsCom.h"
|
|
#endif
|
|
|
|
#ifndef nsCOMPtr_h___
|
|
#include "nsCOMPtr.h"
|
|
#endif
|
|
|
|
#ifndef nscore_h___
|
|
#include "nscore.h"
|
|
#endif
|
|
|
|
#ifndef nsIWidget_h__
|
|
#include "nsIWidget.h"
|
|
#endif
|
|
|
|
#include "nsIWebBrowserChrome.h"
|
|
|
|
class CBrowserShell;
|
|
class CWebBrowserChrome;
|
|
class LEditText;
|
|
class LStaticText;
|
|
class CThrobber;
|
|
class LBevelButton;
|
|
class LProgressBar;
|
|
class nsIDocumentLoader;
|
|
class nsIURI;
|
|
class nsIRequest;
|
|
class nsIWebProgress;
|
|
class CWebBrowserCMAttachment;
|
|
class nsIDOMEvent;
|
|
class nsIDOMNode;
|
|
|
|
// CBrowserWindow:
|
|
// A simple browser window that hooks up a CBrowserShell to a minimal set of controls
|
|
// (Back, Forward and Stop buttons + URL field + status bar).
|
|
|
|
|
|
class CBrowserWindow : public LWindow,
|
|
public LListener,
|
|
public LBroadcaster
|
|
{
|
|
private:
|
|
typedef LWindow Inherited;
|
|
|
|
friend class CWebBrowserChrome;
|
|
friend class CWindowCreator;
|
|
|
|
public:
|
|
enum { class_ID = FOUR_CHAR_CODE('BroW') };
|
|
|
|
CBrowserWindow();
|
|
CBrowserWindow(LCommander* inSuperCommander,
|
|
const Rect& inGlobalBounds,
|
|
ConstStringPtr inTitle,
|
|
SInt16 inProcID,
|
|
UInt32 inAttributes,
|
|
WindowPtr inBehind,
|
|
Boolean inIsChromeWindow);
|
|
CBrowserWindow(LStream* inStream);
|
|
|
|
virtual ~CBrowserWindow();
|
|
|
|
static CBrowserWindow* CreateWindow(PRUint32 chromeFlags, PRInt32 width, PRInt32 height);
|
|
|
|
virtual void FinishCreate();
|
|
virtual void FinishCreateSelf();
|
|
virtual void ResizeFrameBy(SInt16 inWidthDelta,
|
|
SInt16 inHeightDelta,
|
|
Boolean inRefresh);
|
|
virtual void ShowSelf();
|
|
|
|
virtual void ListenToMessage(MessageT inMessage,
|
|
void* ioParam);
|
|
|
|
virtual Boolean ObeyCommand(CommandT inCommand,
|
|
void *ioParam);
|
|
|
|
virtual void FindCommandStatus(PP_PowerPlant::CommandT inCommand,
|
|
Boolean &outEnabled,
|
|
Boolean &outUsesMark,
|
|
PP_PowerPlant::Char16 &outMark,
|
|
Str255 outName);
|
|
|
|
NS_METHOD GetWidget(nsIWidget** aWidget);
|
|
CBrowserShell* GetBrowserShell() const
|
|
{ return mBrowserShell; }
|
|
|
|
void SetSizeToContent(Boolean isSizedToContent)
|
|
{ mSizeToContent = isSizedToContent; }
|
|
Boolean GetSizeToContent()
|
|
{ return mSizeToContent; }
|
|
NS_METHOD SizeToContent();
|
|
|
|
NS_METHOD Stop();
|
|
Boolean IsBusy()
|
|
{ return mBusy; }
|
|
|
|
protected:
|
|
|
|
// Called by both constructors
|
|
NS_METHOD CommonConstruct();
|
|
|
|
// -----------------------------------
|
|
// Methods called by CWebBrowserChrome
|
|
// -----------------------------------
|
|
|
|
NS_METHOD SetStatus(const PRUnichar* aStatus);
|
|
NS_METHOD SetOverLink(const PRUnichar* aStatus)
|
|
{ return SetStatus(aStatus); }
|
|
|
|
NS_METHOD SetLocation(const nsString& aLocation);
|
|
|
|
NS_METHOD OnStatusNetStart(nsIWebProgress *progress, nsIRequest *request,
|
|
PRInt32 progressStateFlags, PRUint32 status);
|
|
NS_METHOD OnStatusNetStop(nsIWebProgress *progress, nsIRequest *request,
|
|
PRInt32 progressStateFlags, PRUint32 status);
|
|
|
|
NS_METHOD OnProgressChange(nsIWebProgress *progress, nsIRequest *request,
|
|
PRInt32 curSelfProgress, PRInt32 maxSelfProgress,
|
|
PRInt32 curTotalProgress, PRInt32 maxTotalProgress);
|
|
|
|
NS_METHOD GetVisibility(PRBool *aVisibility);
|
|
NS_METHOD SetVisibility(PRBool aVisibility);
|
|
|
|
NS_METHOD OnShowContextMenu(PRUint32 aContextFlags, nsIDOMEvent *aEvent, nsIDOMNode *aNode);
|
|
|
|
NS_METHOD GetIWebBrowserChrome(nsIWebBrowserChrome **aChrome);
|
|
|
|
// -----------------------------------
|
|
// Internal
|
|
// -----------------------------------
|
|
|
|
NS_METHOD SetTitleFromDOMDocument();
|
|
|
|
protected:
|
|
nsCOMPtr<nsIWidget> mWindow;
|
|
|
|
Boolean mIsChromeWindow;
|
|
CBrowserShell* mBrowserShell;
|
|
CWebBrowserChrome* mBrowserChrome;
|
|
LEditText* mURLField;
|
|
LStaticText* mStatusBar;
|
|
CThrobber* mThrobber;
|
|
LBevelButton *mBackButton, *mForwardButton, *mStopButton;
|
|
LProgressBar* mProgressBar;
|
|
Boolean mBusy;
|
|
Boolean mInitialLoadComplete;
|
|
Boolean mVisible; // whether we are visible according to Get/SetVisibility
|
|
Boolean mSizeToContent;
|
|
|
|
PRUint32 mContextMenuContext;
|
|
nsIDOMNode* mContextMenuDOMNode; // weak ref - only kept during call of OnShowContextMenu
|
|
};
|
|
|
|
// ---------------------------------------------------------------------------
|
|
// Global Functions
|
|
// ---------------------------------------------------------------------------
|
|
|
|
// Must be called at initialization time - after NS_InitEmbedding
|
|
nsresult InitializeWindowCreator();
|
|
|