228 lines
8.2 KiB
C++
228 lines
8.2 KiB
C++
/////////////////////////////////////////////////////////////////////////////
|
|
// Copyright (C) 1993-1996 Microsoft Corporation. All Rights Reserved.
|
|
//
|
|
// MODULE: navpane.h
|
|
//
|
|
// PURPOSE: Defines CNavPane class
|
|
//
|
|
|
|
#pragma once
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// Forward Dec's
|
|
//
|
|
class CTreeView;
|
|
interface IMsgrAb;
|
|
interface IAthenaBrowser;
|
|
class CPaneFrame;
|
|
|
|
|
|
class CNavPane : public IDockingWindow,
|
|
public IObjectWithSite,
|
|
public IOleCommandTarget,
|
|
public IInputObjectSite,
|
|
public IInputObject
|
|
{
|
|
public:
|
|
/////////////////////////////////////////////////////////////////////////
|
|
// Construction and Initialization
|
|
//
|
|
CNavPane();
|
|
~CNavPane();
|
|
|
|
HRESULT Initialize(CTreeView *pTreeView);
|
|
|
|
BOOL IsTreeVisible() { return m_fTreeVisible; }
|
|
BOOL ShowFolderList(BOOL fShow);
|
|
BOOL ShowContacts(BOOL fShow);
|
|
BOOL IsContactsFocus();
|
|
|
|
/////////////////////////////////////////////////////////////////////////
|
|
// IUnknown
|
|
//
|
|
STDMETHODIMP QueryInterface(THIS_ REFIID riid, LPVOID *ppvObj);
|
|
STDMETHOD_(ULONG, AddRef)(THIS);
|
|
STDMETHOD_(ULONG, Release)(THIS);
|
|
|
|
/////////////////////////////////////////////////////////////////////////
|
|
// IOleWindow
|
|
//
|
|
STDMETHODIMP GetWindow(HWND* lphwnd);
|
|
STDMETHODIMP ContextSensitiveHelp(BOOL fEnterMode);
|
|
|
|
/////////////////////////////////////////////////////////////////////////
|
|
// IDockingWindow
|
|
//
|
|
STDMETHODIMP ShowDW(BOOL fShow);
|
|
STDMETHODIMP ResizeBorderDW(LPCRECT prcBorder, IUnknown* punkToolbarSite,
|
|
BOOL fReserved);
|
|
STDMETHODIMP CloseDW(DWORD dwReserved);
|
|
|
|
/////////////////////////////////////////////////////////////////////////
|
|
// IObjectWithSite
|
|
//
|
|
STDMETHODIMP GetSite(REFIID riid, LPVOID *ppvSite);
|
|
STDMETHODIMP SetSite(IUnknown *pUnkSite);
|
|
|
|
/////////////////////////////////////////////////////////////////////////
|
|
// IOleCommandTarget
|
|
//
|
|
STDMETHODIMP QueryStatus(const GUID *pguidCmdGroup, ULONG cCmds, OLECMD prgCmds[],
|
|
OLECMDTEXT *pCmdText);
|
|
STDMETHODIMP Exec(const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdExecOpt,
|
|
VARIANTARG *pvaIn, VARIANTARG *pvaOut);
|
|
|
|
/////////////////////////////////////////////////////////////////////////
|
|
// IInputObjectSite
|
|
//
|
|
STDMETHODIMP OnFocusChangeIS(IUnknown* punkSrc, BOOL fSetFocus);
|
|
|
|
/////////////////////////////////////////////////////////////////////////
|
|
// IInputObject
|
|
//
|
|
STDMETHODIMP UIActivateIO(BOOL fActivate, LPMSG lpMsg);
|
|
STDMETHODIMP HasFocusIO(void);
|
|
STDMETHODIMP TranslateAcceleratorIO(LPMSG pMsg);
|
|
|
|
private:
|
|
/////////////////////////////////////////////////////////////////////////
|
|
// Window Proc Goo
|
|
//
|
|
static LRESULT CALLBACK _WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
|
|
LRESULT CALLBACK _NavWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
|
|
|
|
void _OnSize(HWND hwnd, UINT state, int cx, int cy);
|
|
void _OnLButtonDown(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT keyFlags);
|
|
void _OnMouseMove(HWND hwnd, int x, int y, UINT keyFlags);
|
|
void _OnLButtonUp(HWND hwnd, int x, int y, UINT keyFlags);
|
|
BOOL _OnSetCursor(HWND hwnd, HWND hwndCursor, UINT codeHitTest, UINT msg);
|
|
UINT _OnNCHitTest(HWND hwnd, int x, int y);
|
|
|
|
/////////////////////////////////////////////////////////////////////////
|
|
// Utility stuff
|
|
//
|
|
HRESULT _CreateChildWindows(void);
|
|
void _UpdateVisibleState(void);
|
|
|
|
private:
|
|
/////////////////////////////////////////////////////////////////////////
|
|
// Member Data
|
|
//
|
|
|
|
// All kinds of state
|
|
ULONG m_cRef; // Ref count
|
|
BOOL m_fShow; // TRUE if we're visible
|
|
BOOL m_fTreeVisible; // TRUE if the treeview is visible
|
|
BOOL m_fContactsVisible; // TRUE if contacts are visible
|
|
|
|
// Groovy window handles
|
|
HWND m_hwnd; // Our window handle
|
|
HWND m_hwndParent; // Our parent's window handle
|
|
HWND m_hwndTree; // The folder list window handle
|
|
HWND m_hwndContacts; // The contacts control window
|
|
|
|
// Interfaces you only wish you could have
|
|
IDockingWindowSite *m_pSite; // Our site
|
|
CTreeView *m_pTreeView; // Folder list pointer
|
|
IMsgrAb *m_pContacts; // Contacts control
|
|
IOleCommandTarget *m_pContactsTarget; // Command target for contacts
|
|
CPaneFrame *m_pContactsFrame; // Contacts control frame
|
|
|
|
// Sizing information
|
|
int m_cxWidth; // How wide our outer window is
|
|
BOOL m_fResizing; // TRUE if we're in the process of resizing
|
|
BOOL m_fSplitting; // TRUE if we're splitting
|
|
int m_cySplitPct; // Split percentage between the two panes
|
|
RECT m_rcSplit; // Rectangle of the split bar in screen coordinates
|
|
RECT m_rcSizeBorder; // Rectangle of the right hand sizing bar
|
|
int m_cyTitleBar; // Height of the pane's title bar
|
|
};
|
|
|
|
|
|
class CPaneFrame : IInputObjectSite
|
|
{
|
|
public:
|
|
/////////////////////////////////////////////////////////////////////////
|
|
// Construction and Initialization
|
|
//
|
|
CPaneFrame();
|
|
~CPaneFrame();
|
|
|
|
HWND Initialize(HWND hwndParent, IInputObjectSite *pSite, int idsTitle, int idMenu = 0);
|
|
BOOL SetChild(HWND hwndChild, DWORD dwDispId, IAthenaBrowser *pBrowser, IObjectWithSite *pObject,
|
|
IOleCommandTarget *pTarget = 0);
|
|
void ShowMenu(void);
|
|
|
|
/////////////////////////////////////////////////////////////////////////
|
|
// IUnknown
|
|
//
|
|
STDMETHODIMP QueryInterface(THIS_ REFIID riid, LPVOID *ppvObj);
|
|
STDMETHOD_(ULONG, AddRef)(THIS);
|
|
STDMETHOD_(ULONG, Release)(THIS);
|
|
|
|
/////////////////////////////////////////////////////////////////////////
|
|
// IInputObjectSite
|
|
//
|
|
STDMETHODIMP OnFocusChangeIS(IUnknown* punkSrc, BOOL fSetFocus);
|
|
|
|
private:
|
|
/////////////////////////////////////////////////////////////////////////
|
|
// Window Proc Goo
|
|
//
|
|
static LRESULT CALLBACK _WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
|
|
LRESULT CALLBACK _FrameWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
|
|
|
|
BOOL _OnCreate(HWND hwnd, LPCREATESTRUCT lpCreateStruct);
|
|
void _OnSize(HWND hwnd, UINT state, int cx, int cy);
|
|
void _OnPaint(HWND hwnd);
|
|
void _OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify);
|
|
void _OnToggleClosePin(HWND hwnd, BOOL fPin);
|
|
void _OnLButtonDown(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT keyFlags);
|
|
void _OnMouseMove(HWND hwnd, int x, int y, UINT keyFlags);
|
|
void _OnTimer(HWND hwnd, UINT id);
|
|
|
|
void _UpdateDrawingInfo(void);
|
|
|
|
void _CreateCloseToolbar();
|
|
void _SizeCloseToolbar();
|
|
void _PositionToolbar(LPPOINT pt);
|
|
|
|
private:
|
|
/////////////////////////////////////////////////////////////////////////
|
|
// Member Data
|
|
//
|
|
|
|
ULONG m_cRef;
|
|
|
|
// Groovy Window Handles
|
|
HWND m_hwnd;
|
|
HWND m_hwndChild;
|
|
HWND m_hwndParent;
|
|
|
|
// Child info
|
|
IAthenaBrowser *m_pBrowser;
|
|
DWORD m_dwDispId;
|
|
IOleCommandTarget *m_pTarget;
|
|
int m_idMenu;
|
|
IInputObjectSite *m_pSite;
|
|
|
|
// Drawing Info
|
|
TCHAR m_szTitle[CCHMAX_STRINGRES];
|
|
HFONT m_hFont;
|
|
HBRUSH m_hbr3DFace;
|
|
UINT m_cyTitleBar;
|
|
RECT m_rcChild;
|
|
RECT m_rcTitleButton;
|
|
BOOL m_fHighlightIndicator;
|
|
BOOL m_fHighlightPressed;
|
|
|
|
// Toolbar Info
|
|
HWND m_hwndClose;
|
|
DWORD m_cButtons;
|
|
BOOL m_fPin;
|
|
};
|
|
|
|
|
|
|
|
|