/* Miranda IM: the free IM client for Microsoft* Windows* Copyright 2000-2008 Miranda ICQ/IM project, all portions of this codebase are copyrighted to the people listed in contributors.txt. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef modern_clui_h__ #define modern_clui_h__ #include "windowsX.h" #define HANDLE_MESSAGE( _message, _fn) \ case (_message): return This->_fn((_message), (wParam), (lParam)) class CLUI { public: static HWND m_hWnd; static CLUI * m_pCLUI; static BOOL m_fMainMenuInited; private: CLUI(); // is protected use InitClui to initialize instead public: ~CLUI(); static HRESULT InitClui() { m_pCLUI = new CLUI(); return S_OK; }; static HWND& ClcWnd() { return pcli->hwndContactTree; } static HWND& CluiWnd() { return pcli->hwndContactList; } static CLUI * GetClui() { return m_pCLUI; } static BOOL IsMainMenuInited() { return CLUI::m_fMainMenuInited; } CLINTERFACE void cliOnCreateClc(); EVENTHOOK( OnEvent_ModulesLoaded ); EVENTHOOK( OnEvent_ContactMenuPreBuild ); EVENTHOOK( OnEvent_FontReload ); SERVICE( Service_ShowMainMenu ); SERVICE( Service_ShowStatusMenu ); SERVICE( Service_Menu_ShowContactAvatar ); SERVICE( Service_Menu_HideContactAvatar ); static LRESULT CALLBACK cli_ContactListWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { CLUI * This = m_pCLUI; if ( !m_hWnd ) m_hWnd = hwnd; BOOL bHandled = FALSE; LRESULT lRes= This->PreProcessWndProc( msg, wParam, lParam, bHandled ); if ( bHandled ) return lRes; switch ( msg ) { HANDLE_MESSAGE( WM_NCCREATE, OnNcCreate ); HANDLE_MESSAGE( WM_CREATE, OnCreate ); HANDLE_MESSAGE( UM_CREATECLC, OnCreateClc ); HANDLE_MESSAGE( UM_SETALLEXTRAICONS, OnSetAllExtraIcons ); HANDLE_MESSAGE( WM_INITMENU, OnInitMenu ); HANDLE_MESSAGE( WM_SIZE, OnSizingMoving ); HANDLE_MESSAGE( WM_SIZING, OnSizingMoving ); HANDLE_MESSAGE( WM_MOVE, OnSizingMoving ); HANDLE_MESSAGE( WM_EXITSIZEMOVE, OnSizingMoving ); HANDLE_MESSAGE( WM_WINDOWPOSCHANGING, OnSizingMoving ); HANDLE_MESSAGE( WM_DISPLAYCHANGE, OnSizingMoving ); HANDLE_MESSAGE( WM_THEMECHANGED, OnThemeChanged ); HANDLE_MESSAGE( WM_DWMCOMPOSITIONCHANGED, OnDwmCompositionChanged ); HANDLE_MESSAGE( UM_SYNCCALL, OnSyncCall ); HANDLE_MESSAGE( UM_UPDATE, OnUpdate ); HANDLE_MESSAGE( WM_NCACTIVATE, OnNcPaint ); HANDLE_MESSAGE( WM_PRINT, OnNcPaint ); HANDLE_MESSAGE( WM_NCPAINT, OnNcPaint ); HANDLE_MESSAGE( WM_ERASEBKGND, OnEraseBkgnd ); HANDLE_MESSAGE( WM_PAINT, OnPaint ); HANDLE_MESSAGE( WM_LBUTTONDOWN, OnLButtonDown ); HANDLE_MESSAGE( WM_PARENTNOTIFY, OnParentNotify ); HANDLE_MESSAGE( WM_SETFOCUS, OnSetFocus ); HANDLE_MESSAGE( WM_TIMER, OnTimer ); HANDLE_MESSAGE( WM_ACTIVATE, OnActivate ); HANDLE_MESSAGE( WM_SETCURSOR, OnSetCursor ); HANDLE_MESSAGE( WM_MOUSEACTIVATE, OnMouseActivate ); HANDLE_MESSAGE( WM_NCLBUTTONDOWN, OnNcLButtonDown ); HANDLE_MESSAGE( WM_NCLBUTTONDBLCLK, OnNcLButtonDblClk ); HANDLE_MESSAGE( WM_NCHITTEST, OnNcHitTest ); HANDLE_MESSAGE( WM_SHOWWINDOW, OnShowWindow ); HANDLE_MESSAGE( WM_SYSCOMMAND, OnSysCommand ); HANDLE_MESSAGE( WM_KEYDOWN, OnKeyDown ); HANDLE_MESSAGE( WM_GETMINMAXINFO, OnGetMinMaxInfo ); HANDLE_MESSAGE( WM_MOVING, OnMoving ); HANDLE_MESSAGE( WM_NOTIFY, OnNotify ); HANDLE_MESSAGE( WM_CONTEXTMENU, OnContextMenu ); HANDLE_MESSAGE( WM_MEASUREITEM, OnMeasureItem ); HANDLE_MESSAGE( WM_DRAWITEM, OnDrawItem ); HANDLE_MESSAGE( WM_DESTROY, OnDestroy ); default: return This->DefCluiWndProc(msg, wParam, lParam); } return FALSE; } ////////////////////////////////////////////////////////////////////////// // METHODS // private: HRESULT CreateCLC(); HRESULT FillAlphaChannel( HDC hDC, RECT* prcParent, BYTE bAlpha); HRESULT SnappingToEdge( WINDOWPOS * lpWindowPos ); HRESULT LoadDllsRuntime(); HRESULT RegisterAvatarMenu(); // TODO move to CLC class HRESULT CreateCluiFrames(); HRESULT CreateCLCWindow(const HWND parent); HRESULT CreateUIFrames(); LRESULT DefCluiWndProc(UINT msg, WPARAM wParam, LPARAM lParam) { return corecli.pfnContactListWndProc( m_hWnd, msg, wParam, lParam); } // MessageMap LRESULT PreProcessWndProc(UINT msg, WPARAM wParam, LPARAM lParam, BOOL& bHandled ); LRESULT OnSizingMoving(UINT msg, WPARAM wParam, LPARAM lParam); LRESULT OnThemeChanged(UINT msg, WPARAM wParam, LPARAM lParam); LRESULT OnDwmCompositionChanged(UINT msg, WPARAM wParam, LPARAM lParam); LRESULT OnSyncCall(UINT msg, WPARAM wParam, LPARAM lParam); LRESULT OnUpdate(UINT msg, WPARAM wParam, LPARAM lParam); LRESULT OnInitMenu(UINT msg, WPARAM wParam, LPARAM lParam); LRESULT OnNcPaint(UINT msg, WPARAM wParam, LPARAM lParam); LRESULT OnEraseBkgnd(UINT msg, WPARAM wParam, LPARAM lParam); LRESULT OnNcCreate(UINT msg, WPARAM wParam, LPARAM lParam); LRESULT OnPaint(UINT msg, WPARAM wParam, LPARAM lParam); LRESULT OnCreate(UINT msg, WPARAM wParam, LPARAM lParam); LRESULT OnSetAllExtraIcons(UINT msg, WPARAM wParam, LPARAM lParam); LRESULT OnCreateClc(UINT msg, WPARAM wParam, LPARAM lParam); LRESULT OnLButtonDown(UINT msg, WPARAM wParam, LPARAM lParam); LRESULT OnParentNotify(UINT msg, WPARAM wParam, LPARAM lParam); LRESULT OnSetFocus(UINT msg, WPARAM wParam, LPARAM lParam); LRESULT OnTimer(UINT msg, WPARAM wParam, LPARAM lParam); LRESULT OnStatusBarUpdateTimer(UINT msg, WPARAM wParam, LPARAM lParam); LRESULT OnAutoAlphaTimer(UINT msg, WPARAM wParam, LPARAM lParam); LRESULT OnSmoothAlphaTransitionTimer(UINT msg, WPARAM wParam, LPARAM lParam); LRESULT OnDelayedSizingTimer(UINT msg, WPARAM wParam, LPARAM lParam); LRESULT OnBringOutTimer(UINT msg, WPARAM wParam, LPARAM lParam); LRESULT OnBringInTimer(UINT msg, WPARAM wParam, LPARAM lParam); LRESULT OnUpdateBringTimer(UINT msg, WPARAM wParam, LPARAM lParam); LRESULT OnActivate(UINT msg, WPARAM wParam, LPARAM lParam); LRESULT OnSetCursor(UINT msg, WPARAM wParam, LPARAM lParam); LRESULT OnMouseActivate(UINT msg, WPARAM wParam, LPARAM lParam); LRESULT OnNcLButtonDown(UINT msg, WPARAM wParam, LPARAM lParam); LRESULT OnNcLButtonDblClk(UINT msg, WPARAM wParam, LPARAM lParam); LRESULT OnNcHitTest(UINT msg, WPARAM wParam, LPARAM lParam); LRESULT OnShowWindow(UINT msg, WPARAM wParam, LPARAM lParam); LRESULT OnSysCommand(UINT msg, WPARAM wParam, LPARAM lParam); LRESULT OnKeyDown(UINT msg, WPARAM wParam, LPARAM lParam); LRESULT OnGetMinMaxInfo(UINT msg, WPARAM wParam, LPARAM lParam); LRESULT OnMoving(UINT msg, WPARAM wParam, LPARAM lParam); LRESULT OnNotify(UINT msg, WPARAM wParam, LPARAM lParam); LRESULT OnListSizeChangeNotify(NMCLISTCONTROL *pnmc); LRESULT OnClickNotify(NMCLISTCONTROL *pnmc); LRESULT OnContextMenu(UINT msg, WPARAM wParam, LPARAM lParam); LRESULT OnMeasureItem(UINT msg, WPARAM wParam, LPARAM lParam); LRESULT OnDrawItem(UINT msg, WPARAM wParam, LPARAM lParam); LRESULT OnDestroy(UINT msg, WPARAM wParam, LPARAM lParam); protected: HMODULE m_hDwmapiDll; HMODULE m_hUserDll; enum { SNAPTOEDGESENSIVITY = 30 }; }; #endif // modern_clui_h__