#ifndef BANDISF #define BANDISF //#include "iface.h" #include "bands.h" //#include "cwndproc.h" //#include "droptgt.h" #include "logo.h" #include "sftbar.h" #include "legacy.h" class CISFBand : public CToolbarBand, public CSFToolbar, public CLogoBase, public IFolderBandPriv { public: // *** IUnknown *** virtual STDMETHODIMP_(ULONG) AddRef(void) { return CToolBand::AddRef(); }; virtual STDMETHODIMP_(ULONG) Release(void){ return CToolBand::Release(); }; virtual STDMETHODIMP QueryInterface(REFIID riid, LPVOID * ppvObj); // *** IDockingWindow methods (override) *** virtual STDMETHODIMP ShowDW(BOOL fShow); virtual STDMETHODIMP CloseDW(DWORD dw); // *** IObjectWithSite methods *** virtual STDMETHODIMP SetSite(IUnknown* punkSite); // *** IDeskBand methods *** virtual STDMETHODIMP GetBandInfo(DWORD dwBandID, DWORD fViewMode, DESKBANDINFO* pdbi); // *** IPersistStream methods (CToolBand PURE) *** virtual STDMETHODIMP GetClassID(LPCLSID lpClassID); virtual STDMETHODIMP Load(IStream *pStm); virtual STDMETHODIMP Save(IStream *pStm, BOOL fClearDirty); // *** IContextMenu methods (override) *** virtual STDMETHODIMP InvokeCommand(LPCMINVOKECOMMANDINFO lpici); // *** 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); // *** IShellFolderBand methods *** virtual STDMETHODIMP InitializeSFB(LPSHELLFOLDER psf, LPCITEMIDLIST pidl); virtual STDMETHODIMP SetBandInfoSFB(BANDINFOSFB * pbi); virtual STDMETHODIMP GetBandInfoSFB(BANDINFOSFB * pbi); // *** IInputObject methods *** virtual STDMETHODIMP TranslateAcceleratorIO(LPMSG lpMsg); // *** IFolderBandPriv // for internal guys so that we don't have to use a prop page virtual STDMETHODIMP SetCascade(BOOL f) { _fCascadeFolder = BOOLIFY(f); return S_OK; }; virtual STDMETHODIMP SetAccelerators(BOOL f) { _fAccelerators = BOOLIFY(f); return S_OK; }; virtual STDMETHODIMP SetNoIcons(BOOL f) { _fNoIcons = BOOLIFY(f); return S_OK; }; virtual STDMETHODIMP SetNoText(BOOL f) { _fNoShowText = BOOLIFY(f); return S_OK; }; protected: friend HRESULT CISFBand_CreateInstance(IUnknown * punkOuter, IUnknown ** ppunk, LPCOBJECTINFO poi); friend CISFBand * CISFBand_CreateEx(IShellFolder * psf, LPCITEMIDLIST pidl); CISFBand(); virtual ~CISFBand(); void _ReleaseMenu(); void _SetDirty(BOOL fDirty); virtual HRESULT _SetSubMenuPopup(IMenuPopup* pmp, UINT uiCmd, LPCITEMIDLIST pidl, DWORD dwFlagsMDBPU); virtual IMenuPopup * _CreateMenuPopup(IShellFolder * psf, LPCITEMIDLIST pidl, BANDINFOSFB * pbi); virtual void _SendInitMenuPopup(IMenuPopup * pmp, LPCITEMIDLIST pidl); virtual LRESULT _OnHotItemChange(NMTBHOTITEM * pnmhot); virtual LRESULT _DefWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); virtual LRESULT _OnContextMenu(WPARAM wParam, LPARAM lParam); virtual LRESULT _OnNotify(LPNMHDR pnm); virtual HRESULT _TBStyleForPidl(LPCITEMIDLIST pidl, DWORD * pdwTBStyle, DWORD* pdwTBState, DWORD * pdwMIFFlags, int* piIcon); void _ReleaseMenuPopup(IMenuPopup** ppmp); void _SetCacheMenuPopup(IMenuPopup* pmp); HRESULT _DropdownItem(LPCITEMIDLIST pidl, UINT idCmd); LRESULT _TryChannelSurfing(LPCITEMIDLIST pidl); HRESULT _GetChannelBrowser(IWebBrowser2 **ppwb); HRESULT _IStreamFromOrderList(VARIANT* pvarargOut); HRESULT _OrderListFromIStream(VARIANT* pvarargIn); IMenuPopup *_pmpCache; IMenuPopup * _pmp; // Submenu popup const GUID* _pguidUEMGroup; BITBOOL _fCascadeFolder :1; BITBOOL _fNoRecalcDefaults :1;// Don't recalc defaults during GetBandInfo BITBOOL _fInitialized :1; // have we initialized the toolbar BITBOOL _fDebossed :1; // TRUE to enable debossed rebar style BITBOOL _fLinksMode :1; // TRUE: do not allow drag & drop onto content items. BITBOOL _fHaveBkColor :1; // TRUE if _crBkgnd is valid BITBOOL _fHaveColors :1; // TRUE if _crBtnXX are valid BITBOOL _fFullOpen :1; // TRUE if band should maximize when opened BITBOOL _fClosing : 1; // TRUE if we are shutting down.... BITBOOL _fDesktop :1; // 1:desktop 0:browser(or non-ActDesk) BITBOOL _fBtnMinSize :1; // TRUE if band should report min thickness of button BITBOOL _fDelayPainting :1; BITBOOL _fChannels :1; // TRUE if we want "Navigate Target" sup BITBOOL _fCreatedBandProxy :1; // TRUE if we created a BandProxy ourself and hence need to call SetOwner on it BITBOOL _fAllowDropdown: 1; BITBOOL _fDelayInit :1; int _eUemLog :2; // UEMIND_* (NIL:off, o.w.:group) int _iIdealLength; // our ideal height/width last time bandsite asked COLORREF _crBkgnd; // Background color (must set _fHaveBkColor) COLORREF _crBtnLt; // Button hilite color (must set _fHaveColors) COLORREF _crBtnDk; // Button lolite color (must set _fHaveColors) DWORD _dwPriv; // private for bsmenu IBandProxy * _pbp; HPALETTE _hpalOld; // the old palette saved while we do a draw..... int _GetIdealSize(PSIZE psize); HRESULT _IsPidlVisible(LPITEMIDLIST pidl); virtual LRESULT _OnCommand(WPARAM wParam, LPARAM lParam); virtual LRESULT _OnCustomDraw(NMCUSTOMDRAW* pnmcd); virtual void _OnDragBegin(int iItem, DWORD dwPreferedEffect); virtual void _CreateToolbar(HWND hwndParent); virtual HWND _CreatePager(HWND hwndParent); virtual int _GetBitmap(int iCommandID, PIBDATA pibData, BOOL fUseCache); virtual void _ToolbarChanged() { _BandInfoChanged(); }; BOOL _IsChildID(LPCITEMIDLIST pidl, LPCITEMIDLIST pidlChild); BOOL _UpdateIconSize(UINT fIconSize, BOOL fUpdateButtons); void _UpdateVerticalMode(BOOL fVertical); LRESULT _TryCascadingItem(LPCITEMIDLIST pidl, UINT uiCmd); LRESULT _TrySimpleInvoke(LPCITEMIDLIST pidl); HRESULT _SiteOnSelect(DWORD dwType); virtual HRESULT _GetTitleW(LPWSTR pwzTitle, DWORD cchSize); virtual void _Initialize(); friend class CExtractImageTask; friend HRESULT CALLBACK UpdateBandLogo( LPVOID pData, DWORD dwItem, HBITMAP hImage, LPCWSTR pszCache, BOOL fCache ); friend HRESULT FindBandInBandSite(IMenuPopup* pmpParent, IBandSite** ppbs, LPCITEMIDLIST pidl, REFIID riid, void** ppvOut); // stuff for CLogoBase virtual IShellFolder * GetSF(); virtual HWND GetHWND(); virtual REFTASKOWNERID GetTOID(); virtual HRESULT OnTranslatedChange(LONG lEvent, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2); virtual HRESULT UpdateLogoCallback( DWORD dwItem, int iIcon, HBITMAP hImage, LPCWSTR pszCache, BOOL fCache ); void _StopDelayPainting(); void _FixupAppDataDirectory(); }; IMenuPopup* ISFBandCreateMenuPopup(IUnknown *punk, IShellFolder* psf, LPCITEMIDLIST pidl, BANDINFOSFB * pbi, BOOL bMenuBand); IMenuPopup* ISFBandCreateMenuPopup2(IUnknown *punk, IMenuBand* pmb, IShellFolder* psf, LPCITEMIDLIST pidl, BANDINFOSFB * pbi, BOOL bMenuBand); #define CGID_ISFBand CLSID_ISFBand HRESULT CExtractImageTask_Create( CLogoBase* plb, LPEXTRACTIMAGE pExtract, LPCWSTR pszCache, DWORD dwItem, int iIcon, DWORD dwFlags, LPRUNNABLETASK * ppTask ); #define EITF_SAVEBITMAP 0x00000001 // do not delete bitmap on destructor #define EITF_ALWAYSCALL 0x00000002 // always call the update whether extract succeded or not HRESULT IUnknown_SetBandInfoSFB(IUnknown *punkBand, BANDINFOSFB *pbi); #endif