#ifndef ZAXXON_H #define ZAXXON_H #include "bands.h" #include "sccls.h" #include "power.h" #include "uxtheme.h" #include "tmschema.h" #include "runtask.h" #define WM_SONGTHUMBDONE WM_USER + 1 #define WM_SONGCHANGE WM_USER + 2 #define WM_SONGSTOP WM_USER + 3 #define WM_SETARTIST WM_USER + 4 #define WM_SETALBUM WM_USER + 5 #define WM_SETSONG WM_USER + 6 #define WM_UPDATESONG WM_USER + 7 class CSongExtractionTask; class CMusicExtractionTask; class CZaxxon; class CSong { int _cRef; public: CSong(); void AddRef(); void Release(); TCHAR szSong[MAX_PATH]; TCHAR szTitle[MAX_PATH]; TCHAR szArtist[MAX_PATH]; TCHAR szAlbum[MAX_PATH]; TCHAR szDuration[50]; DWORD _id; }; class CSongExtractionTask : public CRunnableTask { public: CSongExtractionTask(HWND hwnd, CSong* psong); STDMETHODIMP RunInitRT(void); private: virtual ~CSongExtractionTask(); HWND _hwnd; CSong* _psong; }; class CZaxxonEditor { public: CZaxxon* _pzax; HWND _hwnd; HWND _hwndList; HWND _hwndToolbar; BOOL _fIgnoreChange; HDPA hSongList; void UpdateSong(CSong* psong); void LoadPlaylist(); void SavePlaylist(); void ClearPlaylist(); void HighlightSong(PTSTR psz); void RemoveFromPlaylist(); void InsertFilename(int i, PTSTR psz); void AddFilenameToListview(int i, PTSTR psz); void AddFilename(PTSTR psz); void AddToPlaylist(); CZaxxonEditor(CZaxxon* pzax); ~CZaxxonEditor(); BOOL Initialize(); BOOL Show(BOOL fShow); LRESULT WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); static LRESULT CALLBACK s_WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); }; class CZaxxon : public CToolBand, public IWinEventHandler, public IDropTarget, public IShellMenuCallback { 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); // *** IOleWindow methods *** virtual STDMETHODIMP GetWindow(HWND * phwnd); virtual STDMETHODIMP ContextSensitiveHelp(BOOL bEnterMode) {return E_NOTIMPL;}; // *** IDeskBar methods *** virtual STDMETHODIMP SetClient(IUnknown* punk) { return E_NOTIMPL; }; virtual STDMETHODIMP GetClient(IUnknown** ppunkClient) { return E_NOTIMPL; }; virtual STDMETHODIMP OnPosRectChangeDB (LPRECT prc) { return E_NOTIMPL;}; // ** IWinEventHandler *** virtual STDMETHODIMP IsWindowOwner(HWND hwnd); virtual STDMETHODIMP OnWinEvent(HWND hwnd, UINT dwMsg, WPARAM wParam, LPARAM lParam, LRESULT* plres); // *** IDeskBand methods *** virtual STDMETHODIMP GetBandInfo(DWORD dwBandID, DWORD fViewMode, DESKBANDINFO* pdbi); // *** IDockingWindow methods (override) *** virtual STDMETHODIMP ShowDW(BOOL fShow); virtual STDMETHODIMP CloseDW(DWORD dw); // *** IInputObject methods (override) *** virtual STDMETHODIMP TranslateAcceleratorIO(LPMSG lpMsg); virtual STDMETHODIMP HasFocusIO(); virtual STDMETHODIMP UIActivateIO(BOOL fActivate, LPMSG lpMsg); virtual STDMETHODIMP GetClassID(CLSID *pClassID); virtual STDMETHODIMP Load(IStream *pStm); virtual STDMETHODIMP Save(IStream *pStm, BOOL fClearDirty); // *** IDropTarget methods *** 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); // *** IShellMenuCallback methods *** virtual STDMETHODIMP CallbackSM(LPSMDATA psmd, UINT uMsg, WPARAM wParam, LPARAM lParam); CZaxxon(); virtual ~CZaxxon(); HWND GetHWND() {return _hwnd;} HRESULT RecurseAddFile(IShellFolder* psf); LRESULT _OnCommand(WORD wNotifyCode, WORD wID, HWND hwnd); LRESULT _OnNotify(LPNMHDR pnm); void _DoMenu(); void SongStop(); CZaxxonEditor* _pEdit; DWORD _dwViewMode; HTHEME _hTheme; HIMAGELIST _himlHot; HIMAGELIST _himlDef; HFONT _hfont; IZaxxonPlayer* _pzax; HWND _hwndSongTile; IThumbnail* _pThumbnail; BOOL _fHide; BOOL _fAllowFadeout; BOOL _fPlaying; BOOL _fEditorShown; BYTE _bOpacity; HBRUSH _hbr; IShellTaskScheduler* _pScheduler; HMENU _hmenuOpenFolder; TCHAR _szArtist[MAX_PATH]; TCHAR _szSong[MAX_PATH]; TCHAR _szAlbum[MAX_PATH]; HBITMAP _hbmpAlbumArt; HWND _CreateWindow(HWND hwndParent); friend class CMusicExtractionTask; friend LRESULT ZaxxonWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); friend HRESULT CZaxxon_CreateInstance(IUnknown *punk, REFIID riid, void **ppv); }; void FillRectClr(HDC hdc, PRECT prc, COLORREF clr); #define RECTWIDTH(rc) ((rc).right - (rc).left) #define RECTHEIGHT(rc) ((rc).bottom - (rc).top) void CenterOnTopOf(HWND hwnd, HWND hwndOn); #endif