/**************************************************************\ FILE: NSCBand.h DESCRIPTION: the class CNscBand exists to support name space control bands. A name space control uses IShellFolder rooted in various namespaces including Favorites, history, Shell Name Space, etc. to depict a hierarchical UI representation of the given name space. AUTHOR: chrisny \**************************************************************/ #include "bands.h" #include "nsc.h" #include "uemapp.h" #ifndef _NSCBAND_H #define _NSCBAND_H // for degug trace messages. #define DM_PERSIST 0 // trace IPS::Load, ::Save, etc. #define DM_MENU 0 // menu code #define DM_FOCUS 0 // focus #define DM_FOCUS2 0 // like DM_FOCUS, but verbose const short CSIDL_NIL = -32767; //////////////// /// NSC band class CNSCBand : public CToolBand , public IContextMenu , public IBandNavigate , public IWinEventHandler , public INamespaceProxy { public: // *** IUnknown *** virtual STDMETHODIMP QueryInterface(REFIID riid, LPVOID * ppvObj); STDMETHODIMP_(ULONG) AddRef(void) { return CToolBand::AddRef(); }; STDMETHODIMP_(ULONG) Release(void) { return CToolBand::Release(); }; // *** IOleWindow methods *** virtual STDMETHODIMP GetWindow(HWND * lphwnd); // *** IDockingWindow methods *** virtual STDMETHODIMP ShowDW(BOOL fShow); virtual STDMETHODIMP CloseDW(DWORD dw); // *** IDeskBand methods *** virtual STDMETHODIMP GetBandInfo(DWORD dwBandID, DWORD fViewMode, DESKBANDINFO* pdbi); // *** IPersistStream methods *** // (others use base class implementation) virtual STDMETHODIMP GetClassID(CLSID *pClassID); virtual STDMETHODIMP Load(IStream *pStm); virtual STDMETHODIMP Save(IStream *pStm, BOOL fClearDirty); // *** IWinEventHandler methods *** virtual STDMETHODIMP OnWinEvent(HWND hwnd, UINT dwMsg , WPARAM wParam, LPARAM lParam , LRESULT *plres); virtual STDMETHODIMP IsWindowOwner(HWND hwnd); // *** IContextMenu methods *** STDMETHOD(QueryContextMenu)(HMENU hmenu, UINT indexMenu, UINT idCmdFirst, UINT idCmdLast, UINT uFlags); STDMETHOD(InvokeCommand)(LPCMINVOKECOMMANDINFO lpici); STDMETHOD(GetCommandString)(UINT_PTR idCmd, UINT uType, UINT * pwReserved, LPSTR pszName, UINT cchMax) { return E_NOTIMPL; }; // *** IOleCommandTarget methods *** virtual STDMETHODIMP Exec(const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANTARG *pvarargIn, VARIANTARG *pvarargOut); virtual STDMETHODIMP QueryStatus(const GUID *pguidCmdGroup, ULONG cCmds, OLECMD rgCmds[], OLECMDTEXT *pcmdtext); // *** IBandNavigate methods *** virtual STDMETHODIMP Select(LPCITEMIDLIST pidl); // *** IInputObject methods *** virtual STDMETHODIMP TranslateAcceleratorIO(LPMSG lpMsg); // *** INamespaceProxy *** virtual STDMETHODIMP GetNavigateTarget(LPCITEMIDLIST pidl, LPITEMIDLIST *ppidlTarget, ULONG *pulAttrib); virtual STDMETHODIMP Invoke(LPCITEMIDLIST pidl); virtual STDMETHODIMP OnSelectionChanged(LPCITEMIDLIST pidl); virtual STDMETHODIMP RefreshFlags(DWORD *pdwStyle, DWORD *pdwExStyle, DWORD *pdwEnum) {*pdwStyle = _GetTVStyle(); *pdwExStyle = _GetTVExStyle(); *pdwEnum = _GetEnumFlags(); return S_OK; }; virtual STDMETHODIMP CacheItem(LPCITEMIDLIST pidl) { return S_OK; }; protected: void _SetNscMode(UINT nMode) { _pns->SetNscMode(nMode); }; virtual DWORD _GetTVStyle(); virtual DWORD _GetTVExStyle() { return 0; }; virtual DWORD _GetEnumFlags() { return SHCONTF_FOLDERS | SHCONTF_NONFOLDERS; }; HRESULT _Init(LPCITEMIDLIST pidl); virtual HRESULT _InitializeNsc(); virtual ~CNSCBand(); virtual HRESULT _OnRegisterBand(IOleCommandTarget *poctProxy) { return S_OK; } // meant to be overridden void _UnregisterBand(); void _EnsureImageListsLoaded(); virtual HRESULT _TranslatePidl(LPCITEMIDLIST pidl, LPITEMIDLIST *ppidlTarget, ULONG *pulAttrib); virtual BOOL _ShouldNavigateToPidl(LPCITEMIDLIST pidl, ULONG ulAttrib); virtual HRESULT _NavigateRightPane(IShellBrowser *psb, LPCITEMIDLIST pidl); HRESULT _QueryContextMenuSelection(IContextMenu ** ppcm); HRESULT _InvokeCommandOnItem(LPCTSTR pszVerb); #ifndef ENABLE_CCHANNELBAND friend HRESULT CNSCBand_CreateInstanceEx(IUnknown *punkOuter, IUnknown **ppunk , LPCOBJECTINFO poi, LPCITEMIDLIST pidl); #endif friend HRESULT CHistBand_CreateInstance(IUnknown *punkOuter, IUnknown **ppunk , LPCOBJECTINFO poi); #ifndef ENABLE_CCHANNELBAND friend HRESULT CChannelBand_CreateInstance(IUnknown *punkOuter, IUnknown **ppunk , LPCOBJECTINFO poi); #endif // ENABLE_CCHANNELBAND LPITEMIDLIST _pidl; WCHAR _szTitle[40]; INSCTree2 * _pns; // name space control data. IWinEventHandler * _pweh; // name space control's OnWinEvent handler BITBOOL _fInited :1; // true if band has been inited. BITBOOL _fVisible :1; // true if band is showing DWORD _dwStyle; // Treeview style LPCOBJECTINFO _poi; // cached object info. HACCEL _haccTree; HIMAGELIST _himlNormal; // shared image list HIMAGELIST _himlHot; }; #endif /* _NSCBAND_H */