#ifndef COMMONSB_INC_ #define COMMONSB_INC_ #include "caggunk.h" #include "fldset.h" #define ITB_ITBAR 0 // index to the Internet Toolbar typedef struct _ZONESICONNAMECACHE // Cache for zones icons and display names { HICON hiconZones; WCHAR szZonesName[MAX_ZONE_DESCRIPTION]; WCHAR szIconPath[MAX_ZONE_PATH]; // we'll initially load the path, then cache the icon on demand } ZONEICONNAMECACHE, *PZONEICONNAMECACHE; class CCommonBrowser : public CAggregatedUnknown ,public IShellBrowser ,public IBrowserService3 ,public IServiceProvider ,public IOleCommandTarget ,public IDockingWindowSite ,public IDockingWindowFrame ,public IInputObjectSite ,public IDropTarget ,public IShellBrowserService { public: virtual STDMETHODIMP QueryInterface(REFIID riid, LPVOID * ppvObj) {return CAggregatedUnknown::QueryInterface(riid, ppvObj);}; virtual STDMETHODIMP_(ULONG) AddRef(void) { return CAggregatedUnknown::AddRef();}; virtual STDMETHODIMP_(ULONG) Release(void) { return CAggregatedUnknown::Release();}; // *** IBrowserService specific methods *** virtual STDMETHODIMP GetParentSite( IOleInPlaceSite** ppipsite) ; virtual STDMETHODIMP SetTitle( IShellView* psv, LPCWSTR pszName) ; virtual STDMETHODIMP GetTitle( IShellView* psv, LPWSTR pszName, DWORD cchName) ; virtual STDMETHODIMP GetOleObject( IOleObject** ppobjv) ; // think about this one.. I'm not sure we want to expose this -- Chee // Yep soon we should have interface instead. // My impression is that we won't document this whole interface??? // I am sure this has shipped at least once, looks like it is here to stay - justmann 2000-01-27 virtual STDMETHODIMP GetTravelLog( ITravelLog** pptl) ; virtual STDMETHODIMP ShowControlWindow( UINT id, BOOL fShow) ; virtual STDMETHODIMP IsControlWindowShown( UINT id, BOOL *pfShown) ; virtual STDMETHODIMP IEGetDisplayName( LPCITEMIDLIST pidl, LPWSTR pwszName, UINT uFlags) ; virtual STDMETHODIMP IEParseDisplayName( UINT uiCP, LPCWSTR pwszPath, LPITEMIDLIST * ppidlOut) ; virtual STDMETHODIMP DisplayParseError( HRESULT hres, LPCWSTR pwszPath) ; virtual STDMETHODIMP NavigateToPidl( LPCITEMIDLIST pidl, DWORD grfHLNF) ; virtual STDMETHODIMP SetNavigateState( BNSTATE bnstate) ; virtual STDMETHODIMP GetNavigateState ( BNSTATE *pbnstate) ; virtual STDMETHODIMP NotifyRedirect ( IShellView* psv, LPCITEMIDLIST pidl, BOOL *pfDidBrowse) ; virtual STDMETHODIMP UpdateWindowList () ; virtual STDMETHODIMP UpdateBackForwardState () ; virtual STDMETHODIMP SetFlags( DWORD dwFlags, DWORD dwFlagMask) ; virtual STDMETHODIMP GetFlags( DWORD *pdwFlags) ; // Tells if it can navigate now or not. virtual STDMETHODIMP CanNavigateNow () ; virtual STDMETHODIMP GetPidl ( LPITEMIDLIST *ppidl) ; virtual STDMETHODIMP SetReferrer ( LPITEMIDLIST pidl) ; virtual STDMETHODIMP_(DWORD) GetBrowserIndex() ; virtual STDMETHODIMP GetBrowserByIndex( DWORD dwID, IUnknown **ppunk) ; virtual STDMETHODIMP GetHistoryObject( IOleObject **ppole, IStream **pstm, IBindCtx **ppbc) ; virtual STDMETHODIMP SetHistoryObject( IOleObject *pole, BOOL fIsLocalAnchor) ; virtual STDMETHODIMP CacheOLEServer( IOleObject *pole) ; virtual STDMETHODIMP GetSetCodePage( VARIANT* pvarIn, VARIANT* pvarOut) ; virtual STDMETHODIMP OnHttpEquiv( IShellView* psv, BOOL fDone, VARIANT* pvarargIn, VARIANT* pvarargOut) ; virtual STDMETHODIMP GetPalette( HPALETTE * hpal ) ; virtual STDMETHODIMP RegisterWindow( BOOL fUnregister, int swc) ; virtual STDMETHODIMP_(LRESULT) WndProcBS( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) ; virtual STDMETHODIMP OnSize(WPARAM wParam); virtual STDMETHODIMP OnCreate(LPCREATESTRUCT pcs); virtual STDMETHODIMP_(LRESULT) OnCommand(WPARAM wParam, LPARAM lParam); virtual STDMETHODIMP OnDestroy(); virtual STDMETHODIMP_(LRESULT) OnNotify(NMHDR * pnm); virtual STDMETHODIMP OnSetFocus(); virtual STDMETHODIMP OnFrameWindowActivateBS(BOOL fActive); virtual STDMETHODIMP ReleaseShellView( ) ; virtual STDMETHODIMP ActivatePendingView( ) ; virtual STDMETHODIMP CreateViewWindow(IShellView* psvNew, IShellView* psvOld, LPRECT prcView, HWND* phwnd); virtual STDMETHODIMP GetBaseBrowserData( LPCBASEBROWSERDATA* ppbd ); virtual STDMETHODIMP_(LPBASEBROWSERDATA) PutBaseBrowserData(); virtual STDMETHODIMP SetTopBrowser(); virtual STDMETHODIMP UpdateSecureLockIcon(int eSecureLock); virtual STDMETHODIMP Offline(int iCmd); virtual STDMETHODIMP InitializeDownloadManager(); virtual STDMETHODIMP InitializeTransitionSite(); virtual STDMETHODIMP GetFolderSetData(struct tagFolderSetData* pfsd) { *pfsd = _fsd; return S_OK; }; virtual STDMETHODIMP CreateBrowserPropSheetExt(REFIID, LPVOID *); virtual STDMETHODIMP SetActivateState(UINT uActivate); virtual STDMETHODIMP AllowViewResize(BOOL f); virtual STDMETHODIMP _Initialize(HWND hwnd, IUnknown *pauto); // Temporarily in interface, needs to be brought local virtual STDMETHODIMP_(UINT) _get_itbLastFocus() {return _itbLastFocus; }; virtual STDMETHODIMP _put_itbLastFocus(UINT itbLastFocus) {_itbLastFocus = itbLastFocus; return S_OK;}; virtual STDMETHODIMP _UIActivateView(UINT uState) ; // BEGIN REVIEW: review names and need of each. // // this first set could be basebrowser only members. no one overrides virtual STDMETHODIMP _CancelPendingNavigationAsync() ; virtual STDMETHODIMP _MaySaveChanges() ; virtual STDMETHODIMP _PauseOrResumeView( BOOL fPaused) ; virtual STDMETHODIMP _DisableModeless() ; // rethink these... are all of these necessary? virtual STDMETHODIMP _NavigateToPidl( LPCITEMIDLIST pidl, DWORD grfHLNF, DWORD dwFlags); virtual STDMETHODIMP _TryShell2Rename( IShellView* psv, LPCITEMIDLIST pidlNew); virtual STDMETHODIMP _SwitchActivationNow( ); virtual STDMETHODIMP _CancelPendingView() ; virtual STDMETHODIMP v_MayTranslateAccelerator( MSG* pmsg); virtual STDMETHODIMP _CycleFocus( LPMSG lpMsg) ; virtual STDMETHODIMP v_MayGetNextToolbarFocus(LPMSG lpMsg, UINT itbNext, int citb, LPTOOLBARITEM * pptbi, HWND * phwnd); virtual STDMETHODIMP _SetFocus(LPTOOLBARITEM ptbi, HWND hwnd, LPMSG lpMsg); virtual STDMETHODIMP_(BOOL) _HasToolbarFocus(void) ; virtual STDMETHODIMP _FixToolbarFocus(void) ; // this belongs with the toolbar set. virtual STDMETHODIMP _ExecChildren(IUnknown *punkBar, BOOL fBroadcast, const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANTARG *pvarargIn, VARIANTARG *pvarargOut); virtual STDMETHODIMP _SendChildren(HWND hwndBar, BOOL fBroadcast, UINT uMsg, WPARAM wParam, LPARAM lParam); virtual STDMETHODIMP _GetViewBorderRect(RECT* prc); virtual STDMETHODIMP _UpdateViewRectSize(); virtual STDMETHODIMP _ResizeNextBorder(UINT itb); virtual STDMETHODIMP _ResizeView(); virtual STDMETHODIMP _GetBorderDWHelper(IUnknown* punkSrc, LPRECT prcBorder, BOOL bUseHmonitor); virtual STDMETHODIMP _GetEffectiveClientArea(LPRECT prcBorder, HMONITOR hmon); virtual STDMETHODIMP _PositionViewWindow(HWND hwnd, LPRECT prc); //END REVIEW: // for CShellBrowser split virtual STDMETHODIMP SetAsDefFolderSettings(); virtual STDMETHODIMP GetViewRect(RECT* prc); virtual STDMETHODIMP GetViewWindow(HWND * phwndView); virtual STDMETHODIMP InitializeTravelLog(ITravelLog* ptl, DWORD dw); // Desktop needs to override these: virtual STDMETHODIMP_(IStream*) v_GetViewStream(LPCITEMIDLIST pidl, DWORD grfMode, LPCWSTR pwszName); // Desktop needs access to these: virtual STDMETHODIMP_(LRESULT) ForwardViewMsg(UINT uMsg, WPARAM wParam, LPARAM lParam); virtual STDMETHODIMP SetAcceleratorMenu(HACCEL hacc); // Shell browser overrides this. virtual STDMETHODIMP v_CheckZoneCrossing(LPCITEMIDLIST pidl) {return S_OK;}; // *** IDropTarget (delegate to basesb) *** virtual STDMETHODIMP DragEnter(IDataObject *pdtobj, DWORD grfKeyState, POINTL pt, DWORD *pdwEffect); virtual STDMETHODIMP DragOver(DWORD grfKeyState, POINTL pt, DWORD *pdwEffect); virtual STDMETHODIMP DragLeave(void); virtual STDMETHODIMP Drop(IDataObject *pdtobj, DWORD grfKeyState, POINTL pt, DWORD *pdwEffect); // IOleWindow virtual STDMETHODIMP GetWindow(HWND * lphwnd); virtual STDMETHODIMP ContextSensitiveHelp(BOOL fEnterMode); // IShellBrowser (same as IOleInPlaceFrame) virtual STDMETHODIMP InsertMenusSB(HMENU hmenuShared, LPOLEMENUGROUPWIDTHS lpMenuWidths); virtual STDMETHODIMP SetMenuSB(HMENU hmenuShared, HOLEMENU holemenu, HWND hwnd); virtual STDMETHODIMP RemoveMenusSB(HMENU hmenuShared); virtual STDMETHODIMP SetStatusTextSB(LPCOLESTR lpszStatusText); virtual STDMETHODIMP EnableModelessSB(BOOL fEnable); virtual STDMETHODIMP TranslateAcceleratorSB(LPMSG lpmsg, WORD wID); virtual STDMETHODIMP BrowseObject(LPCITEMIDLIST pidl, UINT wFlags); virtual STDMETHODIMP GetViewStateStream(DWORD grfMode, LPSTREAM *ppStrm); virtual STDMETHODIMP GetControlWindow(UINT id, HWND * lphwnd); virtual STDMETHODIMP SendControlMsg(UINT id, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT *pret); virtual STDMETHODIMP QueryActiveShellView(struct IShellView ** ppshv); virtual STDMETHODIMP OnViewWindowActive(struct IShellView * ppshv); virtual STDMETHODIMP SetToolbarItems(LPTBBUTTON lpButtons, UINT nButtons, UINT uFlags); // IServiceProvider virtual STDMETHODIMP QueryService(REFGUID guidService, REFIID riid, LPVOID* ppvObj); // IOleCommandTarget virtual STDMETHODIMP QueryStatus(const GUID *pguidCmdGroup, ULONG cCmds, OLECMD rgCmds[], OLECMDTEXT *pcmdtext); virtual STDMETHODIMP Exec(const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANTARG *pvarargIn, VARIANTARG *pvarargOut); // IDockingWindowFrame (also IOleWindow(?)) virtual STDMETHODIMP AddToolbar(IUnknown* punkSrc, LPCWSTR pwszItem, DWORD dwReserved); virtual STDMETHODIMP RemoveToolbar(IUnknown* punkSrc, DWORD dwFlags); virtual STDMETHODIMP FindToolbar(LPCWSTR pwszItem, REFIID riid, LPVOID* ppvObj); // IDockingWindowSite (also IOleWindow(?)) virtual STDMETHODIMP GetBorderDW(IUnknown* punkSrc, LPRECT prcBorder); virtual STDMETHODIMP RequestBorderSpaceDW(IUnknown* punkSrc, LPCBORDERWIDTHS pbw); virtual STDMETHODIMP SetBorderSpaceDW(IUnknown* punkSrc, LPCBORDERWIDTHS pbw); // IInputObjectSite virtual STDMETHODIMP OnFocusChangeIS(IUnknown* punkSrc, BOOL fSetFocus); //IShellBrowserService virtual STDMETHODIMP GetPropertyBag(DWORD dwFlags, REFIID riid, void** ppv) {return E_FAIL;} // This is the QueryInterface the aggregator implements virtual HRESULT v_InternalQueryInterface(REFIID riid, LPVOID * ppvObj); protected: CCommonBrowser(IUnknown* punkAgg); virtual ~CCommonBrowser(); friend HRESULT CCommonBrowser_CreateInstance(IUnknown* pUnkOuter, IUnknown** ppunk, LPCOBJECTINFO poi); // // Notes: // The values in the _arcBorderTools array indicates the size of // the border space taken by each toolbar on each side of the // containing rectangle. // virtual STDMETHODIMP_(LPTOOLBARITEM) _GetToolbarItem(int itb); virtual STDMETHODIMP_(int) _GetToolbarCount() { return FDSA_GetItemCount(&_fdsaTBar); } virtual STDMETHODIMP_(int) _AllocToolbarItem(); void _ReleaseToolbarItem(int itb, BOOL fClose); // Helper function for toolbar negotiation virtual STDMETHODIMP_(UINT) _FindTBar(IUnknown* punkSrc); virtual STDMETHODIMP _OnFocusChange(UINT itb); virtual STDMETHODIMP _CloseAndReleaseToolbars(BOOL fClose = TRUE); virtual STDMETHODIMP v_ShowHideChildWindows(BOOL fChildOnly); virtual STDMETHODIMP ShowToolbar(IUnknown* punkSrc, BOOL fShow) ; virtual STDMETHODIMP _SaveToolbars(IStream* pstm); virtual STDMETHODIMP _LoadToolbars(IStream* pstm); BOOL _TBWindowHasFocus(UINT itb); BOOL _ShouldTranslateAccelerator(MSG* pmsg); DWORD _CacheZonesIconsAndNames(BOOL fRefresh); BOOL _GetCachedZoneIconAndName(DWORD lZone, HICON *pIcon, LPTSTR pszName, DWORD cch); IInternetZoneManager * _pizm; virtual STDMETHODIMP _ResizeNextBorderHelper(UINT itb, BOOL bUseHmonitor); virtual BOOL _CanHandleAcceleratorNow(void) {return TRUE;} FDSA _fdsaTBar; TOOLBARITEM _aTBar[ITB_CSTATIC]; UINT _itbLastFocus; // last one called OnFocusChange (can be -1) HRESULT _FindActiveTarget(REFIID riid, LPVOID* ppvOut); IUnknown* _punkInner; // implementations in basesb IBrowserService2* _pbsInner; IBrowserService3* _pbsInner3; IShellBrowser* _psbInner; IDropTarget* _pdtInner; // TODO: non-cached? IServiceProvider* _pspInner; IOleCommandTarget* _pctInner; IInputObjectSite* _piosInner; // desktop overrides some of these methods IBrowserService2* _pbsOuter; IBrowserService2* _pbsOuter3; LPCBASEBROWSERDATA _pbbd; HACCEL _hacc; // for view set information struct tagFolderSetData _fsd; virtual HRESULT SetInner(IUnknown* punk); }; HRESULT _ConvertPathToPidl(IBrowserService2* pbs, HWND hwnd, LPCTSTR pszPath, LPITEMIDLIST * ppidl); #endif // COMMONSB_INC_