#include "SettingsDialog.h" //#include "DebugLogger.hpp" template T * GetComboBoxData(CComboBox & ctrl) { return (T*)(ctrl.GetItemData(ctrl.GetCurSel())); } SettingsDialog::SettingsDialog(SoundNotifyDataStorage & storage) : _dataStorage(storage) { } BOOL SettingsDialog::PreTranslateMessage(MSG* pMsg) { return ::IsDialogMessage(m_hWnd, pMsg); } LRESULT SettingsDialog::onInitDialog(UINT, WPARAM, LPARAM, BOOL&) { _userCombo = GetDlgItem(IDC_COMBO_USERS); _protoCombo = GetDlgItem(IDC_COMBO_PROTO); _chooseButton = GetDlgItem(IDC_BUTTON_CHOOSE_SOUND); _resetButton = GetDlgItem(IDC_BUTTON_RESET_SOUND); _playButton = GetDlgItem(IDC_BUTTON_TEST_PLAY); _soundLabel = GetDlgItem(IDC_LABEL_SOUND); auto & protocols = _dataStorage.getData(); for (auto it = protocols.begin(), end = protocols.end(); it != end; ++it) addProtocolItem(*it); _userCombo.EnableWindow(0); GetDlgItem(IDC_BUTTON_CHOOSE_SOUND).EnableWindow(0); GetDlgItem(IDC_BUTTON_RESET_SOUND).EnableWindow(0); GetDlgItem(IDC_BUTTON_TEST_PLAY).EnableWindow(0); return TRUE; } LRESULT SettingsDialog::onOk(WORD, WORD wID, HWND, BOOL&) { EndDialog(wID); return 0; } LRESULT SettingsDialog::onCancel(WORD, WORD wID, HWND, BOOL&) { EndDialog(wID); return 0; } LRESULT SettingsDialog::onSelectProtocol(WORD, WORD, HWND, BOOL&) { _userCombo.ResetContent(); auto data = GetComboBoxData(_protoCombo); for (auto it = data->second.begin(), end = data->second.end(); it != end; ++it) { int id = _userCombo.AddString(it->first.c_str()); _userCombo.SetItemData(id, (DWORD_PTR)(&(*it))); } _userCombo.EnableWindow(TRUE); _playButton.EnableWindow(FALSE); _resetButton.EnableWindow(FALSE); _chooseButton.EnableWindow(FALSE); _soundLabel.SetWindowText(TEXT("")); return 0; } LRESULT SettingsDialog::onSelectUser(WORD, WORD, HWND, BOOL &) { auto user = GetComboBoxData(_userCombo); _chooseButton.EnableWindow(TRUE); BOOL soundSelected = !user->second->soundPath().empty(); _resetButton.EnableWindow(soundSelected); _playButton.EnableWindow(soundSelected); setSoundLabelText(user->second->soundPath().c_str()); return 0; } LRESULT SettingsDialog::onChooseSound(WORD, WORD, HWND , BOOL&) { CFileDialog fileDlg(1, 0, 0, OFN_FILEMUSTEXIST, TEXT("WAV files\0*.wav\0\0")); if (fileDlg.DoModal() != IDOK) return 0; setSoundLabelText(fileDlg.m_szFileName); auto user = GetComboBoxData(_userCombo); user->second->setSound(xsn_string(fileDlg.m_szFileName)); _resetButton.EnableWindow(TRUE); _playButton.EnableWindow(TRUE); return 0; } LRESULT SettingsDialog::onResetSound(WORD, WORD wID, HWND , BOOL&) { auto user = GetComboBoxData(_userCombo); user->second->setSound(xsn_string()); _resetButton.EnableWindow(FALSE); _playButton.EnableWindow(FALSE); _soundLabel.SetWindowText(TEXT("")); return 0; } LRESULT SettingsDialog::onTestPlay(WORD, WORD wID, HWND , BOOL&) { auto user = GetComboBoxData(_userCombo); PlaySound(user->second->soundPath().c_str(), nullptr, SND_FILENAME | SND_ASYNC); return 0; } void SettingsDialog::setSoundLabelText(LPCTSTR text) { _soundLabel.SetWindowText(PathFindFileName(text)); } void SettingsDialog::addProtocolItem(ProtocolTable::value_type & value) { wchar_t protocol[30]; mbstowcs(protocol, value.first.c_str(), 30); int idx = _protoCombo.AddString(protocol); _protoCombo.SetItemData(idx, (DWORD_PTR)(&value)); }