123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172 |
- #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);
- }
|