summaryrefslogtreecommitdiff
path: root/plugins/Clist_modern/modern_clui.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/Clist_modern/modern_clui.cpp')
-rw-r--r--plugins/Clist_modern/modern_clui.cpp3111
1 files changed, 0 insertions, 3111 deletions
diff --git a/plugins/Clist_modern/modern_clui.cpp b/plugins/Clist_modern/modern_clui.cpp
deleted file mode 100644
index fe27bc2a34..0000000000
--- a/plugins/Clist_modern/modern_clui.cpp
+++ /dev/null
@@ -1,3111 +0,0 @@
-/*
-
-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.
-*/
-
-#include "hdr/modern_commonheaders.h"
-
-#include "m_clc.h"
-#include "m_clui.h"
-#include "m_skin.h"
-#include "m_api/m_skinbutton.h"
-#include "hdr/modern_skinengine.h"
-#include "hdr/modern_statusbar.h"
-
-#include "hdr/modern_static_clui.h"
-#include <locale.h>
-#include "hdr/modern_clcpaint.h"
-#include "hdr/modern_sync.h"
-
-int ContactSettingChanged(WPARAM, LPARAM);
-
-HRESULT (WINAPI *g_proc_DWMEnableBlurBehindWindow)(HWND hWnd, DWM_BLURBEHIND *pBlurBehind);
-BOOL CALLBACK ProcessCLUIFrameInternalMsg(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, LRESULT& result );
-void DestroyTrayMenu(HMENU hMenu);
-
-// new sources
-#ifdef _MSC_VER
-#include <crtdbg.h>
-#endif
-
-//////////////// CLUI CLASS IMPLEMENTATION /////////////////////////////////
-#include "hdr/modern_clui.h"
-
-#define STATIC_METHOD
-
-CLUI* CLUI::m_pCLUI = NULL;
-BOOL CLUI::m_fMainMenuInited = FALSE;
-HWND CLUI::m_hWnd = NULL;
-
-void CLUI::cliOnCreateClc(void)
-{
- STATIC_METHOD;
- _ASSERT( m_pCLUI );
- m_pCLUI->CreateCluiFrames();
-}
-
-int CLUI::OnEvent_ModulesLoaded(WPARAM wParam,LPARAM lParam)
-{
- STATIC_METHOD;
-
- g_CluiData.bMetaAvail = ServiceExists(MS_MC_GETDEFAULTCONTACT) ? TRUE : FALSE;
- setlocale(LC_ALL, ""); //fix for case insensitive comparing
-
- if (ServiceExists(MS_MC_DISABLEHIDDENGROUP))
- CallService(MS_MC_DISABLEHIDDENGROUP, (WPARAM)TRUE, (LPARAM)0);
-
- if (ServiceExists(MS_MC_GETPROTOCOLNAME))
- g_szMetaModuleName = (char *)CallService(MS_MC_GETPROTOCOLNAME, 0, 0);
-
- CLUIServices_ProtocolStatusChanged(0,0);
- SleepEx(0,TRUE);
- g_flag_bOnModulesLoadedCalled = TRUE;
- ///pcli->pfnInvalidateDisplayNameCacheEntry(INVALID_HANDLE_VALUE);
- SendMessage(pcli->hwndContactList,UM_CREATECLC,0,0); //$$$
- InitSkinHotKeys();
- g_CluiData.bSTATE = STATE_NORMAL;
- ske_RedrawCompleteWindow();
-
- return 0;
-}
-
-int CLUI::OnEvent_FontReload(WPARAM wParam,LPARAM lParam)
-{
- STATIC_METHOD;
-
- pcli->pfnClcBroadcast( INTM_RELOADOPTIONS, wParam, lParam );
-
- g_CluiData.dwKeyColor = db_get_dw(NULL,"ModernSettings","KeyColor",(DWORD)SETTING_KEYCOLOR_DEFAULT);
-
- CLUI__cliInvalidateRect( pcli->hwndContactList, 0, 0 );
-
- return 0;
-}
-
-int CLUI::OnEvent_ContactMenuPreBuild(WPARAM wParam, LPARAM lParam)
-{
- TCHAR cls[128];
- HANDLE hItem;
- HWND hwndClist = GetFocus();
- CLISTMENUITEM mi;
- if (MirandaExiting()) return 0;
- ZeroMemory(&mi,sizeof(mi));
- mi.cbSize = sizeof(mi);
- mi.flags = CMIM_FLAGS;
- GetClassName(hwndClist,cls,SIZEOF(cls));
- hwndClist = (!lstrcmp(CLISTCONTROL_CLASS,cls))?hwndClist:pcli->hwndContactList;
- hItem = (HANDLE)SendMessage(hwndClist,CLM_GETSELECTION,0,0);
- if ( !hItem) {
- mi.flags = CMIM_FLAGS | CMIF_HIDDEN;
- }
- CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM)hRenameMenuItem, (LPARAM)&mi);
-
- if ( !hItem || !IsHContactContact(hItem) || !db_get_b(NULL,"CList","AvatarsShow",SETTINGS_SHOWAVATARS_DEFAULT))
- {
- mi.flags = CMIM_FLAGS | CMIF_HIDDEN;
- CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM)hShowAvatarMenuItem, (LPARAM)&mi);
- CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM)hHideAvatarMenuItem, (LPARAM)&mi);
- }
- else
- {
- int has_avatar;
-
- if (ServiceExists(MS_AV_GETAVATARBITMAP))
- {
- has_avatar = CallService(MS_AV_GETAVATARBITMAP, (WPARAM)hItem, 0);
- }
- else
- {
- DBVARIANT dbv = {0};
- if (DBGetContactSettingTString(hItem, "ContactPhoto", "File", &dbv))
- {
- has_avatar = 0;
- }
- else
- {
- has_avatar = 1;
- db_free(&dbv);
- }
- }
-
- if (db_get_b(hItem, "CList", "HideContactAvatar", 0))
- {
- mi.flags = CMIM_FLAGS | (has_avatar ? 0 : CMIF_GRAYED);
- CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM)hShowAvatarMenuItem, (LPARAM)&mi);
- mi.flags = CMIM_FLAGS | CMIF_HIDDEN;
- CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM)hHideAvatarMenuItem, (LPARAM)&mi);
- }
- else
- {
- mi.flags = CMIM_FLAGS | CMIF_HIDDEN;
- CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM)hShowAvatarMenuItem, (LPARAM)&mi);
- mi.flags = CMIM_FLAGS | (has_avatar ? 0 : CMIF_GRAYED);
- CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM)hHideAvatarMenuItem, (LPARAM)&mi);
- }
- }
-
- return 0;
-}
-int CLUI::OnEvent_DBSettingChanging(WPARAM wParam,LPARAM lParam)
-{
- if (ServiceExists("ExtraIcon/Register"))
- return 0;
-
- DBCONTACTWRITESETTING *dbcws = (DBCONTACTWRITESETTING *)lParam;
- if (wParam == 0) return 0;
- if (dbcws == NULL) return(0);
- if (MirandaExiting()) return 0;
-
- if (( dbcws->value.type == DBVT_WORD && !mir_strcmp(dbcws->szSetting,"ApparentMode")) ||
- ( dbcws->value.type == DBVT_ASCIIZ &&
- (( !mir_strcmp(dbcws->szSetting,"e-mail") ||
- !mir_strcmp(dbcws->szSetting,"Mye-mail0") ||
- !mir_strcmp(dbcws->szSetting,"Cellular")) ||
- ( !mir_strcmp(dbcws->szModule,"UserInfo") &&
- ( !mir_strcmp(dbcws->szSetting,"MyPhone0") ||
- !mir_strcmp(dbcws->szSetting,"Mye-mail0"))))))
- ExtraImage_SetAllExtraIcons(pcli->hwndContactTree,(HANDLE)wParam);
- return(0);
-};
-INT_PTR CLUI::Service_ShowMainMenu(WPARAM wParam,LPARAM lParam)
-{
- HMENU hMenu;
- POINT pt;
- hMenu = (HMENU)CallService(MS_CLIST_MENUGETMAIN,0,0);
- GetCursorPos(&pt);
- TrackPopupMenu(hMenu,TPM_TOPALIGN|TPM_LEFTALIGN|TPM_LEFTBUTTON,pt.x,pt.y,0,pcli->hwndContactList,NULL);
- return 0;
-}
-INT_PTR CLUI::Service_ShowStatusMenu(WPARAM wParam,LPARAM lParam)
-{
- HMENU hMenu;
- POINT pt;
- hMenu = (HMENU)CallService(MS_CLIST_MENUGETSTATUS,0,0);
- GetCursorPos(&pt);
- TrackPopupMenu(hMenu,TPM_TOPALIGN|TPM_LEFTALIGN|TPM_LEFTBUTTON,pt.x,pt.y,0,pcli->hwndContactList,NULL);
- return 0;
-}
-
-INT_PTR CLUI::Service_Menu_ShowContactAvatar(WPARAM wParam,LPARAM lParam)
-{
- HANDLE hContact = (HANDLE) wParam;
-
- db_set_b(hContact, "CList", "HideContactAvatar", 0);
-
- pcli->pfnClcBroadcast( INTM_AVATARCHANGED,wParam,0);
- return 0;
-}
-
-INT_PTR CLUI::Service_Menu_HideContactAvatar(WPARAM wParam,LPARAM lParam)
-{
- HANDLE hContact = (HANDLE) wParam;
-
- db_set_b(hContact, "CList", "HideContactAvatar", 1);
-
- pcli->pfnClcBroadcast( INTM_AVATARCHANGED,wParam,0);
- return 0;
-}
-
-
-
-HRESULT CLUI::CreateCluiFrames()
-{
- g_hMenuMain = GetMenu(pcli->hwndContactList);
- MENUITEMINFO mii;
- ZeroMemory(&mii,sizeof(mii));
- mii.cbSize = MENUITEMINFO_V4_SIZE;
- mii.fMask = MIIM_SUBMENU;
- mii.hSubMenu = (HMENU)CallService(MS_CLIST_MENUGETMAIN,0,0);
- SetMenuItemInfo(g_hMenuMain,0,TRUE,&mii);
- mii.hSubMenu = (HMENU)CallService(MS_CLIST_MENUGETSTATUS,0,0);
- SetMenuItemInfo(g_hMenuMain,1,TRUE,&mii);
-
- CreateCLCWindow(CluiWnd());
-
- CLUI_ChangeWindowMode();
-
- RegisterAvatarMenu();
-
- CLUI_ReloadCLUIOptions();
-
- CreateUIFrames();
-
- HookEvent(ME_SYSTEM_MODULESLOADED,CLUI::OnEvent_ModulesLoaded);
- HookEvent(ME_SKIN2_ICONSCHANGED,CLUI_IconsChanged);
- HookEvent(ME_FONT_RELOAD, CLUI::OnEvent_FontReload);
- return S_OK;
-}
-CLUI::CLUI() :
-m_hUserDll( NULL ),
-m_hDwmapiDll( NULL )
-{
- m_pCLUI = this;
- g_CluiData.bSTATE = STATE_CLUI_LOADING;
- LoadDllsRuntime();
- hFrameContactTree = NULL;
-
- CLUIServices_LoadModule();
-
- // Call InitGroup menus before
- GroupMenus_Init();
-
- CreateServiceFunction(MS_CLUI_SHOWMAINMENU,Service_ShowMainMenu);
- CreateServiceFunction(MS_CLUI_SHOWSTATUSMENU,Service_ShowStatusMenu);
-
-
- //TODO Add Row template loading here.
-
- RowHeight_InitModernRow();
- nLastRequiredHeight = 0;
-
- LoadCLUIFramesModule();
- ExtraImage_LoadModule();
-
- g_CluiData.boldHideOffline = -1;
- bOldHideOffline = db_get_b(NULL,"CList","HideOffline",SETTING_HIDEOFFLINE_DEFAULT);
-
- g_CluiData.bOldUseGroups = -1;
- bOldUseGroups = db_get_b( NULL,"CList","UseGroups", SETTING_USEGROUPS_DEFAULT );
-}
-
-CLUI::~CLUI()
-{
- FreeLibrary(m_hUserDll);
- FreeLibrary(m_hDwmapiDll);
- m_pCLUI = NULL;
-}
-
-HRESULT CLUI::LoadDllsRuntime()
-{
- m_hUserDll = LoadLibrary(_T("user32.dll"));
- if (m_hUserDll)
- {
- g_proc_UpdateLayeredWindow = (BOOL (WINAPI *)(HWND,HDC,POINT*,SIZE*,HDC,POINT*,COLORREF,BLENDFUNCTION*,DWORD))GetProcAddress(m_hUserDll, "UpdateLayeredWindow");
- g_proc_SetLayeredWindowAttributesNew = (BOOL (WINAPI *)(HWND,COLORREF,BYTE,DWORD))GetProcAddress(m_hUserDll, "SetLayeredWindowAttributes");
- g_proc_AnimateWindow = (BOOL (WINAPI*)(HWND,DWORD,DWORD))GetProcAddress(m_hUserDll,"AnimateWindow");
-
- g_CluiData.fLayered = (g_proc_UpdateLayeredWindow != NULL) && !db_get_b(NULL,"ModernData","DisableEngine", SETTING_DISABLESKIN_DEFAULT);
- g_CluiData.fSmoothAnimation = IsWinVer2000Plus() && db_get_b(NULL, "CLUI", "FadeInOut", SETTING_FADEIN_DEFAULT);
- g_CluiData.fLayered = (g_CluiData.fLayered*db_get_b(NULL, "ModernData", "EnableLayering", g_CluiData.fLayered)) && !db_get_b(NULL,"ModernData","DisableEngine", SETTING_DISABLESKIN_DEFAULT);
- }
-
- if (IsWinVerVistaPlus())
- {
- m_hDwmapiDll = LoadLibrary(_T("dwmapi.dll"));
- if (m_hDwmapiDll)
- {
- g_proc_DWMEnableBlurBehindWindow = (HRESULT (WINAPI *)(HWND, DWM_BLURBEHIND *))GetProcAddress(m_hDwmapiDll, "DwmEnableBlurBehindWindow");
- }
- }
- g_CluiData.fAeroGlass = FALSE;
-
- return S_OK;
-}
-HRESULT CLUI::RegisterAvatarMenu()
-{
- CLISTMENUITEM mi;
-
- ZeroMemory(&mi,sizeof(mi));
- mi.cbSize = sizeof(mi);
- mi.flags = 0;
- mi.pszContactOwner = NULL; //on every contact
- CreateServiceFunction("CList/ShowContactAvatar",CLUI::Service_Menu_ShowContactAvatar);
- mi.position = 2000150000;
- mi.hIcon = LoadSmallIcon(g_hInst,MAKEINTRESOURCE(IDI_SHOW_AVATAR));
- mi.pszName = LPGEN("Show Contact &Avatar");
- mi.pszService = "CList/ShowContactAvatar";
- hShowAvatarMenuItem = Menu_AddContactMenuItem(&mi);
- DestroyIcon_protect(mi.hIcon);
-
- CreateServiceFunction("CList/HideContactAvatar",CLUI::Service_Menu_HideContactAvatar);
- mi.position = 2000150001;
- mi.hIcon = LoadSmallIcon(g_hInst,MAKEINTRESOURCE(IDI_HIDE_AVATAR));
- mi.pszName = LPGEN("Hide Contact &Avatar");
- mi.pszService = "CList/HideContactAvatar";
- hHideAvatarMenuItem = Menu_AddContactMenuItem(&mi);
- DestroyIcon_protect(mi.hIcon);
-
- HookEvent(ME_CLIST_PREBUILDCONTACTMENU, CLUI::OnEvent_ContactMenuPreBuild);
-
- return S_OK;
-}
-
-HRESULT CLUI::CreateCLCWindow(const HWND hwndClui)
-{
- ClcWnd() = CreateWindow(CLISTCONTROL_CLASS,_T(""),
- WS_CHILD|WS_CLIPCHILDREN|CLS_CONTACTLIST
- |(db_get_b(NULL,"CList","UseGroups",SETTING_USEGROUPS_DEFAULT)?CLS_USEGROUPS:0)
- |(db_get_b(NULL,"CList","HideOffline",SETTING_HIDEOFFLINE_DEFAULT)?CLS_HIDEOFFLINE:0)
- |(db_get_b(NULL,"CList","HideEmptyGroups",SETTING_HIDEEMPTYGROUPS_DEFAULT)?CLS_HIDEEMPTYGROUPS:0
- |CLS_MULTICOLUMN
- ),
- 0,0,0,0,hwndClui,NULL,g_hInst,NULL);
-
- return S_OK;
-}
-
-HRESULT CLUI::CreateUIFrames()
-{
- EventArea_Create(pcli->hwndContactList);
- CreateViewModeFrame();
- pcli->hwndStatus = StatusBar_Create(pcli->hwndContactList);
-
- return S_OK;
-}
-
-
-
-HRESULT CLUI::FillAlphaChannel( HDC hDC, RECT * prcParent, BYTE bAlpha)
-{
-
- RECT rcWindow;
- GetWindowRect( m_hWnd, &rcWindow );
-
- HRGN hRgn = CreateRectRgn(0,0,0,0);
-
- if ( GetWindowRgn(m_hWnd,hRgn) == ERROR )
- {
- DeleteObject(hRgn);
- hRgn = CreateRectRgn(rcWindow.left ,rcWindow.top ,rcWindow.right,rcWindow.bottom);
- }
-
- OffsetRgn(hRgn,-prcParent->left,-prcParent->top);
-
- RECT rcBounds;
- GetRgnBox(hRgn,&rcBounds);
-
- if ( IsRectEmpty(&rcBounds))
- {
- DeleteObject(hRgn);
- return S_FALSE;
- }
-
- DWORD dwRgnSize = GetRegionData( hRgn, 0, NULL );
- RGNDATA * rgnData = (RGNDATA *)malloc(dwRgnSize);
- GetRegionData(hRgn,dwRgnSize,rgnData);
-
- RECT * pRect = (RECT *)rgnData->Buffer;
-
- for (DWORD i=0; i < rgnData->rdh.nCount; i++)
- ske_SetRectOpaque( hDC, &pRect[i] );
-
- free(rgnData);
- DeleteObject(hRgn);
-
- return S_OK;
-}
-
-HRESULT CLUI::CreateCLC()
-{
- INIT < CLISTFrame> Frame;
-
- Frame.hWnd = ClcWnd();
- Frame.align = alClient;
- Frame.hIcon = LoadSkinnedIcon(SKINICON_OTHER_MIRANDA);
- Frame.Flags = F_VISIBLE|/*F_SHOWTB|*/F_SHOWTBTIP|F_NO_SUBCONTAINER|F_TCHAR;
- Frame.tname = LPGENT("My Contacts");
- Frame.TBtname = TranslateT("My Contacts");
- hFrameContactTree = (HWND)CallService(MS_CLIST_FRAMES_ADDFRAME,(WPARAM)&Frame,(LPARAM)0);
-
- CallService(MS_SKINENG_REGISTERPAINTSUB,(WPARAM)Frame.hWnd,(LPARAM)CLCPaint::PaintCallbackProc);
- CallService(MS_CLIST_FRAMES_SETFRAMEOPTIONS,MAKEWPARAM(FO_TBTIPNAME,hFrameContactTree),(LPARAM)Translate("My Contacts"));
-
- ExtraImage_ReloadExtraIcons();
-
- nLastRequiredHeight = 0;
- if ( g_CluiData.current_viewmode[0] == '\0' )
- {
- if (bOldHideOffline != (BYTE)-1)
- CallService( MS_CLIST_SETHIDEOFFLINE,(WPARAM)bOldHideOffline, 0);
- else
- CallService( MS_CLIST_SETHIDEOFFLINE,(WPARAM)0, 0);
- if (bOldUseGroups != (BYTE)-1)
- CallService( MS_CLIST_SETUSEGROUPS ,(WPARAM)bOldUseGroups, 0);
- else
- CallService( MS_CLIST_SETUSEGROUPS ,(WPARAM)bOldUseGroups, 0);
- }
- nLastRequiredHeight = 0;
- mutex_bDisableAutoUpdate = 0;
-
- HookEvent(ME_DB_CONTACT_SETTINGCHANGED, ContactSettingChanged);
- HookEvent(ME_DB_CONTACT_SETTINGCHANGED,CLUI::OnEvent_DBSettingChanging);
- return S_OK;
-
-};
-HRESULT CLUI::SnappingToEdge( WINDOWPOS * lpWindowPos )
-{
- //by ZORG
- if ( MyMonitorFromWindow == NULL || MyGetMonitorInfo == NULL )
- return S_FALSE;
-
- if (db_get_b(NULL,"CLUI","SnapToEdges",SETTING_SNAPTOEDGES_DEFAULT))
- {
- RECT* dr;
- MONITORINFO monInfo;
- HMONITOR curMonitor = MyMonitorFromWindow(m_hWnd, MONITOR_DEFAULTTONEAREST);
-
- monInfo.cbSize = sizeof(monInfo);
- MyGetMonitorInfo(curMonitor, &monInfo);
-
- dr = &(monInfo.rcWork);
-
- // Left side
- if ( lpWindowPos->x < dr->left + SNAPTOEDGESENSIVITY && lpWindowPos->x > dr->left - SNAPTOEDGESENSIVITY && g_CluiData.bBehindEdgeSettings != 1)
- lpWindowPos->x = dr->left;
-
- // Right side
- if ( dr->right - lpWindowPos->x - lpWindowPos->cx < SNAPTOEDGESENSIVITY && dr->right - lpWindowPos->x - lpWindowPos->cx > -SNAPTOEDGESENSIVITY && g_CluiData.bBehindEdgeSettings != 2)
- lpWindowPos->x = dr->right - lpWindowPos->cx;
-
- // Top side
- if ( lpWindowPos->y < dr->top + SNAPTOEDGESENSIVITY && lpWindowPos->y > dr->top - SNAPTOEDGESENSIVITY)
- lpWindowPos->y = dr->top;
-
- // Bottom side
- if ( dr->bottom - lpWindowPos->y - lpWindowPos->cy < SNAPTOEDGESENSIVITY && dr->bottom - lpWindowPos->y - lpWindowPos->cy > -SNAPTOEDGESENSIVITY)
- lpWindowPos->y = dr->bottom - lpWindowPos->cy;
- }
- return S_OK;
-}
-
-HICON GetMainStatusOverlay(int STATUS)
-{
- return ImageList_GetIcon(hAvatarOverlays,g_pStatusOverlayIcons[STATUS-ID_STATUS_OFFLINE].listID,ILD_NORMAL);
-}
-
-void UnloadAvatarOverlayIcon()
-{
- for (int i=0 ; i < MAX_REGS(g_pAvatarOverlayIcons); i++) {
- g_pAvatarOverlayIcons[i].listID = -1;
- g_pStatusOverlayIcons[i].listID = -1;
- }
- ImageList_Destroy(hAvatarOverlays);
- hAvatarOverlays = NULL;
- DestroyIcon_protect(g_hListeningToIcon);
- g_hListeningToIcon = NULL;
-}
-
-BOOL CLUI_CheckOwnedByClui(HWND hWnd)
-{
- HWND hWndMid, hWndClui;
- if ( !hWnd) return FALSE;
- hWndClui = pcli->hwndContactList;
- hWndMid = fnGetAncestor(hWnd,GA_ROOTOWNER);
- if (hWndMid == hWndClui) return TRUE;
- {
- TCHAR buf[255];
- GetClassName(hWndMid,buf,254);
- if ( !mir_tstrcmpi(buf,CLUIFrameSubContainerClassName)) return TRUE;
- }
- return FALSE;
-}
-
-int CLUI_ShowWindowMod(HWND hWnd, int nCmd)
-{
- int res = 0;
-
- if (hWnd == pcli->hwndContactList && (nCmd == SW_HIDE || nCmd == SW_MINIMIZE))
- {
- AniAva_InvalidateAvatarPositions(NULL);
- AniAva_RemoveInvalidatedAvatars();
- }
-
- if (hWnd == pcli->hwndContactList
- && !g_mutex_bChangingMode
- && nCmd == SW_HIDE
- && !g_CluiData.fLayered
- && IsWinVerXPPlus()
- && db_get_b(NULL,"CList","WindowShadow",SETTING_WINDOWSHADOW_DEFAULT))
- {
- ShowWindow(hWnd,SW_MINIMIZE); //removing of shadow
- return ShowWindow(hWnd,nCmd);
- }
- if (hWnd == pcli->hwndContactList
- && !g_mutex_bChangingMode
- && nCmd == SW_RESTORE
- && !g_CluiData.fLayered
- && IsWinVerXPPlus()
- && g_CluiData.fSmoothAnimation
- && !g_bTransparentFlag
- )
- {
- if (db_get_b(NULL,"CList","WindowShadow",SETTING_WINDOWSHADOW_DEFAULT))
- {
- CLUI_SmoothAlphaTransition(hWnd, 255, 1);
- }
- else
- {
-
- int ret = ShowWindow(hWnd,nCmd);
- CLUI_SmoothAlphaTransition(hWnd, 255, 1);
- return ret;
- }
- }
- return ShowWindow(hWnd,nCmd);
-}
-
-static BOOL CLUI_WaitThreadsCompletion(HWND hwnd)
-{
- static BYTE bEntersCount = 0;
- static const BYTE bcMAX_AWAITING_RETRY = 10; //repeat awaiting only 10 times
- TRACE("CLUI_WaitThreadsCompletion Enter");
- if (bEntersCount < bcMAX_AWAITING_RETRY
- && ( g_mutex_nCalcRowHeightLock ||
- g_CluiData.mutexPaintLock ||
- g_dwAwayMsgThreadID ||
- g_dwGetTextAsyncThreadID ||
- g_dwSmoothAnimationThreadID ||
- g_dwFillFontListThreadID)
- && !Miranda_Terminated())
- {
- TRACE("Waiting threads");
- TRACEVAR("g_mutex_nCalcRowHeightLock: %x",g_mutex_nCalcRowHeightLock);
- TRACEVAR("g_CluiData.mutexPaintLock: %x",g_CluiData.mutexPaintLock);
- TRACEVAR("g_dwAwayMsgThreadID: %x",g_dwAwayMsgThreadID);
- TRACEVAR("g_dwGetTextAsyncThreadID: %x",g_dwGetTextAsyncThreadID);
- TRACEVAR("g_dwSmoothAnimationThreadID: %x",g_dwSmoothAnimationThreadID);
- TRACEVAR("g_dwFillFontListThreadID: %x",g_dwFillFontListThreadID);
- bEntersCount++;
- SleepEx(10,TRUE);
- return TRUE;
- }
-
- return FALSE;
-}
-
-void CLUI_UpdateLayeredMode()
-{
- g_CluiData.fDisableSkinEngine = db_get_b(NULL,"ModernData","DisableEngine", SETTING_DISABLESKIN_DEFAULT);
- if (IsWinVer2000Plus())
- {
- BOOL tLayeredFlag = TRUE;
- tLayeredFlag &= (db_get_b(NULL, "ModernData", "EnableLayering", tLayeredFlag) && !g_CluiData.fDisableSkinEngine);
-
- if (g_CluiData.fLayered != tLayeredFlag)
- {
- LONG exStyle;
- BOOL fWasVisible = IsWindowVisible(pcli->hwndContactList);
- if (fWasVisible) ShowWindow(pcli->hwndContactList,SW_HIDE);
- //change layered mode
- exStyle = GetWindowLongPtr(pcli->hwndContactList,GWL_EXSTYLE);
- if (tLayeredFlag)
- exStyle |= WS_EX_LAYERED;
- else
- exStyle &= ~WS_EX_LAYERED;
- SetWindowLongPtr(pcli->hwndContactList,GWL_EXSTYLE,exStyle&~WS_EX_LAYERED);
- SetWindowLongPtr(pcli->hwndContactList,GWL_EXSTYLE,exStyle);
- g_CluiData.fLayered = tLayeredFlag;
- Sync(CLUIFrames_SetLayeredMode, tLayeredFlag,pcli->hwndContactList);
- CLUI_ChangeWindowMode();
- Sync(CLUIFrames_OnClistResize_mod, (WPARAM)0, (LPARAM)0 );
- if (fWasVisible) ShowWindow(pcli->hwndContactList,SW_SHOW);
- }
- }
-}
-
-void CLUI_UpdateAeroGlass()
-{
- BOOL tAeroGlass = db_get_b(NULL, "ModernData", "AeroGlass", SETTING_AEROGLASS_DEFAULT) && (g_CluiData.fLayered);
- if (g_proc_DWMEnableBlurBehindWindow && (tAeroGlass != g_CluiData.fAeroGlass))
- {
- if (g_CluiData.hAeroGlassRgn)
- {
- DeleteObject(g_CluiData.hAeroGlassRgn);
- g_CluiData.hAeroGlassRgn = 0;
- }
-
- DWM_BLURBEHIND bb = {0};
- bb.dwFlags = DWM_BB_ENABLE;
- bb.fEnable = tAeroGlass;
-
- if (tAeroGlass)
- {
- g_CluiData.hAeroGlassRgn = ske_CreateOpaqueRgn(AEROGLASS_MINALPHA, true);
- bb.hRgnBlur = g_CluiData.hAeroGlassRgn;
- bb.dwFlags |= DWM_BB_BLURREGION;
- }
-
- g_proc_DWMEnableBlurBehindWindow(pcli->hwndContactList, &bb);
- g_CluiData.fAeroGlass = tAeroGlass;
- }
-}
-
-extern int CLUIFrames_UpdateBorders();
-
-void CLUI_ChangeWindowMode()
-{
- BOOL storedVisMode = FALSE;
- LONG style,styleEx;
- LONG oldStyle,oldStyleEx;
- LONG styleMask = WS_CLIPCHILDREN|WS_BORDER|WS_CAPTION|WS_MINIMIZEBOX|WS_POPUPWINDOW|WS_CLIPCHILDREN|WS_THICKFRAME|WS_SYSMENU;
- LONG styleMaskEx = WS_EX_TOOLWINDOW|WS_EX_LAYERED;
- LONG curStyle,curStyleEx;
- if ( !pcli->hwndContactList) return;
-
- g_mutex_bChangingMode = TRUE;
- g_bTransparentFlag = IsWinVer2000Plus() && db_get_b( NULL,"CList","Transparent",SETTING_TRANSPARENT_DEFAULT);
- g_CluiData.fSmoothAnimation = IsWinVer2000Plus() && db_get_b(NULL, "CLUI", "FadeInOut", SETTING_FADEIN_DEFAULT);
- if (g_bTransparentFlag == 0 && g_CluiData.bCurrentAlpha != 0)
- g_CluiData.bCurrentAlpha = 255;
- //2- Calculate STYLES and STYLESEX
- if ( !g_CluiData.fLayered)
- {
- style = 0;
- styleEx = 0;
- if (db_get_b(NULL,"CList","ThinBorder",SETTING_THINBORDER_DEFAULT) || (db_get_b(NULL,"CList","NoBorder",SETTING_NOBORDER_DEFAULT)))
- {
- style = WS_CLIPCHILDREN| (db_get_b(NULL,"CList","ThinBorder",SETTING_THINBORDER_DEFAULT)?WS_BORDER:0);
- styleEx = WS_EX_TOOLWINDOW;
- styleMaskEx |= WS_EX_APPWINDOW;
- }
- else if (db_get_b(NULL,"CLUI","ShowCaption",SETTING_SHOWCAPTION_DEFAULT) && db_get_b(NULL,"CList","ToolWindow",SETTING_TOOLWINDOW_DEFAULT))
- {
- styleEx = WS_EX_TOOLWINDOW/*|WS_EX_WINDOWEDGE*/;
- style = WS_CAPTION|WS_POPUPWINDOW|WS_CLIPCHILDREN|WS_THICKFRAME;
- styleMaskEx |= WS_EX_APPWINDOW;
- }
- else if (db_get_b(NULL,"CLUI","ShowCaption",SETTING_SHOWCAPTION_DEFAULT))
- {
- style = WS_CAPTION|WS_SYSMENU|WS_POPUPWINDOW|WS_CLIPCHILDREN|WS_THICKFRAME|WS_MINIMIZEBOX;
- }
- else
- {
- style = WS_POPUPWINDOW|WS_CLIPCHILDREN|WS_THICKFRAME;
- styleEx = WS_EX_TOOLWINDOW/*|WS_EX_WINDOWEDGE*/;
- styleMaskEx |= WS_EX_APPWINDOW;
- }
- }
- else
- {
- style = WS_CLIPCHILDREN;
- styleEx = WS_EX_TOOLWINDOW;
- styleMaskEx |= WS_EX_APPWINDOW;
- }
- //3- TODO Update Layered mode
- if (g_bTransparentFlag && g_CluiData.fLayered)
- styleEx |= WS_EX_LAYERED;
-
- //4- Set Title
- {
- TCHAR titleText[255] = {0};
- DBVARIANT dbv = {0};
- if (DBGetContactSettingTString(NULL,"CList","TitleText",&dbv))
- lstrcpyn(titleText,_T(MIRANDANAME),SIZEOF(titleText));
- else
- {
- lstrcpyn(titleText,dbv.ptszVal,SIZEOF(titleText));
- db_free(&dbv);
- }
- SetWindowText(pcli->hwndContactList,titleText);
- }
- // < ->
- //1- If visible store it and hide
-
- if (g_CluiData.fLayered && (db_get_b(NULL,"CList","OnDesktop", SETTING_ONDESKTOP_DEFAULT)))// && !flag_bFirstTimeCall))
- {
- SetParent(pcli->hwndContactList,NULL);
- Sync( CLUIFrames_SetParentForContainers, (HWND) NULL );
- UpdateWindow(pcli->hwndContactList);
- g_CluiData.fOnDesktop = 0;
- }
- //5- TODO Apply Style
- oldStyleEx = curStyleEx = GetWindowLongPtr(pcli->hwndContactList,GWL_EXSTYLE);
- oldStyle = curStyle = GetWindowLongPtr(pcli->hwndContactList,GWL_STYLE);
-
- curStyleEx = (curStyleEx & ~styleMaskEx) | styleEx;
- curStyle = (curStyle & ~styleMask) | style;
- if (oldStyleEx != curStyleEx || oldStyle != curStyle)
- {
- if (IsWindowVisible(pcli->hwndContactList))
- {
- storedVisMode = TRUE;
- mutex_bShowHideCalledFromAnimation = TRUE;
- ShowWindow(pcli->hwndContactList,SW_HIDE);
- Sync(CLUIFrames_OnShowHide, pcli->hwndContactList,0);
- }
- SetWindowLongPtr(pcli->hwndContactList,GWL_EXSTYLE,curStyleEx);
- SetWindowLongPtr(pcli->hwndContactList,GWL_STYLE,curStyle);
- }
-
- CLUI_UpdateAeroGlass();
-
- if (g_CluiData.fLayered || !db_get_b(NULL,"CLUI","ShowMainMenu",SETTING_SHOWMAINMENU_DEFAULT))
- {
- HMENU m = GetMenu(pcli->hwndContactList);
- SetMenu(pcli->hwndContactList,NULL);
- }
- else
- SetMenu(pcli->hwndContactList,g_hMenuMain);
-
- if (g_CluiData.fLayered && (db_get_b(NULL,"CList","OnDesktop", SETTING_ONDESKTOP_DEFAULT)))
- ske_UpdateWindowImage();
-
-
- //6- Pin to desktop mode
- if (db_get_b(NULL,"CList","OnDesktop", SETTING_ONDESKTOP_DEFAULT))
- {
- HWND hProgMan = FindWindow(_T("Progman"),NULL);
- if (IsWindow(hProgMan))
- {
- SetParent(pcli->hwndContactList,hProgMan);
- Sync( CLUIFrames_SetParentForContainers, (HWND) hProgMan );
- g_CluiData.fOnDesktop = 1;
- }
- }
- else
- {
- // HWND parent = GetParent(pcli->hwndContactList);
- // HWND progman = FindWindow(_T("Progman"),NULL);
- // if (parent == progman)
- {
- SetParent(pcli->hwndContactList,NULL);
- Sync(CLUIFrames_SetParentForContainers, (HWND) NULL);
- }
- g_CluiData.fOnDesktop = 0;
- }
-
- //7- if it was visible - show
- if (storedVisMode)
- {
- ShowWindow(pcli->hwndContactList,SW_SHOW);
- Sync(CLUIFrames_OnShowHide, pcli->hwndContactList,1);
- }
- mutex_bShowHideCalledFromAnimation = FALSE;
-
- CLUIFrames_UpdateBorders();
-
- if ( !g_CluiData.fLayered)
- {
- HRGN hRgn1;
- RECT r;
- int v,h;
- int w = 10;
- GetWindowRect(pcli->hwndContactList,&r);
- h = (r.right-r.left)>(w*2)?w:(r.right-r.left);
- v = (r.bottom-r.top)>(w*2)?w:(r.bottom-r.top);
- h = (h < v)?h:v;
- hRgn1 = CreateRoundRectRgn(0,0,(r.right-r.left+1),(r.bottom-r.top+1),h,h);
- if ((db_get_b(NULL,"CLC","RoundCorners",SETTING_ROUNDCORNERS_DEFAULT)) && (!CallService(MS_CLIST_DOCKINGISDOCKED,0,0)))
- SetWindowRgn(pcli->hwndContactList,hRgn1,1);
- else
- {
- DeleteObject(hRgn1);
- SetWindowRgn(pcli->hwndContactList,NULL,1);
- }
-
- RedrawWindow(pcli->hwndContactList,NULL,NULL,RDW_INVALIDATE|RDW_ERASE|RDW_FRAME|RDW_UPDATENOW|RDW_ALLCHILDREN);
- }
- g_mutex_bChangingMode = FALSE;
- flag_bFirstTimeCall = TRUE;
- AniAva_UpdateParent();
-}
-struct _tagTimerAsync
-{
- HWND hwnd;
- int ID;
- int Timeout;
- TIMERPROC proc;
-};
-static UINT_PTR SetTimerSync(WPARAM wParam , LPARAM lParam)
-{
- struct _tagTimerAsync * call = (struct _tagTimerAsync *) wParam;
- return SetTimer(call->hwnd, call->ID ,call->Timeout, call->proc);
-}
-
-UINT_PTR CLUI_SafeSetTimer(HWND hwnd, int ID, int Timeout, TIMERPROC proc)
-{
- struct _tagTimerAsync param = { hwnd, ID, Timeout, proc };
- return Sync(SetTimerSync, (WPARAM) &param, (LPARAM) 0);
-}
-
-int CLUI_UpdateTimer(BYTE BringIn)
-{
- if (g_CluiData.nBehindEdgeState == 0)
- {
- KillTimer(pcli->hwndContactList,TM_BRINGOUTTIMEOUT);
- CLUI_SafeSetTimer(pcli->hwndContactList,TM_BRINGOUTTIMEOUT,wBehindEdgeHideDelay*100,NULL);
- }
- if (bShowEventStarted == 0 && g_CluiData.nBehindEdgeState>0 )
- {
- KillTimer(pcli->hwndContactList,TM_BRINGINTIMEOUT);
- bShowEventStarted = (BOOL)CLUI_SafeSetTimer(pcli->hwndContactList,TM_BRINGINTIMEOUT,wBehindEdgeShowDelay*100,NULL);
- }
- return 0;
-}
-
-int CLUI_HideBehindEdge()
-{
- int method = g_CluiData.bBehindEdgeSettings;
- if (method)
- {
- // if (DBGetContactSettingByte(NULL, "ModernData", "BehindEdge", SETTING_BEHINDEDGE_DEFAULT) == 0)
- {
- RECT rcScreen;
- RECT rcWindow;
- int bordersize = 0;
- //Need to be moved out of screen
- bShowEventStarted = 0;
- //1. get work area rectangle
- Docking_GetMonitorRectFromWindow(pcli->hwndContactList,&rcScreen);
- //SystemParametersInfo(SPI_GETWORKAREA,0,&rcScreen,FALSE);
- //2. move out
- bordersize = wBehindEdgeBorderSize;
- GetWindowRect(pcli->hwndContactList,&rcWindow);
- switch (method)
- {
- case 1: //left
- rcWindow.left = rcScreen.left-(rcWindow.right-rcWindow.left)+bordersize;
- break;
- case 2: //right
- rcWindow.left = rcScreen.right-bordersize;
- break;
- }
- g_CluiData.mutexPreventDockMoving = 0;
- SetWindowPos(pcli->hwndContactList,NULL,rcWindow.left,rcWindow.top,0,0,SWP_NOZORDER|SWP_NOSIZE|SWP_NOACTIVATE);
- Sync(CLUIFrames_OnMoving,pcli->hwndContactList,&rcWindow);
- g_CluiData.mutexPreventDockMoving = 1;
-
- //3. store setting
- db_set_b(NULL, "ModernData", "BehindEdge",method);
- g_CluiData.nBehindEdgeState = method;
- return 1;
- }
- return 2;
- }
- return 0;
-}
-
-
-int CLUI_ShowFromBehindEdge()
-{
- int method = g_CluiData.bBehindEdgeSettings;
- bShowEventStarted = 0;
- if (g_mutex_bOnTrayRightClick)
- {
- g_mutex_bOnTrayRightClick = 0;
- return 0;
- }
- if (method)// && (DBGetContactSettingByte(NULL, "ModernData", "BehindEdge", SETTING_BEHINDEDGE_DEFAULT) == 0))
- {
- RECT rcScreen;
- RECT rcWindow;
- int bordersize = 0;
- //Need to be moved out of screen
-
- //1. get work area rectangle
- //SystemParametersInfo(SPI_GETWORKAREA,0,&rcScreen,FALSE);
- Docking_GetMonitorRectFromWindow(pcli->hwndContactList,&rcScreen);
- //2. move out
- bordersize = wBehindEdgeBorderSize;
- GetWindowRect(pcli->hwndContactList,&rcWindow);
- switch (method)
- {
- case 1: //left
- rcWindow.left = rcScreen.left;
- break;
- case 2: //right
- rcWindow.left = rcScreen.right-(rcWindow.right-rcWindow.left);
- break;
- }
- g_CluiData.mutexPreventDockMoving = 0;
- SetWindowPos(pcli->hwndContactList,NULL,rcWindow.left,rcWindow.top,0,0,SWP_NOZORDER|SWP_NOSIZE);
- Sync(CLUIFrames_OnMoving,pcli->hwndContactList,&rcWindow);
- g_CluiData.mutexPreventDockMoving = 1;
-
- //3. store setting
- db_set_b(NULL, "ModernData", "BehindEdge",0);
- g_CluiData.nBehindEdgeState = 0;
- }
- return 0;
-}
-
-
-int CLUI_IsInMainWindow(HWND hwnd)
-{
- if (hwnd == pcli->hwndContactList) return 1;
- if (GetParent(hwnd) == pcli->hwndContactList) return 2;
- return 0;
-}
-
-int CLUI_OnSkinLoad(WPARAM wParam, LPARAM lParam)
-{
- ske_LoadSkinFromDB();
-
- return 0;
-}
-
-
-
-
-static LPPROTOTICKS CLUI_GetProtoTicksByProto(char * szProto)
-{
- int i;
-
- for (i=0;i < 64;i++)
- {
- if (CycleStartTick[i].szProto == NULL) break;
- if (mir_strcmp(CycleStartTick[i].szProto,szProto)) continue;
- return(&CycleStartTick[i]);
- }
- for (i=0;i < 64;i++)
- {
- if (CycleStartTick[i].szProto == NULL)
- {
- CycleStartTick[i].szProto = mir_strdup(szProto);
- CycleStartTick[i].nCycleStartTick = 0;
- CycleStartTick[i].nIndex = i;
- CycleStartTick[i].bGlobal = ( szProto[0] == 0 );
- CycleStartTick[i].himlIconList = NULL;
- return(&CycleStartTick[i]);
- }
- }
- return (NULL);
-}
-
-static int CLUI_GetConnectingIconForProtoCount(char *szAccoName)
-{
- char fileFull[MAX_PATH];
- static char szFolderPath[MAX_PATH] = "";
-
- int count = 8;
-
- if ( !szFolderPath[0] )
- {
- char szRelativePath[MAX_PATH];
- GetModuleFileNameA(GetModuleHandle(NULL), szRelativePath, MAX_PATH);
- char *str = strrchr( szRelativePath, '\\' );
- if ( str != NULL ) *str = 0;
- CallService(MS_UTILS_PATHTOABSOLUTE, (WPARAM)szRelativePath, (LPARAM)szFolderPath);
- }
-
- if ( szAccoName )
- {
- // first of all try to find by account name( or empty - global )
- mir_snprintf( fileFull, SIZEOF(fileFull), "%s\\Icons\\proto_conn_%s.dll", szFolderPath, szAccoName );
- count = ExtractIconExA(fileFull,-1,NULL,NULL,1);
- if ( count ) return count;
-
- if ( szAccoName[0] )
- {
- // second try to find by protocol name
- PROTOACCOUNT * acc = ProtoGetAccount( szAccoName );
- if ( acc && !acc->bOldProto )
- {
- mir_snprintf( fileFull, SIZEOF(fileFull), "%s\\Icons\\proto_conn_%s.dll", szFolderPath, acc->szProtoName );
- count = ExtractIconExA(fileFull,-1,NULL,NULL,1);
- if ( count ) return count;
- }
- }
- }
- // third try global
- mir_snprintf( fileFull, SIZEOF(fileFull), "%s\\Icons\\proto_conn.dll", szFolderPath );
- count = ExtractIconExA(fileFull,-1,NULL,NULL,1);
- if ( count ) return count;
-
- return 8;
-}
-
-static HICON CLUI_ExtractIconFromPath(const char *path, BOOL * needFree)
-{
- char *comma;
- char file[MAX_PATH],fileFull[MAX_PATH];
- int n;
- HICON hIcon;
- lstrcpynA(file,path,sizeof(file));
- comma = strrchr(file,',');
- if (comma == NULL) n = 0;
- else {n = atoi(comma+1); *comma = 0;}
- CallService(MS_UTILS_PATHTOABSOLUTE, (WPARAM)file, (LPARAM)fileFull);
- hIcon = NULL;
- ExtractIconExA(fileFull,n,NULL,&hIcon,1);
- if (needFree)
- {
- *needFree = (hIcon != NULL);
- }
- return hIcon;
-}
-
-HICON CLUI_LoadIconFromExternalFile(char *filename,int i,BOOL UseLibrary,bool registerit,char *IconName,char *SectName,char *Description,int internalidx, BOOL * needFree)
-{
- char szPath[MAX_PATH],szMyPath[MAX_PATH], szFullPath[MAX_PATH],*str;
- HICON hIcon = NULL;
- BOOL has_proto_icon = FALSE;
- SKINICONDESC sid = {0};
- if (needFree) *needFree = FALSE;
- GetModuleFileNameA(GetModuleHandle(NULL), szPath, MAX_PATH);
- GetModuleFileNameA(g_hInst, szMyPath, MAX_PATH);
- str = strrchr(szPath,'\\');
- if (str != NULL) *str = 0;
- if (UseLibrary&2)
- mir_snprintf(szMyPath, SIZEOF(szMyPath), "%s\\Icons\\%s", szPath, filename);
- mir_snprintf(szFullPath, SIZEOF(szFullPath), "%s\\Icons\\%s,%d", szPath, filename, i);
- if (str != NULL) *str = '\\';
- if (UseLibrary&2)
- {
- BOOL nf;
- HICON hi = CLUI_ExtractIconFromPath(szFullPath,&nf);
- if (hi) has_proto_icon = TRUE;
- if (hi && nf) DestroyIcon(hi);
- }
- if ( !UseLibrary) {
- hIcon = CLUI_ExtractIconFromPath(szFullPath,needFree);
- if (hIcon) return hIcon;
- if (UseLibrary)
- {
- mir_snprintf(szFullPath, SIZEOF(szFullPath), "%s,%d", szMyPath, internalidx);
- hIcon = CLUI_ExtractIconFromPath(szFullPath,needFree);
- if (hIcon) return hIcon;
- }
- }
- else {
- if (registerit && IconName != NULL && SectName != NULL) {
- sid.cbSize = sizeof(sid);
- sid.cx = 16;
- sid.cy = 16;
- sid.hDefaultIcon = (has_proto_icon || !(UseLibrary&2))?NULL:(HICON)CallService(MS_SKIN_LOADPROTOICON,(WPARAM)NULL,(LPARAM)(-internalidx));
- sid.pszSection = SectName;
- sid.pszName = IconName;
- sid.pszDescription = Description;
- sid.pszDefaultFile = internalidx < 0?szMyPath:szPath;
-
- sid.iDefaultIndex = (UseLibrary&2)?i:(internalidx < 0)?internalidx:-internalidx;
- Skin_AddIcon(&sid);
- }
- return ((HICON)CallService(MS_SKIN2_GETICON, 0, (LPARAM)IconName));
- }
-
-
-
-
- return (HICON)0;
-}
-
-static HICON CLUI_GetConnectingIconForProto(char *szAccoName, int b)
-{
- char szFullPath[MAX_PATH];
- HICON hIcon = NULL;
- BOOL needFree;
- b = b-1;
-
- if ( szAccoName )
- {
- mir_snprintf(szFullPath, SIZEOF(szFullPath), "proto_conn_%s.dll",szAccoName);
- hIcon = CLUI_LoadIconFromExternalFile(szFullPath,b+1,FALSE,FALSE,NULL,NULL,NULL,0,&needFree);
- if (hIcon) return hIcon;
-
- if ( szAccoName[0] )
- {
- // second try to find by protocol name
- PROTOACCOUNT * acc = ProtoGetAccount( szAccoName );
- if ( acc && !acc->bOldProto )
- {
- mir_snprintf( szFullPath, SIZEOF(szFullPath), "proto_conn_%s.dll", acc->szProtoName );
- hIcon = CLUI_LoadIconFromExternalFile(szFullPath,b+1,FALSE,FALSE,NULL,NULL,NULL,0,&needFree);
- if ( hIcon ) return hIcon;
- }
- }
- }
- // third try global
- mir_snprintf( szFullPath, SIZEOF(szFullPath), "proto_conn.dll" );
- hIcon = CLUI_LoadIconFromExternalFile(szFullPath,b+1,FALSE,FALSE,NULL,NULL,NULL,0,&needFree);
- if ( hIcon ) return hIcon;
-
- hIcon = LoadSmallIcon(g_hInst,(TCHAR *)(IDI_ICQC1+b+1));
- return(hIcon);
-}
-
-
-INT_PTR CLUI_GetConnectingIconService(WPARAM wParam,LPARAM lParam)
-{
- int b;
- PROTOTICKS *pt = NULL;
- HICON hIcon = NULL;
-
- char *szProto = (char *)wParam;
- if ( !szProto) return 0;
-
- pt = CLUI_GetProtoTicksByProto(szProto);
-
- if (pt != NULL)
- {
- if (pt->nCycleStartTick == 0)
- {
- CLUI_CreateTimerForConnectingIcon(ID_STATUS_CONNECTING,wParam);
- pt = CLUI_GetProtoTicksByProto(szProto);
- }
- }
- if (pt != NULL)
- {
- if (pt->nCycleStartTick != 0 && pt->nIconsCount != 0)
- {
- b = ((GetTickCount()-pt->nCycleStartTick)/(nAnimatedIconStep))%(pt->nIconsCount);
- // if (lParam)
- // hIcon = CLUI_GetConnectingIconForProto("Global",b);
- // else
- if (pt->himlIconList)
- hIcon = ske_ImageList_GetIcon(pt->himlIconList,b,ILD_NORMAL);
- else
- hIcon = NULL;
- //hIcon = CLUI_GetConnectingIconForProto(szProto,b);
- };
- }
-
-
- return (INT_PTR)hIcon;
-};
-
-
-static int CLUI_CreateTimerForConnectingIcon(WPARAM wParam,LPARAM lParam)
-{
-
- int status = (int)wParam;
- char *szProto = (char *)lParam;
- if ( !szProto) return (0);
- if ( !status) return (0);
-
- if ((g_StatusBarData.connectingIcon == 1) && status >= ID_STATUS_CONNECTING && status <= ID_STATUS_CONNECTING+MAX_CONNECT_RETRIES)
- {
-
- PROTOTICKS *pt = NULL;
- int cnt;
-
- pt = CLUI_GetProtoTicksByProto(szProto);
- if (pt != NULL)
- {
- if (pt->nCycleStartTick == 0)
- {
- KillTimer(pcli->hwndContactList,TM_STATUSBARUPDATE+pt->nIndex);
- cnt = CLUI_GetConnectingIconForProtoCount(szProto);
- if (cnt != 0)
- {
- int i=0;
- nAnimatedIconStep = 100;/*DBGetContactSettingWord(NULL,"CLUI","DefaultStepConnectingIcon",100);*/
- pt->nIconsCount = cnt;
- if (pt->himlIconList) ImageList_Destroy(pt->himlIconList);
- pt->himlIconList = ImageList_Create(16,16,ILC_MASK|ILC_COLOR32,cnt,1);
- for (i=0; i < cnt; i++)
- {
- HICON ic = CLUI_GetConnectingIconForProto(szProto,i);
- if (ic) ImageList_AddIcon(pt->himlIconList,ic);
- DestroyIcon_protect(ic);
- }
- CLUI_SafeSetTimer(pcli->hwndContactList,TM_STATUSBARUPDATE+pt->nIndex,(int)(nAnimatedIconStep)/1,0);
- pt->bTimerCreated = 1;
- pt->nCycleStartTick = GetTickCount();
- }
-
- };
- };
- }
- return 0;
-}
-
-static BOOL CALLBACK BroadcastEnumChildProc(HWND hwndChild, LPARAM lParam)
-{
- MSG * pMsg = (MSG*)lParam;
- SendNotifyMessage( hwndChild, pMsg->message, pMsg->wParam, pMsg->lParam );
- EnumChildWindows( hwndChild, BroadcastEnumChildProc, lParam );
- return TRUE;
-}
-
-static LRESULT BroadCastMessageToChild(HWND hwnd, int message, WPARAM wParam, LPARAM lParam )
-{
- MSG msg = {0};
- msg.hwnd = hwnd;
- msg.lParam = lParam;
- msg.wParam = wParam;
- msg.message = message;
- EnumChildWindows(hwnd, BroadcastEnumChildProc, (LPARAM) &msg);
- return 1;
-}
-
-int CLUI_ReloadCLUIOptions()
-{
- KillTimer(pcli->hwndContactList,TM_UPDATEBRINGTIMER);
- g_CluiData.bBehindEdgeSettings = db_get_b(NULL, "ModernData", "HideBehind", SETTING_HIDEBEHIND_DEFAULT);
- wBehindEdgeShowDelay = db_get_w(NULL,"ModernData","ShowDelay",SETTING_SHOWDELAY_DEFAULT);
- wBehindEdgeHideDelay = db_get_w(NULL,"ModernData","HideDelay",SETTING_HIDEDELAY_DEFAULT);
- wBehindEdgeBorderSize = db_get_w(NULL,"ModernData","HideBehindBorderSize",SETTING_HIDEBEHINDBORDERSIZE_DEFAULT);
-
- g_CluiData.fAutoSize = db_get_b(NULL,"CLUI","AutoSize",SETTING_AUTOSIZE_DEFAULT);
- g_CluiData.bInternalAwayMsgDiscovery = db_get_b(NULL,"ModernData","InternalAwayMsgDiscovery",SETTING_INTERNALAWAYMSGREQUEST_DEFAULT);
- g_CluiData.bRemoveAwayMessageForOffline = db_get_b(NULL,"ModernData","RemoveAwayMessageForOffline",SETTING_REMOVEAWAYMSGFOROFFLINE_DEFAULT);
- //window borders
- if (g_CluiData.fDisableSkinEngine) {
- g_CluiData.LeftClientMargin = 0;
- g_CluiData.RightClientMargin = 0;
- g_CluiData.TopClientMargin = 0;
- g_CluiData.BottomClientMargin = 0;
- } else {
- //window borders
- g_CluiData.LeftClientMargin = (int)db_get_b(NULL,"CLUI","LeftClientMargin",SETTING_LEFTCLIENTMARIGN_DEFAULT);
- g_CluiData.RightClientMargin = (int)db_get_b(NULL,"CLUI","RightClientMargin",SETTING_RIGHTCLIENTMARIGN_DEFAULT);
- g_CluiData.TopClientMargin = (int)db_get_b(NULL,"CLUI","TopClientMargin",SETTING_TOPCLIENTMARIGN_DEFAULT);
- g_CluiData.BottomClientMargin = (int)db_get_b(NULL,"CLUI","BottomClientMargin",SETTING_BOTTOMCLIENTMARIGN_DEFAULT);
- }
- BroadCastMessageToChild(pcli->hwndContactList, WM_THEMECHANGED, 0, 0);
-
- NotifyEventHooks(g_CluiData.hEventBkgrChanged, 0, 0);
- return 0;
-}
-
-void CLUI_DisconnectAll()
-{
- PROTOACCOUNT **accs;
- int nProtoCount;
- int nProto;
-
- ProtoEnumAccounts( &nProtoCount, &accs );
- for (nProto = 0; nProto < nProtoCount; nProto++)
- if ( IsAccountEnabled( accs[nProto] ))
- CallProtoService( accs[nProto]->szModuleName, PS_SETSTATUS, ID_STATUS_OFFLINE, 0 );
-}
-
-static int CLUI_DrawMenuBackGround(HWND hwnd, HDC hdc, int item, int state)
-{
- RECT ra,r1;
- // HBRUSH hbr;
- HRGN treg,treg2;
- struct ClcData * dat;
-
- if ( !fnGetMenuBarInfo )
- return 1;
-
- dat = (struct ClcData*)GetWindowLongPtr(pcli->hwndContactTree,0);
- if ( !dat) return 1;
- GetWindowRect(hwnd,&ra);
- {
- MENUBARINFO mbi = {0};
- mbi.cbSize = sizeof(MENUBARINFO);
- fnGetMenuBarInfo(hwnd,OBJID_MENU, 0, &mbi);
- if ( !(mbi.rcBar.right-mbi.rcBar.left>0 && mbi.rcBar.bottom-mbi.rcBar.top>0)) return 1;
- r1 = mbi.rcBar;
- r1.bottom += !db_get_b(NULL,"CLUI","LineUnderMenu",SETTING_LINEUNDERMENU_DEFAULT);
- if (item < 1)
- {
- treg = CreateRectRgn(mbi.rcBar.left,mbi.rcBar.top,mbi.rcBar.right,r1.bottom);
- if (item == 0) //should remove item clips
- {
- int t;
- for (t = 1; t <= 2; t++)
- {
- fnGetMenuBarInfo(hwnd,OBJID_MENU, t, &mbi);
- treg2 = CreateRectRgn(mbi.rcBar.left,mbi.rcBar.top,mbi.rcBar.right,mbi.rcBar.bottom);
- CombineRgn(treg,treg,treg2,RGN_DIFF);
- DeleteObject(treg2);
- }
-
- }
- }
- else
- {
- fnGetMenuBarInfo(hwnd,OBJID_MENU, item, &mbi);
- treg = CreateRectRgn(mbi.rcBar.left,mbi.rcBar.top,mbi.rcBar.right,mbi.rcBar.bottom+!db_get_b(NULL,"CLUI","LineUnderMenu",SETTING_LINEUNDERMENU_DEFAULT));
- }
- OffsetRgn(treg,-ra.left,-ra.top);
- r1.left -= ra.left;
- r1.top -= ra.top;
- r1.bottom -= ra.top;
- r1.right -= ra.left;
- }
- //SelectClipRgn(hdc,NULL);
- SelectClipRgn(hdc,treg);
- DeleteObject(treg);
- {
- RECT rc;
- HWND hwnd = pcli->hwndContactList;
- GetWindowRect(hwnd,&rc);
- OffsetRect(&rc,-rc.left, -rc.top);
- FillRect(hdc,&r1,GetSysColorBrush(COLOR_MENU));
- ske_SetRectOpaque(hdc,&r1);
- //ske_BltBackImage(hwnd,hdc,&r1);
- }
- if ( !g_CluiData.fDisableSkinEngine)
- SkinDrawGlyph(hdc,&r1,&r1,"Main,ID=MenuBar");
- else
- {
- HBRUSH hbr = NULL;
- if (dat->hMenuBackground)
- {
- BITMAP bmp;
- HBITMAP oldbm;
- HDC hdcBmp;
- int x,y;
- int maxx,maxy;
- int destw,desth;
- RECT clRect = r1;
-
-
- // XXX: Halftone isnt supported on 9x, however the scretch problems dont happen on 98.
- SetStretchBltMode(hdc, HALFTONE);
-
- GetObject(dat->hMenuBackground,sizeof(bmp),&bmp);
- hdcBmp = CreateCompatibleDC(hdc);
- oldbm = (HBITMAP)SelectObject(hdcBmp,dat->hMenuBackground);
- y = clRect.top;
- x = clRect.left;
- maxx = dat->MenuBmpUse&CLBF_TILEH?maxx = r1.right:x+1;
- maxy = dat->MenuBmpUse&CLBF_TILEV?maxy = r1.bottom:y+1;
- switch(dat->MenuBmpUse&CLBM_TYPE) {
- case CLB_STRETCH:
- if (dat->MenuBmpUse&CLBF_PROPORTIONAL) {
- if (clRect.right-clRect.left*bmp.bmHeight < clRect.bottom-clRect.top*bmp.bmWidth)
- {
- desth = clRect.bottom-clRect.top;
- destw = desth*bmp.bmWidth/bmp.bmHeight;
- }
- else
- {
- destw = clRect.right-clRect.left;
- desth = destw*bmp.bmHeight/bmp.bmWidth;
- }
- }
- else {
- destw = clRect.right-clRect.left;
- desth = clRect.bottom-clRect.top;
- }
- break;
- case CLB_STRETCHH:
- if (dat->MenuBmpUse&CLBF_PROPORTIONAL) {
- destw = clRect.right-clRect.left;
- desth = destw*bmp.bmHeight/bmp.bmWidth;
- }
- else {
- destw = clRect.right-clRect.left;
- desth = bmp.bmHeight;
- }
- break;
- case CLB_STRETCHV:
- if (dat->MenuBmpUse&CLBF_PROPORTIONAL) {
- desth = clRect.bottom-clRect.top;
- destw = desth*bmp.bmWidth/bmp.bmHeight;
- }
- else {
- destw = bmp.bmWidth;
- desth = clRect.bottom-clRect.top;
- }
- break;
- default: //clb_topleft
- destw = bmp.bmWidth;
- desth = bmp.bmHeight;
- break;
- }
- if (desth && destw)
- for (y = clRect.top;y < maxy;y += desth) {
- for (x = clRect.left;x < maxx;x += destw)
- StretchBlt(hdc,x,y,destw,desth,hdcBmp,0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY);
- }
- SelectObject(hdcBmp,oldbm);
- DeleteDC(hdcBmp);
-
- }
-
- else
- {
- hbr = CreateSolidBrush(dat->MenuBkColor);
- FillRect(hdc,&r1,hbr);
- DeleteObject(hbr);
- }
- if (item != 0 && state&(ODS_SELECTED))
- {
- hbr = CreateSolidBrush(dat->MenuBkHiColor);
- FillRect(hdc,&r1,hbr);
- DeleteObject(hbr);
- }
- }
- SelectClipRgn(hdc,NULL);
- return 0;
-}
-
-int CLUI_SizingGetWindowRect(HWND hwnd,RECT * rc)
-{
- if (mutex_bDuringSizing && hwnd == pcli->hwndContactList)
- *rc = rcSizingRect;
- else
- GetWindowRect(hwnd,rc);
- return 1;
-}
-
-
-int CLUI_SyncGetPDNCE(WPARAM wParam, LPARAM lParam)
-{
- //log0("CLUI_SyncGetPDNCE");
- return CListSettings_GetCopyFromCache((pdisplayNameCacheEntry)lParam, wParam ? (DWORD) wParam : CCI_ALL );
-}
-
-int CLUI_SyncSetPDNCE(WPARAM wParam, LPARAM lParam)
-{
- //log0("CLUI_SyncSetPDNCE");
- return CListSettings_SetToCache((pdisplayNameCacheEntry)lParam, wParam ? (DWORD) wParam : CCI_ALL );
-}
-
-int CLUI_SyncGetShortData(WPARAM wParam, LPARAM lParam)
-{
- HWND hwnd = (HWND) wParam;
- struct ClcData * dat = (struct ClcData * )GetWindowLongPtr(hwnd,0);
- //log0("CLUI_SyncGetShortData");
- return ClcGetShortData(dat,(struct SHORTDATA *)lParam);
-}
-
-int CLUI_SyncSmoothAnimation(WPARAM wParam, LPARAM lParam)
-{
- return CLUI_SmoothAlphaThreadTransition((HWND)lParam);
-}
-
-
-
-int CLUI_IconsChanged(WPARAM wParam,LPARAM lParam)
-{
- if (MirandaExiting()) return 0;
- DrawMenuBar(pcli->hwndContactList);
- ExtraImage_ReloadExtraIcons();
- ExtraImage_SetAllExtraIcons(pcli->hwndContactTree,0);
- // need to update tray cause it use combined icons
- pcli->pfnTrayIconIconsChanged(); //TODO: remove as soon as core will include icolib
- ske_RedrawCompleteWindow();
- // pcli->pfnClcBroadcast( INTM_INVALIDATE,0,0);
- return 0;
-}
-
-
-
-
-
-
-
-
-
-void CLUI_cli_LoadCluiGlobalOpts()
-{
- BOOL tLayeredFlag = FALSE;
- tLayeredFlag = IsWinVer2000Plus();
- tLayeredFlag &= db_get_b(NULL, "ModernData", "EnableLayering", tLayeredFlag);
-
- if (tLayeredFlag)
- {
- if (db_get_b(NULL,"CList","WindowShadow",SETTING_WINDOWSHADOW_DEFAULT) == 1)
- db_set_b(NULL,"CList","WindowShadow",2);
- }
- else
- {
- if (db_get_b(NULL,"CList","WindowShadow",SETTING_WINDOWSHADOW_DEFAULT) == 2)
- db_set_b(NULL,"CList","WindowShadow",1);
- }
- corecli.pfnLoadCluiGlobalOpts();
-}
-
-
-int CLUI_TestCursorOnBorders()
-{
- HWND hwnd = pcli->hwndContactList;
- HCURSOR hCurs1 = NULL;
- RECT r;
- POINT pt;
- int k = 0, t = 0, fx,fy;
- HWND hAux;
- BOOL mouse_in_window = 0;
- HWND gf = GetForegroundWindow();
- GetCursorPos(&pt);
- hAux = WindowFromPoint(pt);
- if (CLUI_CheckOwnedByClui(hAux))
- {
- if (g_bTransparentFlag) {
- if ( !bTransparentFocus && gf != hwnd) {
- CLUI_SmoothAlphaTransition(hwnd, db_get_b(NULL,"CList","Alpha",SETTING_ALPHA_DEFAULT), 1);
- //g_proc_SetLayeredWindowAttributes(hwnd, RGB(0,0,0), (BYTE)DBGetContactSettingByte(NULL,"CList","Alpha",SETTING_ALPHA_DEFAULT), LWA_ALPHA);
- bTransparentFocus = 1;
- CLUI_SafeSetTimer(hwnd, TM_AUTOALPHA,250,NULL);
- }
- }
- }
-
- mutex_bIgnoreActivation = 0;
- GetWindowRect(hwnd,&r);
- /*
- * Size borders offset (contract)
- */
- r.top += db_get_dw(NULL,"ModernSkin","SizeMarginOffset_Top",SKIN_OFFSET_TOP_DEFAULT);
- r.bottom -= db_get_dw(NULL,"ModernSkin","SizeMarginOffset_Bottom",SKIN_OFFSET_BOTTOM_DEFAULT);
- r.left += db_get_dw(NULL,"ModernSkin","SizeMarginOffset_Left",SKIN_OFFSET_LEFT_DEFAULT);
- r.right -= db_get_dw(NULL,"ModernSkin","SizeMarginOffset_Right",SKIN_OFFSET_RIGHT_DEFAULT);
-
- if (r.right < r.left) r.right = r.left;
- if (r.bottom < r.top) r.bottom = r.top;
-
- /*
- * End of size borders offset (contract)
- */
-
- hAux = WindowFromPoint(pt);
- while(hAux != NULL)
- {
- if (hAux == hwnd) {mouse_in_window = 1; break;}
- hAux = GetParent(hAux);
- }
- fx = GetSystemMetrics(SM_CXFULLSCREEN);
- fy = GetSystemMetrics(SM_CYFULLSCREEN);
- if (g_CluiData.fDocked || g_CluiData.nBehindEdgeState == 0)
- //if (g_CluiData.fDocked) || ((pt.x < fx-1) && (pt.y < fy-1) && pt.x>1 && pt.y>1)) // workarounds for behind the edge.
- {
- //ScreenToClient(hwnd,&pt);
- //GetClientRect(hwnd,&r);
- if (pt.y <= r.bottom && pt.y >= r.bottom-SIZING_MARGIN && !g_CluiData.fAutoSize) k = 6;
- else if (pt.y >= r.top && pt.y <= r.top+SIZING_MARGIN && !g_CluiData.fAutoSize) k = 3;
- if (pt.x <= r.right && pt.x >= r.right-SIZING_MARGIN && g_CluiData.bBehindEdgeSettings != 2) k += 2;
- else if (pt.x >= r.left && pt.x <= r.left+SIZING_MARGIN && g_CluiData.bBehindEdgeSettings != 1) k += 1;
- if ( !(pt.x >= r.left && pt.x <= r.right && pt.y >= r.top && pt.y <= r.bottom)) k = 0;
- k *= mouse_in_window;
- hCurs1 = LoadCursor(NULL, IDC_ARROW);
- if (g_CluiData.nBehindEdgeState <= 0 && (!(db_get_b(NULL,"CLUI","LockSize",SETTING_LOCKSIZE_DEFAULT))))
- switch(k)
- {
- case 1:
- case 2:
- if ( !g_CluiData.fDocked || (g_CluiData.fDocked == 2 && k == 1) || (g_CluiData.fDocked == 1 && k == 2)){hCurs1 = LoadCursor(NULL, IDC_SIZEWE); break;}
- case 3: if ( !g_CluiData.fDocked) {hCurs1 = LoadCursor(NULL, IDC_SIZENS); break;}
- case 4: if ( !g_CluiData.fDocked) {hCurs1 = LoadCursor(NULL, IDC_SIZENWSE); break;}
- case 5: if ( !g_CluiData.fDocked) {hCurs1 = LoadCursor(NULL, IDC_SIZENESW); break;}
- case 6: if ( !g_CluiData.fDocked) {hCurs1 = LoadCursor(NULL, IDC_SIZENS); break;}
- case 7: if ( !g_CluiData.fDocked) {hCurs1 = LoadCursor(NULL, IDC_SIZENESW); break;}
- case 8: if ( !g_CluiData.fDocked) {hCurs1 = LoadCursor(NULL, IDC_SIZENWSE); break;}
- }
- if (hCurs1) SetCursor(hCurs1);
- return k;
- }
-
- return 0;
-}
-
-int CLUI_SizingOnBorder(POINT pt, int PerformSize)
-{
- if ( !(db_get_b(NULL,"CLUI","LockSize",SETTING_LOCKSIZE_DEFAULT)))
- {
- RECT r;
- HWND hwnd = pcli->hwndContactList;
- int sizeOnBorderFlag = 0;
- GetWindowRect(hwnd,&r);
- /*
- * Size borders offset (contract)
- */
- r.top += db_get_dw(NULL,"ModernSkin","SizeMarginOffset_Top",SKIN_OFFSET_TOP_DEFAULT);
- r.bottom -= db_get_dw(NULL,"ModernSkin","SizeMarginOffset_Bottom",SKIN_OFFSET_BOTTOM_DEFAULT);
- r.left += db_get_dw(NULL,"ModernSkin","SizeMarginOffset_Left",SKIN_OFFSET_LEFT_DEFAULT);
- r.right -= db_get_dw(NULL,"ModernSkin","SizeMarginOffset_Right",SKIN_OFFSET_RIGHT_DEFAULT);
-
- if (r.right < r.left) r.right = r.left;
- if (r.bottom < r.top) r.bottom = r.top;
-
- /*
- * End of size borders offset (contract)
- */
- if ( !g_CluiData.fAutoSize )
- {
- if ( pt.y <= r.bottom && pt.y >= r.bottom - SIZING_MARGIN ) sizeOnBorderFlag = SCF_BOTTOM;
- else if ( pt.y >= r.top && pt.y <= r.top + SIZING_MARGIN ) sizeOnBorderFlag = SCF_TOP;
- }
-
- if ( pt.x <= r.right && pt.x >= r.right - SIZING_MARGIN ) sizeOnBorderFlag += SCF_RIGHT;
- else if ( pt.x >= r.left && pt.x <= r.left + SIZING_MARGIN ) sizeOnBorderFlag += SCF_LEFT;
-
- if ( !(pt.x >= r.left && pt.x <= r.right && pt.y >= r.top && pt.y <= r.bottom)) sizeOnBorderFlag = SCF_NONE;
-
- if (sizeOnBorderFlag && PerformSize)
- {
- ReleaseCapture();
- SendMessage(hwnd, WM_SYSCOMMAND, SC_SIZE + sizeOnBorderFlag,MAKELPARAM(pt.x,pt.y));
- return sizeOnBorderFlag;
- }
- else return sizeOnBorderFlag;
- }
- return SCF_NONE;
-}
-int CLUI_SyncSmoothAnimation(WPARAM wParam, LPARAM lParam);
-static void CLUI_SmoothAnimationThreadProc(HWND hwnd)
-{
- // return;
- if ( !mutex_bAnimationInProgress)
- {
- g_dwSmoothAnimationThreadID = 0;
- return; /// Should be some locked to avoid painting against contact deletion.
- }
- do
- {
- if ( !g_mutex_bLockUpdating)
- {
- if ( !MirandaExiting())
- Sync(CLUI_SyncSmoothAnimation, (WPARAM)0, (LPARAM)hwnd );
- SleepEx(20,TRUE);
- if (MirandaExiting())
- {
- g_dwSmoothAnimationThreadID = 0;
- return;
- }
- }
- else SleepEx(0,TRUE);
-
- } while (mutex_bAnimationInProgress);
- g_dwSmoothAnimationThreadID = 0;
- return;
-}
-
-static int CLUI_SmoothAlphaThreadTransition(HWND hwnd)
-{
- int step;
- int a;
-
- step = (g_CluiData.bCurrentAlpha>bAlphaEnd)?-1*ANIMATION_STEP:ANIMATION_STEP;
- a = g_CluiData.bCurrentAlpha+step;
- if ((step >= 0 && a >= bAlphaEnd) || (step <= 0 && a <= bAlphaEnd))
- {
- mutex_bAnimationInProgress = 0;
- g_CluiData.bCurrentAlpha = bAlphaEnd;
- if (g_CluiData.bCurrentAlpha == 0)
- {
- g_CluiData.bCurrentAlpha = 1;
- ske_JustUpdateWindowImage();
- mutex_bShowHideCalledFromAnimation = 1;
- CLUI_ShowWindowMod(pcli->hwndContactList,0);
- Sync(CLUIFrames_OnShowHide, hwnd,0);
- mutex_bShowHideCalledFromAnimation = 0;
- g_CluiData.bCurrentAlpha = 0;
- if ( !g_CluiData.fLayered) RedrawWindow(pcli->hwndContactList,NULL,NULL,RDW_ERASE|RDW_FRAME);
- return 0;
- }
- }
- else g_CluiData.bCurrentAlpha = a;
- ske_JustUpdateWindowImage();
- return 1;
-}
-
-int CLUI_SmoothAlphaTransition(HWND hwnd, BYTE GoalAlpha, BOOL wParam)
-{
-
- if ((!g_CluiData.fLayered
- && (!g_CluiData.fSmoothAnimation && !g_bTransparentFlag)) || !g_proc_SetLayeredWindowAttributesNew)
- {
- if (GoalAlpha>0 && wParam != 2)
- {
- if ( !IsWindowVisible(hwnd))
- {
- mutex_bShowHideCalledFromAnimation = 1;
- CLUI_ShowWindowMod(pcli->hwndContactList,SW_RESTORE);
- Sync(CLUIFrames_OnShowHide, hwnd,1);
- mutex_bShowHideCalledFromAnimation = 0;
- g_CluiData.bCurrentAlpha = GoalAlpha;
- ske_UpdateWindowImage();
-
- }
- }
- else if (GoalAlpha == 0 && wParam != 2)
- {
- if (IsWindowVisible(hwnd))
- {
- mutex_bShowHideCalledFromAnimation = 1;
- CLUI_ShowWindowMod(pcli->hwndContactList,0);
- Sync(CLUIFrames_OnShowHide, hwnd,0);
- g_CluiData.bCurrentAlpha = GoalAlpha;
- mutex_bShowHideCalledFromAnimation = 0;
-
- }
- }
- return 0;
- }
- if (g_CluiData.bCurrentAlpha == GoalAlpha && 0)
- {
- if (mutex_bAnimationInProgress)
- {
- KillTimer(hwnd,TM_SMOTHALPHATRANSITION);
- mutex_bAnimationInProgress = 0;
- }
- return 0;
- }
- if (mutex_bShowHideCalledFromAnimation) return 0;
- if (wParam != 2) //not from timer
- {
- bAlphaEnd = GoalAlpha;
- if ( !mutex_bAnimationInProgress)
- {
- if ((!IsWindowVisible(hwnd) || g_CluiData.bCurrentAlpha == 0) && bAlphaEnd>0 )
- {
- mutex_bShowHideCalledFromAnimation = 1;
- CLUI_ShowWindowMod(pcli->hwndContactList,SW_SHOWNA);
- Sync(CLUIFrames_OnShowHide, hwnd,SW_SHOW);
- mutex_bShowHideCalledFromAnimation = 0;
- g_CluiData.bCurrentAlpha = 1;
- ske_UpdateWindowImage();
- }
- if (IsWindowVisible(hwnd) && !g_dwSmoothAnimationThreadID)
- {
- mutex_bAnimationInProgress = 1;
- if (g_CluiData.fSmoothAnimation)
- g_dwSmoothAnimationThreadID = (DWORD)mir_forkthread((pThreadFunc)CLUI_SmoothAnimationThreadProc,pcli->hwndContactList);
-
- }
- }
- }
-
- {
- int step;
- int a;
- step = (g_CluiData.bCurrentAlpha>bAlphaEnd)?-1*ANIMATION_STEP:ANIMATION_STEP;
- a = g_CluiData.bCurrentAlpha+step;
- if ((step >= 0 && a >= bAlphaEnd) || (step <= 0 && a <= bAlphaEnd) || g_CluiData.bCurrentAlpha == bAlphaEnd || !g_CluiData.fSmoothAnimation) //stop animation;
- {
- KillTimer(hwnd,TM_SMOTHALPHATRANSITION);
- mutex_bAnimationInProgress = 0;
- if (bAlphaEnd == 0)
- {
- g_CluiData.bCurrentAlpha = 1;
- ske_UpdateWindowImage();
- mutex_bShowHideCalledFromAnimation = 1;
- CLUI_ShowWindowMod(pcli->hwndContactList,0);
- Sync(CLUIFrames_OnShowHide, pcli->hwndContactList,0);
- mutex_bShowHideCalledFromAnimation = 0;
- g_CluiData.bCurrentAlpha = 0;
- }
- else
- {
- g_CluiData.bCurrentAlpha = bAlphaEnd;
- ske_UpdateWindowImage();
- }
- }
- else
- {
- g_CluiData.bCurrentAlpha = a;
- ske_UpdateWindowImage();
- }
- }
-
- return 0;
-}
-
-BOOL CLUI__cliInvalidateRect(HWND hWnd, CONST RECT* lpRect,BOOL bErase )
-{
- if (g_mutex_bSetAllExtraIconsCycle)
- return FALSE;
- if (CLUI_IsInMainWindow(hWnd) && g_CluiData.fLayered)// && IsWindowVisible(hWnd))
- {
- if (IsWindowVisible(hWnd))
- return SkinInvalidateFrame( hWnd, lpRect );
- else
- {
- g_flag_bFullRepaint = 1;
- return 0;
- }
- }
- else
- return InvalidateRect(hWnd,lpRect,bErase);
- return 1;
-}
-
-static BOOL FileExists(TCHAR * tszFilename)
-{
- BOOL result = FALSE;
- FILE * f = _tfopen(tszFilename,_T("r"));
- if (f == NULL) return FALSE;
- fclose(f);
- return TRUE;
-}
-
-HANDLE RegisterIcolibIconHandle(char * szIcoID, char *szSectionName, char * szDescription, TCHAR * tszDefaultFile, int iDefaultIndex, HINSTANCE hDefaultModuleInst, int iDefaultResource )
-{
- TCHAR fileFull[MAX_PATH] = {0};
- SKINICONDESC sid = {0};
- HANDLE hIcolibItem = NULL;
- sid.cbSize = sizeof(sid);
- sid.cx = 16;
- sid.cy = 16;
- sid.pszSection = szSectionName;
- sid.pszName = szIcoID;
- sid.flags |= SIDF_PATH_TCHAR;
- sid.pszDescription = szDescription;
-
- if (tszDefaultFile)
- {
- CallService( MS_UTILS_PATHTOABSOLUTET, ( WPARAM )tszDefaultFile, ( LPARAM )fileFull );
- if ( !FileExists(fileFull)) fileFull[0] = _T('\0');
- }
- if (fileFull[0] != _T('\0'))
- {
- sid.ptszDefaultFile = fileFull;
- sid.iDefaultIndex = iDefaultIndex;
- sid.hDefaultIcon = NULL;
- }
- else
- {
- sid.pszDefaultFile = NULL;
- sid.iDefaultIndex = 0;
- sid.hDefaultIcon = LoadSmallIcon( hDefaultModuleInst, MAKEINTRESOURCE(iDefaultResource));
- }
- hIcolibItem = Skin_AddIcon(&sid);
- if ( sid.hDefaultIcon ) DestroyIcon(sid.hDefaultIcon);
- return hIcolibItem;
-}
-
-// MAIN WINPROC MESSAGE HANDLERS
-LRESULT CLUI::PreProcessWndProc( UINT msg, WPARAM wParam, LPARAM lParam, BOOL& bHandled )
-{
- // proxy CLUI Messages
- LRESULT result = 0;
- if ( ProcessCLUIFrameInternalMsg( m_hWnd, msg, wParam, lParam, result ))
- {
- bHandled = TRUE;
- return result;
- }
-
- /*
- This registers a window message with RegisterWindowMessage() and then waits for such a message,
- if it gets it, it tries to open a file mapping object and then maps it to this process space,
- it expects 256 bytes of data (incl. NULL) it will then write back the profile it is using the DB to fill in the answer.
-
- The caller is expected to create this mapping object and tell us the ID we need to open ours.
- */
- if (g_CluiData.bSTATE == STATE_EXITING && msg != WM_DESTROY)
- {
- bHandled = TRUE;
- return 0;
- }
- if (msg == uMsgGetProfile && wParam != 0) /* got IPC message */
- {
- HANDLE hMap;
- char szName[MAX_PATH];
- int rc = 0;
- mir_snprintf( szName, SIZEOF(szName), "Miranda::%u", wParam ); // caller will tell us the ID of the map
- hMap = OpenFileMappingA( FILE_MAP_ALL_ACCESS,FALSE, szName );
- if ( hMap != NULL )
- {
- void *hView = NULL;
- hView = MapViewOfFile( hMap, FILE_MAP_ALL_ACCESS, 0, 0, MAX_PATH );
- if (hView)
- {
- char szFilePath[MAX_PATH], szProfile[MAX_PATH];
- CallService( MS_DB_GETPROFILEPATH,MAX_PATH,(LPARAM)&szFilePath );
- CallService( MS_DB_GETPROFILENAME,MAX_PATH,(LPARAM)&szProfile );
- _snprintf((char*)hView, MAX_PATH, "%s\\%s", szFilePath, szProfile );
- UnmapViewOfFile( hView );
- rc = 1;
- }
- CloseHandle( hMap );
- }
- bHandled = TRUE;
- return rc;
- }
- return FALSE;
-}
-
-
-LRESULT CLUI::OnSizingMoving( UINT msg, WPARAM wParam, LPARAM lParam )
-{
- if (g_CluiData.fLayered)
- {
- if (msg == WM_SIZING)
- {
- static int a = 0;
- RECT* wp = (RECT*)lParam;
- if (bNeedFixSizingRect && (rcCorrectSizeRect.bottom != 0 || rcCorrectSizeRect.top != 0))
- {
- if (wParam != WMSZ_BOTTOM) wp->bottom = rcCorrectSizeRect.bottom;
- if (wParam != WMSZ_TOP) wp->top = rcCorrectSizeRect.top;
- }
- bNeedFixSizingRect = 0;
- rcSizingRect = *wp;
- mutex_bDuringSizing = 1;
- return 1;
- }
-
- if (msg == WM_WINDOWPOSCHANGING)
- {
-
-
- WINDOWPOS * wp;
- HDWP PosBatch;
- RECT work_rect = {0};
- RECT temp_rect = {0};
- wp = (WINDOWPOS *)lParam;
- GetWindowRect(m_hWnd,&rcOldWindowRect);
-
- // Прилипание к краям by ZorG
- CLUI::SnappingToEdge(wp);
-
- if ((rcOldWindowRect.bottom-rcOldWindowRect.top != wp->cy || rcOldWindowRect.right-rcOldWindowRect.left != wp->cx) && !(wp->flags&SWP_NOSIZE))
- {
- {
- if ( !(wp->flags&SWP_NOMOVE))
- {
- rcNewWindowRect.left = wp->x;
- rcNewWindowRect.top = wp->y;
- }
- else
- {
- rcNewWindowRect.left = rcOldWindowRect.left;
- rcNewWindowRect.top = rcOldWindowRect.top;
- }
- rcNewWindowRect.right = rcNewWindowRect.left+wp->cx;
- rcNewWindowRect.bottom = rcNewWindowRect.top+wp->cy;
- work_rect = rcNewWindowRect;
- }
- //resize frames (batch)
- {
- PosBatch = BeginDeferWindowPos(1);
- SizeFramesByWindowRect(&work_rect,&PosBatch,0);
- }
- //Check rect after frames resize
- {
- GetWindowRect(m_hWnd,&temp_rect);
- }
- //Here work_rect should be changed to fit possible changes in cln_listsizechange
- if (bNeedFixSizingRect)
- {
- work_rect = rcSizingRect;
- wp->x = work_rect.left;
- wp->y = work_rect.top;
- wp->cx = work_rect.right-work_rect.left;
- wp->cy = work_rect.bottom-work_rect.top;
- wp->flags &= ~(SWP_NOMOVE);
- }
- //reposition buttons and new size applying
- {
- ModernSkinButton_ReposButtons( m_hWnd, SBRF_DO_NOT_DRAW, &work_rect );
- ske_PrepeareImageButDontUpdateIt(&work_rect);
- g_CluiData.mutexPreventDockMoving = 0;
- ske_UpdateWindowImageRect(&work_rect);
- EndDeferWindowPos(PosBatch);
- g_CluiData.mutexPreventDockMoving = 1;
- }
- Sleep(0);
- mutex_bDuringSizing = 0;
- DefWindowProc(m_hWnd,msg,wParam,lParam);
- return SendMessage(m_hWnd,WM_WINDOWPOSCHANGED,wParam,lParam);
- }
- else
- {
- SetRect(&rcCorrectSizeRect,0,0,0,0);
- // bNeedFixSizingRect = 0;
- }
- return DefWindowProc(m_hWnd,msg,wParam,lParam);
- }
- }
-
- else if (msg == WM_WINDOWPOSCHANGING)
- {
- // Snaping if it is not in LayeredMode
- WINDOWPOS * wp;
- wp = (WINDOWPOS *)lParam;
- CLUI::SnappingToEdge( wp );
- return DefWindowProc(m_hWnd,msg,wParam,lParam);
- }
- switch (msg)
- {
- case WM_DISPLAYCHANGE:
- SendMessage(pcli->hwndContactTree, WM_SIZE, 0, 0);
- return TRUE;
-
- case WM_EXITSIZEMOVE:
- {
- int res = DefWindowProc(m_hWnd, msg, wParam, lParam);
- ReleaseCapture();
- TRACE("WM_EXITSIZEMOVE\n");
- SendMessage(m_hWnd, WM_ACTIVATE, (WPARAM)WA_ACTIVE, (LPARAM)m_hWnd);
- return res;
- }
-
- case WM_SIZING:
- return DefWindowProc(m_hWnd, msg, wParam, lParam);;
-
- case WM_MOVE:
- {
- RECT rc;
- CallWindowProc(DefWindowProc, m_hWnd, msg, wParam, lParam);
- mutex_bDuringSizing = 0;
- GetWindowRect(m_hWnd, &rc);
- CheckFramesPos(&rc);
- Sync(CLUIFrames_OnMoving,m_hWnd,&rc);
- if ( !IsIconic(m_hWnd)) {
- if ( !CallService(MS_CLIST_DOCKINGISDOCKED,0,0))
- { //if g_CluiData.fDocked, dont remember pos (except for width)
- db_set_dw(NULL,"CList","Height",(DWORD)(rc.bottom - rc.top));
- db_set_dw(NULL,"CList","x",(DWORD)rc.left);
- db_set_dw(NULL,"CList","y",(DWORD)rc.top);
- }
- db_set_dw(NULL,"CList","Width",(DWORD)(rc.right - rc.left));
- }
- return TRUE;
- }
- case WM_SIZE:
- {
- RECT rc;
- if (g_mutex_bSizing) return 0;
- if (wParam != SIZE_MINIMIZED /* && IsWindowVisible(m_hWnd)*/)
- {
- if ( pcli->hwndContactList == NULL )
- return 0;
-
- if ( !g_CluiData.fLayered && !g_CluiData.fDisableSkinEngine)
- ske_ReCreateBackImage(TRUE,NULL);
-
- GetWindowRect(m_hWnd, &rc);
- CheckFramesPos(&rc);
- ModernSkinButton_ReposButtons( m_hWnd, SBRF_DO_NOT_DRAW, &rc);
- ModernSkinButton_ReposButtons( m_hWnd, SBRF_REDRAW, NULL);
- if (g_CluiData.fLayered)
- CallService(MS_SKINENG_UPTATEFRAMEIMAGE,(WPARAM)m_hWnd,0);
-
- if ( !g_CluiData.fLayered)
- {
- g_mutex_bSizing = 1;
- Sync(CLUIFrames_OnClistResize_mod,(WPARAM)m_hWnd,(LPARAM)1);
- CLUIFrames_ApplyNewSizes(2);
- CLUIFrames_ApplyNewSizes(1);
- SendMessage(m_hWnd,CLN_LISTSIZECHANGE,0,0);
- g_mutex_bSizing = 0;
- }
-
- // ske_RedrawCompleteWindow();
- if ( !CallService(MS_CLIST_DOCKINGISDOCKED,0,0))
- { //if g_CluiData.fDocked, dont remember pos (except for width)
- db_set_dw(NULL,"CList","Height",(DWORD)(rc.bottom - rc.top));
- db_set_dw(NULL,"CList","x",(DWORD)rc.left);
- db_set_dw(NULL,"CList","y",(DWORD)rc.top);
- }
- else SetWindowRgn(m_hWnd,NULL,0);
- db_set_dw(NULL,"CList","Width",(DWORD)(rc.right - rc.left));
-
- if ( !g_CluiData.fLayered)
- {
- HRGN hRgn1;
- RECT r;
- int v,h;
- int w = 10;
- GetWindowRect(m_hWnd,&r);
- h = (r.right-r.left)>(w*2)?w:(r.right-r.left);
- v = (r.bottom-r.top)>(w*2)?w:(r.bottom-r.top);
- h = (h < v)?h:v;
- hRgn1 = CreateRoundRectRgn(0,0,(r.right-r.left+1),(r.bottom-r.top+1),h,h);
- if ((db_get_b(NULL,"CLC","RoundCorners",SETTING_ROUNDCORNERS_DEFAULT)) && (!CallService(MS_CLIST_DOCKINGISDOCKED,0,0)))
- SetWindowRgn(m_hWnd,hRgn1,FALSE);
- else
- {
- DeleteObject(hRgn1);
- SetWindowRgn(m_hWnd,NULL,FALSE);
- }
- RedrawWindow(m_hWnd,NULL,NULL,RDW_INVALIDATE|RDW_ERASE|RDW_FRAME|RDW_UPDATENOW|RDW_ALLCHILDREN);
- }
- }
- else {
- if (db_get_b(NULL,"CList","Min2Tray",SETTING_MIN2TRAY_DEFAULT)) {
- CLUI_ShowWindowMod(m_hWnd, SW_HIDE);
- db_set_b(NULL,"CList","State",SETTING_STATE_HIDDEN);
- }
- else db_set_b(NULL,"CList","State",SETTING_STATE_MINIMIZED);
- if (MySetProcessWorkingSetSize != NULL)
- MySetProcessWorkingSetSize(GetCurrentProcess(),-1,-1);
- }
-
- return TRUE;
- }
- case WM_WINDOWPOSCHANGING:
- {
- WINDOWPOS *wp = (WINDOWPOS *)lParam;
- if (wp->flags&SWP_HIDEWINDOW && mutex_bAnimationInProgress)
- return 0;
- if (g_CluiData.fOnDesktop)
- wp->flags |= SWP_NOACTIVATE|SWP_NOZORDER;
- return DefWindowProc(m_hWnd, msg, wParam, lParam);
- }
- }
- return 0;
-}
-
-LRESULT CLUI::OnThemeChanged( UINT /*msg*/, WPARAM /*wParam*/, LPARAM /*lParam*/ )
-{
- xpt_OnWM_THEMECHANGED();
- return FALSE;
-}
-
-LRESULT CLUI::OnDwmCompositionChanged( UINT /*msg*/, WPARAM /*wParam*/, LPARAM /*lParam*/ )
-{
- g_CluiData.fAeroGlass = false;
- CLUI_UpdateAeroGlass();
- return FALSE;
-}
-
-LRESULT CLUI::OnSyncCall( UINT /*msg*/, WPARAM wParam, LPARAM /*lParam*/ )
-{
- return SyncOnWndProcCall( wParam );
-}
-
-LRESULT CLUI::OnUpdate( UINT /*msg*/, WPARAM /*wParam*/, LPARAM /*lParam*/ )
-{
- if ( g_flag_bPostWasCanceled )
- return FALSE;
- return ske_ValidateFrameImageProc( NULL );
-}
-
-LRESULT CLUI::OnInitMenu( UINT /*msg*/, WPARAM /*wParam*/, LPARAM /*lParam*/ )
-{
- if ( !CLUI::IsMainMenuInited()) {
- if ( ServiceExists( MS_CLIST_MENUBUILDMAIN ))
- CallService( MS_CLIST_MENUBUILDMAIN, 0, 0 );
- CLUI::m_fMainMenuInited = TRUE;
- }
- return FALSE;
-}
-
-LRESULT CLUI::OnNcPaint( UINT msg, WPARAM wParam, LPARAM lParam )
-{
- int lRes = DefWindowProc( m_hWnd, msg, wParam, lParam );
- if ( !g_CluiData.fLayered && db_get_b( NULL,"CLUI","ShowMainMenu",SETTING_SHOWMAINMENU_DEFAULT )) {
- HDC hdc = NULL;
- if ( msg == WM_PRINT ) hdc = (HDC)wParam;
- if ( !hdc ) hdc = GetWindowDC( m_hWnd );
- CLUI_DrawMenuBackGround( m_hWnd, hdc, 0, 0 );
- if ( msg != WM_PRINT ) ReleaseDC( m_hWnd, hdc );
- }
- return lRes;
-}
-
-LRESULT CLUI::OnEraseBkgnd( UINT /*msg*/, WPARAM /*wParam*/, LPARAM /*lParam*/ )
-{
- return TRUE;
-}
-
-LRESULT CLUI::OnNcCreate( UINT msg, WPARAM wParam, LPARAM lParam )
-{
- ((LPCREATESTRUCT)lParam )->style &= ~(CS_HREDRAW | CS_VREDRAW);
- return DefCluiWndProc( msg, wParam, lParam );
-}
-
-LRESULT CLUI::OnPaint( UINT msg, WPARAM wParam, LPARAM lParam )
-{
- if ( !g_CluiData.fLayered && IsWindowVisible(m_hWnd)) {
- RECT w = {0};
- RECT w2 = {0};
- PAINTSTRUCT ps = {0};
- HDC hdc;
- HBITMAP hbmp,oldbmp;
- HDC paintDC;
-
- GetClientRect(m_hWnd,&w);
- if ( !(w.right>0 && w.bottom>0)) return DefWindowProc(m_hWnd, msg, wParam, lParam);
-
- if ( !g_CluiData.fDisableSkinEngine)
- {
- paintDC = GetDC(m_hWnd);
- w2 = w;
- hdc = CreateCompatibleDC(paintDC);
- hbmp = ske_CreateDIB32(w.right,w.bottom);
- oldbmp = (HBITMAP)SelectObject(hdc,hbmp);
- ske_ReCreateBackImage(FALSE,NULL);
- BitBlt(paintDC,w2.left,w2.top,w2.right-w2.left,w2.bottom-w2.top,g_pCachedWindow->hBackDC,w2.left,w2.top,SRCCOPY);
- SelectObject(hdc,oldbmp);
- DeleteObject(hbmp);
- mod_DeleteDC(hdc);
- ReleaseDC(m_hWnd,paintDC);
- }
- else {
- HDC hdc = BeginPaint(m_hWnd,&ps);
- ske_BltBackImage(m_hWnd,hdc,&ps.rcPaint);
- ps.fErase = FALSE;
- EndPaint(m_hWnd,&ps);
- }
-
- ValidateRect(m_hWnd,NULL);
- }
-
- if (0 && (db_get_dw(NULL,"CLUIFrames","GapBetweenFrames",SETTING_GAPFRAMES_DEFAULT) || db_get_dw(NULL,"CLUIFrames","GapBetweenTitleBar",SETTING_GAPTITLEBAR_DEFAULT)))
- {
- if (IsWindowVisible(m_hWnd)) {
- if (g_CluiData.fLayered)
- SkinInvalidateFrame(m_hWnd,NULL);
- else {
- RECT w = {0};
- RECT w2 = {0};
- PAINTSTRUCT ps = {0};
- GetWindowRect(m_hWnd,&w);
- OffsetRect(&w,-w.left,-w.top);
- BeginPaint(m_hWnd,&ps);
- if ((ps.rcPaint.bottom-ps.rcPaint.top)*(ps.rcPaint.right-ps.rcPaint.left) == 0)
- w2 = w;
- else
- w2 = ps.rcPaint;
- SkinDrawGlyph(ps.hdc,&w,&w2,"Main,ID=Background,Opt=Non-Layered");
- ps.fErase = FALSE;
- EndPaint(m_hWnd,&ps);
- }
- }
- }
- return DefWindowProc(m_hWnd, msg, wParam, lParam);
-}
-
-LRESULT CLUI::OnCreate( UINT msg, WPARAM wParam, LPARAM lParam )
-{
- TranslateMenu(GetMenu(m_hWnd));
- DrawMenuBar(m_hWnd);
- CLUIServices_ProtocolStatusChanged(0,0);
-
- { MENUITEMINFO mii;
- ZeroMemory(&mii,sizeof(mii));
- mii.cbSize = MENUITEMINFO_V4_SIZE;
- mii.fMask = MIIM_TYPE|MIIM_DATA;
- mii.dwItemData = MENU_MIRANDAMENU;
- mii.fType = MFT_OWNERDRAW;
- mii.dwTypeData = NULL;
- SetMenuItemInfo(GetMenu(m_hWnd),0,TRUE,&mii);
-
- // mii.fMask = MIIM_TYPE;
- mii.fType = MFT_OWNERDRAW;
- mii.dwItemData = MENU_STATUSMENU;
- SetMenuItemInfo(GetMenu(m_hWnd),1,TRUE,&mii);
-
- // mii.fMask = MIIM_TYPE;
- mii.fType = MFT_OWNERDRAW;
- mii.dwItemData = MENU_MINIMIZE;
- SetMenuItemInfo(GetMenu(m_hWnd),2,TRUE,&mii);
- }
- //PostMessage(m_hWnd, M_CREATECLC, 0, 0);
- //pcli->hwndContactList = m_hWnd;
- uMsgGetProfile = RegisterWindowMessage(_T("Miranda::GetProfile")); // don't localise
- bTransparentFocus = 1;
- return FALSE;
-}
-
-LRESULT CLUI::OnSetAllExtraIcons( UINT /*msg*/, WPARAM /*wParam*/, LPARAM /*lParam*/ )
-{
- return FALSE;
-}
-
-LRESULT CLUI::OnCreateClc( UINT /*msg*/, WPARAM /*wParam*/, LPARAM /*lParam*/ )
-{
- CreateCLC();
- if ( db_get_b( NULL, "CList", "ShowOnStart", SETTING_SHOWONSTART_DEFAULT ))
- cliShowHide((WPARAM) m_hWnd, (LPARAM)TRUE );
- PostMessage( pcli->hwndContactTree, CLM_AUTOREBUILD, 0, 0 );
- return FALSE;
-}
-
-LRESULT CLUI::OnLButtonDown( UINT msg, WPARAM wParam, LPARAM lParam )
-{
- POINT pt;
- pt.x = (short)LOWORD(lParam);
- pt.y = (short)HIWORD(lParam);
- ClientToScreen( m_hWnd, &pt );
-
- if ( CLUI_SizingOnBorder( pt, 1 ))
- {
- mutex_bIgnoreActivation = TRUE;
- return FALSE;
- }
- return DefCluiWndProc( msg, wParam, lParam );
-}
-LRESULT CLUI::OnParentNotify( UINT msg, WPARAM wParam, LPARAM lParam )
-{
- switch ( wParam )
- {
- case WM_LBUTTONDOWN:
- {
- POINT pt;
-
- pt.x = (short)LOWORD(lParam);
- pt.y = (short)HIWORD(lParam);
- ClientToScreen( m_hWnd, &pt );
- wParam = 0;
- lParam = 0;
-
- if ( CLUI_SizingOnBorder( pt,1 ))
- {
- mutex_bIgnoreActivation = TRUE;
- return 0;
- }
- }
- }
- return DefWindowProc(m_hWnd, msg, wParam, lParam);;
-}
-
-LRESULT CLUI::OnSetFocus( UINT msg, WPARAM wParam, LPARAM lParam )
-{
- if ( hFrameContactTree && ( !CallService( MS_CLIST_FRAMES_GETFRAMEOPTIONS, MAKEWPARAM( FO_FLOATING, hFrameContactTree ), 0 )))
- {
- SetFocus(pcli->hwndContactTree);
- }
-
- return FALSE;
-}
-
-LRESULT CLUI::OnStatusBarUpdateTimer( UINT msg, WPARAM wParam, LPARAM lParam )
-{
- int status,i;
- PROTOTICKS *pt = NULL;
-
- for (i=0;i < 64;i++)
- {
-
- pt = &CycleStartTick[i];
-
- if (pt->szProto != NULL && pt->bTimerCreated == 1)
- {
- if (pt->bGlobal)
- status = g_bMultiConnectionMode?ID_STATUS_CONNECTING:0;
- else
- status = CallProtoService(pt->szProto,PS_GETSTATUS,0,0);
-
- if ( !(status >= ID_STATUS_CONNECTING && status <= ID_STATUS_CONNECTING+MAX_CONNECT_RETRIES))
- {
- pt->nCycleStartTick = 0;
- ImageList_Destroy(pt->himlIconList);
- pt->himlIconList = NULL;
- KillTimer(m_hWnd,TM_STATUSBARUPDATE+pt->nIndex);
- pt->bTimerCreated = 0;
- }
- }
-
- };
-
- pt = &CycleStartTick[wParam-TM_STATUSBARUPDATE];
- {
- if (IsWindowVisible(pcli->hwndStatus)) pcli->pfnInvalidateRect(pcli->hwndStatus,NULL,0);//InvalidateRectZ(pcli->hwndStatus,NULL,TRUE);
- //if (DBGetContactSettingByte(NULL,"CList","TrayIcon",SETTING_TRAYICON_DEFAULT) != SETTING_TRAYICON_CYCLE)
- if (pt->bGlobal)
- cliTrayIconUpdateBase(g_szConnectingProto);
- else
- cliTrayIconUpdateBase(pt->szProto);
-
- }
- pcli->pfnInvalidateRect(pcli->hwndStatus,NULL,TRUE);
- return DefCluiWndProc( msg, wParam, lParam );
-}
-
-LRESULT CLUI::OnAutoAlphaTimer( UINT msg, WPARAM wParam, LPARAM lParam )
-{
- int inwnd;
-
- if (GetForegroundWindow() == m_hWnd)
- {
- KillTimer(m_hWnd,TM_AUTOALPHA);
- inwnd = 1;
- }
- else
- {
- POINT pt;
- HWND hwndPt;
- pt.x = (short)LOWORD(GetMessagePos());
- pt.y = (short)HIWORD(GetMessagePos());
- hwndPt = WindowFromPoint(pt);
-
- inwnd = FALSE;
- inwnd = CLUI_CheckOwnedByClui(hwndPt);
- if ( ! inwnd )
- inwnd = ( GetCapture() == pcli->hwndContactList );
-
- }
- if (inwnd != bTransparentFocus)
- { //change
- HWND hwn = GetCapture();
- hwn = hwn;
- bTransparentFocus = inwnd;
- if (bTransparentFocus) CLUI_SmoothAlphaTransition(m_hWnd, (BYTE)db_get_b(NULL,"CList","Alpha",SETTING_ALPHA_DEFAULT), 1);
- else
- {
- CLUI_SmoothAlphaTransition(m_hWnd, (BYTE)(g_bTransparentFlag?db_get_b(NULL,"CList","AutoAlpha",SETTING_AUTOALPHA_DEFAULT):255), 1);
- }
- }
- if ( !bTransparentFocus) KillTimer(m_hWnd,TM_AUTOALPHA);
- return TRUE;
-}
-LRESULT CLUI::OnSmoothAlphaTransitionTimer( UINT msg, WPARAM wParam, LPARAM lParam )
-{
- CLUI_SmoothAlphaTransition(m_hWnd, 0, 2);
- return TRUE;
-}
-LRESULT CLUI::OnDelayedSizingTimer( UINT msg, WPARAM wParam, LPARAM lParam )
-{
- if ( mutex_bDelayedSizing && !mutex_bDuringSizing )
- {
- mutex_bDelayedSizing = 0;
- KillTimer( m_hWnd,TM_DELAYEDSIZING );
- pcli->pfnClcBroadcast( INTM_SCROLLBARCHANGED, 0, 0 );
- }
- return TRUE;
-}
-LRESULT CLUI::OnBringOutTimer( UINT msg, WPARAM wParam, LPARAM lParam )
-{
- //hide
- KillTimer(m_hWnd,TM_BRINGINTIMEOUT);
- KillTimer(m_hWnd,TM_BRINGOUTTIMEOUT);
- bShowEventStarted = 0;
- POINT pt; GetCursorPos(&pt);
- HWND hAux = WindowFromPoint(pt);
- BOOL mouse_in_window = CLUI_CheckOwnedByClui(hAux);
- if ( !mouse_in_window && GetForegroundWindow() != m_hWnd )
- CLUI_HideBehindEdge();
- return TRUE;
-}
-LRESULT CLUI::OnBringInTimer( UINT msg, WPARAM wParam, LPARAM lParam )
-{
- //show
- KillTimer(m_hWnd,TM_BRINGINTIMEOUT);
- bShowEventStarted = 0;
- KillTimer(m_hWnd,TM_BRINGOUTTIMEOUT);
- POINT pt; GetCursorPos(&pt);
- HWND hAux = WindowFromPoint(pt);
- BOOL mouse_in_window = FALSE;
- while(hAux != NULL)
- {
- if (hAux == m_hWnd) { mouse_in_window = TRUE; break;}
- hAux = GetParent(hAux);
- }
- if ( mouse_in_window )
- CLUI_ShowFromBehindEdge();
- return TRUE;
-}
-LRESULT CLUI::OnUpdateBringTimer( UINT msg, WPARAM wParam, LPARAM lParam )
-{
- CLUI_UpdateTimer( 0 );
- return TRUE;
-}
-
-LRESULT CLUI::OnTimer( UINT msg, WPARAM wParam, LPARAM lParam )
-{
- if ( MirandaExiting()) return FALSE;
-
- if ((int)wParam >= TM_STATUSBARUPDATE && (int)wParam <= TM_STATUSBARUPDATE+64 )
- {
- if ( !pcli->hwndStatus ) return FALSE;
- else return OnStatusBarUpdateTimer( msg, wParam, lParam );
- }
-
- switch ( wParam )
- {
- case TM_AUTOALPHA: return OnAutoAlphaTimer( msg, wParam, lParam );
- case TM_SMOTHALPHATRANSITION: return OnSmoothAlphaTransitionTimer( msg, wParam, lParam );
- case TM_DELAYEDSIZING: return OnDelayedSizingTimer( msg, wParam, lParam );
- case TM_BRINGOUTTIMEOUT: return OnBringOutTimer( msg, wParam, lParam );
- case TM_BRINGINTIMEOUT: return OnBringInTimer( msg, wParam, lParam );
- case TM_UPDATEBRINGTIMER: return OnUpdateBringTimer( msg, wParam, lParam );
- default: return DefCluiWndProc( msg, wParam, lParam );
- }
- return TRUE;
-}
-
-
-LRESULT CLUI::OnActivate( UINT msg, WPARAM wParam, LPARAM lParam )
-{
- BOOL IsOption = FALSE;
- SetCursor(LoadCursor(NULL, IDC_ARROW));
- SendMessage(pcli->hwndContactTree, WM_ACTIVATE, wParam, lParam);
- if (db_get_b(NULL, "ModernData", "HideBehind", SETTING_HIDEBEHIND_DEFAULT))
- {
- if (wParam == WA_INACTIVE && ((HWND)lParam != m_hWnd) && GetParent((HWND)lParam) != m_hWnd && !IsOption)
- {
- if ( !g_bCalledFromShowHide) CLUI_UpdateTimer(0);
- }
- else if ( !g_bCalledFromShowHide )
- {
- CLUI_ShowFromBehindEdge();
- }
- }
-
- if ( !IsWindowVisible(m_hWnd) || mutex_bShowHideCalledFromAnimation)
- {
- KillTimer(m_hWnd,TM_AUTOALPHA);
- return 0;
- }
- if (wParam == WA_INACTIVE && ((HWND)lParam != m_hWnd) && !CLUI_CheckOwnedByClui((HWND)lParam) && !IsOption)
- {
- if (g_bTransparentFlag)
- if (bTransparentFocus)
- CLUI_SafeSetTimer(m_hWnd, TM_AUTOALPHA,250,NULL);
-
- }
- else {
- if ( !db_get_b(NULL,"CList","OnTop",SETTING_ONTOP_DEFAULT))
- Sync(CLUIFrames_ActivateSubContainers,TRUE);
- if (g_bTransparentFlag) {
- KillTimer(m_hWnd,TM_AUTOALPHA);
- CLUI_SmoothAlphaTransition(m_hWnd, db_get_b(NULL,"CList","Alpha",SETTING_ALPHA_DEFAULT), 1);
- bTransparentFocus = 1;
- }
- }
- RedrawWindow(m_hWnd,NULL,NULL,RDW_INVALIDATE|RDW_ALLCHILDREN);
- if (g_bTransparentFlag)
- {
- BYTE alpha;
- if (wParam != WA_INACTIVE || CLUI_CheckOwnedByClui((HWND)lParam) || IsOption || ((HWND)lParam == m_hWnd) || GetParent((HWND)lParam) == m_hWnd) alpha = db_get_b(NULL,"CList","Alpha",SETTING_ALPHA_DEFAULT);
- else
- alpha = g_bTransparentFlag?db_get_b(NULL,"CList","AutoAlpha",SETTING_AUTOALPHA_DEFAULT):255;
- CLUI_SmoothAlphaTransition(m_hWnd, alpha, 1);
- if (IsOption) DefWindowProc(m_hWnd,msg,wParam,lParam);
- else return 1;
- }
- return DefWindowProc(m_hWnd,msg,wParam,lParam);
-}
-
-LRESULT CLUI::OnSetCursor( UINT msg, WPARAM wParam, LPARAM lParam )
-{
- HWND gf = GetForegroundWindow();
- if (g_CluiData.nBehindEdgeState >= 0) CLUI_UpdateTimer(1);
- if (g_bTransparentFlag) {
- if ( !bTransparentFocus && gf != m_hWnd)
- {
- CLUI_SmoothAlphaTransition(m_hWnd, db_get_b(NULL,"CList","Alpha",SETTING_ALPHA_DEFAULT), 1);
- bTransparentFocus = 1;
- CLUI_SafeSetTimer(m_hWnd, TM_AUTOALPHA,250,NULL);
- }
- }
- int k = CLUI_TestCursorOnBorders();
- return k ? k : 1;
-}
-
-LRESULT CLUI::OnMouseActivate( UINT msg, WPARAM wParam, LPARAM lParam )
-{
-
- if ( mutex_bIgnoreActivation )
- {
- mutex_bIgnoreActivation = 0;
- return( MA_NOACTIVATEANDEAT );
- }
- int lRes = DefWindowProc(m_hWnd,msg,wParam,lParam);
- CLUIFrames_RepaintSubContainers();
- return lRes;
-}
-
-LRESULT CLUI::OnNcLButtonDown( UINT msg, WPARAM wParam, LPARAM lParam )
-{
- POINT pt;
- pt.x = (short)LOWORD(lParam);
- pt.y = (short)HIWORD(lParam);
- int k = CLUI_SizingOnBorder(pt,1);
- return k ? k : DefWindowProc( m_hWnd, msg, wParam, lParam );
-}
-
-LRESULT CLUI::OnNcLButtonDblClk( UINT msg, WPARAM wParam, LPARAM lParam )
-{
- if (wParam == HTMENU || wParam == HTCAPTION)
- {
- RECT rc;
- GetWindowRect(m_hWnd, &rc);
- POINT pt;
- pt.x = (short)LOWORD(lParam);
- pt.y = (short)HIWORD(lParam);
- if ( pt.x > rc.right - 16 && pt.x < rc.right )
- return CallService(MS_CLIST_SHOWHIDE, 0, 0);
- }
- return DefCluiWndProc( msg, wParam, lParam );
-}
-
-LRESULT CLUI::OnNcHitTest( UINT msg, WPARAM wParam, LPARAM lParam )
-{
- LRESULT result;
- result = DefWindowProc(m_hWnd,WM_NCHITTEST,wParam,lParam);
-
- if ((g_CluiData.fAutoSize) && ( result == HTSIZE || result == HTTOP ||
- result == HTTOPLEFT || result == HTTOPRIGHT ||
- result == HTBOTTOM || result == HTBOTTOMRIGHT ||
- result == HTBOTTOMLEFT))
- return HTCLIENT;
-
- if (result == HTMENU)
- {
- int t;
- POINT pt;
- pt.x = (short)LOWORD(lParam);
- pt.y = (short)HIWORD(lParam);
- t = MenuItemFromPoint(m_hWnd,g_hMenuMain,pt);
-
- if (t == -1 && (db_get_b(NULL,"CLUI","ClientAreaDrag",SETTING_CLIENTDRAG_DEFAULT)))
- return HTCAPTION;
- }
-
- if (result == HTCLIENT)
- {
- POINT pt;
- int k;
- pt.x = (short)LOWORD(lParam);
- pt.y = (short)HIWORD(lParam);
- k = CLUI_SizingOnBorder(pt,0);
- if ( !k && (db_get_b(NULL,"CLUI","ClientAreaDrag",SETTING_CLIENTDRAG_DEFAULT)))
- return HTCAPTION;
- else return k+9;
- }
- return result;
-}
-
-LRESULT CLUI::OnShowWindow( UINT msg, WPARAM wParam, LPARAM lParam )
-{
- BYTE gAlpha;
-
- if (lParam) return 0;
- if (mutex_bShowHideCalledFromAnimation) return 1;
- {
-
- if ( !wParam) gAlpha = 0;
- else
- gAlpha = (db_get_b(NULL,"CList","Transparent",SETTING_TRANSPARENT_DEFAULT)?db_get_b(NULL,"CList","Alpha",SETTING_ALPHA_DEFAULT):255);
- if (wParam)
- {
- g_CluiData.bCurrentAlpha = 0;
- Sync(CLUIFrames_OnShowHide, pcli->hwndContactList,1);
- ske_RedrawCompleteWindow();
- }
- CLUI_SmoothAlphaTransition(m_hWnd, gAlpha, 1);
- }
- return FALSE;
-}
-
-LRESULT CLUI::OnSysCommand( UINT msg, WPARAM wParam, LPARAM lParam )
-{
- switch (wParam)
- {
- case SC_MAXIMIZE:
- return 0;
-
- case SC_CLOSE:
- PostMessage(m_hWnd, msg, SC_MINIMIZE, lParam);
- return 0;
- }
-
- DefWindowProc(m_hWnd, msg, wParam, lParam);
- if (db_get_b(NULL,"CList","OnDesktop",SETTING_ONDESKTOP_DEFAULT))
- Sync( CLUIFrames_ActivateSubContainers, TRUE );
- return FALSE;
-}
-
-LRESULT CLUI::OnKeyDown( UINT msg, WPARAM wParam, LPARAM lParam )
-{
- if (wParam == VK_F5)
- SendMessage(pcli->hwndContactTree,CLM_AUTOREBUILD,0,0);
- return DefCluiWndProc( msg, wParam, lParam );
-}
-
-LRESULT CLUI::OnGetMinMaxInfo( UINT msg, WPARAM wParam, LPARAM lParam )
-{
- DefWindowProc(m_hWnd,msg,wParam,lParam);
- ((LPMINMAXINFO)lParam)->ptMinTrackSize.x = max(db_get_w(NULL,"CLUI","MinWidth",SETTING_MINWIDTH_DEFAULT),max(18,db_get_b(NULL,"CLUI","LeftClientMargin",SETTING_LEFTCLIENTMARIGN_DEFAULT)+db_get_b(NULL,"CLUI","RightClientMargin",SETTING_RIGHTCLIENTMARIGN_DEFAULT)+18));
- if (nRequiredHeight == 0)
- {
- ((LPMINMAXINFO)lParam)->ptMinTrackSize.y = CLUIFramesGetMinHeight();
- }
- return FALSE;
-}
-
-LRESULT CLUI::OnMoving( UINT msg, WPARAM wParam, LPARAM lParam )
-{
- CallWindowProc( DefWindowProc, m_hWnd, msg, wParam, lParam );
- if ( FALSE ) //showcontents is turned on
- {
- Sync(CLUIFrames_OnMoving,m_hWnd,(RECT*)lParam);
- }
- return TRUE;
-}
-
-LRESULT CLUI::OnNewContactNotify( NMCLISTCONTROL * pnmc )
-{
- ExtraImage_SetAllExtraIcons( pcli->hwndContactTree, pnmc->hItem );
- return FALSE;
-}
-
-LRESULT CLUI::OnListRebuildNotify( NMCLISTCONTROL * pnmc )
-{
- ExtraImage_SetAllExtraIcons( pcli->hwndContactTree, 0 );
- return FALSE;
-}
-LRESULT CLUI::OnListSizeChangeNotify( NMCLISTCONTROL * pnmc )
-{
-
- // TODO: Check and refactor possible problem of clist resized to full screen problem
- static RECT rcWindow,rcTree,rcTree2,rcWorkArea,rcOld;
- int maxHeight, minHeight,newHeight;
- int winstyle;
- if (mutex_bDisableAutoUpdate == 1)
- return FALSE;
- if (mutex_bDuringSizing)
- rcWindow = rcSizingRect;
- else
- GetWindowRect(m_hWnd,&rcWindow);
- if ( !g_CluiData.fAutoSize || pcli->hwndContactTree == 0 || CallService(MS_CLIST_DOCKINGISDOCKED,0,0))
- return FALSE;
-
- maxHeight = db_get_b(NULL,"CLUI","MaxSizeHeight",SETTING_MAXSIZEHEIGHT_DEFAULT);
- minHeight = db_get_b(NULL,"CLUI","MinSizeHeight",SETTING_MINSIZEHEIGHT_DEFAULT);
- rcOld = rcWindow;
- GetWindowRect(pcli->hwndContactTree,&rcTree);
-
- FRAMEWND* frm = FindFrameByItsHWND(pcli->hwndContactTree);
- if (frm)
- rcTree2 = frm->wndSize;
- else
- SetRect(&rcTree2,0,0,0,0);
-
- winstyle = GetWindowLongPtr(pcli->hwndContactTree,GWL_STYLE);
-
- SystemParametersInfo(SPI_GETWORKAREA,0,&rcWorkArea,FALSE);
- if (MyMonitorFromWindow)
- {
- HMONITOR hMon = MyMonitorFromWindow(pcli->hwndContactTree, MONITOR_DEFAULTTONEAREST);
- MONITORINFO mi;
- mi.cbSize = sizeof(mi);
- if (MyGetMonitorInfo(hMon, &mi))
- rcWorkArea = mi.rcWork;
- }
-
-
- if (pnmc->pt.y>(rcWorkArea.bottom-rcWorkArea.top))
- {
- pnmc->pt.y = (rcWorkArea.bottom-rcWorkArea.top);
-
- };
- if ((pnmc->pt.y) == nLastRequiredHeight)
- {
- }
- nLastRequiredHeight = pnmc->pt.y;
- newHeight = max(CLUIFramesGetMinHeight(),max(pnmc->pt.y,3)+1+((winstyle&WS_BORDER)?2:0)+(rcWindow.bottom-rcWindow.top)-(rcTree.bottom-rcTree.top));
- if (newHeight < (rcWorkArea.bottom-rcWorkArea.top)*minHeight/100)
- newHeight = (rcWorkArea.bottom-rcWorkArea.top)*minHeight/100;
-
- if (newHeight>(rcWorkArea.bottom-rcWorkArea.top)*maxHeight/100)
- newHeight = (rcWorkArea.bottom-rcWorkArea.top)*maxHeight/100;
-
- if (newHeight == (rcWindow.bottom-rcWindow.top)) return 0;
-
- if (db_get_b(NULL,"CLUI","AutoSizeUpward",SETTING_AUTOSIZEUPWARD_DEFAULT)) {
- rcWindow.top = rcWindow.bottom-newHeight;
- if (rcWindow.top < rcWorkArea.top) rcWindow.top = rcWorkArea.top;
- }
- else {
- rcWindow.bottom = rcWindow.top+newHeight;
- if (rcWindow.bottom>rcWorkArea.bottom) rcWindow.bottom = rcWorkArea.bottom;
- }
- if (nRequiredHeight == 1)
- return FALSE;
- nRequiredHeight = 1;
- if (mutex_bDuringSizing)
- {
- bNeedFixSizingRect = 1;
- rcSizingRect.top = rcWindow.top;
- rcSizingRect.bottom = rcWindow.bottom;
- rcCorrectSizeRect = rcSizingRect;
- }
- else
- {
- bNeedFixSizingRect = 0;
- }
- if ( !mutex_bDuringSizing)
- SetWindowPos(m_hWnd,0,rcWindow.left,rcWindow.top,rcWindow.right-rcWindow.left,rcWindow.bottom-rcWindow.top,SWP_NOZORDER|SWP_NOACTIVATE);
- else
- {
- SetWindowPos(m_hWnd,0,rcWindow.left,rcWindow.top,rcWindow.right-rcWindow.left,rcWindow.bottom-rcWindow.top,SWP_NOZORDER|SWP_NOACTIVATE);
- }
- nRequiredHeight = 0;
-
- return FALSE;
-}
-
-LRESULT CLUI::OnClickNotify( NMCLISTCONTROL * pnmc )
-{
- DWORD hitFlags;
- HANDLE hItem = (HANDLE)SendMessage(pcli->hwndContactTree,CLM_HITTEST,(WPARAM)&hitFlags,MAKELPARAM(pnmc->pt.x,pnmc->pt.y));
-
- if (hitFlags&CLCHT_ONITEMEXTRA)
- {
- if ( !IsHContactGroup(hItem) && !IsHContactInfo(hItem))
- {
- pdisplayNameCacheEntry pdnce = (pdisplayNameCacheEntry)pcli->pfnGetCacheEntry(pnmc->hItem);
- if (pdnce == NULL) return 0;
-
- int extra = ExtraImage_ColumnNumToExtraID(pnmc->iColumn);
- NotifyEventHooks(g_CluiData.hEventExtraClick, (WPARAM)pnmc->hItem, extra);
-
- if ( !ServiceExists("ExtraIcon/Register"))
- {
- int v,e,w;
- v = ExtraImage_ExtraIDToColumnNum(EXTRA_ICON_PROTO);
- e = ExtraImage_ExtraIDToColumnNum(EXTRA_ICON_EMAIL);
- w = ExtraImage_ExtraIDToColumnNum(EXTRA_ICON_WEB);
-
- if (pnmc->iColumn == v) {
- CallService(MS_USERINFO_SHOWDIALOG,(WPARAM)pnmc->hItem,0);
- };
- if (pnmc->iColumn == e)
- {
- char *email = db_get_sa(pnmc->hItem,"UserInfo", "Mye-mail0");
- if ( !email)
- email = db_get_sa(pnmc->hItem, pdnce->m_cache_cszProto, "e-mail");
- if (email) {
- char buf[4096];
- sprintf(buf,"mailto:%s",email);
- mir_free(email);
- ShellExecuteA(m_hWnd,"open",buf,NULL,NULL,SW_SHOW);
- }
- };
- if (pnmc->iColumn == w) {
- char *homepage = db_get_sa(pdnce->hContact,"UserInfo", "Homepage");
- if ( !homepage)
- homepage = db_get_sa(pdnce->hContact,pdnce->m_cache_cszProto, "Homepage");
- if (homepage != NULL)
- {
- CallService(MS_UTILS_OPENURL, 1, (LPARAM)homepage);
- mir_free(homepage);
- }
- }
- }
- }
- };
- if (hItem && !(hitFlags&CLCHT_NOWHERE))
- return DefCluiWndProc( WM_NOTIFY, 0, (LPARAM)pnmc );
- if ((hitFlags&(CLCHT_NOWHERE|CLCHT_INLEFTMARGIN|CLCHT_BELOWITEMS)) == 0)
- return DefCluiWndProc( WM_NOTIFY, 0, (LPARAM)pnmc );
- if (db_get_b(NULL,"CLUI","ClientAreaDrag",SETTING_CLIENTDRAG_DEFAULT)) {
- POINT pt;
- int res;
- pt = pnmc->pt;
- ClientToScreen(pcli->hwndContactTree,&pt);
- res = PostMessage(m_hWnd, WM_SYSCOMMAND, SC_MOVE|HTCAPTION,MAKELPARAM(pt.x,pt.y));
- return res;
- }
- /*== == == == == == == == == = */
- if (db_get_b(NULL,"CLUI","DragToScroll",SETTING_DRAGTOSCROLL_DEFAULT) && !db_get_b(NULL,"CLUI","ClientAreaDrag",SETTING_CLIENTDRAG_DEFAULT))
- return ClcEnterDragToScroll(pcli->hwndContactTree,pnmc->pt.y);
- /*== == == == == == == == == = */
- return 0;
-}
-
-LRESULT CLUI::OnNotify( UINT msg, WPARAM wParam, LPARAM lParam )
-{
- LPNMHDR pnmhdr = (LPNMHDR)lParam;
- if ( pnmhdr->hwndFrom != pcli->hwndContactTree )
- return DefCluiWndProc( msg, wParam, lParam );
-
- switch ( pnmhdr->code)
- {
- case CLN_NEWCONTACT: return OnNewContactNotify((NMCLISTCONTROL *)pnmhdr );
- case CLN_LISTREBUILT: return OnListRebuildNotify((NMCLISTCONTROL *)pnmhdr );
- case CLN_LISTSIZECHANGE: return OnListSizeChangeNotify((NMCLISTCONTROL *)pnmhdr );
- case NM_CLICK: return OnClickNotify((NMCLISTCONTROL *)pnmhdr );
-
- }
- return DefCluiWndProc( msg, wParam, lParam );
-}
-
-LRESULT CLUI::OnContextMenu( UINT msg, WPARAM wParam, LPARAM lParam )
-{
- RECT rc;
- POINT pt;
-
- pt.x = (short)LOWORD(lParam);
- pt.y = (short)HIWORD(lParam);
- // x/y might be -1 if it was generated by a kb click
- GetWindowRect(pcli->hwndContactTree,&rc);
- if ( pt.x == -1 && pt.y == -1) {
- // all this is done in screen-coords!
- GetCursorPos(&pt);
- // the mouse isnt near the window, so put it in the middle of the window
- if ( !PtInRect(&rc,pt)) {
- pt.x = rc.left + (rc.right - rc.left) / 2;
- pt.y = rc.top + (rc.bottom - rc.top) / 2;
- }
- }
- if (PtInRect( &rc ,pt ))
- {
- HMENU hMenu;
- hMenu = (HMENU)CallService(MS_CLIST_MENUBUILDGROUP,0,0);
- TrackPopupMenu(hMenu,TPM_TOPALIGN|TPM_LEFTALIGN|TPM_LEFTBUTTON,pt.x,pt.y,0,m_hWnd,NULL);
- DestroyTrayMenu(hMenu);
- }
- return FALSE;
-
-}
-LRESULT CLUI::OnMeasureItem( UINT msg, WPARAM wParam, LPARAM lParam )
-{
- LPMEASUREITEMSTRUCT pmis = (LPMEASUREITEMSTRUCT)lParam;
- switch ( pmis->itemData )
- {
- case MENU_MIRANDAMENU:
- {
- pmis->itemWidth = GetSystemMetrics( SM_CXSMICON ) * 4 / 3;
- pmis->itemHeight = 0;
- }
- return TRUE;
- case MENU_STATUSMENU:
- {
- HDC hdc;
- SIZE textSize;
- hdc = GetDC( m_hWnd );
- GetTextExtentPoint32A( hdc, Translate("Status"), lstrlenA( Translate( "Status" )), &textSize );
- pmis->itemWidth = textSize.cx;
- pmis->itemHeight = 0;
- ReleaseDC( m_hWnd, hdc );
- }
- return TRUE;
- }
- return CallService( MS_CLIST_MENUMEASUREITEM, wParam, lParam );
-}
-
-LRESULT CLUI::OnDrawItem( UINT msg, WPARAM wParam, LPARAM lParam )
-{
- struct ClcData * dat = (struct ClcData*)GetWindowLongPtr(pcli->hwndContactTree,0);
- LPDRAWITEMSTRUCT dis = (LPDRAWITEMSTRUCT)lParam;
- if ( !dat) return 0;
-
- if (dis->CtlType == ODT_MENU) {
- if (dis->itemData == MENU_MIRANDAMENU) {
- if ( !g_CluiData.fLayered)
- {
- char buf[255];
- short offset = 1 + ( dis->itemState&ODS_SELECTED ? 1 : 0 )
- - ( dis->itemState&ODS_HOTLIGHT ? 1 : 0 );
-
- HICON hIcon = LoadSkinnedIcon(SKINICON_OTHER_MAINMENU);
-
- CLUI_DrawMenuBackGround(m_hWnd, dis->hDC, 1, dis->itemState);
- mir_snprintf(buf,SIZEOF(buf),"Main,ID=MainMenu,Selected=%s,Hot=%s",(dis->itemState&ODS_SELECTED)?"True":"False",(dis->itemState&ODS_HOTLIGHT)?"True":"False");
- SkinDrawGlyph(dis->hDC,&dis->rcItem,&dis->rcItem,buf);
-
- int x = (dis->rcItem.right + dis->rcItem.left - GetSystemMetrics(SM_CXSMICON)) / 2 + offset;
- int y = (dis->rcItem.bottom + dis->rcItem.top - GetSystemMetrics(SM_CYSMICON)) / 2 + offset;
-
- DrawState( dis->hDC, NULL, NULL, (LPARAM)hIcon, 0, x, y , 0 , 0 ,
- DST_ICON | ( dis->itemState & ODS_INACTIVE && (((FALSE))) ? DSS_DISABLED : DSS_NORMAL ));
-
- CallService(MS_SKIN2_RELEASEICON, (WPARAM)hIcon, 0);
- nMirMenuState = dis->itemState;
- } else {
- nMirMenuState = dis->itemState;
- pcli->pfnInvalidateRect(m_hWnd,NULL,0);
- }
- return TRUE;
- }
- else if (dis->itemData == MENU_STATUSMENU) {
- if ( !g_CluiData.fLayered)
- {
- char buf[255] = {0};
- RECT rc = dis->rcItem;
- short dx = 1+(dis->itemState&ODS_SELECTED?1:0)-(dis->itemState&ODS_HOTLIGHT?1:0);
- if (dx>1){
- rc.left += dx;
- rc.top += dx;
- }else if (dx == 0){
- rc.right -= 1;
- rc.bottom -= 1;
- }
- CLUI_DrawMenuBackGround(m_hWnd, dis->hDC, 2, dis->itemState);
- SetBkMode(dis->hDC,TRANSPARENT);
- mir_snprintf(buf,SIZEOF(buf),"Main,ID=StatusMenu,Selected=%s,Hot=%s",(dis->itemState&ODS_SELECTED)?"True":"False",(dis->itemState&ODS_HOTLIGHT)?"True":"False");
- SkinDrawGlyph(dis->hDC,&dis->rcItem,&dis->rcItem,buf);
- SetTextColor(dis->hDC, (dis->itemState&ODS_SELECTED/*|dis->itemState&ODS_HOTLIGHT*/)?dat->MenuTextHiColor:dat->MenuTextColor);
- DrawText(dis->hDC,TranslateT("Status"), lstrlen(TranslateT("Status")),&rc, DT_CENTER|DT_VCENTER|DT_SINGLELINE);
- nStatusMenuState = dis->itemState;
- } else {
- nStatusMenuState = dis->itemState;
- pcli->pfnInvalidateRect(m_hWnd,NULL,0);
- }
- return TRUE;
- } else if (dis->itemData == MENU_MINIMIZE && !g_CluiData.fLayered)
- {
- //TODO check if caption is visible
- char buf[255] = {0};
- short dx = 1+(dis->itemState&ODS_SELECTED?1:0)-(dis->itemState&ODS_HOTLIGHT?1:0);
- HICON hIcon = LoadSkinnedIcon(SKINICON_OTHER_MIRANDA);
- CLUI_DrawMenuBackGround(m_hWnd, dis->hDC, 3, dis->itemState);
- mir_snprintf(buf,SIZEOF(buf),"Main,ID=MainMenu,Selected=%s,Hot=%s",(dis->itemState&ODS_SELECTED)?"True":"False",(dis->itemState&ODS_HOTLIGHT)?"True":"False");
- SkinDrawGlyph(dis->hDC,&dis->rcItem,&dis->rcItem,buf);
- DrawState(dis->hDC,NULL,NULL,(LPARAM)hIcon,0,(dis->rcItem.right+dis->rcItem.left-GetSystemMetrics(SM_CXSMICON))/2+dx,(dis->rcItem.bottom+dis->rcItem.top-GetSystemMetrics(SM_CYSMICON))/2+dx,0,0,DST_ICON|(dis->itemState&ODS_INACTIVE && FALSE?DSS_DISABLED:DSS_NORMAL));
- CallService(MS_SKIN2_RELEASEICON, (WPARAM)hIcon, 0);
- nMirMenuState = dis->itemState;
- }
-
- return CallService(MS_CLIST_MENUDRAWITEM,wParam,lParam);
- }
- return 0;
-}
-
-LRESULT CLUI::OnDestroy( UINT msg, WPARAM wParam, LPARAM lParam )
-{
- int state = db_get_b(NULL,"CList","State",SETTING_STATE_NORMAL);
- BOOL wait = FALSE;
-
- AniAva_UnloadModule();
- TRACE("CLUI.c: WM_DESTROY\n");
- g_CluiData.bSTATE = STATE_EXITING;
- CLUI_DisconnectAll();
- //fire the "Away Message" Event to wake the thread so it can die.
- //fire the "Get Text Async" Event to wake the thread so it can die.
- if (amWakeThread())
- wait = TRUE;
-
- if (gtaWakeThread())
- wait = TRUE;
-
- if (wait)
- {
- //need to give them a little time to exit.
- Sleep(50);
- }
-
- TRACE("CLUI.c: WM_DESTROY - WaitThreadsCompletion \n");
- while (CLUI_WaitThreadsCompletion(m_hWnd)); //stop all my threads
- TRACE("CLUI.c: WM_DESTROY - WaitThreadsCompletion DONE\n");
-
- for (int i=0; i < 64; i++)
- if (CycleStartTick[i].szProto)
- mir_free_and_nil(CycleStartTick[i].szProto);
-
- if (state == SETTING_STATE_NORMAL)
- CLUI_ShowWindowMod(m_hWnd,SW_HIDE);
- UnLoadContactListModule();
- ClcUnloadModule();
-
- RemoveMenu(g_hMenuMain, 0, MF_BYPOSITION);
- RemoveMenu(g_hMenuMain, 0, MF_BYPOSITION);
- DestroyMenu(g_hMenuMain);
-
- pcli->pfnTrayIconDestroy(m_hWnd);
- mutex_bAnimationInProgress = 0;
- CallService(MS_CLIST_FRAMES_REMOVEFRAME,(WPARAM)hFrameContactTree,(LPARAM)0);
- TRACE("CLUI.c: WM_DESTROY - hFrameContactTree removed\n");
- pcli->hwndContactTree = NULL;
- pcli->hwndStatus = NULL;
- {
- if (g_CluiData.fAutoSize && !g_CluiData.fDocked)
- {
- RECT r;
- GetWindowRect(pcli->hwndContactList,&r);
- if (db_get_b(NULL,"CLUI","AutoSizeUpward",SETTING_AUTOSIZEUPWARD_DEFAULT))
- r.top = r.bottom-CLUIFrames_GetTotalHeight();
- else
- r.bottom = r.top+CLUIFrames_GetTotalHeight();
- db_set_dw(NULL,"CList","y",r.top);
- db_set_dw(NULL,"CList","Height",r.bottom-r.top);
- }
- }
- UnLoadCLUIFramesModule();
- //ExtFrames_Uninit();
- TRACE("CLUI.c: WM_DESTROY - UnLoadCLUIFramesModule DONE\n");
- db_set_b(NULL,"CList","State",(BYTE)state);
- ske_UnloadSkin(&g_SkinObjectList);
-
- delete m_pCLUI;
-
- pcli->hwndContactList = NULL;
- pcli->hwndStatus = NULL;
- PostQuitMessage(0);
- return 0;
-}