aboutsummaryrefslogtreecommitdiff
path: root/Src/Plugins/Library/ml_wire/Preferences.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Src/Plugins/Library/ml_wire/Preferences.cpp')
-rw-r--r--Src/Plugins/Library/ml_wire/Preferences.cpp160
1 files changed, 160 insertions, 0 deletions
diff --git a/Src/Plugins/Library/ml_wire/Preferences.cpp b/Src/Plugins/Library/ml_wire/Preferences.cpp
new file mode 100644
index 00000000..ec7a20eb
--- /dev/null
+++ b/Src/Plugins/Library/ml_wire/Preferences.cpp
@@ -0,0 +1,160 @@
+#include "main.h"
+#include "api__ml_wire.h"
+#include "../winamp/wa_ipc.h"
+#include "Defaults.h"
+#include "UpdateTime.h"
+#include "UpdateAutoDownload.h"
+#include "./cloud.h"
+#include <shlobj.h>
+
+extern Cloud cloud;
+
+void Preferences_Init(HWND hwndDlg)
+{
+ WCHAR szBuffer[256] = {0};
+ for (int i = 0;i < Update::TIME_NUMENTRIES;i++)
+ {
+ const wchar_t *str = Update::GetTitle(i, szBuffer, ARRAYSIZE(szBuffer));
+ SendMessage(GetDlgItem(hwndDlg, IDC_UPDATELIST), CB_ADDSTRING, 0, (LPARAM) str);
+ }
+ int selection = Update::GetSelection(updateTime, autoUpdate);
+ SendMessage(GetDlgItem(hwndDlg, IDC_UPDATELIST), CB_SETCURSEL, selection, 0);
+
+ WCHAR adBuffer[256] = {0};
+ for (int i = 0;i < UpdateAutoDownload::AUTODOWNLOAD_NUMENTRIES;i++)
+ {
+ const wchar_t *str = UpdateAutoDownload::GetTitle(i, adBuffer, ARRAYSIZE(adBuffer));
+ SendMessage(GetDlgItem(hwndDlg, IDC_AUTODOWNLOADLIST), CB_ADDSTRING, 0, (LPARAM) str);
+ }
+ selection = UpdateAutoDownload::GetSelection(autoDownloadEpisodes, autoDownload);
+ SendMessage(GetDlgItem(hwndDlg, IDC_AUTODOWNLOADLIST), CB_SETCURSEL, selection, 0);
+
+ SetDlgItemText(hwndDlg, IDC_DOWNLOADLOCATION, defaultDownloadPath);
+ SetDlgItemText(hwndDlg, IDC_DIRECTORYURL, serviceUrl);
+ CheckDlgButton(hwndDlg, IDC_UPDATEONLAUNCH, updateOnLaunch?BST_CHECKED:BST_UNCHECKED);
+}
+
+BOOL CALLBACK browseEnumProc(HWND hwnd, LPARAM lParam)
+{
+ wchar_t cl[32] = {0};
+ GetClassNameW(hwnd, cl, ARRAYSIZE(cl));
+ if (!lstrcmpiW(cl, WC_TREEVIEW))
+ {
+ PostMessage(hwnd, TVM_ENSUREVISIBLE, 0, (LPARAM)TreeView_GetSelection(hwnd));
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+int CALLBACK WINAPI BrowseCallbackProc(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData)
+{
+ if(uMsg == BFFM_INITIALIZED)
+ {
+ SendMessageW(hwnd, BFFM_SETSELECTIONW, 1, (LPARAM)defaultDownloadPath);
+
+ // this is not nice but it fixes the selection not working correctly on all OSes
+ EnumChildWindows(hwnd, browseEnumProc, 0);
+ }
+ return 0;
+}
+
+void Preferences_Browse(HWND hwndDlg)
+{
+ wchar_t folder[MAX_PATH] = {0};
+ BROWSEINFO browse = {0};
+ lstrcpyn(folder, defaultDownloadPath, MAX_PATH);
+ browse.hwndOwner = hwndDlg;
+ browse.lpszTitle = WASABI_API_LNGSTRINGW(IDS_CHOOSE_FOLDER);
+ browse.ulFlags = BIF_RETURNONLYFSDIRS | BIF_NEWDIALOGSTYLE;
+ browse.lpfn = BrowseCallbackProc;
+ LPITEMIDLIST itemList = SHBrowseForFolder(&browse);
+ if (itemList)
+ {
+ SHGetPathFromIDList(itemList, folder);
+ lstrcpyn(defaultDownloadPath, folder, MAX_PATH);
+ SetWindowText(GetDlgItem(hwndDlg, IDC_DOWNLOADLOCATION), folder);
+ LPMALLOC malloc;
+ SHGetMalloc(&malloc);
+ malloc->Free(itemList);
+ }
+}
+
+void Preferences_UpdateOnLaunch( HWND hwndDlg )
+{
+ updateOnLaunch = ( IsDlgButtonChecked( hwndDlg, IDC_UPDATEONLAUNCH ) == BST_CHECKED );
+}
+
+void Preferences_UpdateList(HWND hwndDlg)
+{
+ LRESULT timeSelection;
+ timeSelection = SendMessage(GetDlgItem(hwndDlg, IDC_UPDATELIST), CB_GETCURSEL, 0, 0);
+ if (timeSelection != CB_ERR)
+ {
+ autoUpdate = Update::GetAutoUpdate(timeSelection);
+ updateTime = Update::GetTime(timeSelection);
+ if ( autoUpdate )
+ cloud.Pulse(); // update the waitable timer
+ }
+}
+
+void Preferences_AutoDownloadList(HWND hwndDlg)
+{
+ LRESULT episodeSelection;
+ episodeSelection = SendMessage(GetDlgItem(hwndDlg, IDC_AUTODOWNLOADLIST), CB_GETCURSEL, 0, 0);
+ if (episodeSelection != CB_ERR)
+ {
+ autoDownload = UpdateAutoDownload::GetAutoDownload(episodeSelection);
+ autoDownloadEpisodes = UpdateAutoDownload::GetAutoDownloadEpisodes(episodeSelection);
+ }
+}
+
+BOOL CALLBACK PreferencesDialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
+{
+ switch (uMsg)
+ {
+ case WM_INITDIALOG:
+ Preferences_Init(hwndDlg);
+ break;
+ case WM_COMMAND:
+ switch (LOWORD(wParam))
+ {
+ case IDC_BROWSE:
+ Preferences_Browse(hwndDlg);
+ break;
+ case IDC_UPDATELIST:
+ Preferences_UpdateList(hwndDlg);
+ break;
+ case IDC_AUTODOWNLOADLIST:
+ Preferences_AutoDownloadList(hwndDlg);
+ break;
+ case IDC_UPDATEONLAUNCH:
+ Preferences_UpdateOnLaunch(hwndDlg);
+ break;
+ case IDC_DOWNLOADLOCATION:
+ if (HIWORD(wParam) == EN_CHANGE)
+ {
+ GetDlgItemText(hwndDlg, IDC_DOWNLOADLOCATION, defaultDownloadPath, MAX_PATH);
+ if (!PathFileExists(defaultDownloadPath))
+ {
+ BuildDefaultDownloadPath(plugin.hwndWinampParent);
+ SetDlgItemText(hwndDlg, IDC_DOWNLOADLOCATION, defaultDownloadPath);
+ }
+ }
+ break;
+ case IDC_DIRECTORYURL:
+ if (HIWORD(wParam) == EN_CHANGE)
+ {
+ GetDlgItemText(hwndDlg, IDC_DIRECTORYURL, serviceUrl, ARRAYSIZE(serviceUrl));
+ }
+ break;
+ }
+ break;
+ case WM_DESTROY:
+ // ensure we save the changed settings
+ SaveAll(true);
+ break;
+ }
+
+ return 0;
+}