123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916 |
- /** (c) Nullsoft, Inc. C O N F I D E N T I A L
- ** Filename:
- ** Project:
- ** Description:
- ** Author:
- ** Created:
- **/
- #include "Main.h"
- #include "../Plugins/General/gen_crasher/GetWinVer.h"
- #include "resource.h"
- #include "../Plugins/General/gen_ml/ml.h"
- #include "../nu/AutoWide.h"
- #include "api.h"
- #include "ExplorerFindFile.h"
- #include <assert.h>
- #include "vis.h"
- LRESULT sendMlIpc(int msg, WPARAM param);
- int g_open_ml_item_in_pe = 0;
- EXTERN_C BOOL eggTyping;
- void showLibrary()
- {
- SendMessageW(hMainWindow, WM_COMMAND, ID_FILE_SHOWLIBRARY, 0);
- }
- static void ToggleWindowShade_PL()
- {
- if (config_pe_height == 14)
- {
- if (config_pe_height_ws < 116) config_pe_height_ws = 116;
- config_pe_height = config_pe_height_ws;
- config_pe_height_ws = 0;
- }
- else
- {
- config_pe_height_ws = config_pe_height;
- config_pe_height = 14;
- }
- set_aot(1);
- }
- static void ToggleWindowShade_EQ()
- {
- config_eq_ws = !config_eq_ws;
- set_aot(1);
- draw_eq_tbar(GetForegroundWindow() == hEQWindow ? 1 : (config_hilite ? 0 : 1));
- }
- static void ToggleWindowShade_Main()
- {
- config_windowshade = !config_windowshade;
- set_aot(1);
- draw_tbar(1, config_windowshade, eggstat);
- SendMessageW(hMainWindow, WM_TIMER, UPDATE_DISPLAY_TIMER + 4, 0);
- sa_setthread(config_sa);
- }
- // Big nasty command handler.
- // it calls Main_OnButtonX() for the button controls
- LRESULT Main_OnCommand(HWND hwnd, int wID, HWND hwndCtl, UINT codeNotify)
- {
- if (codeNotify == THBN_CLICKED && !atti_present)
- {
- switch (wID)
- {
- case 0: //previous
- {
- wID = WINAMP_BUTTON1;
- }
- break;
- case 1: //play
- {
- wID = WINAMP_BUTTON2;
- }
- break;
- case 2: //pause
- {
- wID = WINAMP_BUTTON3;
- }
- break;
- case 3: //stop
- {
- wID = WINAMP_BUTTON4;
- }
- break;
- case 4: //next
- {
- wID = WINAMP_BUTTON5;
- }
- break;
- default:
- return 1;
- }
- }
- if (1 == codeNotify && eggTyping)
- {
- BYTE kb[256] = {0};
- if(GetKeyboardState(kb))
- {
- for (INT i = 0x30; i < 0x87; i++)
- {
- if (0 != (0x80 & kb[i]))
- SendMessageW(hwnd, WM_KEYDOWN, i, 0L);
-
- }
- if (0 != (0x80 & kb[0x20]))
- SendMessageW(hwnd, WM_KEYDOWN, 0x20, 0L);
- }
- }
- if (LOWORD(wID) >= 34768 && LOWORD(wID) < g_BookmarkTop)
- {
- FILE *fp = _wfopen(BOOKMARKFILE8, L"rt");
- if (fp)
- {
- int x = 0, id = LOWORD(wID)-34768;
- for (;;)
- {
- char ft[4096] = {0}, fn[MAX_PATH] = {0};
- fgets(fn, MAX_PATH, fp);
- if (feof(fp)) break;
- fgets(ft, 4096, fp);
- if (feof(fp)) break;
- if (ft[0] && fn[0])
- {
- if (fn[lstrlenA(fn) - 1] == '\n') fn[lstrlenA(fn) - 1] = 0;
- if (ft[lstrlenA(ft) - 1] == '\n') ft[lstrlenA(ft) - 1] = 0;
- if (ft[0] && fn[0])
- {
- if (x++ == id)
- {
- // this will track the gen_ml or main play/enqueue setting
- // done as something which koopa requested back in 09/2011
- // including following 'shift' to invert the default mode.
- int addtolist, enqplay = 0;
- if (got_ml)
- {
- enqplay = GetPrivateProfileIntW(L"MLEnqPlay", L"enqueuedef", -1, INI_FILE);
- if (enqplay != -1)
- {
- addtolist = (!!enqplay) ^ (!!(GetAsyncKeyState(VK_SHIFT)&0x8000));
- }
- else
- {
- addtolist = (!!GetPrivateProfileIntW(L"gen_ml_config", L"enqueuedef", 0, ML_INI_FILE)) ^ (!!(GetAsyncKeyState(VK_SHIFT)&0x8000));
- }
- }
- else
- addtolist = (!!config_addtolist) ^ (!!(GetAsyncKeyState(VK_SHIFT)&0x8000));
- if(!addtolist) PlayList_delete();
- PlayList_appendthing(AutoWideDup(fn, CP_UTF8), 0, 0);
- if(!addtolist)
- {
- if (config_shuffle) PlayList_setposition(PlayList_getNextPosition());
- else PlayList_setposition(0);
- PlayList_getcurrent(FileName, FileTitle, FileTitleNum);
- }
- else
- {
- if (enqplay == 2) PlayList_setposition(PlayList_getlength());
- }
- plEditRefresh();
- if(!addtolist || enqplay == 2)
- StartPlaying();
- break;
- }
- }
- }
- }
- fclose(fp);
- }
- return 1;
- }
- if (LOWORD(wID) >= 32767 && LOWORD(wID) < g_SkinTop)
- {
- wchar_t curfilename[MAX_PATH] = {0};
- int id = LOWORD(wID);
- if (id >= 32768)
- {
- MENUITEMINFOW mi = {sizeof(mi), MIIM_DATA | MIIM_TYPE, MFT_STRING};
- mi.dwTypeData = curfilename;
- mi.cch = MAX_PATH;
- GetMenuItemInfoW(main_menu, id, FALSE, &mi);
- if (mi.dwItemData == 1)
- StringCchCatW(curfilename, MAX_PATH, L".zip");
- else if (mi.dwItemData == 2)
- StringCchCatW(curfilename, MAX_PATH, L".wsz");
- else if (mi.dwItemData == 4)
- StringCchCatW(curfilename, MAX_PATH, L".wal");
- }
- if (_wcsicmp(config_skin, curfilename))
- {
- StringCchCopyW(config_skin, MAX_PATH, curfilename);
- SendMessageW(hMainWindow, WM_COMMAND, WINAMP_REFRESHSKIN, 0);
- if (prefs_last_page == 40 && IsWindow(prefs_hwnd))
- {
- prefs_last_page = 0;
- prefs_dialog(1);
- prefs_last_page = 40;
- prefs_dialog(1);
- }
- }
- return 1;
- }
- if (LOWORD(wID) >= 34700 && LOWORD(wID) < g_LangTop && config_wlz_menu)
- {
- wchar_t curfilename[MAX_PATH]={0};
- int id = LOWORD(wID);
- if (id >= 34701)
- {
- MENUITEMINFOW mi = {sizeof(mi), MIIM_DATA | MIIM_TYPE, MFT_STRING};
- mi.dwTypeData = curfilename;
- mi.cch = MAX_PATH;
- GetMenuItemInfoW(main_menu, id, FALSE, &mi);
- if (mi.dwItemData == 1)
- StringCchCatW(curfilename, MAX_PATH, L".zip");
- else if (mi.dwItemData == 2)
- StringCchCatW(curfilename, MAX_PATH, L".wlz");
- }
- if (_wcsicmp(config_langpack, curfilename))
- {
- LangSwitchToLangPrompt(hMainWindow, curfilename);
- }
- return 1;
- }
- if (LOWORD(wID) >= 45000 && LOWORD(wID) < 55000)
- {
- int id = LOWORD(wID);
- HWND mlhwnd = (HWND)sendMlIpc(0, 0);
- if (mlhwnd != NULL)
- {
- if (!g_open_ml_item_in_pe && !IsWindowVisible(mlhwnd))
- SendMessageW(hMainWindow, WM_COMMAND, ID_FILE_SHOWLIBRARY, 0);
- // should switching the ml view to the target be disabled if we only want to play the playlist entry in the pe ?
- if (!g_open_ml_item_in_pe)
- SendMessageW(mlhwnd, WM_ML_IPC, id - 45000, ML_IPC_SETCURTREEITEM);
- }
- return 1;
- }
- switch (LOWORD(wID))
- {
- case ID_HELP_HELPTOPICS:
- myOpenURL(hwnd, L"https://help.winamp.com/hc/sections/8103009633300-Winamp-Desktop-Player-");
- break;
- case ID_HELP_FEEDBACK:
- {
- wchar_t url[512] = {0}, winVer[32] = {0}, build[32] = {0};
- int nWinVer = 0;
- GetWinVer(winVer, &nWinVer, build);
- // May 2022 - this services url is dead and we currently don't have a replacement
- StringCchPrintfW(url, 512, L"http://services.winamp.com/redirect/support?reason=Feedback&subject=Winamp Feedback&product=Winamp Desktop&v=%s Build %d&platform=%s (%s)",
- WIDEN(APP_VERSION), BUILD_NUMBER, winVer, build);
- myOpenURL(hwnd, url);
- break;
- }
- case ID_VIS_NEXT:
- case ID_VIS_PREV:
- case ID_VIS_RANDOM:
- case ID_VIS_FS:
- case ID_VIS_CFG:
- case ID_VIS_MENU:
- if (hExternalVisWindow != NULL)
- SendMessageW(hExternalVisWindow, WM_COMMAND, LOWORD(wID) | (codeNotify << 16), 0);
- break;
- case EQ_ENABLE:
- case IDM_EQ_LOADPRE:
- case IDM_EQ_LOADMP3:
- case IDM_EQ_LOADDEFAULT:
- case ID_LOAD_EQF:
- case IDM_EQ_SAVEPRE:
- case IDM_EQ_SAVEMP3:
- case IDM_EQ_SAVEDEFAULT:
- case ID_SAVE_EQF:
- case IDM_EQ_DELPRE:
- case IDM_EQ_DELMP3:
- return SendMessageW(hEQWindow, WM_COMMAND, LOWORD(wID), 0);
- case ID_POST_PLAY_PLAYLIST: g_open_ml_item_in_pe = 0; return 0;
- case ID_MAIN_PLAY_AUDIOCD:
- case ID_MAIN_PLAY_AUDIOCD2:
- case ID_MAIN_PLAY_AUDIOCD3:
- case ID_MAIN_PLAY_AUDIOCD4:
- if (g_audiocdletter[LOWORD(wID) - ID_MAIN_PLAY_AUDIOCD])
- {
- wchar_t s[32] = {0};
- StopPlaying(0);
- StringCchPrintfW(s, 32, L"cda://%c", g_audiocdletter[LOWORD(wID) - ID_MAIN_PLAY_AUDIOCD]);
- PlayList_delete();
- PlayList_appendthing(s, 0, 0);
- BeginPlayback();
- plEditRefresh();
- }
- return 1;
- case ID_PE_OPEN:
- {
- if (!playlist_open(g_dialog_box_parent ? g_dialog_box_parent : hMainWindow)) break;
- }
- return 1;
- case ID_PE_SAVEAS:
- savepls(DIALOG_PARENT(hMainWindow));
- return 1;
- case WINAMP_EDIT_BOOKMARKS:
- MessageBoxW(hwnd, getStringW(IDS_ML_MISSING_FOR_BOOKMARKS,NULL,0), L"Winamp", MB_OK);
- return 1;
- case WINAMP_MAKECURBOOKMARK:
- {
- wchar_t fn[FILENAME_SIZE] = {0}, ft[FILETITLE_SIZE] = {0};
- PlayList_getitem2W(PlayList_getPosition(), fn, ft);
- Bookmark_additem(fn, ft);
- }
- return 1;
- case WINAMP_LIGHTNING_CLICK: about_dialog(); return 1;
- case WINAMP_NEW_INSTANCE:
- {
- char buf[MAX_PATH] = "\"";
- STARTUPINFO si = {sizeof(si), };
- PROCESS_INFORMATION pi;
- GetModuleFileNameA(NULL, buf + 1, sizeof(buf) - 1);
- StringCchCatA(buf, MAX_PATH, "\" /NEW");
- config_write(1);
- CreateProcessA(NULL, buf, NULL, NULL, FALSE, 0, NULL, NULL,(LPSTARTUPINFOA)&si, &pi);
- }
- return 1;
- #if 0
- case WINAMP_VIS_OPTIONS:
- {
- extern int last_classic_skin_page;
- last_classic_skin_page = 1;
- prefs_last_page = 22;
- prefs_dialog(1);
- }
- return 1;
- #endif
- case WINAMP_REFRESHSKIN:
- {
- g_skinloadedmanually = 1;
- SendMessageW(hwnd, WM_DISPLAYCHANGE, 0, 0);
- g_skinloadedmanually = 0;
- }
- if (config_pe_open) InvalidateRect(hPLWindow, NULL, FALSE);
- #if 0
- if (config_mb_open)
- {
- RECT r;
- r.left = 0;r.top = 0;r.right = 11;r.bottom = config_mb_height;
- InvalidateRect(hMBWindow, &r, FALSE);
- r.left = 11;r.top = 0;r.right = config_mb_width;r.bottom = 20;
- InvalidateRect(hMBWindow, &r, FALSE);
- r.left = config_mb_width - 8;r.top = 20;r.right = config_mb_width;r.bottom = config_mb_height;
- InvalidateRect(hMBWindow, &r, FALSE);
- r.left = 11;r.top = config_mb_height - 38;r.right = config_mb_width - 8;r.bottom = config_mb_height;
- InvalidateRect(hMBWindow, &r, FALSE);
- }
- #endif
- if (config_eq_open) InvalidateRect(hEQWindow, NULL, FALSE);
- if (config_video_open) InvalidateRect(hVideoWindow, NULL, FALSE);
- // plugin wnds get the WM_DISPLAYCHANGE which is all they need
- return 1;
- case WINAMP_SELSKIN:
- prefs_last_page = 40;
- prefs_dialog(1);
- return 1;
- case WINAMP_VISPLUGIN:
- if (vis_running()) vis_stop();
- else vis_start(hMainWindow, NULL);
- return 1;
- case WINAMP_PLGSETUP:
- prefs_last_page = 33;
- prefs_dialog(1);
- return 1;
- case WINAMP_TOGGLE_AUTOSCROLL:
- config_autoscrollname ^= 1;
- if (config_autoscrollname == 1) SetTimer(hwnd, UPDATE_DISPLAY_TIMER + 1, 200, NULL);
- else if (config_autoscrollname == 0)
- {
- KillTimer(hwnd, UPDATE_DISPLAY_TIMER + 1);
- ui_songposition = 0;
- draw_songname(FileTitle, &ui_songposition, playing ? in_getlength() : PlayList_getcurrentlength());
- }
- return 1;
- case WINAMP_EDIT_ID3:
- if (FileName[0]) in_infobox(DIALOG_PARENT(hMainWindow), FileName);
- return 1;
- case WINAMP_OPTIONS_WINDOWSHADE_PL: // toggle windowshade
- ToggleWindowShade_PL();
- return 1;
- case WINAMP_OPTIONS_WINDOWSHADE_EQ:
- ToggleWindowShade_EQ();
- return 1;
- case WINAMP_OPTIONS_WINDOWSHADE: // toggle windowshade
- ToggleWindowShade_Main();
- return 1;
- case WINAMP_OPTIONS_WINDOWSHADE_GLOBAL: // toggle windowshade
- {
- HWND hFocus = GetForegroundWindow();
- if (hFocus == hPLWindow || IsChild(hFocus, hPLWindow))
- ToggleWindowShade_PL();
- else if (hFocus == hEQWindow || IsChild(hFocus, hEQWindow))
- ToggleWindowShade_EQ();
- else
- ToggleWindowShade_Main();
- }
- return 1;
- case ID_PE_CLOSE:
- case WINAMP_MAIN_WINDOW:
- config_mw_open = !config_mw_open;
- if (config_mw_open)
- {
- if (config_pe_open && config_pe_width >= 350 && config_pe_height != 14)
- {
- RECT r = {config_pe_width - 150 - 75, config_pe_height - 26, r.left + 77, r.top + 16};
- InvalidateRect(hPLWindow, &r, FALSE);
- }
- }
- else
- {
- MoveOffscreen(hwnd);
- }
- //sa_setthread(-1);
- CheckMenuItem(main_menu, WINAMP_MAIN_WINDOW, config_mw_open ? MF_CHECKED : MF_UNCHECKED);
- set_aot(0);
- Ipc_WindowToggle(IPC_CB_WND_MAIN, config_mw_open);
- case WINAMP_NEXT_WINDOW:
- EnterCriticalSection(&embedcs);
- {
- embedWindowState *p = embedwndlist;
- int x;
- int state = 0;
- for (x = 0; ; x ++)
- {
- HWND dockwnd = NULL;
- int vis = 0;
- if ( x == 0 )
- {
- dockwnd = hMainWindow;
- vis = config_mw_open;
- }
- else if ( x == 1 )
- {
- dockwnd = hEQWindow;
- vis = config_eq_open;
- }
- else if ( x == 2 )
- {
- dockwnd = hPLWindow;
- vis = config_pe_open;
- }
- //else if (x == 3) { /*dockwnd = hMBWindow; vis = 0;*/ } // config_mb_open; }
- else if ( x == 4 )
- {
- dockwnd = hVideoWindow;
- vis = config_video_open;
- }
- else
- {
- if ( !p )
- {
- if ( state == 1 )
- {
- p = embedwndlist;
- x = -1;
- state = 2;
- continue;
- }
- else
- break;
- }
- dockwnd = p->me;
- vis = IsWindowVisible( p->me );
- }
- if (!state)
- {
- HWND fg = GetForegroundWindow();
- if (fg == dockwnd || IsChild(dockwnd, fg))
- {
- state = 1;
- }
- }
- else if (vis)
- {
- SetForegroundWindow(dockwnd);
- break;
- }
- // changed for 5.58 to cope with x == 3 as this can otherwise cause
- // one embedwnd to stay as the active window irrespective of doing
- // additional ctrl+tab actions as it was not wanting to handle x==3
- if (x == 3 || x > 4)
- p = p->link;
- }
- }
- LeaveCriticalSection(&embedcs);
- return 1;
- case WINAMP_HELP_ABOUT: // about box
- about_dialog();
- return 1;
- case WINAMP_PE_SEARCH:
- case WINAMP_JUMPFILE:
- jump_file_dialog(hMainWindow);
- return 1;
- case WINAMP_TOGGLE_LIBRARY:
- sendMlIpc(ML_IPC_TOGGLE_VISIBLE, 0);
- return 1;
- case WINAMP_JUMP:
- if (playing && in_mod && in_mod->is_seekable)
- {
- jump_dialog(hMainWindow);
- }
- return 1;
- case WINAMP_FFWD5S: // left and right arrows, fastforward and rewind by 5 seconds
- case WINAMP_REW5S:
- {
- int i;
- if (!in_mod || !in_mod->is_seekable || PlayList_ishidden(PlayList_getPosition())) return 1;
- if (LOWORD(wID) == WINAMP_FFWD5S) i = 5000;
- else i = -5000;
- if (playing)
- {
- int t;
- t = in_getouttime() + i;
- if (t < 0) t = 0;
- if (in_seek(t) < 0)
- SendMessageW(hwnd, WM_WA_MPEG_EOF, 0, 0);
- else
- {
- ui_drawtime(in_getouttime() / 1000, 0);
- }
- }
- }
- return 1;
- case WINAMP_MAINMENU: // alt-f for mainmenu
- {
- POINT p = { 6, 13 };
- if (config_dsize)
- {
- p.x *= 2;
- p.y *= 2;
- }
- ClientToScreen(hwnd, &p);
- if ( /*p.x > 3000 || */p.y > OFFSCREEN_Y_POS && p.y < (OFFSCREEN_Y_POS + 2000) )
- GetCursorPos(&p);
- DoTrackPopup(main_menu, TPM_LEFTALIGN | TPM_RIGHTBUTTON, p.x, p.y, hwnd);
- }
- return 1;
- case WINAMP_PREVSONG:
- {
- int s = 1;
- if (!config_shuffle && PlayList_advance( -1) < 0)
- {
- s = 0;
- if (config_repeat)
- {
- s = 1;
- PlayList_advance(BIGINT);
- }
- }
- if (s)
- {
- if (PlayList_getlength())
- {
- if (config_shuffle)
- {
- if (PlayList_randpos( -1)) return 1;
- }
- PlayList_getcurrent(FileName, FileTitle, FileTitleNum);
- if (playing)
- {
- StopPlaying(0);
- StartPlaying();
- }
- else StopPlaying(0);
- }
- }
- }
- return 0;
- case WINAMP_BUTTON1_SHIFT: // button 1 (previous), sent from either windowshade,
- case WINAMP_BUTTON1_CTRL: // keyboard shortcut, or normal buttons (ui.c)
- case WINAMP_BUTTON1:
- return (Main_OnButton1(hwnd, LOWORD(wID), hwndCtl, codeNotify));
- case WINAMP_BUTTON2_SHIFT: // button 2 (play)
- case WINAMP_BUTTON2_CTRL:
- case WINAMP_BUTTON2:
- return (Main_OnButton2(hwnd, LOWORD(wID), hwndCtl, codeNotify));
- case WINAMP_BUTTON3: // button 3 (pause)
- return (Main_OnButton3(hwnd, LOWORD(wID), hwndCtl, codeNotify));
- case WINAMP_BUTTON4_CTRL: // button 4 (stop)
- case WINAMP_BUTTON4_SHIFT: // button 4 (stop)
- case WINAMP_BUTTON4:
- return (Main_OnButton4(hwnd, LOWORD(wID), hwndCtl, codeNotify));
- case WINAMP_BUTTON5_CTRL: // button 5 (next)
- case WINAMP_BUTTON5_SHIFT: // button 5 (next)
- case WINAMP_BUTTON5:
- return (Main_OnButton5(hwnd, LOWORD(wID), hwndCtl, codeNotify));
- case WINAMP_FILE_QUIT: // keyboard Alt-X or menu option
- if (g_exit_disabled) return 0;
- SendMessageW(hwnd, WM_CLOSE, 0, 0);
- return 1;
- case WINAMP_FILE_LOC: // open location
- getNewLocation(1, DIALOG_PARENT(hwnd));
- plEditRefresh();
- return 1;
- case WINAMP_FILE_PLAY: // open file(s)
- getNewFile(1, /*NULL*/DIALOG_PARENT(hwnd), 0);
- plEditRefresh();
- return 1;
- case WINAMP_FILE_DIR: // open directory
- {
- BROWSEINFOW bi = {0};
- wchar_t name[MAX_PATH] = {0};
- bi.hwndOwner = DIALOG_PARENT(hwnd);
- bi.pszDisplayName = name;
- bi.lpszTitle = L"__foo";
- bi.ulFlags = BIF_RETURNONLYFSDIRS | BIF_NEWDIALOGSTYLE;
- bi.lpfn = BrowseCallbackProc;
- ITEMIDLIST *idlist = SHBrowseForFolderW(&bi);
- if (idlist)
- {
- wchar_t path[MAX_PATH] = {0};
- SHGetPathFromIDListW( idlist, path );
- Shell_Free(idlist);
- WASABI_API_APP->path_setWorkingPath(path);
- PlayList_delete();
- PlayList_adddir(path, (config_rofiob&2) ? 0 : 1);
- if (config_rofiob&1) PlayList_sort(2, 0);
- BeginPlayback();
- plEditRefresh();
- }
- }
- return 1;
- case WINAMP_OPTIONS_PREFS: // open preferences
- prefs_dialog(0);
- return 1;
- case WINAMP_OPTIONS_AOT: // toggle always on top
- config_aot = !config_aot;
- set_aot(0);
- return 1;
- case WINAMP_OPTIONS_DSIZE: // toggle doublesize mode
- config_dsize = !config_dsize;
- if (!config_bifont && config_bifont_alt) draw_reinit_plfont(1);
- set_aot(1);
- return 1;
- case WINAMP_OPTIONS_EASYMOVE: // toggle easymove (easy window moving)
- config_easymove = !config_easymove;
- CheckMenuItem(main_menu, WINAMP_OPTIONS_EASYMOVE, config_easymove ? MF_CHECKED : MF_UNCHECKED);
- return 1;
- case WINAMP_FILE_SHUFFLE: // toggle shuffle (and draw button)
- config_shuffle = !config_shuffle;
- CheckMenuItem(main_menu, WINAMP_FILE_SHUFFLE, config_shuffle ? MF_CHECKED : MF_UNCHECKED);
- draw_shuffle(config_shuffle, 0);
- if (config_shuffle) PlayList_updaterandpos();
- if (config_shuffle && !playing)
- {
- PlayList_randpos( -BIGINT);
- PlayList_getcurrent(FileName, FileTitle, FileTitleNum);
- //draw_songname(FileTitle, &ui_songposition, playing ? in_getlength() : PlayList_getcurrentlength());
- }
- draw_songname(getStringW((config_shuffle ? IDS_SHUFFLE_ON : IDS_SHUFFLE_OFF), NULL, 0), &ui_songposition, -2);
- return 1;
- case WINAMP_FILE_REPEAT: // toggle repeat
- {
- config_repeat = !config_repeat;
- CheckMenuItem(main_menu, WINAMP_FILE_REPEAT, config_repeat ? MF_CHECKED : MF_UNCHECKED);
- draw_repeat(config_repeat, 0);
- UINT id = 0;
- if (!config_repeat) id = IDS_REPEAT_OFF;
- else if (config_repeat && config_pladv) id = IDS_REPEAT_PL;
- else if (config_repeat && !config_pladv) id = IDS_REPEAT_TRACK;
- if (id) draw_songname(getStringW(id, NULL, 0), &ui_songposition, -2);
- return 1;
- }
- case WINAMP_FILE_MANUALPLADVANCE: // toggle manual playlist advance
- {
- config_pladv = !config_pladv;
- UpdateManualAdvanceState();
- UINT id = 0;
- if (!config_repeat) id = (config_pladv ? IDS_MAN_ADV_OFF : IDS_MAN_ADV_ON);
- else if (config_repeat && config_pladv) id = IDS_REPEAT_PL;
- else if (config_repeat && !config_pladv) id = IDS_REPEAT_TRACK;
- if (id) draw_songname(getStringW(id, NULL, 0), &ui_songposition, -2);
- return 1;
- }
- case WINAMP_OPTIONS_EQ: // toggle EQ window
- eq_dialog(hwnd,0);
- return 1;
- case WINAMP_OPTIONS_PLEDIT: // toggle playlist editor
- // if we get a 2 then it came from gen_ff so that we can work around a docking/position issue
- pleditDlg(hwnd,codeNotify==2);
- return 1;
- case WINAMP_OPTIONS_VIDEO:
- config_video_open ? HideVideoWindow(1) : ShowVideoWindow(0);
- return 1;
- case WINAMP_OPTIONS_TOGTIME:
- config_timeleftmode = !config_timeleftmode;
- CheckMenuItem(main_menu, WINAMP_OPTIONS_ELAPSED, config_timeleftmode ? MF_UNCHECKED : MF_CHECKED);
- CheckMenuItem(main_menu, WINAMP_OPTIONS_REMAINING, config_timeleftmode ? MF_CHECKED : MF_UNCHECKED);
- SendMessageW(hwnd, WM_TIMER, UPDATE_DISPLAY_TIMER + 4, 0);
- return 1;
- case WINAMP_OPTIONS_ELAPSED: // set time mode to elapsed
- config_timeleftmode = 0;
- CheckMenuItem(main_menu, WINAMP_OPTIONS_ELAPSED, MF_CHECKED);
- CheckMenuItem(main_menu, WINAMP_OPTIONS_REMAINING, MF_UNCHECKED);
- SendMessageW(hwnd, WM_TIMER, UPDATE_DISPLAY_TIMER + 4, 0);
- return 1;
- case WINAMP_OPTIONS_REMAINING: // set time mode to remaining
- config_timeleftmode = 1;
- CheckMenuItem(main_menu, WINAMP_OPTIONS_ELAPSED, MF_UNCHECKED);
- CheckMenuItem(main_menu, WINAMP_OPTIONS_REMAINING, MF_CHECKED);
- SendMessageW(hwnd, WM_TIMER, UPDATE_DISPLAY_TIMER + 4, 0);
- return 1;
- case WINAMP_VOLUMEUP: // increase volume by ~2%
- case WINAMP_VOLUMEDOWN: // decrease volume by ~2%
- if (LOWORD(wID) == WINAMP_VOLUMEUP)
- {
- if (config_volume <= 251) config_volume += 4;
- else config_volume = 255;
- }
- else
- {
- if (config_volume > 3) config_volume -= 4;
- else config_volume = 0;
- }
- in_setvol(config_volume);
- draw_volumebar(config_volume, 0);
- update_volume_text(-2);
- return 1;
- case WINAMP_JUMP10BACK:
- {
- int x;
- int i = playing;
- if (i) StopPlaying(0);
- for (x = 0; x < 10; x ++)
- SendMessageW(hwnd, WM_COMMAND, WINAMP_BUTTON1, 0);
- if (i) StartPlaying();
- }
- return 1;
- case WINAMP_JUMP10FWD:
- {
- int x;
- int i = playing;
- if (i) StopPlaying(0);
- for (x = 0; x < 10; x ++)
- SendMessageW(hwnd, WM_COMMAND, WINAMP_BUTTON5, 0);
- if (i) StartPlaying();
- }
- return 1;
- case WINAMP_GETMORESKINS:
- myOpenURLWithFallback(hwnd, L"http://www.google.com/search?q=Winamp+Skins", L"http://www.google.com/search?q=Winamp+Skins");
- return 0;
- case WINAMP_VISCONF:
- {
- wchar_t b[MAX_PATH] = {0};
- HINSTANCE hLib;
- PathCombineW(b, VISDIR, config_visplugin_name);
- hLib = LoadLibraryW(b);
- if (hLib)
- {
- winampVisModule *module = NULL;
- winampVisGetHeaderType pr = (winampVisGetHeaderType) GetProcAddress(hLib, "winampVisGetHeader");
- winampVisHeader* pv = pr(hMainWindow);
- if (pv) module = pv->getModule(config_visplugin_num);
- if (module)
- {
- module->hDllInstance = hLib;
- module->hwndParent = hMainWindow;
- if (!(config_no_visseh&1))
- {
- __try {
- module->Config(module);
- }
- __except(EXCEPTION_EXECUTE_HANDLER)
- {
- LPMessageBox(hwnd, IDS_PLUGINERROR, IDS_ERROR, MB_OK | MB_ICONEXCLAMATION);
- }
- }
- else
- {
- module->Config(module);
- }
- }
- else
- {
- LPMessageBox(hwnd, IDS_ERRORLOADINGPLUGIN, IDS_ERROR, MB_OK);
- }
- FreeLibrary(hLib);
- }
- }
- return 1;
- case WINAMP_MINIMIZE:
- if (GetAsyncKeyState(VK_SHIFT) >> 15)
- minimize_hack_winamp = 1;
- else
- minimize_hack_winamp = 0;
- ShowWindow(hMainWindow, SW_MINIMIZE);
- return 1;
- case WINAMP_VIDEO_TOGGLE_FS:
- videoToggleFullscreen();
- return 1;
- case ID_MLFILE_NEWPLAYLIST:
- {
- HWND h = (HWND)sendMlIpc(0, 0);
- HWND fgw = GetForegroundWindow();
- if (h && IsWindow(h) && IsWindowVisible(h) && IsChild(fgw, h))
- sendMlIpc(ML_IPC_NEWPLAYLIST, (WPARAM)h);
- else sendMlIpc(ML_IPC_NEWPLAYLIST, (WPARAM)(g_dialog_box_parent ? g_dialog_box_parent : hMainWindow));
- showLibrary();
- }
- return 1;
- case ID_MLFILE_SAVEPLAYLIST:
- showLibrary();
- {
- HWND h = (HWND)sendMlIpc(0, 0);
- HWND fgw = GetForegroundWindow();
- if (h && IsWindow(h) && IsWindowVisible(h) && IsChild(fgw, h))
- sendMlIpc(ML_IPC_SAVEPLAYLIST, (WPARAM)h);
- else sendMlIpc(ML_IPC_SAVEPLAYLIST, (WPARAM)(g_dialog_box_parent ? g_dialog_box_parent : hMainWindow));
- }
- return 1;
- case ID_MLFILE_LOADPLAYLIST:
- {
- HWND h = (HWND)sendMlIpc(0, 0);
- HWND fgw = GetForegroundWindow();
- if (h && IsWindow(h) && IsWindowVisible(h) && IsChild(fgw, h))
- sendMlIpc(ML_IPC_IMPORTPLAYLIST, (WPARAM)h);
- else
- sendMlIpc(ML_IPC_IMPORTPLAYLIST, (WPARAM)(g_dialog_box_parent ? g_dialog_box_parent : hMainWindow));
- showLibrary();
- }
- return 1;
- case ID_MLFILE_IMPORTCURRENTPLAYLIST:
- sendMlIpc(ML_IPC_IMPORTCURRENTPLAYLIST, 0);
- showLibrary();
- return 1;
- case ID_MLVIEW_MEDIA:
- #define TREE_LOCALMEDIA 1000
- showLibrary();
- sendMlIpc(ML_IPC_SETCURTREEITEM, TREE_LOCALMEDIA);
- return 1;
- case ID_MLVIEW_PLAYLISTS:
- #define TREE_PLAYLISTS 3001
- showLibrary();
- sendMlIpc(ML_IPC_SETCURTREEITEM, TREE_PLAYLISTS);
- return 1;
- case ID_MLVIEW_DEVICES:
- #define TREE_DEVICES 10000
- showLibrary();
- sendMlIpc(ML_IPC_SETCURTREEITEM, TREE_DEVICES);
- return 1;
- case ID_MLVIEW_INTERNETRADIO:
- #define TREE_INTERNET_RADIO 11000
- showLibrary();
- sendMlIpc(ML_IPC_SETCURTREEITEM, TREE_INTERNET_RADIO);
- return 1;
- case ID_MLVIEW_INTERNETTV:
- #define TREE_INTERNET_VIDEO 11001
- showLibrary();
- sendMlIpc(ML_IPC_SETCURTREEITEM, TREE_INTERNET_VIDEO);
- return 1;
- case ID_MLVIEW_LIBRARYPREFERENCES:
- showLibrary();
- sendMlIpc(ML_IPC_OPENPREFS, 0);
- return 1;
- case ID_PLAY_VOLUMEUP: // increase by ~ 10%
- {
- int a = 5;
- while (a--) SendMessageW(hwnd, WM_COMMAND, WINAMP_VOLUMEUP, 0);
- }
- return 1;
- case ID_PLAY_VOLUMEDOWN: // decrease by ~10%
- {
- int a = 5;
- while (a--)
- SendMessageW(hwnd, WM_COMMAND, WINAMP_VOLUMEDOWN, 0);
- }
- return 1;
- case ID_RATING5: return setCurrentRating(5);
- case ID_RATING4: return setCurrentRating(4);
- case ID_RATING3: return setCurrentRating(3);
- case ID_RATING2: return setCurrentRating(2);
- case ID_RATING1: return setCurrentRating(1);
- case ID_RATING0: return setCurrentRating(0);
- case ID_PL_RATING5: return setPlRating(5);
- case ID_PL_RATING4: return setPlRating(4);
- case ID_PL_RATING3: return setPlRating(3);
- case ID_PL_RATING2: return setPlRating(2);
- case ID_PL_RATING1: return setPlRating(1);
- case ID_PL_RATING0: return setPlRating(0);
- case ID_PE_FFOD:
- {
- wchar_t fn[FILENAME_SIZE] = {0};
- if (!PlayList_getitem2W(PlayList_getPosition(), fn, NULL))
- {
- explorerFindFileManager->AddFile(fn);
- explorerFindFileManager->ShowFiles();
- }
- }
- return 1;
- } // switch()
- return 0;
- } // Main_OnCommand()
|