Update Turkish translation
[dasher.git] / Src / Win32 / Widgets / StatusControl.cpp
blobcc55ca6ebbdfc3bd6d67735ff8471928e42c466c
1 #include "StatusControl.h"
2 #include "WinCommon.h"
3 #include "../resource.h"
5 #include <string>
7 CStatusControl::CStatusControl(Dasher::CSettingsUser *pCreateFrom, CAppSettings *pAppSettings)
8 : CSettingsObserver(pCreateFrom),
9 m_pAppSettings(pAppSettings),
10 m_dialogHeight(0) {
13 void CStatusControl::HandleEvent(int iParameter) {
14 switch (iParameter) {
15 case SP_ALPHABET_ID:
16 case SP_ALPHABET_1:
17 case SP_ALPHABET_2:
18 case SP_ALPHABET_3:
19 case SP_ALPHABET_4:
20 PopulateCombo();
21 break;
22 case LP_MAX_BITRATE:
23 PopulateSpeed();
24 break;
27 LRESULT CStatusControl::OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) {
28 m_hEdit = GetDlgItem(IDC_SPEED_EDIT);
29 m_hUpDown = GetDlgItem(IDC_SPEED_SPIN);
30 m_hCombo = GetDlgItem(IDC_ALPHABET_COMBO);
32 RECT r = { 0,0,0,14 };
33 MapDialogRect(&r);
34 m_dialogHeight = r.bottom;
36 m_hEdit.SendMessage(EM_LIMITTEXT, (WPARAM)4, (LPARAM)0);
37 m_hUpDown.SendMessage(UDM_SETRANGE, 0, (LPARAM)MAKELONG(800, 1));
39 PopulateCombo();
40 PopulateSpeed();
41 return 1;
44 LRESULT CStatusControl::OnSpeedSpinChange(int idCtrl, LPNMHDR pNMHDR, BOOL& bHandled) {
45 LPNMUPDOWN pUpDown = reinterpret_cast<LPNMUPDOWN>(pNMHDR);
47 if (pUpDown->hdr.code == UDN_DELTAPOS)
48 UpdateSpeed(pUpDown->iPos, pUpDown->iDelta);
49 else
50 bHandled = false;
51 return 0;
54 LRESULT CStatusControl::OnSpeedEditChange(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled) {
55 CString wideText;
56 m_hEdit.GetWindowText(wideText);
57 double dNewSpeed = _tstof(wideText);
58 m_pAppSettings->SetLongParameter(LP_MAX_BITRATE, dNewSpeed * 100);
59 return 0;
62 LRESULT CStatusControl::OnAlphabetChanged(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled) {
63 SelectAlphabet();
64 return 0;
67 LRESULT CStatusControl::OnSize(UINT message, WPARAM wParam, LPARAM lParam, BOOL& bHandled) {
68 RECT rc;
69 GetClientRect(&rc);
70 RECT comboRc;
71 m_hCombo.GetWindowRect(&comboRc);
72 ScreenToClient(&comboRc);
73 comboRc.right = rc.right - rc.left;
74 m_hCombo.MoveWindow(&comboRc, true);
75 return 0;
78 void CStatusControl::PopulateCombo() {
79 int iCount(SendMessage(m_hCombo, CB_GETCOUNT, 0, 0));
81 for(int i(0); i < iCount; ++i)
82 SendMessage(m_hCombo, CB_DELETESTRING, 0, 0);
84 std::wstring strEntry;
86 WinUTF8::UTF8string_to_wstring(m_pAppSettings->GetStringParameter(SP_ALPHABET_ID), strEntry);
87 SendMessage(m_hCombo, CB_ADDSTRING, 0, (LPARAM) (LPCTSTR)strEntry.c_str());
89 WinUTF8::UTF8string_to_wstring(m_pAppSettings->GetStringParameter(SP_ALPHABET_1), strEntry);
90 if(strEntry.size() > 0)
91 SendMessage(m_hCombo, CB_ADDSTRING, 0, (LPARAM) (LPCTSTR)strEntry.c_str());
93 WinUTF8::UTF8string_to_wstring(m_pAppSettings->GetStringParameter(SP_ALPHABET_2), strEntry);
94 if(strEntry.size() > 0)
95 SendMessage(m_hCombo, CB_ADDSTRING, 0, (LPARAM) (LPCTSTR)strEntry.c_str());
97 WinUTF8::UTF8string_to_wstring(m_pAppSettings->GetStringParameter(SP_ALPHABET_3), strEntry);
98 if(strEntry.size() > 0)
99 SendMessage(m_hCombo, CB_ADDSTRING, 0, (LPARAM) (LPCTSTR)strEntry.c_str());
101 WinUTF8::UTF8string_to_wstring(m_pAppSettings->GetStringParameter(SP_ALPHABET_4), strEntry);
102 if(strEntry.size() > 0)
103 SendMessage(m_hCombo, CB_ADDSTRING, 0, (LPARAM) (LPCTSTR)strEntry.c_str());
105 SendMessage(m_hCombo, CB_ADDSTRING, 0, (LPARAM) (LPCTSTR)L"More Alphabets...");
107 SendMessage(m_hCombo, CB_SETCURSEL, 0, 0);
110 void CStatusControl::SelectAlphabet() {
111 int iIndex(SendMessage(m_hCombo, CB_GETCURSEL, 0, 0));
112 int iLength(SendMessage(m_hCombo, CB_GETLBTEXTLEN, iIndex, 0));
114 TCHAR *szSelection = new TCHAR[iLength + 1];
115 SendMessage(m_hCombo, CB_GETLBTEXT, iIndex, (LPARAM)szSelection);
117 if(!_tcscmp(szSelection, L"More Alphabets...")) {
118 GetParent().SendMessage(WM_COMMAND, ID_OPTIONS_PREFS, 0);
120 else {
121 std::string strNewValue;
122 WinUTF8::wstring_to_UTF8string(szSelection, strNewValue);
124 m_pAppSettings->SetStringParameter(SP_ALPHABET_ID, strNewValue);
127 delete[] szSelection;
130 void CStatusControl::PopulateSpeed() {
131 int iValue(m_pAppSettings->GetLongParameter(LP_MAX_BITRATE));
133 TCHAR Buffer[10];
134 _stprintf(Buffer, TEXT("%0.2f"), iValue / 100.0);
135 SendMessage(m_hEdit, WM_SETTEXT, 0, (LPARAM) (LPCSTR) Buffer);
136 SendMessage(m_hUpDown, UDM_SETPOS, 0, (LPARAM) MAKELONG ((short)iValue, 0));
139 void CStatusControl::UpdateSpeed(int iPos, int iDelta) {
140 int iValue(iPos + iDelta);
142 if(iValue > 800)
143 iValue = 800;
145 if(iValue < 1)
146 iValue = 1;
148 TCHAR Buffer[10];
149 _stprintf(Buffer, TEXT("%0.2f"), iValue / 100.0);
150 SendMessage(m_hEdit, WM_SETTEXT, 0, (LPARAM)(LPCSTR)Buffer);
152 m_pAppSettings->SetLongParameter(LP_MAX_BITRATE, iValue);