INT_PTR UseGroupsHelper(WPARAM wParam,LPARAM lParam) { int newVal=!(GetWindowLong(pcli->hwndContactTree,GWL_STYLE)&CLS_USEGROUPS); ModernWriteSettingByte(NULL,"CList","UseGroups",(BYTE)newVal); SendMessage(pcli->hwndContactTree,CLM_SETUSEGROUPS,newVal,0); return 0; }
INT_PTR FAV_SetRate(WPARAM hContact, LPARAM nRate) { if (hContact) { ModernWriteSettingByte((HANDLE)hContact, "CList", "Rate",(BYTE)nRate); } return 0; }
void StoreTreeToDB(HWND hTree, char * section) { HTREEITEM tmp=NULL; tmp=TreeView_GetRoot(hTree); StoreTreeNode(hTree,tmp,section); ModernWriteSettingByte(NULL,section,"Modified",1); glSkinWasModified=2; }
INT_PTR FAV_ToggleShowOffline(WPARAM hContact,LPARAM lParam) { if (hContact) { ModernWriteSettingByte((HANDLE)hContact,"CList","noOffline", ModernGetSettingByte((HANDLE)hContact,"CList","noOffline",0)?0:1); } return 0; }
void SetNewExtraColumnCount() { int newcount; LoadPositionsFromDB(ExtraOrder); GetVisColumns(); newcount=colsum(0,EXTRACOLUMNCOUNT-1); ModernWriteSettingByte(NULL,CLUIFrameModule,"EnabledColumnCount",(BYTE)newcount); EnabledColumnCount=newcount; SendMessage(pcli->hwndContactTree,CLM_SETEXTRACOLUMNS,EnabledColumnCount,0); };
static LRESULT CALLBACK ToolBar_WndProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam) { static BOOL supressRepos=FALSE; MTBINFO * pMTBInfo=(MTBINFO *)GetWindowLongPtr(hwnd, GWLP_USERDATA); switch (msg) { case WM_CREATE: { HANDLE hFrame=NULL; CLISTFrame Frame={0}; CREATESTRUCT * lpcs = (CREATESTRUCT *) lParam; //create internal info MTBINFO * pMTBInfo = (MTBINFO *) mir_calloc( sizeof(MTBINFO) ); pMTBInfo->cbSize = sizeof(MTBINFO); SetWindowLongPtr( hwnd, GWLP_USERDATA, (LONG_PTR) pMTBInfo ); pMTBInfo->nButtonWidth = ModernGetSettingByte(NULL, "ModernToolBar", "option_Bar0_BtnWidth", SETTINGS_BARBTNWIDTH_DEFAULT); pMTBInfo->nButtonHeight= ModernGetSettingByte(NULL, "ModernToolBar", "option_Bar0_BtnHeight", SETTINGS_BARBTNHEIGHT_DEFAULT); pMTBInfo->nButtonSpace = ModernGetSettingByte(NULL, "ModernToolBar", "option_Bar0_BtnSpace", SETTINGS_BARBTNSPACE_DEFAULT); pMTBInfo->fAutoSize = ModernGetSettingByte(NULL, "ModernToolBar", "option_Bar0_Autosize", SETTINGS_BARAUTOSIZE_DEFAULT); pMTBInfo->fSingleLine = ModernGetSettingByte(NULL, "ModernToolBar", "option_Bar0_Multiline", SETTINGS_BARMULTILINE_DEFAULT)==0; //register self frame Frame.cbSize=sizeof(CLISTFrame); Frame.hWnd=hwnd; Frame.align=alTop; Frame.hIcon=LoadSkinnedIcon (SKINICON_OTHER_MIRANDA); Frame.Flags=(ModernGetSettingByte(NULL,"CLUI","ShowButtonBar",SETTINGS_SHOWBUTTONBAR_DEFAULT)?F_VISIBLE:0)|F_LOCKED|F_NOBORDER|F_NO_SUBCONTAINER; Frame.height=ModernGetSettingDword(NULL, "ModernToolBar", "option_Bar0_OldHeight", pMTBInfo->nButtonHeight); pMTBInfo->wLastHeight=Frame.height; pMTBInfo->nLineCount = 1; pMTBInfo->pButtonList=li.List_Create(0,1); Frame.name=(char*) lpcs->lpCreateParams; hFrame=(HANDLE)CallService(MS_CLIST_FRAMES_ADDFRAME,(WPARAM)&Frame,(LPARAM)0); CallService(MS_SKINENG_REGISTERPAINTSUB,(WPARAM)Frame.hWnd,(LPARAM)ToolBar_LayeredPaintProc); //$$$$$ register sub for frame pMTBInfo->hFrame = hFrame; pMTBInfo->hWnd = hwnd; //add self to window list WindowList_Add(tbdat.hToolBarWindowList, hwnd, NULL); pMTBInfo->mtbXPTheme=xpt_AddThemeHandle(hwnd,L"TOOLBAR"); ToolBar_DefaultButtonRegistration(); //SetTimer(hwnd,123,1000,NULL); return 0; } case WM_TIMER: { //KillTimer(hwnd,123); //ToolBar_DefaultButtonRegistration(); return 0; } case WM_SHOWWINDOW: { { int res; int ID; ID= Sync( FindFrameID, hwnd ); if (ID) { res=CallService(MS_CLIST_FRAMES_GETFRAMEOPTIONS, MAKEWPARAM(FO_FLAGS,ID),0); if (res>=0) ModernWriteSettingByte(0,"CLUI","ShowButtonBar",(BYTE)(wParam/*(res&F_VISIBLE)*/?1:0)); if (wParam) SendMessage(hwnd, MTBM_REPOSBUTTONS, 0, 0); } } break; } case MTBM_UPDATEFRAMEVISIBILITY: { BOOL vis=(BOOL)wParam; INT_PTR frameopt; BOOL curvis=IsWindowVisible(hwnd); BOOL bResize=FALSE; int frameID=Sync( FindFrameID, hwnd ); int Height; pMTBInfo->nButtonWidth = ModernGetSettingByte(NULL, "ModernToolBar", "option_Bar0_BtnWidth", SETTINGS_BARBTNWIDTH_DEFAULT); pMTBInfo->nButtonHeight= ModernGetSettingByte(NULL, "ModernToolBar", "option_Bar0_BtnHeight", SETTINGS_BARBTNHEIGHT_DEFAULT); pMTBInfo->nButtonSpace = ModernGetSettingByte(NULL, "ModernToolBar", "option_Bar0_BtnSpace", SETTINGS_BARBTNSPACE_DEFAULT); pMTBInfo->fAutoSize = ModernGetSettingByte(NULL, "ModernToolBar", "option_Bar0_Autosize", SETTINGS_BARAUTOSIZE_DEFAULT); pMTBInfo->fSingleLine = ModernGetSettingByte(NULL, "ModernToolBar", "option_Bar0_Multiline", SETTINGS_BARMULTILINE_DEFAULT)==0; Height=sttReposButtons( pMTBInfo ); if (pMTBInfo->fAutoSize) { frameopt=CallService(MS_CLIST_FRAMES_GETFRAMEOPTIONS, MAKEWPARAM(FO_HEIGHT,frameID),0); if (Height!=frameopt) { frameopt=Height; CallService(MS_CLIST_FRAMES_SETFRAMEOPTIONS,MAKEWPARAM(FO_HEIGHT,frameID),frameopt); bResize=TRUE; } } if ((curvis!=vis || bResize) && vis !=-1) { frameopt=CallService(MS_CLIST_FRAMES_GETFRAMEOPTIONS, MAKEWPARAM(FO_FLAGS,frameID),0); frameopt&=~F_VISIBLE; frameopt|=vis ? F_VISIBLE : 0; CallService(MS_CLIST_FRAMES_SETFRAMEOPTIONS,MAKEWPARAM(FO_FLAGS,frameID),frameopt); } break; } case WM_DESTROY: { xpt_FreeThemeForWindow(hwnd); WindowList_Remove( tbdat.hToolBarWindowList, hwnd ); SendMessage(hwnd, MTBM_REMOVE_ALL_BUTTONS, 0, 0 ); li.List_Destroy( pMTBInfo->pButtonList ); mir_free( pMTBInfo->pButtonList ); SetWindowLongPtr( hwnd, GWLP_USERDATA, 0 ); mir_free( pMTBInfo ); return 0; } case WM_COMMAND: { if (HIWORD(wParam)==BN_CLICKED && lParam!=0 ) sttButtonPressed(pMTBInfo, (HWND) lParam ); return TRUE; } case MTBM_ADDBUTTON: { //Adding button MTB_BUTTONINFO * mtbi=(MTB_BUTTONINFO * )wParam; HWND hwndButton = NULL; if (!(mtbi->bSeparator)) hwndButton= CreateWindow(SKINBUTTONCLASS /*MIRANDABUTTONCLASS*/, _T(""), BS_PUSHBUTTON | WS_VISIBLE | WS_CHILD | WS_TABSTOP , 0, 0, pMTBInfo->nButtonWidth, pMTBInfo->nButtonHeight, hwnd, (HMENU) NULL, g_hInst, NULL); mtbi->hWindow=hwndButton; mtbi->hwndToolBar=hwnd; li.List_Insert(pMTBInfo->pButtonList, mtbi, pMTBInfo->pButtonList->realCount); //just insert pointer. such object are managed in global tbbutton list if (hwndButton) { char * buttonId=(char *)_malloca(sizeof("ToolBar.")+strlen(mtbi->szButtonID)+2); strcpy(buttonId,"ToolBar."); strcat(buttonId,mtbi->szButtonID); SendMessage(hwndButton, BUTTONSETID, 0 ,(LPARAM) buttonId ); if (pMTBInfo->bFlatButtons) SendMessage(hwndButton, BUTTONSETASFLATBTN, 0, 1 ); SetWindowLongPtr(hwndButton,GWLP_USERDATA,(LONG_PTR)mtbi); SendMessage(hwndButton, MBM_UPDATETRANSPARENTFLAG, 0, 2); } return (LRESULT)hwndButton; } case MTBM_REMOVE_ALL_BUTTONS: { int i; for (i=0; i<pMTBInfo->pButtonList->realCount; i++ ) { MTB_BUTTONINFO * mtbi=(MTB_BUTTONINFO *)pMTBInfo->pButtonList->items[i]; if (mtbi->hWindow && mtbi->hwndToolBar==hwnd) { DestroyWindow(mtbi->hWindow); mtbi->hWindow = NULL; mtbi->hwndToolBar = NULL; } } li.List_Destroy( pMTBInfo->pButtonList ); mir_free( pMTBInfo->pButtonList ); pMTBInfo->pButtonList=li.List_Create(0,1); break; } case WM_SIZE: if (pMTBInfo->wLastHeight!=HIWORD(lParam)) { ModernWriteSettingDword(NULL, "ModernToolBar", "option_Bar0_OldHeight", HIWORD(lParam)); pMTBInfo->wLastHeight=HIWORD(lParam); } if (supressRepos) { supressRepos=FALSE; break; } //fall through case MTBM_REPOSBUTTONS: { if (pMTBInfo && pMTBInfo->hWnd == hwnd) { int Height=sttReposButtons(pMTBInfo); if ( pMTBInfo->fAutoSize) { RECT rcClient; GetClientRect(pMTBInfo->hWnd, &rcClient); if (rcClient.bottom-rcClient.top != Height && Height) { supressRepos=TRUE; PostMessage(pMTBInfo->hWnd,MTBM_UPDATEFRAMEVISIBILITY, -1, 0); } } return 0; } break; } case WM_ERASEBKGND: if (g_CluiData.fDisableSkinEngine) return sttDrawToolBarBackground(hwnd, (HDC)wParam, NULL, pMTBInfo); else return 0; case WM_NCPAINT: case WM_PAINT: { BOOL ret=FALSE; PAINTSTRUCT ps; BOOL bFloat = (GetParent(hwnd)!=pcli->hwndContactList); if (g_CluiData.fDisableSkinEngine|| !g_CluiData.fLayered || bFloat ) { BeginPaint(hwnd,&ps); if ((!g_CluiData.fLayered || bFloat) && !g_CluiData.fDisableSkinEngine) { sttDrawNonLayeredSkinedBar(hwnd, ps.hdc); } else ret=sttDrawToolBarBackground(hwnd, ps.hdc, &ps.rcPaint, pMTBInfo); EndPaint(hwnd,&ps); } return DefWindowProc(hwnd, msg, wParam, lParam); } case WM_NOTIFY: { if (((LPNMHDR) lParam)->code==BUTTONNEEDREDRAW) pcli->pfnInvalidateRect(hwnd, NULL, FALSE); return 0; } case MTBM_LAYEREDPAINT: { int i; RECT MyRect={0}; HDC hDC=(HDC)wParam; GetWindowRect(hwnd,&MyRect); { RECT rcClient; GetClientRect(hwnd, &rcClient); SkinDrawGlyph(hDC,&rcClient,&rcClient,"Bar,ID=ToolBar,Part=Background"); } for (i=0; i<pMTBInfo->pButtonList->realCount; i++) { RECT childRect; POINT Offset; MTB_BUTTONINFO * mtbi=(MTB_BUTTONINFO *)pMTBInfo->pButtonList->items[i]; GetWindowRect(mtbi->hWindow,&childRect); Offset.x=childRect.left-MyRect.left;; Offset.y=childRect.top-MyRect.top; SendMessage(mtbi->hWindow, BUTTONDRAWINPARENT, (WPARAM)hDC,(LPARAM)&Offset); } return 0; } case MTBM_SETBUTTONSTATEBYID: case MTBM_SETBUTTONSTATE: { char * hButtonId=(msg==MTBM_SETBUTTONSTATEBYID) ? (char *) wParam : NULL; void * hButton=(msg==MTBM_SETBUTTONSTATE) ? (void *)wParam : NULL; MTB_BUTTONINFO *mtbi=NULL; int i; for (i=0; i<pMTBInfo->pButtonList->realCount; i++) { mtbi=(MTB_BUTTONINFO*)pMTBInfo->pButtonList->items[i]; if ((hButtonId && !strcmp(mtbi->szButtonID, hButtonId)) || (hButton == mtbi)) { mtbi->bPushButton=(BOOL)lParam; sttUpdateButtonState(mtbi); pcli->pfnInvalidateRect(hwnd, NULL, FALSE); break; } } break; } case MTBM_GETBUTTONSTATEBYID: case MTBM_GETBUTTONSTATE: { int * res= (int*)lParam; if (res==NULL) break; char * hButtonId=(msg==MTBM_GETBUTTONSTATEBYID) ? (char *) wParam : NULL; void * hButton=(msg==MTBM_GETBUTTONSTATE) ? (void *)wParam : NULL; MTB_BUTTONINFO *mtbi=NULL; int i; for (i=0; i<pMTBInfo->pButtonList->realCount; i++) { mtbi=(MTB_BUTTONINFO*)pMTBInfo->pButtonList->items[i]; if ((hButtonId && !strcmp(mtbi->szButtonID, hButtonId)) || (hButton == mtbi)) { *res=0; *res |= mtbi->bPushButton ? TBST_PUSHED : TBST_RELEASED; break; } } break; } case MTBM_REMOVEBUTTON: { MTB_BUTTONINFO *mtbi=NULL; for (int i=0; i<pMTBInfo->pButtonList->realCount; i++) { mtbi=(MTB_BUTTONINFO*)pMTBInfo->pButtonList->items[i]; if (mtbi==(MTB_BUTTONINFO*)wParam) { li.List_Remove(pMTBInfo->pButtonList,i); for (int j=0; j<tbdat.listOfButtons->realCount; j++) if (mtbi==(MTB_BUTTONINFO*)tbdat.listOfButtons->items[j]) { li.List_Remove(tbdat.listOfButtons,j); break; } li.List_RemovePtr(tbdat.listOfButtons,mtbi); delete_MTB_BUTTONINFO((void*)mtbi); mtbi=NULL; pcli->pfnInvalidateRect(hwnd, NULL, FALSE); break; } } break; } default : return DefWindowProc(hwnd, msg, wParam, lParam); } return TRUE; }
static LRESULT CALLBACK ToolBar_OptDlgProc(HWND hwndDlg,UINT msg,WPARAM wParam,LPARAM lParam) { static HIMAGELIST himlButtonIcons=NULL; static BOOL dragging=FALSE; static HANDLE hDragItem=NULL; switch (msg) { case WM_DESTROY: ImageList_Destroy(himlButtonIcons); break; case WM_INITDIALOG: { HWND hTree=GetDlgItem(hwndDlg,IDC_BTNORDER); TranslateDialogDefault(hwndDlg); SetWindowLong(hTree,GWL_STYLE,GetWindowLong(hTree,GWL_STYLE)|TVS_NOHSCROLL); { himlButtonIcons=ImageList_Create(GetSystemMetrics(SM_CXSMICON),GetSystemMetrics(SM_CYSMICON),ILC_COLOR32|ILC_MASK,2,2); TreeView_SetImageList(hTree,himlButtonIcons,TVSIL_NORMAL); } TreeView_DeleteAllItems(hTree); tblock; qsort(tbdat.listOfButtons->items,tbdat.listOfButtons->realCount,sizeof(MTB_BUTTONINFO *),sttSortButtons); { int i=0; for (i=0; i<tbdat.listOfButtons->realCount; i++) { TVINSERTSTRUCT tvis={0}; HTREEITEM hti; MTB_BUTTONINFO * mtbi = (MTB_BUTTONINFO*) tbdat.listOfButtons->items[i]; TCHAR * szTempName=mir_a2t(mtbi->szButtonName); HICON hIcon = (HICON)CallService(MS_SKIN2_GETICONBYHANDLE, 0, (LPARAM)mtbi->hPrimaryIconHandle); int index = ImageList_AddIcon(himlButtonIcons, hIcon); CallService(MS_SKIN2_RELEASEICON, (WPARAM)hIcon, 0); tvis.hParent=NULL; tvis.hInsertAfter=TVI_LAST; tvis.item.mask=TVIF_PARAM|TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE|TVIF_STATE; tvis.item.lParam=(LPARAM)(mtbi); tvis.item.pszText=TranslateTS(szTempName); tvis.item.iImage=tvis.item.iSelectedImage=index; hti=TreeView_InsertItem(hTree,&tvis); TreeView_SetCheckState(hTree, hti, mtbi->bVisible ); mir_free(szTempName); } } tbunlock; SendDlgItemMessage(hwndDlg,IDC_SPIN_W,UDM_SETRANGE,0,MAKELONG(50,10)); SendDlgItemMessage(hwndDlg,IDC_SPIN_W,UDM_SETPOS,0,MAKELONG(ModernGetSettingByte(NULL, "ModernToolBar", "option_Bar0_BtnWidth", SETTINGS_BARBTNWIDTH_DEFAULT),0)); SendDlgItemMessage(hwndDlg,IDC_SPIN_H,UDM_SETRANGE,0,MAKELONG(50,10)); SendDlgItemMessage(hwndDlg,IDC_SPIN_H,UDM_SETPOS,0,MAKELONG(ModernGetSettingByte(NULL, "ModernToolBar", "option_Bar0_BtnHeight", SETTINGS_BARBTNHEIGHT_DEFAULT),0)); SendDlgItemMessage(hwndDlg,IDC_SPIN_S,UDM_SETRANGE,0,MAKELONG(20,0)); SendDlgItemMessage(hwndDlg,IDC_SPIN_S,UDM_SETPOS,0,MAKELONG(ModernGetSettingByte(NULL, "ModernToolBar", "option_Bar0_BtnSpace", SETTINGS_BARBTNSPACE_DEFAULT),0)); CheckDlgButton(hwndDlg, IDC_CHECK_AUTOSIZE, ModernGetSettingByte(NULL, "ModernToolBar", "option_Bar0_Autosize", SETTINGS_BARAUTOSIZE_DEFAULT) ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(hwndDlg, IDC_CHECK_MULTILINE, ModernGetSettingByte(NULL,"ModernToolBar", "option_Bar0_Multiline", SETTINGS_BARMULTILINE_DEFAULT) ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(hwndDlg, IDC_TBSHOW, ModernGetSettingByte(NULL,"CLUI","ShowButtonBar",SETTINGS_SHOWBUTTONBAR_DEFAULT) ? BST_CHECKED : BST_UNCHECKED); { int i; BOOL en=IsDlgButtonChecked(hwndDlg,IDC_TBSHOW); for (i=0; i<SIZEOF(ControlIDS); i++) EnableWindow(GetDlgItem(hwndDlg,ControlIDS[i]), en); } return TRUE; } case WM_NOTIFY: { switch(((LPNMHDR)lParam)->idFrom) { case 0: { switch (((LPNMHDR)lParam)->code) { case PSN_APPLY: { int order=100; HWND hTree=GetDlgItem(hwndDlg,IDC_BTNORDER); int count=TreeView_GetCount(hTree); HTREEITEM hItem; sttDeleteOrderSettings(); hItem=TreeView_GetRoot(hTree); do { TVITEM tvi={0}; MTB_BUTTONINFO *mtbi; tvi.mask=TBIF_LPARAM|TVIF_HANDLE; tvi.hItem=hItem; TreeView_GetItem(hTree, &tvi); mtbi=(MTB_BUTTONINFO *)tvi.lParam; if (mtbi) { char szTempSetting[200]; mir_snprintf(szTempSetting, SIZEOF(szTempSetting), "order_%s", mtbi->szButtonID); ModernWriteSettingDword(NULL, "ModernToolBar", szTempSetting, order); order+=10; mir_snprintf(szTempSetting, SIZEOF(szTempSetting), "visible_%s", mtbi->szButtonID); ModernWriteSettingByte(NULL, "ModernToolBar", szTempSetting, TreeView_GetCheckState(hTree,hItem)); } hItem=TreeView_GetNextSibling(hTree,hItem); } while (hItem!=NULL); ModernWriteSettingByte(NULL,"CLUI","ShowButtonBar",(BYTE)IsDlgButtonChecked(hwndDlg,IDC_TBSHOW)); ModernWriteSettingByte(NULL,"ModernToolBar","option_Bar0_BtnWidth", (BYTE)SendDlgItemMessage(hwndDlg,IDC_SPIN_W,UDM_GETPOS,0,0)); ModernWriteSettingByte(NULL,"ModernToolBar","option_Bar0_BtnHeight",(BYTE)SendDlgItemMessage(hwndDlg,IDC_SPIN_H,UDM_GETPOS,0,0)); ModernWriteSettingByte(NULL,"ModernToolBar","option_Bar0_BtnSpace", (BYTE)SendDlgItemMessage(hwndDlg,IDC_SPIN_S,UDM_GETPOS,0,0)); ModernWriteSettingByte(NULL, "ModernToolBar", "option_Bar0_Autosize", (BYTE)IsDlgButtonChecked(hwndDlg,IDC_CHECK_AUTOSIZE)); ModernWriteSettingByte(NULL,"ModernToolBar", "option_Bar0_Multiline", (BYTE)IsDlgButtonChecked(hwndDlg,IDC_CHECK_MULTILINE)); sttReloadButtons(); return TRUE; } } break; } case IDC_BTNORDER: { switch (((LPNMHDR)lParam)->code) { case TVN_BEGINDRAGA: case TVN_BEGINDRAGW: SetCapture(hwndDlg); dragging=TRUE; hDragItem=((LPNMTREEVIEWA)lParam)->itemNew.hItem; TreeView_SelectItem(GetDlgItem(hwndDlg,IDC_BTNORDER),hDragItem); break; case NM_CLICK: { TVHITTESTINFO hti; hti.pt.x=(short)LOWORD(GetMessagePos()); hti.pt.y=(short)HIWORD(GetMessagePos()); ScreenToClient(((LPNMHDR)lParam)->hwndFrom,&hti.pt); if(TreeView_HitTest(((LPNMHDR)lParam)->hwndFrom,&hti)) if(hti.flags&TVHT_ONITEMSTATEICON) SendMessage(GetParent(hwndDlg), PSM_CHANGED, (WPARAM)hwndDlg, 0); }; } break; } } break; } case WM_MOUSEMOVE: { if(!dragging) break; { TVHITTESTINFO hti; hti.pt.x=(short)LOWORD(lParam); hti.pt.y=(short)HIWORD(lParam); ClientToScreen(hwndDlg,&hti.pt); ScreenToClient(GetDlgItem(hwndDlg,IDC_BTNORDER),&hti.pt); TreeView_HitTest(GetDlgItem(hwndDlg,IDC_BTNORDER),&hti); if(hti.flags&(TVHT_ONITEM|TVHT_ONITEMRIGHT)) { HTREEITEM it=hti.hItem; hti.pt.y-=TreeView_GetItemHeight(GetDlgItem(hwndDlg,IDC_BTNORDER))/2; TreeView_HitTest(GetDlgItem(hwndDlg,IDC_BTNORDER),&hti); if (!(hti.flags&TVHT_ABOVE)) TreeView_SetInsertMark(GetDlgItem(hwndDlg,IDC_BTNORDER),hti.hItem,1); else TreeView_SetInsertMark(GetDlgItem(hwndDlg,IDC_BTNORDER),it,0); } else { if(hti.flags&TVHT_ABOVE) SendDlgItemMessage(hwndDlg,IDC_BTNORDER,WM_VSCROLL,MAKEWPARAM(SB_LINEUP,0),0); if(hti.flags&TVHT_BELOW) SendDlgItemMessage(hwndDlg,IDC_BTNORDER,WM_VSCROLL,MAKEWPARAM(SB_LINEDOWN,0),0); TreeView_SetInsertMark(GetDlgItem(hwndDlg,IDC_BTNORDER),NULL,0); } } } break; case WM_LBUTTONUP: { if(!dragging) break; TreeView_SetInsertMark(GetDlgItem(hwndDlg,IDC_BTNORDER),NULL,0); dragging=0; ReleaseCapture(); { TVHITTESTINFO hti; TVITEM tvi; hti.pt.x=(short)LOWORD(lParam); hti.pt.y=(short)HIWORD(lParam); ClientToScreen(hwndDlg,&hti.pt); ScreenToClient(GetDlgItem(hwndDlg,IDC_BTNORDER),&hti.pt); hti.pt.y-=TreeView_GetItemHeight(GetDlgItem(hwndDlg,IDC_BTNORDER))/2; TreeView_HitTest(GetDlgItem(hwndDlg,IDC_BTNORDER),&hti); if(hDragItem==hti.hItem) break; if (hti.flags&TVHT_ABOVE) hti.hItem=TVI_FIRST; tvi.mask=TVIF_HANDLE|TVIF_PARAM; tvi.hItem=(HTREEITEM)hDragItem; TreeView_GetItem(GetDlgItem(hwndDlg,IDC_BTNORDER),&tvi); if(hti.flags&(TVHT_ONITEM|TVHT_ONITEMRIGHT)||(hti.hItem==TVI_FIRST)) { TVINSERTSTRUCT tvis; TCHAR name[128]; tvis.item.mask=TVIF_HANDLE|TVIF_PARAM|TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE|TVIF_STATE; tvis.item.stateMask=0xFFFFFFFF; tvis.item.pszText=name; tvis.item.cchTextMax=sizeof(name); tvis.item.hItem=(HTREEITEM)hDragItem; //tvis.item.iImage=tvis.item.iSelectedImage=((MTB_BUTTONINFO *)tvi.lParam)->bVisible; TreeView_GetItem(GetDlgItem(hwndDlg,IDC_BTNORDER),&tvis.item); TreeView_DeleteItem(GetDlgItem(hwndDlg,IDC_BTNORDER),hDragItem); tvis.hParent=NULL; tvis.hInsertAfter=hti.hItem; TreeView_SelectItem(GetDlgItem(hwndDlg,IDC_BTNORDER),TreeView_InsertItem(GetDlgItem(hwndDlg,IDC_BTNORDER),&tvis)); SendMessage((GetParent(hwndDlg)), PSM_CHANGED, (WPARAM)hwndDlg, 0); } } } break; case WM_COMMAND: if (LOWORD(wParam)==IDC_TBSHOW) { { int i; BOOL en=IsDlgButtonChecked(hwndDlg,IDC_TBSHOW); for (i=0; i<SIZEOF(ControlIDS); i++) EnableWindow(GetDlgItem(hwndDlg,ControlIDS[i]), en); } SendMessage(GetParent(hwndDlg), PSM_CHANGED, (WPARAM)hwndDlg, 0); } else if ( (LOWORD(wParam)==IDC_TEXT_W || LOWORD(wParam)==IDC_TEXT_H || LOWORD(wParam)==IDC_TEXT_S ) && HIWORD(wParam) != EN_CHANGE || (HWND)lParam != GetFocus()) return 0; // dont make apply enabled during buddy set crap SendMessage(GetParent(hwndDlg), PSM_CHANGED, (WPARAM)hwndDlg, 0); break; } return FALSE; }
int cliShowHide(WPARAM wParam,LPARAM lParam) { BOOL bShow = FALSE; int iVisibleState = GetWindowVisibleState(pcli->hwndContactList,0,0); int method; method=ModernGetSettingByte(NULL, "ModernData", "HideBehind", SETTING_HIDEBEHIND_DEFAULT);; //(0-none, 1-leftedge, 2-rightedge); if (method) { if (ModernGetSettingByte(NULL, "ModernData", "BehindEdge", SETTING_BEHINDEDGE_DEFAULT)==0 && lParam!=1) { //hide CLUI_HideBehindEdge(); } else { CLUI_ShowFromBehindEdge(); } bShow=TRUE; iVisibleState=GWVS_HIDDEN; } if (!method && ModernGetSettingByte(NULL, "ModernData", "BehindEdge", SETTING_BEHINDEDGE_DEFAULT)>0) { g_CluiData.bBehindEdgeSettings=ModernGetSettingByte(NULL, "ModernData", "BehindEdge", SETTING_BEHINDEDGE_DEFAULT); CLUI_ShowFromBehindEdge(); g_CluiData.bBehindEdgeSettings=0; g_CluiData.nBehindEdgeState=0; ModernDeleteSetting(NULL, "ModernData", "BehindEdge"); } //bShow is FALSE when we enter the switch if no hide behind edge. switch (iVisibleState) { case GWVS_PARTIALLY_COVERED: bShow = TRUE; break; case GWVS_COVERED: //Fall through (and we're already falling) bShow = TRUE; break; case GWVS_HIDDEN: bShow = TRUE; break; case GWVS_VISIBLE: //This is not needed, but goes for readability. bShow = FALSE; break; case -1: //We can't get here, both pcli->hwndContactList and iStepX and iStepY are right. return 0; } if( (bShow == TRUE || lParam == 1) ) { Sync( CLUIFrames_ActivateSubContainers, TRUE ); CLUI_ShowWindowMod(pcli->hwndContactList, SW_RESTORE); if (!ModernGetSettingByte(NULL,"CList","OnDesktop",SETTING_ONDESKTOP_DEFAULT)) { Sync(CLUIFrames_OnShowHide, pcli->hwndContactList,1); //TO BE PROXIED SetWindowPos(pcli->hwndContactList, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE |SWP_NOACTIVATE); g_bCalledFromShowHide=1; if (!ModernGetSettingByte(NULL,"CList","OnTop",SETTING_ONTOP_DEFAULT)) SetWindowPos(pcli->hwndContactList, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE); g_bCalledFromShowHide=0; } else { SetWindowPos(pcli->hwndContactList, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE); Sync(CLUIFrames_OnShowHide, pcli->hwndContactList,1); SetForegroundWindow(pcli->hwndContactList); } ModernWriteSettingByte(NULL,"CList","State",SETTING_STATE_NORMAL); RECT rcWindow; GetWindowRect(pcli->hwndContactList,&rcWindow); if (Utils_AssertInsideScreen(&rcWindow) == 1) { MoveWindow(pcli->hwndContactList, rcWindow.left, rcWindow.top, rcWindow.right - rcWindow.left, rcWindow.bottom - rcWindow.top, TRUE); } //if (DBGetContactSettingByte(NULL,"CList","OnDesktop",SETTING_ONDESKTOP_DEFAULT)) // SetWindowPos(pcli->hwndContactList, HWND_BOTTOM, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE); } else { //It needs to be hidden if (GetWindowLong(pcli->hwndContactList, GWL_EXSTYLE) & WS_EX_TOOLWINDOW) { CListMod_HideWindow(pcli->hwndContactList, SW_HIDE); ModernWriteSettingByte(NULL,"CList","State",SETTING_STATE_HIDDEN); } else { if (ModernGetSettingByte(NULL,"CList","Min2Tray",SETTING_MIN2TRAY_DEFAULT)) { CLUI_ShowWindowMod(pcli->hwndContactList, SW_HIDE); ModernWriteSettingByte(NULL,"CList","State",SETTING_STATE_HIDDEN); } else { CLUI_ShowWindowMod(pcli->hwndContactList, SW_MINIMIZE); ModernWriteSettingByte(NULL,"CList","State",SETTING_STATE_MINIMIZED); } } if (MySetProcessWorkingSetSize != NULL) MySetProcessWorkingSetSize(GetCurrentProcess(),-1,-1); } return 0; }
int Docking_ProcessWindowMessage(WPARAM wParam,LPARAM lParam) { APPBARDATA abd; static int draggingTitle; MSG *msg=(MSG*)wParam; if(msg->message==WM_DESTROY) ModernWriteSettingByte(NULL,"CList","Docked",(BYTE)g_CluiData.fDocked); if(!g_CluiData.fDocked && msg->message!=WM_CREATE && msg->message!=WM_MOVING && msg->message!=WM_CREATEDOCKED && msg->message != WM_MOVE && msg->message != WM_SIZE) return 0; switch(msg->message) { case WM_CREATE: //if(GetSystemMetrics(SM_CMONITORS)>1) return 0; if(ModernGetSettingByte(NULL,"CList","Docked",0) && ModernGetSettingByte(NULL,"CLUI","DockToSides",SETTING_DOCKTOSIDES_DEFAULT)) { PostMessage(msg->hwnd,WM_CREATEDOCKED,0,0); } draggingTitle=0; return 0; case WM_CREATEDOCKED: //we need to post a message just after creation to let main message function do some work g_CluiData.fDocked=(BOOL)ModernGetSettingByte(NULL,"CList","Docked",0); if(IsWindowVisible(msg->hwnd) && !IsIconic(msg->hwnd)) { RECT rc, rcMonitor; ZeroMemory(&abd,sizeof(abd)); abd.cbSize=sizeof(abd); abd.hWnd=msg->hwnd; abd.lParam=0; abd.uCallbackMessage=WM_DOCKCALLBACK; SHAppBarMessage(ABM_NEW,&abd); GetWindowRect(msg->hwnd,&rc); Docking_GetMonitorRectFromWindow(msg->hwnd,&rcMonitor); Docking_AdjustPosition(msg->hwnd,&rcMonitor,&rc); MoveWindow(msg->hwnd,rc.left,rc.top,rc.right-rc.left,rc.bottom-rc.top,TRUE); g_CluiData.mutexPreventDockMoving=0; Sync(CLUIFrames_OnMoving,msg->hwnd,&rc); g_CluiData.mutexPreventDockMoving=1; ModernSkinButton_ReposButtons( msg->hwnd, SBRF_DO_NOT_DRAW, NULL ); } break; case WM_CAPTURECHANGED: ModernSkinButton_ReposButtons(msg->hwnd, SBRF_DO_NOT_DRAW,NULL); return 0; case WM_ACTIVATE: ZeroMemory(&abd,sizeof(abd)); abd.cbSize=sizeof(abd); abd.hWnd=msg->hwnd; SHAppBarMessage(ABM_ACTIVATE,&abd); return 0; case WM_SIZE: ModernSkinButton_ReposButtons( msg->hwnd, SBRF_DO_REDRAW_ALL, NULL ); return 0; case WM_WINDOWPOSCHANGED: { if (g_CluiData.fDocked) ModernSkinButton_ReposButtons( msg->hwnd,SBRF_DO_NOT_DRAW, NULL ); return 0; ZeroMemory(&abd,sizeof(abd)); abd.cbSize=sizeof(abd); abd.hWnd=msg->hwnd; SHAppBarMessage(ABM_WINDOWPOSCHANGED,&abd); ModernSkinButton_ReposButtons( msg->hwnd, SBRF_DO_NOT_DRAW, NULL ); return 0; } case WM_MOVING: { RECT rcMonitor; RECT rcWindow; RECT *rc; int dx=0; POINT ptCursor; if (g_CluiData.fDocked) return 0; // stop early BOOL bControlled = (BOOL)(GetAsyncKeyState(VK_CONTROL)&0x8000); // GetMessagePos() is no good, position is always unsigned GetCursorPos(&ptCursor); GetWindowRect(msg->hwnd,&rcWindow); dock_drag_dx=rcWindow.left-ptCursor.x; dock_drag_dy=rcWindow.top-ptCursor.y; Docking_GetMonitorRectFromPoint(ptCursor,&rcMonitor); if(((ptCursor.x<rcMonitor.left+EDGESENSITIVITY) || (ptCursor.x>=rcMonitor.right-EDGESENSITIVITY)) && ModernGetSettingByte(NULL,"CLUI","DockToSides",SETTING_DOCKTOSIDES_DEFAULT)) { ZeroMemory(&abd,sizeof(abd)); abd.cbSize=sizeof(abd); abd.hWnd=msg->hwnd; abd.lParam=0; abd.uCallbackMessage=WM_DOCKCALLBACK; SHAppBarMessage(ABM_NEW,&abd); if(ptCursor.x<rcMonitor.left+EDGESENSITIVITY) g_CluiData.fDocked=DOCKED_LEFT; else g_CluiData.fDocked=DOCKED_RIGHT; // TempDock=1; GetWindowRect(msg->hwnd,(LPRECT)msg->lParam); rc=(RECT*)msg->lParam; if (g_CluiData.fDocked==DOCKED_RIGHT) dx=(rc->right>rcMonitor.right)?rc->right-rcMonitor.right:0; else dx=(rc->left<rcMonitor.left)?rc->left-rcMonitor.left:0; OffsetRect(rc,-dx,0); Docking_AdjustPosition(msg->hwnd,(LPRECT)&rcMonitor,(LPRECT)msg->lParam); SendMessage(msg->hwnd,WM_SIZE,0,0); g_CluiData.mutexPreventDockMoving=0; Sync(CLUIFrames_OnMoving,msg->hwnd,(LPRECT)msg->lParam); g_CluiData.mutexPreventDockMoving=1; mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0); ModernWriteSettingByte(NULL,"CList","Docked",(BYTE)g_CluiData.fDocked); ModernSkinButton_ReposButtons( msg->hwnd, SBRF_DO_NOT_DRAW, NULL ); return TRUE; } return 0; } case WM_EXITSIZEMOVE: { RECT rcMonitor; RECT rcWindow; if (TempDock) TempDock=0; GetWindowRect(msg->hwnd,&rcWindow); Docking_GetMonitorRectFromWindow(msg->hwnd,&rcMonitor); Docking_AdjustPosition(msg->hwnd,&rcMonitor,&rcWindow); *((LRESULT*)lParam)=TRUE; g_CluiData.mutexPreventDockMoving=0; SetWindowPos(msg->hwnd,0,rcWindow.left,rcWindow.top,0,0,SWP_NOSIZE|SWP_NOZORDER|SWP_NOREDRAW|SWP_NOSENDCHANGING); Sync(CLUIFrames_OnMoving,msg->hwnd,&rcWindow); ModernSkinButton_ReposButtons( msg->hwnd, SBRF_DO_NOT_DRAW, NULL );//-=-=-= g_CluiData.mutexPreventDockMoving=1; return 1; } case WM_MOVE: { if(g_CluiData.fDocked && 0) { RECT rc, rcMonitor; Docking_GetMonitorRectFromWindow(msg->hwnd,&rcMonitor); GetWindowRect(msg->hwnd,&rc); Docking_AdjustPosition(msg->hwnd,&rcMonitor,&rc); MoveWindow(msg->hwnd,rc.left,rc.top,rc.right-rc.left,rc.bottom-rc.top,TRUE); Sync(CLUIFrames_OnMoving,msg->hwnd,&rc); ModernSkinButton_ReposButtons(msg->hwnd, SBRF_DO_NOT_DRAW, NULL);//-=-=-= return 1; } ModernSkinButton_ReposButtons(msg->hwnd, SBRF_DO_ALT_DRAW, NULL); return 0; } case WM_SIZING: { /*RECT rcMonitor; Docking_GetMonitorRectFromWindow(msg->hwnd,&rcMonitor); Docking_AdjustPosition(msg->hwnd,&rcMonitor,(LPRECT)msg->lParam); *((LRESULT*)lParam)=TRUE; */ RECT rc; if (g_CluiData.fDocked) ModernSkinButton_ReposButtons(msg->hwnd, SBRF_DO_NOT_DRAW,NULL); return FALSE; rc=*(RECT*)(msg->lParam); g_CluiData.mutexPreventDockMoving=0; Sync(CLUIFrames_OnMoving,msg->hwnd,&rc); //-=-=-= return TRUE; } case WM_SHOWWINDOW: { if(msg->lParam) return 0; BOOL toBeDocked = (BOOL) ModernGetSettingByte(NULL,"CLUI","DockToSides",SETTING_DOCKTOSIDES_DEFAULT); if((msg->wParam && g_CluiData.fDocked<0) || (!msg->wParam && g_CluiData.fDocked>0)) g_CluiData.fDocked=-g_CluiData.fDocked; ZeroMemory(&abd,sizeof(abd)); abd.cbSize=sizeof(abd); abd.hWnd=msg->hwnd; if(msg->wParam) { RECT rc, rcMonitor; Docking_GetMonitorRectFromWindow(msg->hwnd,&rcMonitor); abd.lParam=0; abd.uCallbackMessage=WM_DOCKCALLBACK; SHAppBarMessage(ABM_NEW,&abd); GetWindowRect(msg->hwnd,&rc); Docking_AdjustPosition(msg->hwnd,&rcMonitor,&rc); MoveWindow(msg->hwnd,rc.left,rc.top,rc.right-rc.left,rc.bottom-rc.top,FALSE); Sync(CLUIFrames_OnMoving,msg->hwnd,&rc); ModernSkinButton_ReposButtons(msg->hwnd, SBRF_DO_NOT_DRAW,NULL);//-=-=-= } else { SHAppBarMessage(ABM_REMOVE,&abd); } } return 0; case WM_NCHITTEST: { LONG result; result=DefWindowProc(msg->hwnd,WM_NCHITTEST,msg->wParam,msg->lParam); if(result==HTSIZE || result==HTTOP || result==HTTOPLEFT || result==HTTOPRIGHT || result==HTBOTTOM || result==HTBOTTOMRIGHT || result==HTBOTTOMLEFT) {*((LRESULT*)lParam)=HTCLIENT; return TRUE;} if(g_CluiData.fDocked==DOCKED_LEFT && result==HTLEFT) {*((LRESULT*)lParam)=HTCLIENT; return TRUE;} if(g_CluiData.fDocked==DOCKED_RIGHT && result==HTRIGHT) {*((LRESULT*)lParam)=HTCLIENT; return TRUE;} return 0; } case WM_SYSCOMMAND: if((msg->wParam&0xFFF0)!=SC_MOVE) return 0; SetActiveWindow(msg->hwnd); SetCapture(msg->hwnd); draggingTitle=1; *((LRESULT*)lParam)=0; return TRUE; case WM_MOUSEMOVE: if(!draggingTitle) return 0; { RECT rc; POINT pt; GetClientRect(msg->hwnd,&rc); if(((g_CluiData.fDocked==DOCKED_LEFT || g_CluiData.fDocked==-DOCKED_LEFT) && (short)LOWORD(msg->lParam)>rc.right) || ((g_CluiData.fDocked==DOCKED_RIGHT || g_CluiData.fDocked==-DOCKED_RIGHT) && (short)LOWORD(msg->lParam)<0)) { ReleaseCapture(); draggingTitle=0; ZeroMemory(&abd,sizeof(abd)); abd.cbSize=sizeof(abd); abd.hWnd=msg->hwnd; SHAppBarMessage(ABM_REMOVE,&abd); g_CluiData.fDocked=0; GetCursorPos(&pt); PostMessage(msg->hwnd,WM_NCLBUTTONDOWN,HTCAPTION,MAKELPARAM(pt.x,pt.y)); SetWindowPos(msg->hwnd,0,pt.x-rc.right/2,pt.y-GetSystemMetrics(SM_CYFRAME)-GetSystemMetrics(SM_CYSMCAPTION)/2,ModernGetSettingDword(NULL,"CList","Width",0),ModernGetSettingDword(NULL,"CList","Height",0),SWP_NOZORDER); ModernWriteSettingByte(NULL,"CList","Docked",(BYTE)g_CluiData.fDocked); // ModernSkinButton_ReposButtons(msg->hwnd, SBRF_DO_NOT_DRAW, NULL); } return 1; } case WM_LBUTTONUP: if(draggingTitle) { ReleaseCapture(); draggingTitle=0; } return 0; case WM_DOCKCALLBACK: switch(msg->wParam) { case ABN_WINDOWARRANGE: CLUI_ShowWindowMod(msg->hwnd,msg->lParam?SW_HIDE:SW_SHOW); { RECT rc, rcMonitor; Docking_GetMonitorRectFromWindow(msg->hwnd,&rcMonitor); GetWindowRect(msg->hwnd,&rc); Docking_AdjustPosition(msg->hwnd,&rcMonitor,&rc); Sync(CLUIFrames_OnMoving,msg->hwnd,&rc); //-=-=-= ModernSkinButton_ReposButtons(msg->hwnd, SBRF_DO_NOT_DRAW, NULL); g_CluiData.mutexPreventDockMoving=1; } break; } return TRUE; case WM_DESTROY: if(g_CluiData.fDocked>0) { ZeroMemory(&abd,sizeof(abd)); abd.cbSize=sizeof(abd); abd.hWnd=msg->hwnd; SHAppBarMessage(ABM_REMOVE,&abd); ModernSkinButton_ReposButtons(msg->hwnd, SBRF_DO_NOT_DRAW, NULL); } return 0; } return 0; }