diff options
Diffstat (limited to 'Src/Plugins/Input/in_cdda/CONFIG.Cpp')
-rw-r--r-- | Src/Plugins/Input/in_cdda/CONFIG.Cpp | 261 |
1 files changed, 261 insertions, 0 deletions
diff --git a/Src/Plugins/Input/in_cdda/CONFIG.Cpp b/Src/Plugins/Input/in_cdda/CONFIG.Cpp new file mode 100644 index 00000000..14a813fd --- /dev/null +++ b/Src/Plugins/Input/in_cdda/CONFIG.Cpp @@ -0,0 +1,261 @@ +#include "main.h" +#ifndef IGNORE_API_GRACENOTE +#include "cddb.h" +#else +extern char config_use_cddb; +//char config_use_cddb = 0; +#endif +#include "api__in_cdda.h" +#include "../winamp/wa_ipc.h" + +//int config_sample=1; +//int config_use_veritas=1; +//int config_rip_veritas=1; +//int config_maxextractspeed=4; +//int config_offset=0; +//int config_read_leadin=0; + +//int config_rip_buffersize=24; +//int config_rip_buffers=256; + +//int config_play_buffersize=1; +//int config_play_buffers=256; + +char *INI_FILE = 0; +char app_name[] = "CDDA/Line Input Driver"; + +static int _r_i(char *name, int def) +{ + name += 7; + return GetPrivateProfileIntA(app_name, name, def, INI_FILE); +} + +#define RI(x) (( x ) = _r_i(#x,( x ))) + +static void _w_i(char *name, int d) +{ + char str[120] = {0}; + wsprintfA(str, "%d", d); + name += 7; + WritePrivateProfileStringA(app_name, name, str, INI_FILE); +} +#define WI(x) _w_i(#x,( x )) + +void config_read() +{ + INI_FILE = (char*)SendMessage(line.hMainWindow, WM_WA_IPC, 0, IPC_GETINIFILE); + //RI(config_sample); + RI(config_use_cddb); + /*RI(config_use_veritas); + config_rip_veritas=config_use_veritas; + RI(config_rip_veritas);*/ + //RI(config_maxextractspeed); + + //RI(config_offset); + + //RI(config_rip_buffersize); + //RI(config_rip_buffers); + + //RI(config_play_buffersize); + //RI(config_play_buffers); + //RI(config_read_leadin); +} + +void config_write() +{ + //WI(config_sample); + WI(config_use_cddb); + //WI(config_use_veritas); + //WI(config_rip_veritas); + //WI(config_maxextractspeed); +} + +// TODO need to review all of this!!! +#if 0 +BOOL CALLBACK ripConfigProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + switch (uMsg) + { + case WM_INITDIALOG: + //if (config_rip_veritas) CheckDlgButton(hwndDlg,IDC_VERITAS,BST_CHECKED); + SendDlgItemMessage(hwndDlg,IDC_COMBO1,CB_ADDSTRING,0,(LPARAM)L"0.5x"); + SendDlgItemMessage(hwndDlg,IDC_COMBO1,CB_ADDSTRING,0,(LPARAM)L"1x"); + SendDlgItemMessage(hwndDlg,IDC_COMBO1,CB_ADDSTRING,0,(LPARAM)L"2x"); + SendDlgItemMessage(hwndDlg,IDC_COMBO1,CB_ADDSTRING,0,(LPARAM)L"4x"); + SendDlgItemMessage(hwndDlg,IDC_COMBO1,CB_ADDSTRING,0,(LPARAM)L"8x"); + SendDlgItemMessage(hwndDlg,IDC_COMBO1,CB_ADDSTRING,0,(LPARAM)L"16x"); + SendDlgItemMessage(hwndDlg,IDC_COMBO1,CB_ADDSTRING,0,(LPARAM)WASABI_API_LNGSTRINGW(IDS_UNLIMITED)); + + if (config_maxextractspeed<0)config_maxextractspeed=0; + if (config_maxextractspeed>6)config_maxextractspeed=6; + //if (config_maxextractspeed > 4 && getRegVer() < 1) config_maxextractspeed=4; + + SendDlgItemMessage(hwndDlg,IDC_COMBO1,CB_SETCURSEL,config_maxextractspeed,0); + return 0; + case WM_COMMAND: + switch (LOWORD(wParam)) + { + /*case IDC_VERITAS: + config_rip_veritas = IsDlgButtonChecked(hwndDlg,IDC_VERITAS)?1:0; + break;*/ + case IDC_COMBO1: + { + int x=(INT)SendDlgItemMessage(hwndDlg,IDC_COMBO1,CB_GETCURSEL,0,0); + if (x != CB_ERR) + { + if (x<0)x=0; + if (x>6)x=6; + /*if (x > 4 && getRegVer() < 1) + { + SendDlgItemMessage(hwndDlg,IDC_COMBO1,CB_SETCURSEL,4,0); + x=4; + config_maxextractspeed=x; + wchar_t title[64] = {0}; + if (MessageBoxW(hwndDlg,WASABI_API_LNGSTRINGW(IDS_PURCHASE_WINAMP_PRO_PROMPT), + WASABI_API_LNGSTRINGW_BUF(IDS_WINAMP_PRO_FEATURE,title,64),MB_YESNO) == IDYES) + { + SendMessage(line.hMainWindow,WM_WA_IPC,0,IPC_GETREGISTEREDVERSION); + } + } + else*/ config_maxextractspeed=x; + } + } + break; + } + return FALSE; + case WM_DESTROY: + config_write(); + return FALSE; + } + return 0; +} +#endif + +static long cddbResourceID=202; +static long cddbMaxFrames=46; +static long cddbHeight=80, cddbWidth=80; +static HMODULE cddbUI = 0; + + +static bool GetUI() +{ + #ifndef IGNORE_API_GRACENOTE + ICddbUIOptions *pUIOptions; + if (SUCCEEDED(Cddb_GetIUIOptions((void**)&pUIOptions))) + { + if (SUCCEEDED(pUIOptions->GetCurrent(UI_DISP_PROGRESS))) // not sure what this does, but it seems to be required + { + pUIOptions->get_ProgressResourceID(&cddbResourceID); + pUIOptions->get_Frames(&cddbMaxFrames); + pUIOptions->get_Bottom(&cddbHeight); + pUIOptions->get_Right(&cddbWidth); + pUIOptions->get_ResourceHINSTANCE((long *)&cddbUI); + } + pUIOptions->Release(); + return true; + } + #endif + return false; +} + +static HANDLE cddbImage =0; +static int cddbFrame = 0; + +BOOL CALLBACK ConfigProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + switch (uMsg) + { + case WM_DRAWITEM: + if (wParam == IDC_CDDBICON) + { + DRAWITEMSTRUCT *drawItem = (DRAWITEMSTRUCT *) lParam; + if (cddbImage) + { + HDC hdcbm = CreateCompatibleDC(drawItem->hDC); + HGDIOBJ old = SelectObject(hdcbm, cddbImage); + BitBlt(drawItem->hDC, 0, 0, cddbWidth, cddbHeight, hdcbm, (cddbFrame * cddbWidth), 0, SRCCOPY); + SelectObject(hdcbm, old); + DeleteDC(hdcbm); + } + else + { + RECT r={0,0,cddbWidth,cddbHeight}; + FillRect(drawItem->hDC, &r, (HBRUSH)GetStockObject(GRAY_BRUSH)); + } + return TRUE; + } + break; + + case WM_DESTROY: + cddbImage=0; + break; + + case WM_INITDIALOG: + cddbFrame=0; + cddbImage=0; + { + IUnknown *pUnknown = NULL; + #ifndef IGNORE_API_GRACENOTE + Cddb_GetIControl((void**)&pUnknown); + #endif + if (!pUnknown) + { + ShowWindow(GetDlgItem(hwndDlg,IDC_CDDBNOTE),SW_SHOWNA); + ShowWindow(GetDlgItem(hwndDlg,IDC_CDDB),SW_HIDE); + ShowWindow(GetDlgItem(hwndDlg,IDC_CDDBICON),SW_HIDE); + } + else pUnknown->Release(); + } + + //if (config_sample) CheckDlgButton(hwndDlg,IDC_SAMPLE,BST_CHECKED); + if (config_use_cddb&1) CheckDlgButton(hwndDlg,IDC_CDDB,BST_CHECKED); + //if (config_use_veritas) CheckDlgButton(hwndDlg,IDC_VERITAS,BST_CHECKED); + + if ((config_use_cddb&1) && GetUI()) + { + cddbImage = LoadImage(cddbUI, MAKEINTRESOURCE(cddbResourceID), IMAGE_BITMAP, 0, 0, LR_DEFAULTSIZE); + SetTimer(hwndDlg, 2, 65, NULL); + } + SetWindowPos(GetDlgItem(hwndDlg, IDC_CDDBICON), 0, 0, 0, cddbWidth, cddbHeight, SWP_NOACTIVATE|SWP_NOMOVE|SWP_NOZORDER); + return TRUE; + + case WM_TIMER: + switch (wParam) + { + case 2: + if (cddbFrame < cddbMaxFrames-1) + { + cddbFrame++; + InvalidateRect(GetDlgItem(hwndDlg, IDC_CDDBICON), 0, TRUE); + } + else + KillTimer(hwndDlg, 2); + + break; + } + return 0; + + case WM_COMMAND: + switch (LOWORD(wParam)) + { + case IDC_CDDBICON: + if (HIWORD(wParam) == STN_CLICKED) SendMessage(line.hMainWindow, WM_WA_IPC, (WPARAM)L"http://www.cddb.com/", IPC_OPEN_URL); + return 0; + case IDOK: + //config_sample = IsDlgButtonChecked(hwndDlg,IDC_SAMPLE)?1:0; + config_use_cddb = IsDlgButtonChecked(hwndDlg,IDC_CDDB)?1:0; + //config_use_veritas = IsDlgButtonChecked(hwndDlg,IDC_VERITAS)?1:0; + config_write(); + case IDCANCEL: + EndDialog(hwndDlg,1); + return FALSE; + } + return FALSE; + } + return 0; +} + +void config(HWND hwndParent) +{ + WASABI_API_DIALOGBOXW(IDD_DIALOG1,hwndParent,ConfigProc); +}
\ No newline at end of file |