diff options
Diffstat (limited to 'Src/Winamp/main_init.cpp')
-rw-r--r-- | Src/Winamp/main_init.cpp | 322 |
1 files changed, 322 insertions, 0 deletions
diff --git a/Src/Winamp/main_init.cpp b/Src/Winamp/main_init.cpp new file mode 100644 index 00000000..70f634a6 --- /dev/null +++ b/Src/Winamp/main_init.cpp @@ -0,0 +1,322 @@ +/** (c) Nullsoft, Inc. C O N F I D E N T I A L + ** Filename: + ** Project: + ** Description: + ** Author: + ** Created: + **/ +#include "Main.h" +#include "menuv5.h" +#include "resource.h" + +extern "C" +{ + int g_main_created = 0; +} + +static INT_PTR CALLBACK tmpProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + return 0; +} + +BOOL InitApplication(HINSTANCE hInstance) // register Winamp's window class, returns TRUE on success +{ + HICON hIcon; + WNDCLASSW wc = {0, }; + + wc.style = CS_DBLCLKS; + wc.hInstance = hInstance; + hIcon = wc.hIcon = LoadIconW(hInstance, MAKEINTRESOURCE(ICON_XP)); + wc.hCursor = NULL; + + //wc.lpfnWndProc = Main_WndProc; + //wc.lpszClassName = L"Winamp";; + //if (!RegisterClassW( &wc )) + // return 0; + + wc.lpfnWndProc = VIS_WndProc; + wc.lpszClassName = L"WinampVis"; + if (!RegisterClassW(&wc)) + return 0; + + + wc.lpfnWndProc = video_WndProc; + wc.lpszClassName = L"Winamp Video"; + if (!RegisterClassW(&wc)) + return 0; + +#ifdef WA2 +#ifndef NETSCAPE + wc.style = CS_DBLCLKS; + wc.lpfnWndProc = MB_WndProc; + wc.lpszClassName = "Winamp MB"; + if (!RegisterClassW(&wc)) + return 0; +#endif +#endif + + /* now register unicode windows */ + WNDCLASSW wcW = {0, }; + + wcW.style = CS_DBLCLKS; + wcW.hInstance = hInstance; + hIcon = wcW.hIcon = LoadIconW(hInstance, MAKEINTRESOURCE(ICON_XP)); + wcW.hCursor = NULL; + + wcW.lpfnWndProc = emb_WndProc; + wcW.lpszClassName = L"Winamp Gen"; + if (!RegisterClassW(&wcW)) + return 0; + + wcW.style |= CS_VREDRAW | CS_HREDRAW; + wcW.lpfnWndProc = EQ_WndProc; + wcW.lpszClassName = L"Winamp EQ"; + if (!RegisterClassW(&wcW)) + return 0; + + wcW.lpfnWndProc = PE_WndProc; + wcW.lpszClassName = L"Winamp PE"; + if (!RegisterClassW(&wcW)) + return 0; + + // make other people's dialogs show the winamp icon + HWND h = CreateDialogW(hMainInstance, MAKEINTRESOURCE(IDD_OPENLOC), NULL, tmpProc); + SetClassLongPtrW(h, GCLP_HICON, (LONG_PTR)hIcon); + DestroyWindow(h); + + return 1; +} + +void ConvertRatingMenuStar(HMENU menu, UINT menu_id) +{ +MENUITEMINFOW mi = {sizeof(mi), MIIM_DATA | MIIM_TYPE, MFT_STRING}; +wchar_t rateBuf[32], *rateStr = rateBuf; + mi.dwTypeData = rateBuf; + mi.cch = 32; + if(GetMenuItemInfoW(menu, menu_id, FALSE, &mi)) + { + while(rateStr && *rateStr) + { + if(*rateStr == L'*') *rateStr = L'\u2605'; + rateStr=CharNextW(rateStr); + } + SetMenuItemInfoW(menu, menu_id, FALSE, &mi); + } +} + +void main_Create() +{ + static int t = 0; + + g_main_created = 1; + SetWindowTextW(hMainWindow, caption); + + hVisWindow = CreateWindowExW(0, L"WinampVis", L"", WS_CHILD, 0, 0, 0, 0, + hMainWindow, NULL, hMainInstance, NULL); + ShowWindow(hVisWindow, SW_SHOWNA); + + SetWindowLong(hMainWindow, GWLP_USERDATA, (config_keeponscreen&2) ? 0x49474541 : 0); + hTooltipWindow = CreateWindowW(TOOLTIPS_CLASSW, (LPCWSTR)NULL, TTS_ALWAYSTIP | TTS_NOPREFIX, + CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, + hMainWindow, NULL, hMainInstance, NULL); + SendMessageW(hTooltipWindow, TTM_SETDELAYTIME, TTDT_INITIAL, 375); + SendMessageW(hTooltipWindow, TTM_SETDELAYTIME, TTDT_AUTOPOP, 2000); + SendMessageW(hTooltipWindow, TTM_SETDELAYTIME, TTDT_RESHOW, 1000); + + hEQTooltipWindow = CreateWindowW(TOOLTIPS_CLASSW, (LPCWSTR)NULL, TTS_ALWAYSTIP | TTS_NOPREFIX, + CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, + hEQWindow, NULL, hMainInstance, NULL); + SendMessageW(hEQTooltipWindow, TTM_SETDELAYTIME, TTDT_INITIAL, 125); + SendMessageW(hEQTooltipWindow, TTM_SETDELAYTIME, TTDT_AUTOPOP, 2000); + SendMessageW(hEQTooltipWindow, TTM_SETDELAYTIME, TTDT_RESHOW, 1000); + + + hVideoTooltipWindow = CreateWindowW(TOOLTIPS_CLASSW, (LPCWSTR)NULL, TTS_ALWAYSTIP | TTS_NOPREFIX, + CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, + hVideoWindow, NULL, hMainInstance, NULL); + SendMessageW(hVideoTooltipWindow, TTM_SETDELAYTIME, TTDT_INITIAL, 125); + SendMessageW(hVideoTooltipWindow, TTM_SETDELAYTIME, TTDT_AUTOPOP, 2000); + SendMessageW(hVideoTooltipWindow, TTM_SETDELAYTIME, TTDT_RESHOW, 1000); + + hPLTooltipWindow = CreateWindowW(TOOLTIPS_CLASSW, (LPCWSTR)NULL, TTS_ALWAYSTIP | TTS_NOPREFIX, + CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, + hPLWindow, NULL, hMainInstance, NULL); + SendMessageW(hPLTooltipWindow, TTM_SETDELAYTIME, TTDT_INITIAL, 125); + SendMessageW(hPLTooltipWindow, TTM_SETDELAYTIME, TTDT_AUTOPOP, 2000); + SendMessageW(hPLTooltipWindow, TTM_SETDELAYTIME, TTDT_RESHOW, 1000); + + /*hPL2TooltipWindow = CreateWindowW(TOOLTIPS_CLASSW, (LPCWSTR)NULL, TTS_ALWAYSTIP | TTS_NOPREFIX, + 0, 0, 0, 0, hPLWindow, NULL, hMainInstance, NULL);*/ + // TODO attempt to make this more like the listview timings + /*SendMessageW(hPL2TooltipWindow, TTM_SETDELAYTIME, TTDT_INITIAL, 125); + SendMessageW(hPL2TooltipWindow, TTM_SETDELAYTIME, TTDT_AUTOPOP, 2000); + SendMessageW(hPL2TooltipWindow, TTM_SETDELAYTIME, TTDT_RESHOW, 1000);*/ + + SetPriorityClass(GetCurrentProcess(), NORMAL_PRIORITY_CLASS); + + top_menu = LPLoadMenu(WINAMP_MAIN); + +#ifdef NETSCAPE + EnableMenuItem(top_menu, WINAMP_OPTIONS_MINIBROWSER, MF_BYCOMMAND | MF_GRAYED); +#endif + main_menu = GetSubMenu(top_menu, 0); + + g_submenus_play = GetSubMenu(main_menu, 2); + g_submenus_bookmarks1 = GetSubMenu(main_menu, 4); + g_submenus_bookmarks2 = GetSubMenu(GetSubMenu(main_menu, 2), 4 + (g_audiocdletters ? g_audiocdletters + 1 : 0)); + g_submenus_skins1 = GetSubMenu(main_menu, MAINMENU_OPTIONS_BASE + 3); + g_submenus_skins2 = GetSubMenu(GetSubMenu(main_menu, MAINMENU_OPTIONS_BASE), 1); + g_submenus_vis = GetSubMenu(main_menu, MAINMENU_OPTIONS_BASE + 2); + g_submenus_options = GetSubMenu(main_menu, MAINMENU_OPTIONS_BASE); + + if (config_wlz_menu) + { + MENUITEMINFOW mii = {sizeof(mii), MIIM_SUBMENU | MIIM_TYPE | MIIM_ID, MFT_STRING, }; + mii.hSubMenu = g_submenus_lang = CreatePopupMenu(); + mii.dwTypeData = getStringW(IDS_LANGUAGEPACKS_MENU, NULL, 0); + mii.cch = (UINT)wcslen(mii.dwTypeData); + g_submenus_lang_id = mii.wID = unique_loword_command++; + InsertMenuItemW(main_menu, MAINMENU_OPTIONS_BASE+4, TRUE, &mii); + } + + HMENU rating_menu = GetSubMenu(GetSubMenu(GetSubMenu(top_menu,2),5),10); + ConvertRatingMenuStar(rating_menu, ID_PL_RATING5); + ConvertRatingMenuStar(rating_menu, ID_PL_RATING4); + ConvertRatingMenuStar(rating_menu, ID_PL_RATING3); + ConvertRatingMenuStar(rating_menu, ID_PL_RATING2); + ConvertRatingMenuStar(rating_menu, ID_PL_RATING1); + + rating_menu = GetSubMenu(GetSubMenu(GetSubMenu(top_menu,3),0),5); + ConvertRatingMenuStar(rating_menu, ID_RATING5); + ConvertRatingMenuStar(rating_menu, ID_RATING4); + ConvertRatingMenuStar(rating_menu, ID_RATING3); + ConvertRatingMenuStar(rating_menu, ID_RATING2); + ConvertRatingMenuStar(rating_menu, ID_RATING1); + + Skin_Random(); + Skin_Load(); + + g_skinloadedmanually = 0; + set_aot(0); + set_taskbar(); + CheckMenuItem(main_menu, WINAMP_OPTIONS_EASYMOVE, config_easymove ? MF_CHECKED : MF_UNCHECKED); + CheckMenuItem(main_menu, WINAMP_FILE_SHUFFLE, config_shuffle ? MF_CHECKED : MF_UNCHECKED); + CheckMenuItem(main_menu, WINAMP_FILE_REPEAT, config_repeat ? MF_CHECKED : MF_UNCHECKED); + CheckMenuItem(GetSubMenu(GetSubMenu(top_menu, 3), 13), ID_VIDEOWND_VERTICALLYFLIP, (config_video_fliprgb ? MF_CHECKED: MF_UNCHECKED)); + if (!config_timeleftmode) + CheckMenuItem(main_menu, WINAMP_OPTIONS_ELAPSED, MF_CHECKED); + else + CheckMenuItem(main_menu, WINAMP_OPTIONS_REMAINING, MF_CHECKED); + draw_setnoupdate(1); + draw_init(); + draw_shuffle(config_shuffle, 0); + draw_eqplbut(config_eq_open, 0, config_pe_open, 0); + draw_repeat(config_repeat, 0); + draw_eject(0); + draw_buttonbar( -1); + draw_volumebar(config_volume, 0); + draw_panbar(config_pan, 0); + draw_songname(L"", &t, 0); + draw_playicon(2); + draw_clutterbar(0); + draw_monostereo(0); + draw_tbar(1, config_windowshade, 0); + draw_setnoupdate(0); + InsertMenuW(GetSystemMenu(hMainWindow, FALSE), 0, MF_POPUP | MF_BYPOSITION, (UINT_PTR) main_menu, L"Winamp"); + InsertMenu(GetSystemMenu(hMainWindow, FALSE), 1, MF_BYPOSITION | MF_SEPARATOR, 0, NULL); + if (config_autoscrollname) SetTimer(hMainWindow, UPDATE_DISPLAY_TIMER + 1, 200, NULL); + + if (config_shuffle) PlayList_randpos( -BIGINT); + dsp_init(); + + newversioncheck(); + + SetTimer(hMainWindow, STATS_TIMER, 1000, NULL); +} + +BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) // create the main Winamp window +{ + int sc = config_minimized; // config_minimized gets trashed in WM_CREATE + deferring_show = 1; + + main_Create(); + out_setwnd(); + + if (!CreateWindowExW(0, L"Winamp EQ", getStringW(IDS_EQCAPTION, NULL, 0), WS_OVERLAPPED, + config_eq_wx, config_eq_wy, 0, 0, // WM_CREATE will size it + hMainWindow, NULL, hInstance, NULL)) return FALSE; + + if (!CreateWindowExW(WS_EX_ACCEPTFILES, L"Winamp PE", getStringW(IDS_PECAPTION, NULL, 0), WS_OVERLAPPED, + config_pe_wx, config_pe_wy, 0, 0, // WM_CREATE will size it + hMainWindow, NULL, hInstance, NULL)) return FALSE; + + if (!video_Create()) + return FALSE; + + hPLVisWindow = CreateWindowExW(0, L"WinampVis", L"", WS_CHILD, + 0, 0, 0, 0, + hPLWindow, NULL, hMainInstance, NULL); + ShowWindow(hPLVisWindow, SW_SHOWNA); + + eq_startuphack = pe_startuphack = 1; + + if (config_eq_open) + { + config_eq_open = 0; + eq_dialog(hMainWindow,sc); + } + // MessageBox(NULL,"p4","0",0); + if (config_pe_open) + { + config_pe_open = 0; + pleditDlg(hMainWindow,sc); + } + if (config_video_open) + { + config_video_open = 0; + ShowVideoWindow(sc); + } + // MessageBox(NULL,"p5","0",0); + if (!config_mw_open) + { + MoveOffscreen(hMainWindow); + Ipc_WindowToggle(IPC_CB_WND_MAIN, config_mw_open); + //config_mw_open=1; + //SendMessageW(hMainWindow,WM_COMMAND,WINAMP_MAIN_WINDOW,0); + } + else + CheckMenuItem(main_menu, WINAMP_MAIN_WINDOW, MF_CHECKED); + + eq_startuphack = pe_startuphack = 0; + + /* + Browser_init(); + if (config_si_open) + OpenBrowser(); +*/ + if (sc) + g_showcode = SW_SHOWMINIMIZED; + else if (nCmdShow == SW_SHOWMAXIMIZED || nCmdShow == SW_MAXIMIZE) + g_showcode = SW_SHOWNORMAL; + else + g_showcode = nCmdShow; + + v5_top_menu = LPLoadMenu(WINAMP5_MENUBAR); + + if (config_wlz_menu) + { + MENUITEMINFOW mii = {sizeof(mii), MIIM_SUBMENU | MIIM_TYPE | MIIM_ID, MFT_STRING, }; + mii.hSubMenu = g_submenus_lang; + mii.dwTypeData = getStringW(IDS_LANGUAGEPACKS_MENU, NULL, 0); + mii.cch = (UINT)wcslen(mii.dwTypeData); + mii.wID = g_submenus_lang_id; + InsertMenuItemW(GetSubMenu(v5_top_menu, 2), 1, TRUE, &mii); + g_mm_ffoptionsbase_adj++; + } + + SetTimer(hMainWindow, 200, 5, NULL); // defer main window showing + + BeginFullscreenAppMonitor(); + + return TRUE; +}
\ No newline at end of file |