windows-nt/Source/XPSP1/NT/shell/browseui/commonsb.h
2020-09-26 16:20:57 +08:00

297 lines
13 KiB
C++

#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_