From a70382b0e8bed265a1d314d9f6aae8f2dd48d20b Mon Sep 17 00:00:00 2001 From: George Hazan Date: Wed, 28 Nov 2012 18:45:54 +0000 Subject: ex-protos moved to the Plugins folder git-svn-id: http://svn.miranda-ng.org/main/trunk@2545 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- plugins/Quotes/src/CommonOptionDlg.cpp | 272 +++++++++++++++++++++++++++++++++ 1 file changed, 272 insertions(+) create mode 100644 plugins/Quotes/src/CommonOptionDlg.cpp (limited to 'plugins/Quotes/src/CommonOptionDlg.cpp') diff --git a/plugins/Quotes/src/CommonOptionDlg.cpp b/plugins/Quotes/src/CommonOptionDlg.cpp new file mode 100644 index 0000000000..0b460665c5 --- /dev/null +++ b/plugins/Quotes/src/CommonOptionDlg.cpp @@ -0,0 +1,272 @@ +#include "StdAfx.h" +#include "CommonOptionDlg.h" +#include "QuotesProviderBase.h" +#include "resource.h" +#include "EconomicRateInfo.h" +#include "DBUtils.h" +#include "QuotesProviderVisitorDbSettings.h" +#include "WinCtrlHelper.h" +#include "SettingsDlg.h" + +namespace +{ + typedef boost::shared_ptr TAdvSettingsPtr; + typedef std::map TAdvSettings; + + TAdvSettings g_aAdvSettings; + + CAdvProviderSettings* get_adv_settings(const IQuotesProvider* pProvider,bool bCreateIfNonExist) + { + TAdvSettings::iterator i = g_aAdvSettings.find(pProvider); + if(i != g_aAdvSettings.end()) + { + return i->second.get(); + } + else if(true == bCreateIfNonExist) + { + TAdvSettingsPtr pAdvSet(new CAdvProviderSettings(pProvider)); + g_aAdvSettings.insert(std::make_pair(pProvider,pAdvSet)); + return pAdvSet.get(); + } + else + { + return NULL; + } + } + + void remove_adv_settings(const IQuotesProvider* pProvider) + { + TAdvSettings::iterator i = g_aAdvSettings.find(pProvider); + if(i != g_aAdvSettings.end()) + { + g_aAdvSettings.erase(i); + } + } +} + +void CommonOptionDlgProc(HWND hWnd,UINT msg,WPARAM wp,LPARAM lp,CCommonDlgProcData& rData) +{ + switch(msg) + { + case WM_INITDIALOG: + { + assert(rData.m_pQuotesProvider); + + CQuotesProviderVisitorDbSettings visitor; + rData.m_pQuotesProvider->Accept(visitor); + assert(visitor.m_pszDbRefreshRateType); + assert(visitor.m_pszDbRefreshRateValue); + assert(visitor.m_pszDbDisplayNameFormat); + assert(visitor.m_pszDbStatusMsgFormat); + assert(visitor.m_pszDbTendencyFormat); + + // set contact list display format + tstring sDspNameFrmt = Quotes_DBGetStringT(NULL,QUOTES_MODULE_NAME,visitor.m_pszDbDisplayNameFormat,visitor.m_pszDefDisplayFormat); + ::SetDlgItemText(hWnd,IDC_EDIT_CONTACT_LIST_FORMAT,sDspNameFrmt.c_str()); + + // set status message display format + tstring sStatusMsgFrmt = Quotes_DBGetStringT(NULL,QUOTES_MODULE_NAME,visitor.m_pszDbStatusMsgFormat,visitor.m_pszDefStatusMsgFormat); + ::SetDlgItemText(hWnd,IDC_EDIT_STATUS_MESSAGE_FORMAT,sStatusMsgFrmt.c_str()); + + // set tendency format + tstring sTendencyFrmt = Quotes_DBGetStringT(NULL,QUOTES_MODULE_NAME,visitor.m_pszDbTendencyFormat,visitor.m_pszDefTendencyFormat); + ::SetDlgItemText(hWnd,IDC_EDIT_TENDENCY_FORMAT,sTendencyFrmt.c_str()); + + // refresh rate + HWND hwndCombo = ::GetDlgItem(hWnd,IDC_COMBO_REFRESH_RATE); + LPCTSTR pszRefreshRateTypes[] = {TranslateT("Seconds"),TranslateT("Minutes"),TranslateT("Hours")}; + for(int i = 0;i < SIZEOF(pszRefreshRateTypes);++i) + { + ::SendMessage(hwndCombo,CB_ADDSTRING,0,reinterpret_cast(pszRefreshRateTypes[i])); + } + + int nRefreshRateType = DBGetContactSettingWord(NULL,QUOTES_MODULE_NAME,visitor.m_pszDbRefreshRateType,RRT_MINUTES); + if(nRefreshRateType < RRT_SECONDS || nRefreshRateType > RRT_HOURS) + { + nRefreshRateType = RRT_MINUTES; + } + + UINT nRate = DBGetContactSettingWord(NULL,QUOTES_MODULE_NAME,visitor.m_pszDbRefreshRateValue,1); + switch(nRefreshRateType) + { + default: + case RRT_SECONDS: + case RRT_MINUTES: + if(nRate < 1 || nRate > 60) + { + nRate = 1; + } + spin_set_range(::GetDlgItem(hWnd,IDC_SPIN_REFRESH_RATE),1,60); + break; + case RRT_HOURS: + if(nRate < 1 || nRate > 24) + { + nRate = 1; + } + spin_set_range(::GetDlgItem(hWnd,IDC_SPIN_REFRESH_RATE),1,24); + break; + } + + ::SendMessage(hwndCombo,CB_SETCURSEL,nRefreshRateType,0); + ::SetDlgItemInt(hWnd,IDC_EDIT_REFRESH_RATE,nRate,FALSE); + + PropSheet_UnChanged(::GetParent(hWnd),hWnd); + } + break; + case WM_COMMAND: + switch(HIWORD(wp)) + { + case CBN_SELCHANGE: + if(IDC_COMBO_REFRESH_RATE == LOWORD(wp)) + { + ERefreshRateType nType = static_cast(::SendMessage(reinterpret_cast(lp),CB_GETCURSEL,0,0)); + switch(nType) + { + default: + case RRT_SECONDS: + case RRT_MINUTES: + spin_set_range(::GetDlgItem(hWnd,IDC_SPIN_REFRESH_RATE),1,60); + break; + case RRT_HOURS: + { + spin_set_range(::GetDlgItem(hWnd,IDC_SPIN_REFRESH_RATE),1,24); + BOOL bOk = FALSE; + UINT nRefreshRate = ::GetDlgItemInt(hWnd,IDC_EDIT_REFRESH_RATE,&bOk,FALSE); + if(TRUE == bOk && nRefreshRate > 24) + { + ::SetDlgItemInt(hWnd,IDC_EDIT_REFRESH_RATE,24,FALSE); + } + } + break; + } + + PropSheet_Changed(::GetParent(hWnd),hWnd); + } + break; + case EN_CHANGE: + switch(LOWORD(wp)) + { + case IDC_EDIT_REFRESH_RATE: + case IDC_EDIT_CONTACT_LIST_FORMAT: + case IDC_EDIT_STATUS_MESSAGE_FORMAT: + case IDC_EDIT_TENDENCY_FORMAT: + if(reinterpret_cast(lp) == ::GetFocus()) + { + PropSheet_Changed(::GetParent(hWnd),hWnd); + } + break; + } + break; + case BN_CLICKED: + switch( LOWORD(wp)) + { + case IDC_BUTTON_DESCRIPTION: + show_variable_list(hWnd,rData.m_pQuotesProvider); + break; + case IDC_BUTTON_ADVANCED_SETTINGS: + { + CAdvProviderSettings* pAdvSet = get_adv_settings(rData.m_pQuotesProvider,true); + assert(pAdvSet); + if(true == ShowSettingsDlg(hWnd,pAdvSet)) + { + PropSheet_Changed(::GetParent(hWnd),hWnd); + } + } + break; + } + break; + } + break; + case WM_NOTIFY: + { + LPNMHDR pNMHDR = reinterpret_cast(lp); + switch(pNMHDR->code) + { + case PSN_KILLACTIVE: + { + BOOL bOk = FALSE; + UINT nRefreshRate = ::GetDlgItemInt(hWnd,IDC_EDIT_REFRESH_RATE,&bOk,FALSE); + ERefreshRateType nType = static_cast(::SendMessage(::GetDlgItem(hWnd,IDC_COMBO_REFRESH_RATE),CB_GETCURSEL,0,0)); + switch(nType) + { + default: + case RRT_MINUTES: + case RRT_SECONDS: + if(FALSE == bOk || nRefreshRate < 1 || nRefreshRate > 60) + { + prepare_edit_ctrl_for_error(::GetDlgItem(hWnd,IDC_EDIT_REFRESH_RATE)); + Quotes_MessageBox(hWnd,TranslateT("Enter integer value between 1 and 60."),MB_OK|MB_ICONERROR); + bOk = FALSE; + } + break; + case RRT_HOURS: + if(FALSE == bOk || nRefreshRate < 1 || nRefreshRate > 24) + { + prepare_edit_ctrl_for_error(::GetDlgItem(hWnd,IDC_EDIT_REFRESH_RATE)); + Quotes_MessageBox(hWnd,TranslateT("Enter integer value between 1 and 24."),MB_OK|MB_ICONERROR); + bOk = FALSE; + } + break; + } + + if(TRUE == bOk) + { + HWND hEdit = ::GetDlgItem(hWnd,IDC_EDIT_CONTACT_LIST_FORMAT); + assert(IsWindow(hEdit)); + + tstring s = get_window_text(hEdit); + if(true == s.empty()) + { + prepare_edit_ctrl_for_error(hEdit); + Quotes_MessageBox(hWnd,TranslateT("Enter text to display in contact list."),MB_OK|MB_ICONERROR); + bOk = FALSE; + } + } + + ::SetWindowLongPtr(hWnd,DWLP_MSGRESULT,(TRUE == bOk) ? FALSE : TRUE); + } + break; + case PSN_APPLY: + { + BOOL bOk = FALSE; + UINT nRefreshRate = ::GetDlgItemInt(hWnd,IDC_EDIT_REFRESH_RATE,&bOk,FALSE); + assert(TRUE == bOk); + ERefreshRateType nType = static_cast(::SendMessage(::GetDlgItem(hWnd,IDC_COMBO_REFRESH_RATE),CB_GETCURSEL,0,0)); + + assert(rData.m_pQuotesProvider); + + CQuotesProviderVisitorDbSettings visitor; + rData.m_pQuotesProvider->Accept(visitor); + assert(visitor.m_pszDbRefreshRateType); + assert(visitor.m_pszDbRefreshRateValue); + assert(visitor.m_pszDbDisplayNameFormat); + assert(visitor.m_pszDbStatusMsgFormat); + + rData.m_bFireSetingsChangedEvent = true; + DBWriteContactSettingWord(NULL,QUOTES_MODULE_NAME,visitor.m_pszDbRefreshRateType,nType); + DBWriteContactSettingWord(NULL,QUOTES_MODULE_NAME,visitor.m_pszDbRefreshRateValue,nRefreshRate); + + tstring s = get_window_text(::GetDlgItem(hWnd,IDC_EDIT_CONTACT_LIST_FORMAT)); + DBWriteContactSettingTString(NULL,QUOTES_MODULE_NAME,visitor.m_pszDbDisplayNameFormat,s.c_str()); + + s = get_window_text(::GetDlgItem(hWnd,IDC_EDIT_STATUS_MESSAGE_FORMAT)); + DBWriteContactSettingTString(NULL,QUOTES_MODULE_NAME,visitor.m_pszDbStatusMsgFormat,s.c_str()); + + s = get_window_text(::GetDlgItem(hWnd,IDC_EDIT_TENDENCY_FORMAT)); + DBWriteContactSettingTString(NULL,QUOTES_MODULE_NAME,visitor.m_pszDbTendencyFormat,s.c_str()); + + CAdvProviderSettings* pAdvSet = get_adv_settings(rData.m_pQuotesProvider,false); + if(pAdvSet) + { + pAdvSet->SaveToDb(); + } + } + break; + } + } + break; + case WM_DESTROY: + remove_adv_settings(rData.m_pQuotesProvider); + break; + } +} \ No newline at end of file -- cgit v1.2.3