aboutsummaryrefslogtreecommitdiff
path: root/Src/Plugins/Input/in_wmvdrm/ConfigDialog.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/Plugins/Input/in_wmvdrm/ConfigDialog.cpp
parent537bcbc86291b32fc04ae4133ce4d7cac8ebe9a7 (diff)
downloadwinamp-20d28e80a5c861a9d5f449ea911ab75b4f37ad0d.tar.gz
Initial community commit
Diffstat (limited to 'Src/Plugins/Input/in_wmvdrm/ConfigDialog.cpp')
-rw-r--r--Src/Plugins/Input/in_wmvdrm/ConfigDialog.cpp398
1 files changed, 398 insertions, 0 deletions
diff --git a/Src/Plugins/Input/in_wmvdrm/ConfigDialog.cpp b/Src/Plugins/Input/in_wmvdrm/ConfigDialog.cpp
new file mode 100644
index 00000000..ece52a0e
--- /dev/null
+++ b/Src/Plugins/Input/in_wmvdrm/ConfigDialog.cpp
@@ -0,0 +1,398 @@
+#include "Main.h"
+#include "resource.h"
+#include "../nu/ListView.h"
+#include "FileTypes.h"
+#include "AutoChar.h"
+
+W_ListView typeList;
+FileTypes::TypeList types;
+#define CFGSET(hwnd, code, boolval) CheckDlgButton(hwnd, code, ((boolval)?BST_CHECKED:BST_UNCHECKED))
+
+struct SpeakerSetup
+{
+ int description;
+ DWORD value;
+};
+SpeakerSetup speakerList[] =
+{
+ {IDS_STEREO,DSSPEAKER_STEREO},
+ {IDS_QUADROPHONIC,DSSPEAKER_QUAD},
+ {IDS_SURROUND,DSSPEAKER_SURROUND},
+ {IDS_5_1,DSSPEAKER_5POINT1},
+ {IDS_7_1,DSSPEAKER_7POINT1},
+};
+
+void FillFileTypes()
+{
+ typeList.Clear();
+
+ long attrCount = types.size();
+ int pos=0;
+ for (long i = 0;i < attrCount;i++)
+ {
+ typeList.InsertItem(pos, types[i].wtype, 0);
+ typeList.SetItemText(pos, 1, types[i].description);
+ pos++;
+ }
+}
+
+void ResetTypes()
+{
+ {
+ Nullsoft::Utility::AutoLock lock (fileTypes.typeGuard);
+ types=fileTypes.types;
+ }
+ FillFileTypes();
+}
+
+void Preferences_Populate(HWND hwndDlg)
+{
+ CFGSET(hwndDlg, IDC_HTTPMETA, config_http_metadata);
+
+/* CFGSET(hwndDlg, IDC_SILENT, !config_no_silent);
+ CFGSET(hwndDlg, IDC_UNTRUSTED, config_untrusted_ok);
+*/
+ CFGSET(hwndDlg, IDC_EXTRA_ASX, config_extra_asx_extensions);
+
+ SetDlgItemInt(hwndDlg,IDC_BUFFER_TIME, config_buffer_time, FALSE/*unsigned*/);
+
+ SendMessage(GetDlgItem(hwndDlg, IDC_AUDIO_SPEAKER_COUNT), CB_RESETCONTENT, 0, 0);
+ for (int i = 0;i < sizeof(speakerList)/sizeof(speakerList[0]) ;i++)
+ {
+ SendMessage(GetDlgItem(hwndDlg, IDC_AUDIO_SPEAKER_COUNT), CB_ADDSTRING, 0, (LPARAM) WASABI_API_LNGSTRINGW(speakerList[i].description));
+ if (speakerList[i].value == config_audio_num_channels)
+ SendMessage(GetDlgItem(hwndDlg, IDC_AUDIO_SPEAKER_COUNT), CB_SETCURSEL, i, 0);
+ }
+
+ ResetTypes();
+}
+void Preferences_Init(HWND hwndDlg)
+{
+ typeList.setwnd(GetDlgItem(hwndDlg, IDC_TYPELIST));
+ typeList.AddCol(WASABI_API_LNGSTRINGW(IDS_EXT), 75);
+ typeList.AddCol(WASABI_API_LNGSTRINGW(IDS_DESCRIPTION), 250);
+ Preferences_Populate(hwndDlg);
+
+ if(config_col1 == -1)
+ typeList.AutoSizeColumn(0);
+ else
+ typeList.SetColumnWidth(0, config_col1);
+
+ if(config_col2 == -1)
+ typeList.AutoSizeColumn(1);
+ else
+ typeList.SetColumnWidth(1, config_col2);
+
+ if (NULL != WASABI_API_APP)
+ WASABI_API_APP->DirectMouseWheel_EnableConvertToMouseWheel(typeList.getwnd(), TRUE);
+}
+
+void Preferences_TypeRemove(HWND hwndDlg)
+{
+ int next = -1;
+
+ do
+ {
+ next = typeList.GetNextSelected(next);
+ if (next != -1)
+ {
+ free(types[next].wtype);
+ types[next].wtype=0;
+ }
+ } while (next != -1);
+
+ for (FileTypes::TypeList::iterator itr = types.begin(); itr != types.end(); )
+ {
+ if (!itr->wtype || !itr->wtype[0])
+ types.erase(itr);
+ else
+ itr++;
+ }
+}
+
+void OnOk(HWND hwndDlg)
+{
+ config_http_metadata=IsDlgButtonChecked(hwndDlg, IDC_HTTPMETA)== BST_CHECKED;
+// config_no_silent=IsDlgButtonChecked(hwndDlg, IDC_SILENT) != BST_CHECKED;
+// config_untrusted_ok=IsDlgButtonChecked(hwndDlg, IDC_UNTRUSTED)== BST_CHECKED;
+ config_extra_asx_extensions=IsDlgButtonChecked(hwndDlg, IDC_EXTRA_ASX)== BST_CHECKED;
+ wchar_t temp[64] = {0};
+
+ GetDlgItemText(hwndDlg,IDC_BUFFER_TIME, temp, 64);
+ int newBufferTime= _wtoi(temp);
+ if (newBufferTime<1000)
+ newBufferTime=1000;
+ if (newBufferTime>60000)
+ newBufferTime=60000;
+ config_buffer_time=newBufferTime;
+
+ int numChannels=SendMessage(GetDlgItem(hwndDlg, IDC_AUDIO_SPEAKER_COUNT), CB_GETCURSEL, 0, 0);
+ if (numChannels!=CB_ERR)
+ config_audio_num_channels = speakerList[numChannels].value;
+
+ fileTypes.SetTypes(types);
+}
+
+static INT_PTR CALLBACK AddTypeProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
+{
+ switch (uMsg)
+ {
+ case WM_INITDIALOG:
+ CFGSET(hwndDlg, IDC_FILEEXTENSION, true);
+ CFGSET(hwndDlg, IDC_TYPE_AUDIO, true);
+ break;
+ case WM_COMMAND:
+ switch (LOWORD(wParam))
+ {
+ case IDC_PROTOCOL:
+ SetDlgItemText(hwndDlg, IDC_STATIC_TYPE, WASABI_API_LNGSTRINGW(IDS_PROTOCOL));
+ break;
+ case IDC_FILEEXTENSION:
+ SetDlgItemText(hwndDlg, IDC_STATIC_TYPE, WASABI_API_LNGSTRINGW(IDS_EXTENSION));
+ break;
+ case IDOK:
+ {
+ wchar_t type[MAX_PATH] = {0}, description[1024] = {0};
+ GetDlgItemText(hwndDlg,IDC_TYPE,type,MAX_PATH);
+ GetDlgItemText(hwndDlg,IDC_DESCRIPTION,description,1024);
+ bool isProtocol = IsDlgButtonChecked(hwndDlg, IDC_PROTOCOL)== BST_CHECKED;
+ int avType = IsDlgButtonChecked(hwndDlg, IDC_TYPE_VIDEO)== BST_CHECKED;
+ types.push_back(FileType(type, description, isProtocol, avType));
+ EndDialog(hwndDlg, 0);
+ }
+ break;
+ case IDCANCEL:
+ EndDialog(hwndDlg, 0);
+ break;
+ }
+ break;
+
+ }
+ return FALSE;
+}
+
+void AddType(HWND hwndDlg)
+{
+ WASABI_API_DIALOGBOXW(IDD_ADDTYPE, hwndDlg, AddTypeProc);
+}
+
+static size_t editIndex=0;
+static INT_PTR CALLBACK EditTypeProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
+{
+ switch (uMsg)
+ {
+ case WM_INITDIALOG:
+ SetWindowText(hwndDlg, WASABI_API_LNGSTRINGW(IDS_EDIT_FILE_TYPE));
+ CFGSET(hwndDlg, IDC_TYPE_AUDIO, (types[editIndex].avType==FileType::AUDIO));
+ CFGSET(hwndDlg, IDC_TYPE_VIDEO, (types[editIndex].avType==FileType::VIDEO));
+ CFGSET(hwndDlg, IDC_PROTOCOL, types[editIndex].isProtocol);
+ CFGSET(hwndDlg, IDC_FILEEXTENSION, !types[editIndex].isProtocol);
+ SetDlgItemText(hwndDlg,IDC_TYPE, types[editIndex].wtype);
+ SetDlgItemText(hwndDlg,IDC_DESCRIPTION, types[editIndex].description);
+ if (types[editIndex].isProtocol)
+ SetDlgItemText(hwndDlg, IDC_STATIC_TYPE, WASABI_API_LNGSTRINGW(IDS_PROTOCOL));
+ else
+ SetDlgItemText(hwndDlg, IDC_STATIC_TYPE, WASABI_API_LNGSTRINGW(IDS_EXTENSION));
+ break;
+ case WM_COMMAND:
+ switch (LOWORD(wParam))
+ {
+ case IDC_PROTOCOL:
+ SetDlgItemText(hwndDlg, IDC_STATIC_TYPE, WASABI_API_LNGSTRINGW(IDS_PROTOCOL));
+ break;
+ case IDC_FILEEXTENSION:
+ SetDlgItemText(hwndDlg, IDC_STATIC_TYPE, WASABI_API_LNGSTRINGW(IDS_EXTENSION));
+ break;
+ case IDOK:
+ {
+ wchar_t type[MAX_PATH] = {0}, description[1024] = {0};
+ GetDlgItemText(hwndDlg,IDC_TYPE,type,MAX_PATH);
+ GetDlgItemText(hwndDlg,IDC_DESCRIPTION,description,1024);
+ bool isProtocol = IsDlgButtonChecked(hwndDlg, IDC_PROTOCOL)== BST_CHECKED;
+
+ types[editIndex].avType = (IsDlgButtonChecked(hwndDlg, IDC_TYPE_VIDEO)== BST_CHECKED);
+ if(types[editIndex].wtype)free(types[editIndex].wtype);
+ types[editIndex].wtype = _wcsdup(type);
+
+ types[editIndex].isProtocol = isProtocol;
+ if(types[editIndex].description)free(types[editIndex].description);
+ types[editIndex].description = _wcsdup(description);
+ EndDialog(hwndDlg, 0);
+ }
+ break;
+ case IDCANCEL:
+ EndDialog(hwndDlg, 0);
+ break;
+ }
+ break;
+
+ }
+ return FALSE;
+}
+
+
+void EditType(HWND hwndDlg)
+{
+ editIndex=-1;
+ do
+ {
+ editIndex=typeList.GetNextSelected(editIndex);
+ if (editIndex != -1)
+ {
+ WASABI_API_DIALOGBOXW(IDD_ADDTYPE, hwndDlg, EditTypeProc);
+ }
+ else
+ return;
+
+ } while (true);
+}
+
+
+void Advanced_Init(HWND hwndDlg)
+{
+ CFGSET(hwndDlg, IDC_AUDIO_THREAD, config_audio_dedicated_thread);
+ CFGSET(hwndDlg, IDC_AUDIO_EARLY, config_audio_early);
+ CFGSET(hwndDlg, IDC_AUDIO_OUTOFORDER, config_audio_outoforder);
+ CFGSET(hwndDlg, IDC_AUDIO_DROP, config_video_catchup);
+
+ CFGSET(hwndDlg, IDC_VIDEO_THREAD, config_video_dedicated_thread);
+ CFGSET(hwndDlg, IDC_VIDEO_EARLY, config_video_early);
+ CFGSET(hwndDlg, IDC_VIDEO_OUTOFORDER, config_video_outoforder);
+ CFGSET(hwndDlg, IDC_VIDEO_NOTIFY, config_video_notifylate);
+
+ CFGSET(hwndDlg, IDC_REALTIME, !config_clock);
+ CFGSET(hwndDlg, IDC_LOWMEMORY, config_lowmemory);
+
+ SetDlgItemInt(hwndDlg,IDC_AUDIO_CACHE_FRAMES, config_audio_cache_frames, TRUE/*signed*/);
+ SetDlgItemInt(hwndDlg,IDC_VIDEO_CACHE_FRAMES, config_video_cache_frames, TRUE);
+ SetDlgItemInt(hwndDlg,IDC_VIDEO_DROP_THRESHOLD, config_video_drop_threshold, TRUE);
+ SetDlgItemInt(hwndDlg,IDC_VIDEO_JITTER, config_video_jitter, TRUE);
+ SetDlgItemInt(hwndDlg,IDC_AUDIO_EARLYPAD, config_audio_early_pad, TRUE);
+ SetDlgItemInt(hwndDlg,IDC_VIDEO_EARLYPAD, config_video_early_pad,TRUE);
+
+}
+
+void Advanced_OnOK(HWND hwndDlg)
+{
+ config_audio_dedicated_thread=IsDlgButtonChecked(hwndDlg, IDC_AUDIO_THREAD)== BST_CHECKED;
+ config_audio_early=IsDlgButtonChecked(hwndDlg, IDC_AUDIO_EARLY)== BST_CHECKED;
+ config_audio_outoforder=IsDlgButtonChecked(hwndDlg, IDC_AUDIO_OUTOFORDER)== BST_CHECKED;
+ config_video_catchup=IsDlgButtonChecked(hwndDlg, IDC_AUDIO_DROP)== BST_CHECKED;
+
+ config_video_dedicated_thread=IsDlgButtonChecked(hwndDlg, IDC_VIDEO_THREAD)== BST_CHECKED;
+ config_video_early=IsDlgButtonChecked(hwndDlg, IDC_VIDEO_EARLY)== BST_CHECKED;
+ config_video_outoforder=IsDlgButtonChecked(hwndDlg, IDC_VIDEO_OUTOFORDER)== BST_CHECKED;
+ config_video_notifylate=IsDlgButtonChecked(hwndDlg, IDC_VIDEO_NOTIFY)== BST_CHECKED;
+
+ config_clock=IsDlgButtonChecked(hwndDlg, IDC_REALTIME)!= BST_CHECKED;
+ config_lowmemory=IsDlgButtonChecked(hwndDlg, IDC_LOWMEMORY)== BST_CHECKED;
+
+ wchar_t temp[64] = {0};
+
+ GetDlgItemText(hwndDlg,IDC_AUDIO_CACHE_FRAMES, temp, 64);
+ config_audio_cache_frames = _wtoi(temp);
+
+ GetDlgItemText(hwndDlg,IDC_VIDEO_CACHE_FRAMES, temp, 64);
+ config_video_cache_frames= _wtoi(temp);
+
+ GetDlgItemText(hwndDlg,IDC_VIDEO_DROP_THRESHOLD, temp, 64);
+ config_video_drop_threshold= _wtoi(temp);
+
+ GetDlgItemText(hwndDlg,IDC_VIDEO_JITTER, temp, 64);
+ config_video_jitter= _wtoi(temp);
+
+ GetDlgItemText(hwndDlg,IDC_AUDIO_EARLYPAD, temp, 64);
+ config_audio_early_pad= _wtoi(temp);
+
+ GetDlgItemText(hwndDlg,IDC_VIDEO_EARLYPAD, temp, 64);
+ config_video_early_pad= _wtoi(temp);
+}
+
+static INT_PTR CALLBACK AdvancedDialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
+{
+ switch (uMsg)
+ {
+ case WM_INITDIALOG:
+ Advanced_Init(hwndDlg);
+ break;
+
+ case WM_COMMAND:
+ switch (LOWORD(wParam))
+ {
+ case IDOK:
+ Advanced_OnOK(hwndDlg);
+ EndDialog(hwndDlg, 0);
+ break;
+ case IDCANCEL:
+ EndDialog(hwndDlg, 0);
+ break;
+
+ }
+ break;
+ }
+
+ return 0;
+}
+
+void Advanced(HWND hwndDlg)
+{
+ WASABI_API_DIALOGBOXW(IDD_ADVANCED, hwndDlg, AdvancedDialogProc);
+}
+
+void Preferences_Default(HWND hwndDlg)
+{
+ if (config_no_video)
+ {
+ // TODO: ask the user if they want to enable video support
+ }
+ DefaultConfig();
+ fileTypes.LoadDefaults();
+ Preferences_Populate(hwndDlg);
+}
+
+INT_PTR CALLBACK PreferencesDialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
+{
+ switch (uMsg)
+ {
+ case WM_INITDIALOG:
+ Preferences_Init(hwndDlg);
+ break;
+ case WM_DESTROY:
+ config_col1 = typeList.GetColumnWidth(0);
+ config_col2 = typeList.GetColumnWidth(1);
+
+ if (NULL != WASABI_API_APP)
+ WASABI_API_APP->DirectMouseWheel_EnableConvertToMouseWheel(typeList.getwnd(), FALSE);
+ break;
+ case WM_COMMAND:
+ switch (LOWORD(wParam))
+ {
+ case IDC_ADVANCED:
+ Advanced(hwndDlg);
+ break;
+ case IDC_DEFAULTTYPE:
+ Preferences_Default(hwndDlg);
+ break;
+ case IDC_ADDTYPE:
+ AddType(hwndDlg);
+ FillFileTypes();
+ break;
+ case IDC_EDITTYPE:
+ EditType(hwndDlg);
+ if(typeList.GetNextSelected(editIndex)!=-1)
+ FillFileTypes();
+ break;
+ case IDC_REMOVETYPE:
+ Preferences_TypeRemove(hwndDlg);
+ FillFileTypes();
+ break;
+ case IDOK:
+ OnOk(hwndDlg);
+ case IDCANCEL:
+ EndDialog(hwndDlg, 0);
+ break;
+ }
+ break;
+ }
+ return 0;
+} \ No newline at end of file