aboutsummaryrefslogtreecommitdiff
path: root/Src/Winamp/setup/spage_connect.cpp
diff options
context:
space:
mode:
authorJef <jef@targetspot.com>2024-09-24 08:54:57 -0400
committerJef <jef@targetspot.com>2024-09-24 08:54:57 -0400
commit20d28e80a5c861a9d5f449ea911ab75b4f37ad0d (patch)
tree12f17f78986871dd2cfb0a56e5e93b545c1ae0d0 /Src/Winamp/setup/spage_connect.cpp
parent537bcbc86291b32fc04ae4133ce4d7cac8ebe9a7 (diff)
downloadwinamp-20d28e80a5c861a9d5f449ea911ab75b4f37ad0d.tar.gz
Initial community commit
Diffstat (limited to 'Src/Winamp/setup/spage_connect.cpp')
-rw-r--r--Src/Winamp/setup/spage_connect.cpp313
1 files changed, 313 insertions, 0 deletions
diff --git a/Src/Winamp/setup/spage_connect.cpp b/Src/Winamp/setup/spage_connect.cpp
new file mode 100644
index 00000000..af0e84cc
--- /dev/null
+++ b/Src/Winamp/setup/spage_connect.cpp
@@ -0,0 +1,313 @@
+#define APSTUDIO_READONLY_SYMBOLS
+#include "main.h"
+#include "./spage_connect.h"
+#include "./setup_resource.h"
+#include "../nu/ns_wc.h"
+#include "./langutil.h"
+
+setup_page_connect::setup_page_connect() : ref(1), hwnd(NULL)
+{
+ inetMode = 0;
+ bPort80 = FALSE;
+ szProxy[MAX_PATH] = 0x00;
+}
+setup_page_connect::~setup_page_connect()
+{
+}
+
+size_t setup_page_connect::AddRef()
+{
+ return ++ref;
+}
+
+size_t setup_page_connect::Release()
+{
+ if (1 == ref)
+ {
+ delete(this);
+ return 0;
+ }
+ return --ref;
+}
+
+HRESULT setup_page_connect::GetName(bool bShort, const wchar_t **pszName)
+{
+ static wchar_t szName[64] = {0,};
+ *pszName = (*szName) ? szName : getStringW(IDS_PAGE_CONNECTIVITY, szName, sizeof(szName)/sizeof(wchar_t));
+ return S_OK;
+}
+
+HRESULT setup_page_connect::Save(HWND hwndText)
+{
+ HRESULT hr(S_OK);
+ INT count;
+ wchar_t app[MAX_PATH] = {0}, *p;
+
+ if (S_FALSE == IsDirty()) return S_OK;
+
+ count = MultiByteToWideCharSZ(CP_ACP, 0, app_name, -1, app, sizeof(app)/sizeof(wchar_t));
+ if (!count) hr = S_FALSE;
+ if (S_FALSE == hr) return hr;
+
+ if (config_inet_mode != inetMode)
+ {
+ wchar_t szText[MAX_PATH] = {0};
+ config_inet_mode = (char)inetMode;
+ WritePrivateProfileStringW(app, L"inet_mode", _itow(inetMode, szText, 10), INI_FILE);
+ }
+
+ if (2 == inetMode) szProxy[0] = 0x00;
+ if (0 == *szProxy) config_proxy[0] = 0x00;
+ else
+ {
+ count = WideCharToMultiByteSZ(CP_ACP, 0, szProxy, -1, config_proxy, sizeof(config_proxy)/sizeof(char), NULL, NULL);
+ if (!count) hr = S_FALSE;
+ }
+ if (!WritePrivateProfileStringW(app, L"Proxy", szProxy, INI_FILE)) hr = S_FALSE;
+ if (bPort80 && 0x00 == *szProxy) bPort80 = FALSE;
+ p = (bPort80) ? L"1" : L"";
+ if (!WritePrivateProfileStringW(app, L"proxyonly80", p, INI_FILE)) hr = S_FALSE;
+ WritePrivateProfileStringW(app, L"proxy80", p, INI_FILE); // old
+
+ if (hwnd) UpdateUI();
+ return hr;
+}
+
+HRESULT setup_page_connect::Revert(void)
+{
+ HRESULT hr(S_OK);
+ INT count;
+ wchar_t app[MAX_PATH] = {0};
+
+ count = MultiByteToWideCharSZ(CP_ACP, 0, app_name, -1, app, sizeof(app)/sizeof(wchar_t));
+ if (!count) hr = S_FALSE;
+
+ if (config_inet_mode==3) isInetAvailable(); // autodetect
+ inetMode = config_inet_mode;
+
+ if (*config_proxy && 2 != inetMode)
+ {
+ count = MultiByteToWideCharSZ(CP_ACP, 0, config_proxy, -1, szProxy, sizeof(szProxy)/sizeof(wchar_t));
+ if (!count) hr = S_FALSE;
+ }
+ else szProxy[0] = 0x00;
+
+ bPort80 = (0x00 != *szProxy && 0 != GetPrivateProfileIntW(app, L"proxyonly80", 0, INI_FILE));
+
+ if (hwnd) UpdateUI();
+
+ return hr;
+}
+
+HRESULT setup_page_connect::IsDirty(void)
+{
+ INT res;
+ wchar_t app[MAX_PATH] = {0};
+ char szTest[MAX_PATH] = {0};
+
+ if (inetMode != config_inet_mode) return S_OK;
+
+ if (2 == inetMode || 0 == *szProxy) szTest[0] = 0x00;
+ else
+ {
+ res = WideCharToMultiByteSZ(CP_ACP, 0, szProxy, -1, szTest, sizeof(szTest)/sizeof(char), NULL, NULL);
+ if (!res) return E_OUTOFMEMORY;
+ }
+
+ res = CompareStringA(MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), SORT_DEFAULT),
+ NORM_IGNORECASE, szTest, -1, config_proxy, -1);
+ if (0 == res) return E_UNEXPECTED;
+ if (CSTR_EQUAL != res) return S_OK;
+
+ res = MultiByteToWideCharSZ(CP_ACP, 0, app_name, -1, app, sizeof(app)/sizeof(wchar_t));
+ if (!res) return E_OUTOFMEMORY;
+
+ return ((bPort80 && 0x00 != *szProxy) != ( 0 != GetPrivateProfileIntW(app, L"proxyonly80", 0, INI_FILE))) ? S_OK : S_FALSE;
+}
+
+HRESULT setup_page_connect::Validate(void)
+{
+ return S_OK;
+}
+
+HRESULT setup_page_connect::CreateView(HWND hwndParent, HWND *phwnd)
+{
+ *phwnd = WACreateDialogParam(MAKEINTRESOURCEW(IDD_SETUP_PAGE_CONNECT), hwndParent, ::DialogProc, (LPARAM)this);
+ return S_OK;
+}
+
+void setup_page_connect::UpdateUI(void)
+{
+ int count;
+
+ if (!hwnd || !IsWindow(hwnd)) return;
+
+ CheckDlgButton(hwnd, IDC_CHK_PORT80, (bPort80) ? BST_CHECKED : BST_UNCHECKED);
+ SetDlgItemTextW(hwnd, IDC_EDT_SERVER, szProxy);
+
+ HWND hwndCB = GetDlgItem(hwnd, IDC_CB_CONNECT);
+ if (!hwndCB || !IsWindow(hwndCB)) return;
+
+ count = (INT)SendMessageW(hwndCB, CB_GETCOUNT, 0, 0L);
+ if (count > 0)
+ {
+ int index;
+ for (index = 0; index < count && inetMode != (INT)SendMessageW(hwndCB, CB_GETITEMDATA, index, 0L); index++);
+ if (index == count)
+ {
+ inetMode = (INT)SendMessageW(hwndCB, CB_GETITEMDATA, 0, 0L);
+ index = 0;
+ }
+ SendMessageW(hwndCB, CB_SETCURSEL, index, 0L);
+ PostMessageW(hwnd, WM_COMMAND, MAKEWPARAM(IDC_CB_CONNECT, CBN_SELCHANGE), (LPARAM)hwndCB);
+ }
+}
+
+void setup_page_connect::ComboBox_OnSelChange(HWND hwndCtrl)
+{
+ INT proxyList[] = { IDC_GRP_PROXY, IDC_LBL_SERVER, IDC_EDT_SERVER, IDC_CHK_PORT80, };
+ INT index;
+
+ index = (INT)SendMessageW(hwndCtrl, CB_GETCURSEL, 0, 0L);
+ if (CB_ERR == index) return;
+
+ inetMode = (INT)SendMessageW(hwndCtrl, CB_GETITEMDATA, index, 0L);
+
+ for (int i = 0; i < sizeof(proxyList)/sizeof(INT); i++)
+ {
+ HWND hwndItem = GetDlgItem(hwnd, proxyList[i]);
+ if (IsWindow(hwndItem)) ShowWindow(hwndItem, (2 != inetMode) ? SW_SHOWNA : SW_HIDE);
+ }
+}
+
+INT_PTR setup_page_connect::OnInitDialog(HWND hwndFocus, LPARAM lParam)
+{
+ UINT connID[] = { IDS_INST_INET1, IDS_INST_INET2, IDS_INST_INET3, };
+ HWND hwndCB = GetDlgItem(hwnd, IDC_CB_CONNECT);
+
+ CheckDlgButton(hwnd, IDC_CHK_PORT80, (bPort80) ? BST_CHECKED : BST_UNCHECKED);
+ //SendDlgItemMessageW(hwnd, IDC_EDT_SERVER, EM_LIMITTEXT, sizeof(szProxy)/sizeof(wchar_t), 0);
+ SetDlgItemTextW(hwnd, IDC_EDT_SERVER, szProxy);
+
+ if (inetMode < 0) inetMode = 0;
+ else if (inetMode >= sizeof(connID)/sizeof(INT)) inetMode = sizeof(connID)/sizeof(INT) - 1;
+
+ for(int i = 0; i < sizeof(connID)/sizeof(INT); i++)
+ {
+ INT index = (INT)SendMessageW(hwndCB, CB_ADDSTRING,0, (LPARAM)getStringW(connID[i], NULL, 0));
+ if (CB_ERR != index) SendMessageW(hwndCB, CB_SETITEMDATA, index, (LPARAM)i);
+ if (inetMode == i) SendMessageW(hwndCB, CB_SETCURSEL, index, 0L);
+ }
+
+ PostMessageW(hwnd, WM_COMMAND, MAKEWPARAM(IDC_CB_CONNECT, CBN_SELCHANGE), (LPARAM)hwndCB);
+
+ return 0;
+}
+
+void setup_page_connect::OnSize(UINT nType, INT cx, INT cy)
+{
+ INT ctrlList[] = { IDC_CB_CONNECT, IDC_GRP_PROXY, IDC_LBL_SERVER, IDC_EDT_SERVER, IDC_CHK_PORT80, };
+ RECT rw;
+ HDWP hdwp = BeginDeferWindowPos(sizeof(ctrlList)/sizeof(INT));
+ if (!hdwp) return;
+
+ for (int i = 0; i < sizeof(ctrlList)/sizeof(INT); i++)
+ {
+ HWND hwndCtrl = GetDlgItem(hwnd, ctrlList[i]);
+ if (hwndCtrl)
+ {
+ GetWindowRect(hwndCtrl, &rw);
+ MapWindowPoints(HWND_DESKTOP, hwnd, (POINT*)&rw, 2);
+ hdwp = DeferWindowPos(hdwp, hwndCtrl, NULL, max(0, (cx - (rw.right - rw.left))/2), rw.top, 0, 0, SWP_NOACTIVATE | SWP_NOZORDER | SWP_NOSIZE);
+ }
+ }
+ if (hdwp) EndDeferWindowPos(hdwp);
+}
+
+void setup_page_connect::OnCommand(INT nCtrlID, INT nEvntID, HWND hwndCtrl)
+{
+ switch(nCtrlID)
+ {
+ case IDC_CB_CONNECT:
+ switch(nEvntID)
+ {
+ case CBN_SELCHANGE: ComboBox_OnSelChange(hwndCtrl); break;
+ }
+ break;
+ case IDC_EDT_SERVER:
+ switch(nEvntID)
+ {
+ case EN_CHANGE:
+ GetWindowTextW(hwndCtrl, szProxy, sizeof(szProxy)/sizeof(wchar_t));
+ EnableWindow(GetDlgItem(hwnd, IDC_CHK_PORT80), 0x00 != *szProxy);
+ if(0x00 == *szProxy)
+ {
+ CheckDlgButton(hwnd, IDC_CHK_PORT80, BST_UNCHECKED);
+ PostMessageW(hwnd, WM_COMMAND, MAKEWPARAM(IDC_CHK_PORT80, BN_CLICKED), (LPARAM)GetDlgItem(hwnd, IDC_CHK_PORT80));
+ }
+ break;
+ }
+ break;
+ case IDC_CHK_PORT80:
+ switch(nEvntID)
+ {
+ case BN_CLICKED: bPort80 = (BST_CHECKED & (INT)SendMessageW(hwndCtrl, BM_GETSTATE, 0, 0L)); break;
+ }
+ break;
+ }
+}
+
+INT_PTR setup_page_connect::PageDlgProc(UINT uMsg, WPARAM wParam, LPARAM lParam)
+{
+ switch(uMsg)
+ {
+ case WM_INITDIALOG: return OnInitDialog((HWND)wParam, lParam);
+ case WM_DESTROY: break;
+ case WM_SIZE: OnSize((UINT)wParam, LOWORD(lParam), HIWORD(lParam)); break;
+ case WM_COMMAND: OnCommand(LOWORD(wParam), HIWORD(wParam), (HWND)lParam); break;
+ }
+ return 0;
+}
+
+static INT_PTR WINAPI DialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
+{
+ setup_page_connect *pInst = (setup_page_connect*)GetPropW(hwnd, L"SETUPPAGE");
+
+ switch(uMsg)
+ {
+ case WM_INITDIALOG:
+ pInst = (setup_page_connect*)lParam;
+ if (pInst)
+ {
+ pInst->hwnd = hwnd;
+ SetPropW(hwnd, L"SETUPPAGE", pInst);
+ }
+ break;
+ case WM_DESTROY:
+ if (pInst)
+ {
+ pInst->PageDlgProc(uMsg, wParam, lParam);
+ RemovePropW(hwnd, L"SETUPPAGE");
+ pInst = NULL;
+ }
+ break;
+ }
+ return (pInst) ? pInst->PageDlgProc(uMsg, wParam, lParam) : 0;
+}
+
+#ifdef CBCLASS
+#undef CBCLASS
+#endif
+
+#define CBCLASS setup_page_connect
+START_DISPATCH
+CB(ADDREF, AddRef)
+CB(RELEASE, Release)
+CB(API_SETUPPAGE_GET_NAME, GetName)
+CB(API_SETUPPAGE_CREATEVIEW, CreateView)
+CB(API_SETUPPAGE_SAVE, Save)
+CB(API_SETUPPAGE_REVERT, Revert)
+CB(API_SETUPPAGE_ISDIRTY, IsDirty)
+CB(API_SETUPPAGE_VALIDATE, Validate)
+END_DISPATCH
+#undef CBCLASS \ No newline at end of file