зеркало из https://github.com/mozilla/gecko-dev.git
218 строки
6.7 KiB
C++
218 строки
6.7 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.
|
|
*/
|
|
|
|
#ifndef __FrameGlue_H
|
|
// Avoid include redundancy
|
|
//
|
|
#define __FrameGlue_H
|
|
|
|
// Purpose: Provide a class from which all frame windows are derived from
|
|
// so that appropriate aggregation can occur between frames.
|
|
// Comments: Created mainly because In place frames have a different derivation
|
|
// tree than normal frame windows. The only way to pass around a
|
|
// common pointer is to introduce a third class which holds a common
|
|
// API to the frame windows.
|
|
// Revision History:
|
|
// 07-31-95 created GAB
|
|
//
|
|
|
|
// Required Includes
|
|
//
|
|
#include "apichrom.h"
|
|
// Constants
|
|
//
|
|
|
|
|
|
// Structures
|
|
//
|
|
class CFrameGlue {
|
|
|
|
// Frames have concepts of multiple contexts.
|
|
// Provide a way to get the active (or last active) context.
|
|
// Provide a way to get the Main context (frames should always have one context).
|
|
private:
|
|
CAbstractCX *m_pMainContext;
|
|
CAbstractCX *m_pActiveContext;
|
|
BOOL m_isBackgroundPalette;
|
|
|
|
|
|
// Need a constructor for initializations....
|
|
protected:
|
|
CFrameGlue();
|
|
public:
|
|
virtual ~CFrameGlue();
|
|
|
|
// How to get the frame glue from a frame window.
|
|
public:
|
|
static CFrameGlue *GetFrameGlue(CFrameWnd *pFrame);
|
|
|
|
protected:
|
|
friend class CGenericView; // Views can manipulate the frames active context.
|
|
friend class CInPlaceFrame;
|
|
|
|
void SetMainContext(CAbstractCX *pContext);
|
|
void SetActiveContext(CAbstractCX *pContext);
|
|
public:
|
|
virtual CAbstractCX *GetMainContext() const;
|
|
virtual CAbstractCX *GetActiveContext() const;
|
|
// For all those routines that think contexts are window contexts
|
|
virtual CWinCX *GetMainWinContext() const;
|
|
virtual CWinCX *GetActiveWinContext() const;
|
|
BOOL IsBackGroundPalette() {return m_isBackgroundPalette;}
|
|
void SetIsBackgroundPalette(BOOL flag) {m_isBackgroundPalette = flag;}
|
|
BOOL RealizePalette(CWnd *pWnd, HWND hFocusWnd,BOOL background);
|
|
|
|
void ClearContext(CAbstractCX *pGone);
|
|
|
|
// Override this in Editor Frame to return TRUE.
|
|
virtual BOOL IsEditFrame() {return FALSE; }
|
|
|
|
protected:
|
|
IChrome *m_pChrome;
|
|
|
|
private:
|
|
|
|
BOOL m_bCanRestoreState;
|
|
int m_iSaveToolBarStyle;
|
|
BOOL m_bSaveToolBarVisible;
|
|
BOOL m_bSaveLocationBarVisible;
|
|
BOOL m_bSaveStarterBarVisible;
|
|
|
|
public:
|
|
void SaveBarState() {
|
|
m_bCanRestoreState = TRUE;
|
|
m_bSaveToolBarVisible = m_pChrome->GetToolbarVisible(ID_NAVIGATION_TOOLBAR);
|
|
m_bSaveLocationBarVisible = m_pChrome->GetToolbarVisible(ID_LOCATION_TOOLBAR) ||
|
|
m_pChrome->GetToolbarVisible(ID_MESSENGER_INFOBAR);
|
|
m_bSaveStarterBarVisible = m_pChrome->GetToolbarVisible(ID_PERSONAL_TOOLBAR);
|
|
}
|
|
void RestoreBarState() {
|
|
if(m_bCanRestoreState == TRUE) {
|
|
m_pChrome->ShowToolbar(ID_NAVIGATION_TOOLBAR, m_bSaveToolBarVisible);
|
|
m_pChrome->ShowToolbar(ID_LOCATION_TOOLBAR, m_bSaveLocationBarVisible);
|
|
m_pChrome->ShowToolbar(ID_MESSENGER_INFOBAR, m_bSaveLocationBarVisible);
|
|
m_pChrome->ShowToolbar(ID_PERSONAL_TOOLBAR, m_bSaveStarterBarVisible);
|
|
}
|
|
}
|
|
|
|
IChrome *GetChrome() const { return m_pChrome; }
|
|
|
|
// You don't necessarily have to use these, but here they are.
|
|
public:
|
|
int m_iCSID;
|
|
|
|
// Mostly shared prefs.
|
|
public:
|
|
XP_Bool m_bShowToolbar;
|
|
XP_Bool m_bLocationBar;
|
|
XP_Bool m_bStarter;
|
|
|
|
// Keep track of the find replace dialog.
|
|
// There can be only one.
|
|
private:
|
|
CNetscapeFindReplaceDialog *m_pFindReplace;
|
|
public:
|
|
BOOL CanFindReplace() const {
|
|
return(m_pFindReplace == NULL);
|
|
}
|
|
void SetFindReplace(CNetscapeFindReplaceDialog *pDialog) {
|
|
ASSERT(m_pFindReplace == NULL);
|
|
m_pFindReplace = pDialog;
|
|
}
|
|
CNetscapeFindReplaceDialog *GetFindReplace() {
|
|
return m_pFindReplace;
|
|
}
|
|
void ClearFindReplace() {
|
|
m_pFindReplace = NULL;
|
|
}
|
|
|
|
// Keeping track of the last active frame...
|
|
protected:
|
|
static CPtrList m_cplActiveFrameStack;
|
|
static CPtrList m_cplActiveNotifyCBList;
|
|
static CPtrList m_cplActiveContextCBList;
|
|
|
|
void SetAsActiveFrame();
|
|
|
|
public:
|
|
typedef void (*ActiveNotifyCB)(CFrameGlue *);
|
|
typedef void (*ActiveContextCB)(CFrameGlue *, CAbstractCX *);
|
|
|
|
static void AddActiveNotifyCB( ActiveNotifyCB cb );
|
|
static void RemoveActiveNotifyCB( ActiveNotifyCB cb );
|
|
static void AddActiveContextCB( ActiveContextCB cb );
|
|
static void RemoveActiveContextCB( ActiveContextCB cb );
|
|
|
|
static CFrameGlue *GetLastActiveFrame(MWContextType cxType = MWContextAny, int nFindEditor = FEU_FINDBROWSERONLY);
|
|
|
|
// bUseSaveInfo is true if custToolbar's save info field should be used to disregard frames if save info is FALSE
|
|
static CFrameGlue *GetLastActiveFrameByCustToolbarType(CString custToolbar, CFrameWnd *pCurrentFrame, BOOL bUseSaveInfo);
|
|
static CFrameGlue *GetBottomFrame(MWContextType cxType = MWContextAny, int nFindEditor = FEU_FINDBROWSERONLY);
|
|
|
|
static int GetNumActiveFrames(MWContextType cxType = MWContextAny, int nFindEditor = FEU_FINDBROWSERONLY);
|
|
|
|
// How to look up a frame window via context ID.
|
|
|
|
static CFrameGlue *FindFrameByID(DWORD dwID, MWContextType cxType = MWContextAny);
|
|
|
|
// A common command ID handler for all frames.
|
|
// Should be called by your derived OnCommand implementation.
|
|
protected:
|
|
// This is a quick hack until the full security advisor is done.
|
|
void SecurityDialog();
|
|
public:
|
|
BOOL CommonCommand(UINT wParam, LONG lParam);
|
|
|
|
// Helper funtion to toggle WS_CLIPCHILDREN for a branch of the frame heirarchy
|
|
protected:
|
|
CMapPtrToPtr * m_pClipChildMap;
|
|
public:
|
|
void ClipChildren(CWnd *pWnd, BOOL bSet);
|
|
|
|
// Pure virtual APIs, must be correctly defined by the deriving frame window class.
|
|
public:
|
|
// Access to the CFrameWnd pointer.
|
|
// This could possibly return NULL if someone is not really a frame window, but
|
|
// wants to act like one via deriving from CFrameGlue....
|
|
virtual CFrameWnd *GetFrameWnd() = 0;
|
|
|
|
// Updating of the history window, if around.
|
|
virtual void UpdateHistoryDialog() = 0;
|
|
virtual void SetSecurityStatus(int) {}
|
|
};
|
|
|
|
class CNullFrame : public CFrameGlue {
|
|
virtual CAbstractCX *GetMainContext() const;
|
|
virtual CAbstractCX *GetActiveContext() const;
|
|
virtual CFrameWnd *GetFrameWnd();
|
|
virtual void UpdateHistoryDialog();
|
|
};
|
|
|
|
// Global variables
|
|
//
|
|
|
|
// Macros
|
|
//
|
|
|
|
// Function declarations
|
|
//
|
|
CFrameGlue *GetFrame(MWContext *pContext);
|
|
|
|
|
|
#endif // __FrameGlue_H
|