BOOL CDlgAdminItemNew::OnInitDialog() { int i, nNo, nCount; DWORD dwSoundID; LPCSTR pszTmp; PCInfoItemTypeBase pInfoItem; CLibSboSoundLoader LibSboSoundLoader; CDlgAdminBase::OnInitDialog(); if (m_ppWndNotify) { *m_ppWndNotify = this; } m_pMgrGrpData->ReadItemTmp (); if (m_bModeModify) { SetWindowText ("アイテム情報の編集"); } /* 設置位置は指定しないモード? */ if (m_bPosSet == FALSE) { GetDlgItem (IDC_POSMAPID)-> EnableWindow (FALSE); GetDlgItem (IDC_POSX)-> EnableWindow (FALSE); GetDlgItem (IDC_POSY)-> EnableWindow (FALSE); } m_ctlDropSoundID.InsertString (0, "無し"); nNo = 0; nCount = LibSboSoundLoader.GetSoundCount (); for (i = 0; i < nCount; i ++) { dwSoundID = LibSboSoundLoader.GetSoundID (i); pszTmp = LibSboSoundLoader.GetSoundName (dwSoundID); m_ctlDropSoundID.InsertString (i + 1, pszTmp); m_ctlDropSoundID.SetItemData (i + 1, dwSoundID); } m_ctlType.InsertString (0, "未設定"); m_ctlType.SetCurSel (0); nCount = m_pLibInfoItemType->GetCount (); for (i = 0; i < nCount; i ++) { pInfoItem = (PCInfoItemTypeBase)m_pLibInfoItemType->GetPtr (i); m_ctlType.InsertString (i + 1, pInfoItem->m_strName); m_ctlType.SetItemData (i + 1, pInfoItem->m_dwTypeID); if (m_dwSelectItemTypeID == pInfoItem->m_dwTypeID) { m_ctlType.SetCurSel (i + 1); } } SelectSound (m_dwSelectSoundID); return TRUE; }
void CDlgAdminItemNew::OnSelchangeType() { int nNo; DWORD dwTypeID; PCInfoItemTypeBase pInfoItem; nNo = m_ctlType.GetCurSel (); dwTypeID = m_ctlType.GetItemData (nNo); pInfoItem = (PCInfoItemTypeBase)m_pLibInfoItemType->GetPtr (dwTypeID); if (pInfoItem == NULL) { return; } UpdateData (); m_strName = pInfoItem->m_strName; m_nGrpID = pInfoItem->m_dwGrpID; m_bPutOn = pInfoItem->m_bPutOn; SelectSound (pInfoItem->m_dwDropSoundID); UpdateData (FALSE); }
INT_PTR CALLBACK DlgProcSoundUIPage(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) { static HANDLE hContact = NULL; switch (msg) { case WM_INITDIALOG: { TranslateDialogDefault(hwndDlg); hContact = (HANDLE)lParam; char *szProto = (char *)CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM)hContact, 0); HWND hList = GetDlgItem(hwndDlg, IDC_INDSNDLIST); ListView_SetImageList(hList, GetStatusIconsImgList(szProto), LVSIL_SMALL); ListView_SetExtendedListViewStyleEx(hList, LVS_EX_FULLROWSELECT | LVS_EX_INFOTIP, LVS_EX_FULLROWSELECT | LVS_EX_INFOTIP); RECT rc = {0}; GetClientRect(hList, &rc); LV_COLUMN lvc = {0}; lvc.mask = LVCF_WIDTH | LVCF_TEXT; lvc.cx = STATUS_COLUMN; lvc.pszText = TranslateT("Status"); ListView_InsertColumn(hList, 0, &lvc); lvc.cx = rc.right - STATUS_COLUMN - GetSystemMetrics(SM_CXVSCROLL); lvc.pszText = TranslateT("Sound for the status"); ListView_InsertColumn(hList, 1, &lvc); if (szProto) { DBVARIANT dbv; TCHAR buff[MAX_PATH]; for (int i = ID_STATUS_MAX; i >= ID_STATUS_MIN; i--) { int flags = CallProtoService(szProto, PS_GETCAPS, PFLAGNUM_2, 0); if (flags == 0) flags = PF2_ONLINE|PF2_INVISIBLE|PF2_SHORTAWAY|PF2_LONGAWAY|PF2_LIGHTDND|PF2_HEAVYDND|PF2_FREECHAT|PF2_OUTTOLUNCH|PF2_ONTHEPHONE; if ((flags & Proto_Status2Flag(i)) || i == ID_STATUS_OFFLINE) { LV_ITEM lvi = {0}; lvi.mask = LVIF_TEXT | LVIF_PARAM | LVIF_IMAGE; lvi.iItem = 0; lvi.iSubItem = 0; lvi.iImage = Index(i); lvi.lParam = (LPARAM)i; lvi.pszText = TranslateTS(StatusList[Index(i)].lpzStandardText); lvi.iItem = ListView_InsertItem(hList, &lvi); if (!DBGetContactSettingTString(hContact, MODULE, StatusList[Index(i)].lpzSkinSoundName, &dbv)) { _tcscpy(buff, dbv.ptszVal); DBFreeVariant(&dbv); } else _tcscpy(buff, TranslateT(DEFAULT_SOUND)); ListView_SetItemText(hList, lvi.iItem, 1, buff); } } LV_ITEM lvi = {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)ID_STATUS_FROMOFFLINE; lvi.pszText = TranslateT("From offline"); lvi.iItem = ListView_InsertItem(hList, &lvi); if (!DBGetContactSettingTString(hContact, MODULE, "UserFromOffline", &dbv)) { _tcscpy(buff, dbv.ptszVal); DBFreeVariant(&dbv); } else _tcscpy(buff, TranslateT(DEFAULT_SOUND)); ListView_SetItemText(hList, lvi.iItem, 1, buff); } CheckDlgButton(hwndDlg, IDC_CHECK_NOTIFYSOUNDS, DBGetContactSettingByte(hContact, MODULE, "EnableSounds", 1)); CheckDlgButton(hwndDlg, IDC_CHECK_NOTIFYPOPUPS, DBGetContactSettingByte(hContact, MODULE, "EnablePopups", 1)); ShowWindow(GetDlgItem(hwndDlg, IDC_INDSNDLIST), opt.UseIndSnd ? SW_SHOW : SW_HIDE); ShowWindow(GetDlgItem(hwndDlg, IDC_TEXT_ENABLE_IS), opt.UseIndSnd ? SW_HIDE : SW_SHOW); ShowWindow(GetDlgItem(hwndDlg, IDC_CHANGE), opt.UseIndSnd ? SW_SHOW : SW_HIDE); ShowWindow(GetDlgItem(hwndDlg, IDC_PREVIEW), opt.UseIndSnd ? SW_SHOW : SW_HIDE); ShowWindow(GetDlgItem(hwndDlg, IDC_DELETE), opt.UseIndSnd ? SW_SHOW : SW_HIDE); return TRUE; } case WM_COMMAND: { switch (LOWORD(wParam)) { case IDC_PREVIEW: { HWND hList = GetDlgItem(hwndDlg, IDC_INDSNDLIST); if (ListView_GetSelectionMark(hList) != -1) PreviewSound(hList); break; } case IDC_CHANGE: { HWND hList = GetDlgItem(hwndDlg, IDC_INDSNDLIST); int iSel = ListView_GetNextItem(GetDlgItem(hwndDlg, IDC_INDSNDLIST), -1, LVNI_SELECTED); if (iSel != -1) { TCHAR stzFilePath[MAX_PATH]; if (SelectSound(hwndDlg, stzFilePath) != NULL) { iSel = -1; while ((iSel = ListView_GetNextItem(hList, iSel, LVNI_SELECTED)) != -1) ListView_SetItemText(hList, iSel, 1, stzFilePath); SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); } } break; } case IDC_DELETE: { HWND hList = GetDlgItem(hwndDlg, IDC_INDSNDLIST); if (ListView_GetSelectionMark(hList) != -1) { if (RemoveSoundFromList(GetDlgItem(hwndDlg, IDC_INDSNDLIST))) SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); } break; } case IDC_CHECK_NOTIFYSOUNDS: { DBWriteContactSettingByte(hContact, MODULE, "EnableSounds", IsDlgButtonChecked(hwndDlg, IDC_CHECK_NOTIFYSOUNDS) ? 1 : 0); break; } case IDC_CHECK_NOTIFYPOPUPS: { DBWriteContactSettingByte(hContact, MODULE, "EnablePopups", IsDlgButtonChecked(hwndDlg, IDC_CHECK_NOTIFYPOPUPS) ? 1 : 0); break; } } break; } case WM_NOTIFY: { LPNMHDR pParam = (LPNMHDR)lParam; if (pParam->code == PSN_APPLY) { TCHAR buff[MAX_PATH]; HWND hList = GetDlgItem(hwndDlg, IDC_INDSNDLIST); LVITEM lvi = {0}; lvi.mask = LVIF_PARAM; //Cycle through the list reading the text associated to each status. for (lvi.iItem = ListView_GetItemCount(hList) - 1; lvi.iItem >= 0; lvi.iItem--) { ListView_GetItem(hList, &lvi); ListView_GetItemText(hList, lvi.iItem, 1, buff, SIZEOF(buff)); if (!_tcscmp(buff, TranslateT(DEFAULT_SOUND))) { if (lvi.lParam == ID_STATUS_FROMOFFLINE) DBDeleteContactSetting(hContact, MODULE, "UserFromOffline"); else DBDeleteContactSetting(hContact, MODULE, StatusList[Index(lvi.lParam)].lpzSkinSoundName); } else { TCHAR stzSoundPath[MAX_PATH] = { 0 }; CallService(MS_UTILS_PATHTORELATIVET, (WPARAM)buff, (LPARAM)stzSoundPath); if (lvi.lParam == ID_STATUS_FROMOFFLINE) DBWriteContactSettingTString(hContact, MODULE, "UserFromOffline", stzSoundPath); else DBWriteContactSettingTString(hContact, MODULE, StatusList[Index(lvi.lParam)].lpzSkinSoundName, stzSoundPath); } } return TRUE; } int hlpControlID = (int)wParam; switch (hlpControlID) { case IDC_INDSNDLIST: { if (pParam->code == NM_DBLCLK) { TCHAR stzFilePath[MAX_PATH]; if (SelectSound(hwndDlg, stzFilePath) != NULL) { int iSel = -1; HWND hList = GetDlgItem(hwndDlg, IDC_INDSNDLIST); while ((iSel = ListView_GetNextItem(hList, iSel, LVNI_SELECTED)) != -1) ListView_SetItemText(hList, iSel, 1, stzFilePath); SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); } return TRUE; } else if (pParam->code == LVN_KEYDOWN) { LPNMLVKEYDOWN pnkd = (LPNMLVKEYDOWN)lParam; if (pnkd->wVKey == VK_DELETE) RemoveSoundFromList(GetDlgItem(hwndDlg, IDC_INDSNDLIST)); } break; } } break; } } return FALSE; }