aboutsummaryrefslogtreecommitdiff
path: root/Src/Plugins/Input/in_cdda/CONFIG.Cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Src/Plugins/Input/in_cdda/CONFIG.Cpp')
-rw-r--r--Src/Plugins/Input/in_cdda/CONFIG.Cpp261
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