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);
}
Example #3
0
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;
}