/* -*- 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 Editors to return TRUE. Default = FALSE virtual BOOL IsEditFrame(); 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