aboutsummaryrefslogtreecommitdiff
path: root/Src/Plugins/Library/ml_rg/Results.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/Library/ml_rg/Results.cpp
parent537bcbc86291b32fc04ae4133ce4d7cac8ebe9a7 (diff)
downloadwinamp-20d28e80a5c861a9d5f449ea911ab75b4f37ad0d.tar.gz
Initial community commit
Diffstat (limited to 'Src/Plugins/Library/ml_rg/Results.cpp')
-rw-r--r--Src/Plugins/Library/ml_rg/Results.cpp172
1 files changed, 172 insertions, 0 deletions
diff --git a/Src/Plugins/Library/ml_rg/Results.cpp b/Src/Plugins/Library/ml_rg/Results.cpp
new file mode 100644
index 00000000..592bd47b
--- /dev/null
+++ b/Src/Plugins/Library/ml_rg/Results.cpp
@@ -0,0 +1,172 @@
+#include "main.h"
+#include "resource.h"
+#include "../nu/listview.h"
+#include "api__ml_rg.h"
+#include <shlwapi.h>
+#include <strsafe.h>
+
+// this isn't nice but it localises the values for display as they're saved in "C" locale
+enum { GAIN_MODE=0, PEAK_MODE };
+wchar_t* LocaliseNumericText(wchar_t str[64], int mode){
+static wchar_t tmp[64];
+double value;
+ tmp[0]=0;
+ value = _wtof_l(str,WASABI_API_LNG->Get_C_NumericLocale());
+ StringCchPrintfW(tmp,64,(mode==GAIN_MODE?L"%-+.2f dB":L"%-.9f"),value);
+ return tmp;
+}
+
+static void AddQueueToListView(W_ListView *listView, WorkQueue::RGWorkQueue *queue)
+{
+ int i=listView->GetCount();
+ for(WorkQueue::RGWorkQueue::iterator itr = queue->begin(); itr!= queue->end(); itr++)
+ {
+ listView->InsertItem(i, PathFindFileNameW(itr->filename), (int)&*itr);
+ listView->SetItemText(i, 1, LocaliseNumericText(itr->track_gain,GAIN_MODE));
+ listView->SetItemText(i, 2, LocaliseNumericText(itr->track_peak,PEAK_MODE));
+ listView->SetItemText(i, 3, LocaliseNumericText(itr->album_gain,GAIN_MODE));
+ listView->SetItemText(i, 4, LocaliseNumericText(itr->album_peak,PEAK_MODE));
+ i++;
+ }
+}
+
+INT_PTR WINAPI ReplayGainDialogProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
+{
+ switch(msg)
+ {
+ case WM_INITDIALOG:
+ {
+ W_ListView listView(GetDlgItem(hwndDlg, IDC_RGLIST));
+ listView.setwnd(GetDlgItem(hwndDlg, IDC_RGLIST));
+
+ listView.AddCol(WASABI_API_LNGSTRINGW(IDS_COL_FILENAME), 200);
+ listView.AddCol(WASABI_API_LNGSTRINGW(IDS_COL_TRACK_GAIN), 65);
+ listView.AddCol(WASABI_API_LNGSTRINGW(IDS_COL_TRACK_PEAK), 80);
+ listView.AddCol(WASABI_API_LNGSTRINGW(IDS_COL_ALBUM_GAIN), 65);
+ listView.AddCol(WASABI_API_LNGSTRINGW(IDS_COL_ALBUM_PEAK), 80);
+
+ SetWindowLongPtr(hwndDlg, GWLP_USERDATA, lParam);
+
+ WorkQueue::RGWorkQueue *queue = (WorkQueue::RGWorkQueue *)lParam;
+
+ AddQueueToListView(&listView, queue);
+
+ POINT pt = {(LONG)GetPrivateProfileIntA("ml_rg", "res_x", -1, iniFile),
+ (LONG)GetPrivateProfileIntA("ml_rg", "res_y", -1, iniFile)};
+ if (!windowOffScreen(hwndDlg, pt))
+ SetWindowPos(hwndDlg, HWND_TOP, pt.x, pt.y, 0, 0, SWP_NOSIZE | SWP_SHOWWINDOW | SWP_NOSENDCHANGING);
+ }
+ break;
+ case WM_COMMAND:
+ switch(LOWORD(wParam))
+ {
+ case IDOK:
+ {
+ WorkQueue::RGWorkQueue *queue = (WorkQueue::RGWorkQueue *)GetWindowLongPtr(hwndDlg, GWLP_USERDATA);
+ WriteAlbum(*queue);
+ }
+ case IDCANCEL:
+ {
+ RECT rect = {0};
+ GetWindowRect(hwndDlg, &rect);
+ char buf[16] = {0};
+ StringCchPrintfA(buf, 16, "%d", rect.left);
+ WritePrivateProfileStringA("ml_rg", "res_x", buf, iniFile);
+ StringCchPrintfA(buf, 16, "%d", rect.top);
+ WritePrivateProfileStringA("ml_rg", "res_y", buf, iniFile);
+ EndDialog(hwndDlg, 0);
+ }
+ break;
+ case IDC_SAVETRACK:
+ {
+ WorkQueue::RGWorkQueue *queue = (WorkQueue::RGWorkQueue *)GetWindowLongPtr(hwndDlg, GWLP_USERDATA);
+ WriteTracks(*queue);
+ EndDialog(hwndDlg, 0);
+ }
+ break;
+ }
+ }
+ return 0;
+}
+
+INT_PTR WINAPI ReplayGainDialogProcAll(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
+{
+ switch(msg)
+ {
+ case WM_INITDIALOG:
+ {
+ W_ListView listView(GetDlgItem(hwndDlg, IDC_RGLIST));
+ listView.setwnd(GetDlgItem(hwndDlg, IDC_RGLIST));
+
+ listView.AddCol(WASABI_API_LNGSTRINGW(IDS_COL_FILENAME), 200);
+ listView.AddCol(WASABI_API_LNGSTRINGW(IDS_COL_TRACK_GAIN), 65);
+ listView.AddCol(WASABI_API_LNGSTRINGW(IDS_COL_TRACK_PEAK), 80);
+ listView.AddCol(WASABI_API_LNGSTRINGW(IDS_COL_ALBUM_GAIN), 65);
+ listView.AddCol(WASABI_API_LNGSTRINGW(IDS_COL_ALBUM_PEAK), 80);
+
+ SetWindowLongPtr(hwndDlg, GWLP_USERDATA, lParam);
+
+ WorkQueue *queue = (WorkQueue *)lParam;
+
+ AddQueueToListView(&listView, &queue->unclassified);
+ for (WorkQueue::AlbumMap::iterator mapItr=queue->albums.begin();mapItr!=queue->albums.end();mapItr++)
+ {
+ AddQueueToListView(&listView, &mapItr->second);
+ }
+
+ POINT pt = {(LONG)GetPrivateProfileIntA("ml_rg", "res_x", -1, iniFile),
+ (LONG)GetPrivateProfileIntA("ml_rg", "res_y", -1, iniFile)};
+ if (!windowOffScreen(hwndDlg, pt))
+ SetWindowPos(hwndDlg, HWND_TOP, pt.x, pt.y, 0, 0, SWP_NOSIZE | SWP_SHOWWINDOW | SWP_NOSENDCHANGING);
+ }
+ break;
+ case WM_COMMAND:
+ switch(LOWORD(wParam))
+ {
+ case IDOK:
+ {
+ WorkQueue *queue = (WorkQueue *)GetWindowLongPtr(hwndDlg, GWLP_USERDATA);
+ WriteAlbum(queue->unclassified);
+ for (WorkQueue::AlbumMap::iterator mapItr=queue->albums.begin();mapItr!=queue->albums.end();mapItr++)
+ {
+ WriteAlbum(mapItr->second);
+ }
+ }
+ case IDCANCEL:
+ {
+ RECT rect = {0};
+ GetWindowRect(hwndDlg, &rect);
+ char buf[16] = {0};
+ StringCchPrintfA(buf, 16, "%d", rect.left);
+ WritePrivateProfileStringA("ml_rg", "res_x", buf, iniFile);
+ StringCchPrintfA(buf, 16, "%d", rect.top);
+ WritePrivateProfileStringA("ml_rg", "res_y", buf, iniFile);
+ EndDialog(hwndDlg, 0);
+ }
+ break;
+ case IDC_SAVETRACK:
+ {
+ WorkQueue *queue = (WorkQueue *)GetWindowLongPtr(hwndDlg, GWLP_USERDATA);
+ WriteTracks(queue->unclassified);
+ for (WorkQueue::AlbumMap::iterator mapItr=queue->albums.begin();mapItr!=queue->albums.end();mapItr++)
+ {
+ WriteTracks(mapItr->second);
+ }
+ EndDialog(hwndDlg, 0);
+ }
+ break;
+ }
+ }
+ return 0;
+}
+
+void DoResults(WorkQueue::RGWorkQueue &queue)
+{
+ if (!queue.empty())
+ WASABI_API_DIALOGBOXPARAM(IDD_RESULTS, GetDialogBoxParent(), ReplayGainDialogProc, (LPARAM)&queue);
+}
+
+void DoResults(WorkQueue &queue)
+{
+ WASABI_API_DIALOGBOXPARAM(IDD_RESULTS, GetDialogBoxParent(), ReplayGainDialogProcAll, (LPARAM)&queue);
+} \ No newline at end of file