123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253 |
- /** (c) Nullsoft, Inc. C O N F I D E N T I A L
- ** Filename:
- ** Project:
- ** Description:
- ** Author:
- ** Created:
- **/
- #include "main.h"
- #include "../nu/ns_wc.h"
- #include "../nu/AutoChar.h"
- #include "../nu/AutoWide.h"
- #include "../nu/AutoWideFn.h"
- #include "./api.h"
- #include "resource.h"
- #include "wintheme.h"
- // WM_CREATE handler
- LRESULT Main_OnCreate(HWND hwnd, LPCREATESTRUCT lpCreateStruct)
- {
- // srand(GetTickCount());
- hMainWindow = hwnd;
- DisableVistaPreview();
- HACCEL hAccel = LoadAcceleratorsW(language_pack_instance, MAKEINTRESOURCEW(IDR_ACCELERATOR_GLOBAL));
- if (!hAccel && language_pack_instance != hMainInstance) hAccel = LoadAcceleratorsW(hMainInstance, MAKEINTRESOURCEW(IDR_ACCELERATOR_GLOBAL));
- if (hAccel) WASABI_API_APP->app_addAccelerators(hwnd, &hAccel, 1, TRANSLATE_MODE_GLOBAL);
- hAccel = LoadAcceleratorsW(language_pack_instance, MAKEINTRESOURCEW(IDR_ACCELERATOR_MAIN));
- if (!hAccel && language_pack_instance != hMainInstance) hAccel = LoadAcceleratorsW(hMainInstance, MAKEINTRESOURCEW(IDR_ACCELERATOR_MAIN));
- if (hAccel) WASABI_API_APP->app_addAccelerators(hwnd, &hAccel, 1, TRANSLATE_MODE_NORMAL);
- WASABI_API_APP->app_registerGlobalWindow(hwnd);
- return 1;
- } // Main_OnCreate()
- // Message sent from system notification area
- LRESULT Main_OnWASystray(HWND hwnd, int id)
- {
- POINT p;
- switch (id)
- {
- case WM_LBUTTONUP:
- if (GetAsyncKeyState(VK_CONTROL) & (1 << 15))
- SendMessageW(hwnd, WM_COMMAND, WINAMP_FILE_LOC, 0);
- else if (GetAsyncKeyState(VK_SHIFT) & (1 << 15))
- SendMessageW(hwnd, WM_COMMAND, WINAMP_FILE_PLAY, 0);
- else if (!IsWindowVisible(hwnd))
- {
- ShowWindow(hwnd, SW_RESTORE);
- ShowWindow(hwnd, SW_SHOW);
- }
- else SetForegroundWindow(hwnd);
- break;
- case WM_RBUTTONUP:
- GetCursorPos(&p);
- SetForegroundWindow(hwnd);
- //DoTrackPopup(main_menu, TPM_RIGHTBUTTON, p.x, p.y, hwnd);
- TrackPopupMenu(main_menu, TPM_RIGHTBUTTON, p.x, p.y, 0, hwnd, NULL);
- break;
- }
- return 1;
- }
- // WM_SIZE handler, to detect minizations.
- LRESULT Main_OnSize(HWND hwnd, UINT state, int cx, int cy)
- {
- if (state == SIZE_MINIMIZED)
- {
- int q = GetAsyncKeyState(VK_SHIFT) >> 15;
- if (config_taskbar || q || minimize_hack_winamp) ShowWindow(hwnd, SW_HIDE);
- if (q || minimize_hack_winamp)
- {
- systray_minimize(caption);
- config_minimized = 2;
- }
- else config_minimized = 1;
- if (config_pe_open && hPLWindow){
- HWND parent = GetParent(GetParent(hPLWindow));
- if(IsWindow(parent) && IsWindowVisible(hPLWindow)){}
- else ShowWindow(hPLWindow,SW_HIDE);
- }
- //if (config_mb_open&&hMBWindow) ShowWindow(hMBWindow,SW_HIDE);
- if (config_eq_open && hEQWindow) ShowWindow(hEQWindow,SW_HIDE);
- minimize_hack_winamp = 0;
- }
- else if (state == SIZE_RESTORED)
- {
- if (config_minimized == 2 && !(config_taskbar == 1 || config_taskbar == 2))
- {
- systray_restore();
- }
- if (g_taskbar_dirty)
- {
- g_taskbar_dirty = 0;
- set_taskbar();
- }
- if (!IsWindowVisible(hwnd) && !deferring_show) ShowWindow(hwnd, SW_SHOWNA);
- if (config_minimized) set_aot(0);
- if (!config_mw_open) MoveOffscreen(hwnd);
- config_minimized = 0;
- SendMessageW(hwnd, WM_TIMER, UPDATE_DISPLAY_TIMER + 4, 0);
- if (!deferring_show) SetForegroundWindow(hwnd);
- if (config_pe_open && hPLWindow) ShowWindow(hPLWindow, SW_SHOWNA);
- //if (config_mb_open&&hMBWindow) ShowWindow(hMBWindow,SW_SHOWNA);
- if (config_eq_open && hEQWindow) ShowWindow(hEQWindow,SW_SHOWNA);
- if (config_video_open && hVideoWindow) ShowWindow(hVideoWindow, SW_SHOWNA);
- set_aot(0);
- // Browser_toggleVisible(1);
- }
- return 1;
- }
- // Sent by decode thread to let the main program know it's done
- LRESULT Main_OnWAMPEGEOF(HWND hwnd)
- {
- return PlayQueue_OnEOF();
- }
- // Drag&Drop handler
- LRESULT Main_OnDropFiles(HWND hwnd, HDROP hdrop)
- {
- wchar_t temp[MAX_PATH] = {0};
- int s = (GetAsyncKeyState(VK_SHIFT) & (1 << 15)) ? 0 : 1;
- int y = DragQueryFileW(hdrop, 0xffffffff, temp, MAX_PATH);
- if (s)
- {
- PlayList_delete();
- PlayList_randpos(0);
- }
- for (int x = 0; x < y; x ++)
- {
- DragQueryFileW(hdrop, x, temp, MAX_PATH);
- PlayList_appendthing(temp, 0, 0);
- }
- if (s)
- BeginPlayback();
- plEditRefresh();
- return 1;
- }
- LRESULT Main_OnCopyData(HWND sendingHWND, COPYDATASTRUCT *cds)
- {
- switch (cds->dwData)
- {
- case IPC_SETSKIN:
- if (cds->lpData && lstrlenA((char *)cds->lpData))
- {
- AutoWide dataW((char*)cds->lpData);
- if (_wcsicmp(config_skin, dataW))
- {
- StringCchCopyW(config_skin, MAX_PATH, dataW);
- }
- SendMessageW(hMainWindow, WM_COMMAND, WINAMP_REFRESHSKIN, 0);
- }
- return TRUE;
- case IPC_SETSKINW:
- if (cds->lpData && lstrlenW((wchar_t*)cds->lpData))
- {
- if (_wcsicmp(config_skin, (wchar_t*)cds->lpData))
- {
- StringCchCopyW(config_skin, MAX_PATH, (wchar_t*)cds->lpData);
- }
- SendMessageW(hMainWindow, WM_COMMAND, WINAMP_REFRESHSKIN, 0);
- }
- return TRUE;
- case IPC_CHDIR:
- SetCurrentDirectoryA((char *) cds->lpData);
- return TRUE;
- case IPC_PLAYFILE:
- {
- char *filename = (char *)cds->lpData;
- PlayList_appendthing(AutoWideFn(filename), 0, 0);
- plEditRefresh();
- }
- return TRUE;
- case IPC_PLAYFILEW:
- {
- wchar_t *filename = (wchar_t *)cds->lpData;
- PlayList_appendthing(filename, 0, 0);
- plEditRefresh();
- }
- return TRUE;
- case IPC_GETMODULENAME:
- {
- char b[512] = {0}, b2[512] = {0};
- GetModuleFileNameA(hMainInstance, b, sizeof(b));
- GetShortPathNameA(b, b2, 511);
- GetShortPathNameA((char *)cds->lpData, b, 511);
- stat_isit = _stricmp(b, b2);
- }
- return TRUE;
- case IPC_ADDBOOKMARK:
- {
- wchar_t* file = AutoWide((char *)cds->lpData);
- Bookmark_additem(file, PlayList_gettitle(file, 1));
- }
- return TRUE;
- case IPC_ADDBOOKMARKW:
- {
- Bookmark_additem((wchar_t *)cds->lpData, PlayList_gettitle((const wchar_t *)cds->lpData, 1));
- }
- return TRUE;
- case IPC_GET_EXTENDED_FILE_INFOW_HOOKABLE:
- {
- wchar_t *filename = (wchar_t *)cds->lpData;
- wchar_t *tagname = filename + wcslen(filename) + 1;
- extendedFileInfoStructW info;
- info.filename = filename;
- info.metadata = tagname;
- wchar_t ret[1024]=L"";
- info.ret = ret;
- info.retlen = 1024;
-
- if (0 == SendMessageW(hMainWindow, WM_WA_IPC, (WPARAM)&info, IPC_GET_EXTENDED_FILE_INFOW_HOOKABLE))
- ret[0] = L'\0';
- COPYDATASTRUCT answer;
- answer.lpData = info.ret;
- answer.cbData = sizeof(ret);
- answer.dwData = IPC_GET_EXTENDED_FILE_INFOW_HOOKABLE;
- return SendMessageW(sendingHWND, WM_COPYDATA, (WPARAM)hMainWindow, (LPARAM)&answer);
- }
- case IPC_GET_PLAYING_FILENAME:
- {
- COPYDATASTRUCT answer;
- answer.lpData = FileName;
- answer.cbData = (DWORD)(sizeof(wchar_t) * (wcslen(FileName) + 1));
- answer.dwData = IPC_GET_PLAYING_FILENAME;
- return SendMessageW(sendingHWND, WM_COPYDATA, (WPARAM)hMainWindow, (LPARAM)&answer);
- }
- case IPC_OPEN_URL:
- {
- myOpenURL(hMainWindow, (wchar_t *)cds->lpData);
- return TRUE;
- }
- case IPC_HANDLE_URI:
- {
- HandleFilename((wchar_t *)cds->lpData);
- return TRUE;
- }
- }
- return FALSE;
- }
|