diff options
Diffstat (limited to 'newstatusnotify/indiv_sounds.c')
-rw-r--r-- | newstatusnotify/indiv_sounds.c | 677 |
1 files changed, 0 insertions, 677 deletions
diff --git a/newstatusnotify/indiv_sounds.c b/newstatusnotify/indiv_sounds.c deleted file mode 100644 index 6b549dc..0000000 --- a/newstatusnotify/indiv_sounds.c +++ /dev/null @@ -1,677 +0,0 @@ -/*
-===============================================================================
- NewStatusNotify plugin
-
-This plugin notifies you when a contact changes his/hers status with a PopUp.
-You can customize its look (style of popup, font, text...) and behaviour (the
-position in the screen, the time to live, the action on a mouse click).
-
-File name: "indiv_sounds.c"
-This file contains the code for individual sound support.
-
-Written by: Hrk (Luca Santarelli) (2002-2004), Vasilich (2005-2008)
-
-Miranda IM can be found here:
-http://miranda-im.org/
-
-===============================================================================
-*/
-
-#include "newstatusnotify.h"
-
-#define NICK_COLUMN 140
-#define STATUS_COLUMN 110
-
-extern const char* ModuleName;
-extern aStatus StatusesList[];
-extern void Log(char*);
-extern MYOPTIONS MyOptions;
-extern HINSTANCE hInst;
-
-static void ResetListOptions(HWND);
-
-//Declarations
-BOOL CALLBACK DlgProcSoundOpts(HWND, UINT, WPARAM, LPARAM);
-BOOL CALLBACK DlgProcSoundUIPage(HWND, UINT, WPARAM, LPARAM);
-int UserInfoInitialise(WPARAM, LPARAM);
-static BOOL RemoveSoundFromList(HWND);
-static BOOL SelectSound(HWND);
-static BOOL PreviewSound(HWND, int);
-HIMAGELIST GetStatusIconsImgList(char*);
-
-//NewKindOfOptionsPage
-static void ResetListOptions(HWND);
-HWND hCListClone = NULL;
-
-//Definitions
-static BOOL PreviewSound(HWND hList, int status)
- {
- int iSel = ListView_GetSelectionMark(hList);
- if ( iSel > -1 )
- {
- TCHAR str[MAX_PATH] = { 0 };
- //Let's read the file name:
- ListView_GetItemText(hList, ListView_GetNextItem(hList, -1, LVNI_SELECTED), 1, str, sizeof(str));
- //If the string is "(default sound)", we want to hear the default sound indeed ;-)
- if (lstrcmp(str, TranslateT("(default sound)")) == 0)
- {
- if (status==1)
- SkinPlaySound("UserFromOffline");
- else
- SkinPlaySound(StatusesList[Index(status)].lpzSkinSoundName);
- }
- else { //We have a configured sound.
-// char szSoundFile[MAX_PATH] = { 0 };
- TCHAR tszTranslatedSoundFile[MAX_PATH] = { 0 };
-/*#ifdef UNICODE
- WideCharToMultiByte(CP_ACP,0,str,-1,szSoundFile,MAX_PATH,0,0);
- CallService(MS_UTILS_PATHTOABSOLUTE, (WPARAM)szSoundFile, (LPARAM)tszTranslatedSoundFile);
-#else
- CallService(MS_UTILS_PATHTOABSOLUTE, (WPARAM)str, (LPARAM)tszTranslatedSoundFile);
-#endif
-*/
- CallService(MS_UTILS_PATHTOABSOLUTET, (WPARAM)str, (LPARAM)tszTranslatedSoundFile);
-#ifdef MS_SKIN_PLAYSOUNDEX
- if (ServiceExists(MS_SKIN_PLAYSOUNDEX))
- {
- SkinPlaySoundEx(tszTranslatedSoundFile);
- }
- else
-#endif
-#ifdef RegIndivSounds
- SkinPlaySound(tszTranslatedSoundFile);
-#else
- {
- if (MyOptions.AvoidClipping)
- PlaySound(tszTranslatedSoundFile, NULL, SND_ASYNC | SND_FILENAME | SND_NOSTOP);
- else
- PlaySound(tszTranslatedSoundFile, NULL, SND_ASYNC | SND_FILENAME);
- }
-#endif
- }
- }
- return TRUE;
-}
-
-//Returns TRUE on sound change, FALSE on error.
-static BOOL RemoveSoundFromList(HWND hList)
-{
- int iSel = ListView_GetNextItem(hList, -1, LVNI_SELECTED);
- if (iSel > -1)
- {
- LVITEM lvitem = { 0 };
- TCHAR str[MAX_PATH] = { 0 };
-
- lvitem.mask = LVIF_PARAM;
- lvitem.iItem = iSel;
-
- ListView_GetItemText(hList,iSel,1,str,sizeof(str));
- if (lstrcmp(str, TranslateT("(default sound)"))==0)
- return FALSE;
- else
- { //We cycle on the selected items.
- iSel = -1;
- while ((iSel = ListView_GetNextItem(hList, iSel, LVNI_SELECTED)) != -1)
- //ListView_SetItemText(hList, iSel, 1, Translate("(default sound)"));
- {
- LV_ITEM _ms_lvi;
- _ms_lvi.iSubItem = 1;
- _ms_lvi.pszText = TranslateT("(default sound)");
- SNDMSG(hList, LVM_SETITEMTEXT, (WPARAM)iSel, (LPARAM)(LV_ITEM *)&_ms_lvi);
- }
- return TRUE;
- }
- }
- else //There is no contact selected.
- return FALSE;
-}
-
-//Returns TRUE on sound change, FALSE on error.
-static BOOL SelectSound(HWND hwndDlg) {
- TCHAR str[MAX_PATH] = { 0 };
- OPENFILENAME ofn = { 0 };
- HWND hList = GetDlgItem(hwndDlg, IDC_INDSNDLIST);
-
- int iSel = ListView_GetNextItem(hList, -1, LVNI_SELECTED);
- if (iSel <= -1) return FALSE;
-
- ListView_GetItemText(hList,ListView_GetNextItem(hList,-1,LVNI_SELECTED),1,str,sizeof(str));
- ofn.lStructSize = sizeof(OPENFILENAME);
- ofn.hwndOwner = GetParent(hwndDlg);
- ofn.hInstance = NULL;
- ofn.lpstrFilter = _T("Wave Files (*.wav)\0*.WAV\0All Files (*)\0*\0");
- ofn.lpstrFile = str;
- ofn.Flags = OFN_FILEMUSTEXIST;
- ofn.nMaxFile = sizeof(str);
- ofn.nMaxFileTitle = MAX_PATH;
- ofn.lpstrDefExt = _T("wav");
- if(!GetOpenFileName(&ofn)) return FALSE;
- //Now let's change the text in the listview. We cycle on the selected items (so that people may choose more than one status)
- iSel = -1;
- while ((iSel = ListView_GetNextItem(hList, iSel, LVNI_SELECTED)) != -1) {
- ListView_SetItemText(hList, iSel,1,str);
- }
- return TRUE;
-}
-
-HIMAGELIST GetStatusIconsImgList(char * lpzProto) {
- HIMAGELIST hList = NULL;
- hList = ImageList_Create(GetSystemMetrics(SM_CXSMICON), //cx
- GetSystemMetrics(SM_CYSMICON), //cy
- ((LOBYTE(LOWORD(GetVersion()))>=5 && LOWORD(GetVersion())!=5)?ILC_COLOR32:ILC_COLOR16)|ILC_MASK, //flags
- 10, //cInitial: the number of initial images: the statuses are 10!
- 0); //cGrow: we'll not add any other icon to the list.
-
- if (hList != NULL && lpzProto != NULL) { //The list was made, add the icons to it.
- int i = 0;
- for (i = ID_STATUS_MIN; i <= ID_STATUS_MAX; i++) {
- ImageList_AddIcon(hList, LoadSkinnedProtoIcon(lpzProto, StatusesList[Index(i)].ID));
- }
- }
- return hList;
-}
-
-//========== Individual Sounds: UserInfo page ==========
-BOOL CALLBACK DlgProcSoundUIPage(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) {
- static HANDLE hContact = NULL;
- switch (msg) {
- case WM_INITDIALOG:
- {
- LV_COLUMN lvc = { 0 };
- HWND hList = GetDlgItem(hwndDlg, IDC_INDSNDLIST);
- RECT aRect = { 0 };
- int i;
- char* lpzProto = (char*)CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM)lParam,0);
-
- //Let's get an image list with the status icons.
- HIMAGELIST hImgList = GetStatusIconsImgList(lpzProto);
-
- hContact = (HANDLE)lParam;
- ListView_SetImageList(hList, hImgList, LVSIL_SMALL);
- ImageList_AddIcon(hImgList, LoadSkinnedIcon(SKINICON_OTHER_USERONLINE)); // icon for UserFromOffline sound
- GetClientRect(hList, &aRect);
- lvc.mask = LVCF_WIDTH | LVCF_TEXT;
- ListView_SetExtendedListViewStyleEx(hList,
- LVS_EX_FULLROWSELECT | LVS_EX_INFOTIP,
- LVS_EX_FULLROWSELECT | LVS_EX_INFOTIP);
- lvc.cx = STATUS_COLUMN;
- lvc.pszText = TranslateT("Status");
- SNDMSG((hList), LVM_INSERTCOLUMN, 0, (LPARAM)(const LV_COLUMN *)(&lvc));
- lvc.cx = aRect.right - STATUS_COLUMN - GetSystemMetrics(SM_CXVSCROLL);
- lvc.pszText = TranslateT("Sound for the status");
- SNDMSG((hList), LVM_INSERTCOLUMN, 1, (LPARAM)(const LV_COLUMN *)(&lvc));
- if ( lpzProto!=NULL)
- {
- // -----------------------------------------------------------------add all status sounds
- for (i = ID_STATUS_MAX; i >= ID_STATUS_MIN; i--)
- { int Pflags2 = CallProtoService(lpzProto,PS_GETCAPS,PFLAGNUM_2,0);
- if (Pflags2 == 0) Pflags2 = PF2_ONLINE|PF2_INVISIBLE|PF2_SHORTAWAY|PF2_LONGAWAY|PF2_LIGHTDND|PF2_HEAVYDND|PF2_FREECHAT|PF2_OUTTOLUNCH|PF2_ONTHEPHONE;
- if ((Proto_Status2Flag(i) != 0 && Pflags2&Proto_Status2Flag(i))
- || i == ID_STATUS_OFFLINE)
- { //Offline has not a PF value, so we workaround it :/
- LV_ITEM _ms_lvi;
- LV_ITEM lvi = { 0 };
- DBVARIANT dbv = { 0 };
- lvi.mask = LVIF_TEXT | LVIF_PARAM | LVIF_IMAGE;
- lvi.iItem = 0;
- lvi.iSubItem = 0;
- lvi.iImage = Index(i); //We've already associated an image list to the listview.
- lvi.lParam = (LPARAM)i;
- lvi.pszText = TranslateTS(StatusesList[Index(i)].lpzStandardText);
- //lvi.iItem = ListView_InsertItem(GetDlgItem(hwndDlg, IDC_INDSNDLIST),&lvi);
- lvi.iItem = SNDMSG(GetDlgItem(hwndDlg, IDC_INDSNDLIST), LVM_INSERTITEM, 0, (LPARAM)(const LV_ITEM *)(&lvi));
- if (DBGetContactSettingTString(hContact, ModuleName, StatusesList[Index(i)].lpzSkinSoundName, &dbv) == DB_READ_SUCCESS)
- {
- lvi.pszText = dbv.ptszVal;
- DBFreeVariant(&dbv);
- }
- else
- lvi.pszText = TranslateT("(default sound)");
-
- _ms_lvi.iSubItem = 1;
- _ms_lvi.pszText = lvi.pszText;
- SNDMSG((GetDlgItem(hwndDlg, IDC_INDSNDLIST)), LVM_SETITEMTEXT, (WPARAM)lvi.iItem, (LPARAM)(LV_ITEM *)&_ms_lvi);
- }
- }
- // ---------------- add "user from offline" sound settting
- {
- LV_ITEM _ms_lvi;
- LV_ITEM lvi = { 0 };
- DBVARIANT dbv = { 0 };
- lvi.mask = LVIF_TEXT | LVIF_PARAM | LVIF_IMAGE;
- lvi.iItem = 0;
- lvi.iSubItem = 0;
- lvi.iImage = Index(ID_STATUS_MAX)+1; // additional icon
- lvi.lParam = (LPARAM)1;
- lvi.pszText = TranslateT("From offline");
- lvi.iItem = SNDMSG(GetDlgItem(hwndDlg, IDC_INDSNDLIST), LVM_INSERTITEM, 0, (LPARAM)(const LV_ITEM *)(&lvi));
- if (DBGetContactSettingTString(hContact, ModuleName, "UserFromOffline", &dbv) == DB_READ_SUCCESS)
- {
- lvi.pszText = dbv.ptszVal;
- DBFreeVariant(&dbv);
- }
- else
- lvi.pszText = TranslateT("(default sound)");
- //ListView_SetItemText(GetDlgItem(hwndDlg, IDC_INDSNDLIST),lvi.iItem,1,lvi.pszText);
- _ms_lvi.iSubItem = 1;
- _ms_lvi.pszText = lvi.pszText;
- SNDMSG((GetDlgItem(hwndDlg, IDC_INDSNDLIST)), LVM_SETITEMTEXT, (WPARAM)lvi.iItem, (LPARAM)(LV_ITEM *)&_ms_lvi);
- }
- //------------------------------------------end "fromoffline"---
- }
- { //checkboxes for contact to disable popups and sounds
- BYTE EnableSounds = DBGetContactSettingByte(hContact,ModuleName,"EnableSounds",1);
- BYTE EnablePopups = DBGetContactSettingByte(hContact,ModuleName,"EnablePopups",1);
- CheckDlgButton(hwndDlg, IDC_CHECK_NOTIFYSOUNDS, EnableSounds?BST_CHECKED:BST_UNCHECKED);
- CheckDlgButton(hwndDlg, IDC_CHECK_NOTIFYPOPUPS, EnablePopups?BST_CHECKED:BST_UNCHECKED);
- }
- if (MyOptions.UseIndSnd) // if individual sounds are used, then activate all controls
- {
- ShowWindow(GetDlgItem(hwndDlg, IDC_INDSNDLIST), SW_SHOW);
- ShowWindow(GetDlgItem(hwndDlg,IDC_TEXT_ENABLE_IS), SW_HIDE);
- ShowWindow(GetDlgItem(hwndDlg, IDC_CHANGE), SW_SHOW);
- ShowWindow(GetDlgItem(hwndDlg, IDC_PREVIEW), SW_SHOW);
- ShowWindow(GetDlgItem(hwndDlg, IDC_DELETE), SW_SHOW);
- }
- else
- {
- ShowWindow(GetDlgItem(hwndDlg, IDC_INDSNDLIST), SW_HIDE);
- ShowWindow(GetDlgItem(hwndDlg,IDC_TEXT_ENABLE_IS), SW_SHOW);
- ShowWindow(GetDlgItem(hwndDlg, IDC_CHANGE), SW_HIDE);
- ShowWindow(GetDlgItem(hwndDlg, IDC_PREVIEW), SW_HIDE);
- ShowWindow(GetDlgItem(hwndDlg, IDC_DELETE), SW_HIDE);
- }
- TranslateDialogDefault(hwndDlg);
- return TRUE; //End of WM_INITDIALOG
- }
- case WM_COMMAND: {
- //Who sent us a WM_COMMAND?
- switch (LOWORD(wParam)) {
- case IDC_PREVIEW: {
- //We want to hear the sound.
- HWND hList = GetDlgItem(hwndDlg, IDC_INDSNDLIST);
- int nSel = ListView_GetSelectionMark(hList);
- if ( nSel > -1 ) { //There's something selected.
- LVITEM lvitem = { 0 };
- lvitem.mask = LVIF_TEXT | LVIF_PARAM | LVIF_IMAGE;
- lvitem.iItem = ListView_GetNextItem(hList,-1,LVNI_SELECTED);
- ListView_GetItem(hList, &lvitem);
- PreviewSound(hList, lvitem.lParam);
- }
- break;
- } //End of IDC_PREVIEW
- case IDC_CHANGE:
- if (SelectSound(hwndDlg) == TRUE)
- SendMessage(GetParent(hwndDlg), PSM_CHANGED,0,0);
- break;
- case IDC_DELETE:
- if (RemoveSoundFromList(GetDlgItem(hwndDlg, IDC_INDSNDLIST))==TRUE)
- SendMessage(GetParent(hwndDlg), PSM_CHANGED,0,0);
- break;
- case IDC_CHECK_NOTIFYSOUNDS:
- if (IsDlgButtonChecked(hwndDlg, IDC_CHECK_NOTIFYSOUNDS))
- DBDeleteContactSetting(hContact,ModuleName,"EnableSounds");
- else
- DBWriteContactSettingByte(hContact,ModuleName,"EnableSounds",0);
- break;
- case IDC_CHECK_NOTIFYPOPUPS:
- if (IsDlgButtonChecked(hwndDlg, IDC_CHECK_NOTIFYPOPUPS))
- DBDeleteContactSetting(hContact,ModuleName,"EnablePopups");
- else
- DBWriteContactSettingByte(hContact,ModuleName,"EnablePopups",0);
- break;
- default:
- break;
- } //End of SWITCH on WM_COMMAND
- break; //End of WM_COMMAND
- }
- case WM_NOTIFY:
- switch(((LPNMHDR)lParam)->idFrom) {
- case 0:
- switch (((LPNMHDR)lParam)->code) {
- case PSN_APPLY: {
- //We have to write to the DB: let's find out what.
- TCHAR str[MAX_PATH] = { 0 };
- HWND hList = GetDlgItem(hwndDlg, IDC_INDSNDLIST);
- LVITEM lvitem = { 0 };
-
- lvitem.mask = LVIF_PARAM;
- //Cycle through the list reading the text associated to each status.
- for(lvitem.iItem = ListView_GetItemCount(hList)-1; lvitem.iItem>=0; lvitem.iItem--) {
- ListView_GetItem(hList,&lvitem);
- ListView_GetItemText(hList,lvitem.iItem,1,str,sizeof(str));
- //If the filename is "(default sound)", delete the setting from the DB, else write the new setting.
- if (lstrcmp(str, TranslateT("(default sound)"))==0)
- {
- if (lvitem.lParam==1)
- DBDeleteContactSetting((HANDLE)hContact,ModuleName, "UserFromOffline");
- else
- DBDeleteContactSetting((HANDLE)hContact,ModuleName, StatusesList[Index(lvitem.lParam)].lpzSkinSoundName);
- }
- else {
- TCHAR szTranslatedPath[MAX_PATH] = { 0 };
-/*#ifdef UNICODE
- char cPath[MAX_PATH] = {0};
- WideCharToMultiByte(CP_ACP,0,str,-1,cPath,MAX_PATH,0,0);
- CallService(MS_UTILS_PATHTORELATIVE, (WPARAM)cPath, (LPARAM)szTranslatedPath);
-#else
- CallService(MS_UTILS_PATHTORELATIVE, (WPARAM)str, (LPARAM)szTranslatedPath);
-#endif
-*/
- CallService(MS_UTILS_PATHTORELATIVET, (WPARAM)str, (LPARAM)szTranslatedPath);
- if (lvitem.lParam==1)
- DBWriteContactSettingTString((HANDLE)hContact,ModuleName, "UserFromOffline",szTranslatedPath);
- else
- DBWriteContactSettingTString((HANDLE)hContact,ModuleName, StatusesList[Index(lvitem.lParam)].lpzSkinSoundName, szTranslatedPath);
- }
- } //End of for, we have written every setting.
- return TRUE;
- }
- }
- }
- //Various actions.
- {
- LPNMHDR pParam = (LPNMHDR)lParam;
-
- if (pParam == NULL) return TRUE;
-
- switch ((int)wParam) {
- case IDC_INDSNDLIST: {
- switch (pParam->code) {
- case NM_DBLCLK: {
- if (SelectSound(hwndDlg) == TRUE)
- SendMessage(GetParent(hwndDlg), PSM_CHANGED,0,0);
- return TRUE;
- }
- case LVN_KEYDOWN: {
- LPNMLVKEYDOWN pnkd = (LPNMLVKEYDOWN)lParam;
- if (pnkd->wVKey == VK_DELETE)
- RemoveSoundFromList(GetDlgItem(hwndDlg, IDC_INDSNDLIST));
- break;
- } //End of KEYDOWN
- }
- } //End of IDC_INDSNDLIST
- } //end int wParam
- break ;
- } //End of WM_NOTIFY
- default:
- break;
- }
- return FALSE;
-}
-
-//========== UserInfo page : Initialization ==========
-int UserInfoInitialise(WPARAM wParam, LPARAM lParam)
-{
- {
- //Individual Sounds UserInfo details page
- OPTIONSDIALOGPAGE odp = { 0 };
-
- if((HANDLE)lParam == NULL) return 0;
- odp.cbSize = sizeof(odp);
- odp.position = 100000000;
- odp.hInstance = hInst;
- odp.pszTemplate = MAKEINTRESOURCEA(IDD_INFO_SOUNDS);
- odp.pszTitle = _strdup(NAME_OF_UIPAGE);
- odp.pfnDlgProc = DlgProcSoundUIPage;
-
- CallService(MS_USERINFO_ADDPAGE,wParam,(LPARAM)&odp);
- }
- return 0;
-}
-
-static void ResetListOptions(HWND hwndList)
-{
- int i;
- SendMessage(hwndList,CLM_SETBKBITMAP,0,(LPARAM)(HBITMAP)NULL);
- SendMessage(hwndList,CLM_SETBKCOLOR,GetSysColor(COLOR_WINDOW),0);
- SendMessage(hwndList,CLM_SETGREYOUTFLAGS,0,0);
- SendMessage(hwndList,CLM_SETLEFTMARGIN,4,0);
- SendMessage(hwndList,CLM_SETINDENT,10,0);
- for(i=0;i<=FONTID_MAX;i++)
- SendMessage(hwndList,CLM_SETTEXTCOLOR,i,GetSysColor(COLOR_WINDOWTEXT));
- SetWindowLong(hwndList,GWL_STYLE,GetWindowLong(hwndList,GWL_STYLE)|CLS_SHOWHIDDEN);
-}
-
-static void SetAllContactIcons(HWND hwndList)
-{
- HANDLE hContact,hItem;
- char *szProto;
- DWORD flags;
- BYTE EnableSounds, EnablePopups;
-
- hContact=(HANDLE)CallService(MS_DB_CONTACT_FINDFIRST,0,0);
- do
- {
- hItem=(HANDLE)SendMessage(hwndList,CLM_FINDCONTACT,(WPARAM)hContact,0);
- if(hItem)
- {
- szProto = (char*)CallService(MS_PROTO_GETCONTACTBASEPROTO,(WPARAM)hContact,0);
- if (szProto == NULL) { flags = 0; EnableSounds =EnablePopups = 0;}
- else
- {
- flags = CallProtoService(szProto,PS_GETCAPS,PFLAGNUM_1,0); //Status flags
- EnableSounds = DBGetContactSettingByte(hContact,ModuleName,"EnableSounds",1);
- EnablePopups = DBGetContactSettingByte(hContact,ModuleName,"EnablePopups",1);
- }
- //if(PF1_INDIVSTATUS)
- {
- if(SendMessage(hwndList,CLM_GETEXTRAIMAGE,(WPARAM)hItem,MAKELPARAM(0,0))==0xFF)
- SendMessage(hwndList,CLM_SETEXTRAIMAGE,(WPARAM)hItem,MAKELPARAM(0,EnableSounds==TRUE?1:0));
- if(SendMessage(hwndList,CLM_GETEXTRAIMAGE,(WPARAM)hItem,MAKELPARAM(1,0))==0xFF)
- SendMessage(hwndList,CLM_SETEXTRAIMAGE,(WPARAM)hItem,MAKELPARAM(1,EnablePopups==TRUE?2:0));
- }
- }
- }
- while(hContact = (HANDLE)CallService(MS_DB_CONTACT_FINDNEXT,(WPARAM)hContact,0));
-}
-
-static void SetListGroupIcons(HWND hwndList,HANDLE hFirstItem,HANDLE hParentItem,int *groupChildCount)
-{
- int typeOfFirst;
- int iconOn[2]={1,1};
- int childCount[2]={0,0},i;
- int iImage;
- HANDLE hItem,hChildItem;
-
- typeOfFirst=SendMessage(hwndList,CLM_GETITEMTYPE,(WPARAM)hFirstItem,0);
- //check groups
- if(typeOfFirst==CLCIT_GROUP) hItem=hFirstItem;
- else hItem=(HANDLE)SendMessage(hwndList,CLM_GETNEXTITEM,CLGN_NEXTGROUP,(LPARAM)hFirstItem);
- while(hItem) {
- hChildItem=(HANDLE)SendMessage(hwndList,CLM_GETNEXTITEM,CLGN_CHILD,(LPARAM)hItem);
- if(hChildItem) SetListGroupIcons(hwndList,hChildItem,hItem,childCount);
- for( i=0; i < SIZEOF(iconOn); i++)
- if(iconOn[i] && SendMessage(hwndList,CLM_GETEXTRAIMAGE,(WPARAM)hItem,i)==0) iconOn[i]=0;
- hItem=(HANDLE)SendMessage(hwndList,CLM_GETNEXTITEM,CLGN_NEXTGROUP,(LPARAM)hItem);
- }
- //check contacts
- if(typeOfFirst==CLCIT_CONTACT) hItem=hFirstItem;
- else hItem=(HANDLE)SendMessage(hwndList,CLM_GETNEXTITEM,CLGN_NEXTCONTACT,(LPARAM)hFirstItem);
- while(hItem) {
- for ( i=0; i < SIZEOF(iconOn); i++) {
- iImage=SendMessage(hwndList,CLM_GETEXTRAIMAGE,(WPARAM)hItem,i);
- if(iconOn[i] && iImage==0) iconOn[i]=0;
- if(iImage!=0xFF) childCount[i]++;
- }
- hItem=(HANDLE)SendMessage(hwndList,CLM_GETNEXTITEM,CLGN_NEXTCONTACT,(LPARAM)hItem);
- }
- //set icons
- for( i=0; i < SIZEOF(iconOn); i++) {
- SendMessage(hwndList,CLM_SETEXTRAIMAGE,(WPARAM)hParentItem,MAKELPARAM(i,childCount[i]?(iconOn[i]?i+1:0):0xFF));
- if(groupChildCount) groupChildCount[i]+=childCount[i];
- }
-}
-
-static void SetAllChildIcons(HWND hwndList,HANDLE hFirstItem,int iColumn,int iImage)
-{
- int typeOfFirst,iOldIcon;
- HANDLE hItem,hChildItem;
-
- typeOfFirst=SendMessage(hwndList,CLM_GETITEMTYPE,(WPARAM)hFirstItem,0);
- //check groups
- if(typeOfFirst==CLCIT_GROUP) hItem=hFirstItem;
- else hItem=(HANDLE)SendMessage(hwndList,CLM_GETNEXTITEM,CLGN_NEXTGROUP,(LPARAM)hFirstItem);
- while(hItem) {
- hChildItem=(HANDLE)SendMessage(hwndList,CLM_GETNEXTITEM,CLGN_CHILD,(LPARAM)hItem);
- if(hChildItem) SetAllChildIcons(hwndList,hChildItem,iColumn,iImage);
- hItem=(HANDLE)SendMessage(hwndList,CLM_GETNEXTITEM,CLGN_NEXTGROUP,(LPARAM)hItem);
- }
- //check contacts
- if(typeOfFirst==CLCIT_CONTACT) hItem=hFirstItem;
- else hItem=(HANDLE)SendMessage(hwndList,CLM_GETNEXTITEM,CLGN_NEXTCONTACT,(LPARAM)hFirstItem);
- while(hItem) {
- iOldIcon=SendMessage(hwndList,CLM_GETEXTRAIMAGE,(WPARAM)hItem,iColumn);
- if(iOldIcon!=0xFF && iOldIcon!=iImage) SendMessage(hwndList,CLM_SETEXTRAIMAGE,(WPARAM)hItem,MAKELPARAM(iColumn,iImage));
- hItem=(HANDLE)SendMessage(hwndList,CLM_GETNEXTITEM,CLGN_NEXTCONTACT,(LPARAM)hItem);
- }
-}
-
-BOOL CALLBACK DlgProcSoundOpts2(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) {
-
- static HICON hSoundIcon,hPopupIcon;
- static HANDLE hItemAll;
- HANDLE hList = GetDlgItem(hWnd, IDC_INDSNDLIST);
- hCListClone=(HWND)hList;
- //{char str[100];wsprintf (str, L"msg value is %#x", msg);MessageBox(NULL,str,L"soundopts2",0);}
- //printf("msg = %#x", msg);
- switch (msg) {
- case WM_INITDIALOG: {
- TranslateDialogDefault(hWnd);
- { HIMAGELIST hImageList;
- hImageList=ImageList_Create(GetSystemMetrics(SM_CXSMICON),GetSystemMetrics(SM_CYSMICON),(IsWinVerXPPlus()?ILC_COLOR32:ILC_COLOR16)|ILC_MASK,3,3);
- ImageList_AddIcon(hImageList,(LoadSkinnedIcon(SKINICON_OTHER_SMALLDOT)));
- ImageList_AddIcon(hImageList,LoadIcon(hInst,MAKEINTRESOURCE(IDI_SOUND)));
- ImageList_AddIcon(hImageList,LoadIcon(hInst,MAKEINTRESOURCE(IDI_POPUP)));
- SendDlgItemMessage(hWnd,IDC_INDSNDLIST,CLM_SETEXTRAIMAGELIST,0,(LPARAM)hImageList);
- hSoundIcon=ImageList_GetIcon(hImageList,1,ILD_NORMAL);
- SendDlgItemMessage(hWnd,IDC_SOUNDICON,STM_SETICON,(WPARAM)hSoundIcon,0);
- hPopupIcon=ImageList_GetIcon(hImageList,2,ILD_NORMAL);
- SendDlgItemMessage(hWnd,IDC_POPUPICON,STM_SETICON,(WPARAM)hPopupIcon,0);
- }
- ResetListOptions((HWND)hList);
- SendDlgItemMessage(hWnd,IDC_INDSNDLIST,CLM_SETEXTRACOLUMNS,2,0);
-
- { CLCINFOITEM cii={0};
- cii.cbSize=sizeof(cii);
- cii.flags=CLCIIF_GROUPFONT;
- cii.pszText=TranslateT("** All contacts **");
- hItemAll=(HANDLE)SendDlgItemMessage(hWnd,IDC_INDSNDLIST,CLM_ADDINFOITEM,0,(LPARAM)&cii);
- }
-
- SetAllContactIcons((HWND)hList);
- SetListGroupIcons((HWND)hList,(HANDLE)SendDlgItemMessage(hWnd,IDC_INDSNDLIST,CLM_GETNEXTITEM,CLGN_ROOT,0),hItemAll,NULL);
- return TRUE;
- }
- case WM_SETFOCUS:
- SetFocus((HWND)hList);
- break;
- case WM_NOTIFY:
-/* {wchar_t str[100];
- wsprintf(str, L"wm notify value %#x", ((LPNMHDR)lParam)->idFrom);
- MessageBox(NULL,str,L"NSN 123456789",0);
- }
-*/ switch(((LPNMHDR)lParam)->idFrom) {
- case IDC_INDSNDLIST:
- switch (((LPNMHDR)lParam)->code)
- {
- case CLN_NEWCONTACT:
- case CLN_LISTREBUILT:
- SetAllContactIcons((HWND)hList);
- //fall through
- case CLN_CONTACTMOVED:
- SetListGroupIcons((HWND)hList,(HANDLE)SendMessage((HWND)hList,CLM_GETNEXTITEM,CLGN_ROOT,0),hItemAll,NULL);
- break;
- case CLN_OPTIONSCHANGED:
- ResetListOptions((HWND)hList);
- break;
- case NM_CLICK:
- {
- HANDLE hItem;
- NMCLISTCONTROL *nm=(NMCLISTCONTROL*)lParam;
- DWORD hitFlags;
- int iImage;
- int itemType;
- // Make sure we have an extra column
- if(nm->iColumn==-1) break;
- // Find clicked item
- hItem=(HANDLE)SendMessage((HWND)hList,CLM_HITTEST,(WPARAM)&hitFlags,MAKELPARAM(nm->pt.x,nm->pt.y));
- // Nothing was clicked
- if(hItem==NULL) break;
- // It was not a sound or popup icon
- if(!(hitFlags&CLCHT_ONITEMEXTRA)) break;
- itemType=SendMessage((HWND)hList,CLM_GETITEMTYPE,(WPARAM)hItem,0);
- // Get image in clicked column (0=none, 1=sound, 2=popup)
- iImage=SendMessage((HWND)hList,CLM_GETEXTRAIMAGE,(WPARAM)hItem,MAKELPARAM(nm->iColumn,0));
- if(iImage==0) iImage=nm->iColumn+1;
- else if(iImage==1 || iImage==2) iImage=0;
- // Get item type (contact, group, etc...)
- // Update list
- if(itemType==CLCIT_CONTACT)
- {
- SendMessage((HWND)hList,CLM_SETEXTRAIMAGE,(WPARAM)hItem,MAKELPARAM(nm->iColumn,iImage));
- }
- else if(itemType==CLCIT_INFO) //must be 'all contacts'
- {
- SetAllChildIcons((HWND)hList,hItem,nm->iColumn,iImage);
- }
- else if(itemType==CLCIT_GROUP) {
- hItem=(HANDLE)SendMessage((HWND)hList,CLM_GETNEXTITEM,CLGN_CHILD,(LPARAM)hItem);
- if(hItem)
- {
- SetAllChildIcons((HWND)hList,hItem,nm->iColumn,iImage);
- }
- }
- // Update the all/none icons
- SetListGroupIcons((HWND)hList,(HANDLE)SendMessage((HWND)hList,CLM_GETNEXTITEM,CLGN_ROOT,0),hItemAll,NULL);
- // Activate Apply button
- SendMessage(GetParent(hWnd), PSM_CHANGED, 0, 0);
- break;
- }
- }
- break;
- case 0:
- switch (((LPNMHDR)lParam)->code)
- {
- case PSN_APPLY: {
- HANDLE hContact,hItem;
- int iImage;
- hContact=(HANDLE)CallService(MS_DB_CONTACT_FINDFIRST,0,0);
- do
- {
- hItem=(HANDLE)SendMessage((HWND)hList,CLM_FINDCONTACT,(WPARAM)hContact,0);
- if(hItem)
- {
- iImage=SendMessage((HWND)hList,CLM_GETEXTRAIMAGE,(WPARAM)hItem,MAKELPARAM(0,0));
- if(iImage==1)
- DBDeleteContactSetting(hContact,ModuleName,"EnableSounds");
- else
- DBWriteContactSettingByte(hContact,ModuleName,"EnableSounds",0);
- iImage=SendMessage((HWND)hList,CLM_GETEXTRAIMAGE,(WPARAM)hItem,MAKELPARAM(1,0));
- if(iImage==2)
- DBDeleteContactSetting(hContact,ModuleName,"EnablePopups");
- else
- DBWriteContactSettingByte(hContact,ModuleName,"EnablePopups",0);
-
- }
- }
- while(hContact=(HANDLE)CallService(MS_DB_CONTACT_FINDNEXT,(WPARAM)hContact,0));
- return TRUE;
- }
- }
- break;
- }
- break;
- case WM_DESTROY:
- {
- HIMAGELIST hIml = (HIMAGELIST)SendMessage((HWND)hList,CLM_GETEXTRAIMAGELIST,0,0);
- DestroyIcon(hSoundIcon);
- DestroyIcon(hPopupIcon);
- ImageList_Destroy(hIml);
- break;
- }
- default:
- break;
- }
- return FALSE;
-}
|