summaryrefslogtreecommitdiffstats
path: root/gui/win32/gui.c
diff options
context:
space:
mode:
Diffstat (limited to 'gui/win32/gui.c')
-rw-r--r--gui/win32/gui.c1551
1 files changed, 0 insertions, 1551 deletions
diff --git a/gui/win32/gui.c b/gui/win32/gui.c
deleted file mode 100644
index d76077d41a..0000000000
--- a/gui/win32/gui.c
+++ /dev/null
@@ -1,1551 +0,0 @@
-/*
- * MPlayer GUI for Win32
- * Copyright (C) 2003 Sascha Sommer <saschasommer@freenet.de>
- * Copyright (C) 2006 Erik Augustson <erik_27can@yahoo.com>
- * Copyright (C) 2006 Gianluigi Tiesi <sherpya@netfarm.it>
- *
- * This file is part of MPlayer.
- *
- * MPlayer is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * MPlayer is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with MPlayer; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include <fcntl.h>
-#include <windows.h>
-#include <windowsx.h>
-#include <shlobj.h>
-
-#include "version.h"
-#include "mplayer.h"
-#include "mp_fifo.h"
-#include "mp_msg.h"
-#include "help_mp.h"
-#include "input/input.h"
-#include "input/mouse.h"
-#include "osdep/keycodes.h"
-#include "stream/stream.h"
-#include "libvo/video_out.h"
-#include "libmpcodecs/vd.h"
-#include "gui/interface.h"
-#include "gui/mplayer/gmplayer.h"
-#include "gui.h"
-#include "dialogs.h"
-
-// HACK around bug in old mingw
-#undef INVALID_FILE_ATTRIBUTES
-#define INVALID_FILE_ATTRIBUTES ((DWORD)-1)
-
-#ifndef WM_XBUTTONDOWN
-# define WM_XBUTTONDOWN 0x020B
-# define WM_XBUTTONUP 0x020C
-# define WM_XBUTTONDBLCLK 0x020D
-#endif
-
-/* Globals / Externs */
-void renderinfobox(skin_t *skin, window_priv_t *priv);
-void renderwidget(skin_t *skin, image *dest, widget *item, int state);
-void print_version(void);
-float sub_aspect;
-
-DWORD oldtime;
-NOTIFYICONDATA nid;
-int console_state = 0;
-play_tree_t *playtree = NULL;
-
-static HBRUSH colorbrush = NULL; //Handle to colorkey brush
-static COLORREF windowcolor = RGB(255,0,255); //Windowcolor == colorkey
-
-void console_toggle(void)
-{
- if (console_state)
- {
- FreeConsole();
- console = 0;
- console_state = 0;
- }
- else
- {
- /* This code comes from: http://dslweb.nwnexus.com/~ast/dload/guicon.htm */
- CONSOLE_SCREEN_BUFFER_INFO coninfo;
- FILE *fp;
- HWND hwnd = NULL;
- console = 1;
- AllocConsole();
- SetConsoleTitle(MP_TITLE);
-
- /* disable the close button for now */
- while (!hwnd)
- {
- hwnd = FindWindow(NULL, MP_TITLE);
- Sleep(100);
- }
- DeleteMenu(GetSystemMenu(hwnd, 0), SC_CLOSE, MF_BYCOMMAND);
-
- GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &coninfo);
- coninfo.dwSize.Y = 1000;
- SetConsoleScreenBufferSize(GetStdHandle(STD_OUTPUT_HANDLE), coninfo.dwSize);
- fp = freopen("con", "w", stdout);
- *stdout = *fp;
- setvbuf(stdout, NULL, _IONBF, 0);
- fp = freopen("con", "r", stdin);
- *stdin = *fp;
- setvbuf(stdin, NULL, _IONBF, 0);
- fp = freopen("con", "w", stdout);
- *stderr = *fp;
- setvbuf(stderr, NULL, _IONBF, 0);
- print_version();
- console_state = 1;
- }
-}
-
-void capitalize(char *filename)
-{
- unsigned int i;
- BOOL cap = TRUE;
- for (i=0; i < strlen(filename); i++)
- {
- if (cap)
- {
- cap = FALSE;
- filename[i] = toupper(filename[i]);
- }
- else if (filename[i] == ' ')
- cap = TRUE;
- else
- filename[i] = tolower(filename[i]);
- }
-}
-
-static image *get_drawground(HWND hwnd)
-{
- gui_t * gui = (gui_t *) GetWindowLongPtr(hwnd, GWLP_USERDATA);
- unsigned int i;
- if(!gui) return NULL;
- for(i=0; i<gui->window_priv_count; i++)
- if(gui->window_priv[i]->hwnd==hwnd)
- return &gui->window_priv[i]->img;
- return NULL;
-}
-
-static HBITMAP get_bitmap(HWND hwnd)
-{
- gui_t *gui = (gui_t *) GetWindowLongPtr(hwnd, GWLP_USERDATA);
- unsigned int i;
- if(!gui) return NULL;
- for(i=0; i<gui->window_priv_count; i++)
- if(gui->window_priv[i]->hwnd == hwnd)
- return gui->window_priv[i]->bitmap;
- return NULL;
-}
-
-static int get_windowtype(HWND hwnd)
-{
- gui_t *gui = (gui_t *) GetWindowLongPtr(hwnd, GWLP_USERDATA);
- unsigned int i;
- if(!gui) return -1;
- for(i=0; i<gui->window_priv_count; i++)
- if(gui->window_priv[i]->hwnd == hwnd)
- return gui->window_priv[i]->type;
- return -1;
-}
-
-static void uninit(gui_t *gui)
-{
- if(gui->skin) destroy_window(gui);
- if(gui->playlist) gui->playlist->free_playlist(gui->playlist);
- gui->playlist = NULL;
-}
-
-/*
- the gui message handler
- tries to handle the incoming messages
- and passes them to the player's message handler if it can't handle them
-*/
-static void handlemsg(HWND hWnd, int msg)
-{
- gui_t *gui = (gui_t *) GetWindowLongPtr(hWnd, GWLP_USERDATA);
- if(msg == evNone) return;
-
- switch(msg)
- {
- case evLoadPlay:
- case evLoad:
- if(display_openfilewindow(gui, 0) && (msg == evLoadPlay))
- handlemsg(hWnd, evDropFile);
- return;
- case evLoadSubtitle:
- display_opensubtitlewindow(gui);
- break;
- case evPreferences:
- display_prefswindow(gui);
- return;
- case evPlayList:
- display_playlistwindow(gui);
- return;
- case evSkinBrowser:
- display_skinbrowser(gui);
- break;
- case evEqualizer:
- display_eqwindow(gui);
- break;
- case evAbout:
- MessageBox(hWnd, COPYRIGHT, "About", MB_OK);
- break;
- case evIconify:
- ShowWindow(hWnd, SW_MINIMIZE);
- break;
- case evIncVolume:
- mplayer_put_key(KEY_VOLUME_UP);
- break;
- case evDecVolume:
- mplayer_put_key(KEY_VOLUME_DOWN);
- break;
- default:
- mp_msg(MSGT_GPLAYER, MSGL_V, "[GUI] received msg %s (%i)\n", gui->skin->geteventname(msg), msg);
- break;
- }
- gui->playercontrol(msg);
-}
-
-static widget *clickedinsidewidget(gui_t *gui, int window, int x, int y)
-{
- unsigned int i;
- widget *item;
- for(i=0; i<gui->skin->widgetcount; i++)
- {
- item = gui->skin->widgets[i];
- if((item->window == window) && (item->x <= x) && (item->x + item->width >= x) &&
- (item->y <= y) && (item->y + item->height >= y))
- return item;
- }
- return NULL;
-}
-
-/* updates sliders and the display */
-static void updatedisplay(gui_t *gui, HWND hwnd)
-{
- unsigned int i;
- window_priv_t *priv = NULL;
- DWORD time = timeGetTime();
-
- if(!hwnd) return;
-
- /* load all potmeters hpotmeters */
- for(i=0; i<gui->skin->widgetcount; i++)
- {
- if(gui->skin->widgets[i]->type == tyHpotmeter || gui->skin->widgets[i]->type == tyPotmeter)
- {
- if(gui->skin->widgets[i]->msg == evSetVolume)
- gui->skin->widgets[i]->value = guiIntfStruct.Volume;
- else if(gui->skin->widgets[i]->msg == evSetMoviePosition)
- gui->skin->widgets[i]->value = guiIntfStruct.Position;
- else if(gui->skin->widgets[i]->msg == evSetBalance)
- gui->skin->widgets[i]->value = guiIntfStruct.Balance;
- if(gui->skin->widgets[i]->window == get_windowtype(hwnd))
- renderwidget(gui->skin, get_drawground(hwnd), gui->skin->widgets[i],
- gui->skin->widgets[i]->pressed ? 0 : 1);
- }
- /* update some buttons */
- if(gui->skin->widgets[i]->type == tyButton && gui->skin->widgets[i]->window == get_windowtype(hwnd))
- {
- if(gui->skin->widgets[i]->msg == evPlaySwitchToPause)
- {
- gui->skin->widgets[i]->value = guiIntfStruct.Playing;
- renderwidget(gui->skin, get_drawground(hwnd), gui->skin->widgets[i],
- guiIntfStruct.Playing == 1 ? 0 : 1);
- }
- if(gui->skin->widgets[i]->msg == evMute)
- {
- gui->skin->widgets[i]->value = guiIntfStruct.Volume;
- renderwidget(gui->skin, get_drawground(hwnd), gui->skin->widgets[i],
- guiIntfStruct.Volume == 0.0f ? 0 : 1);
- }
- }
- }
-
- /* updating the display once a 100.second is enough imo */
- if((time - oldtime) < 100) return;
- oldtime=time;
-
- /* suppress directx's fullscreen window when using the sub window */
- if(sub_window && &video_driver_list[0] && strstr("directx", video_driver_list[0]))
- {
- HWND hWndFS = NULL; //handle to directx's fullscreen window
- if(hWndFS == NULL)
- {
- hWndFS = FindWindow(NULL, "MPlayer Fullscreen");
- if(hWndFS != NULL) DestroyWindow(hWndFS); //sub window handles fullscreen
- }
- }
-
- for (i=0; i<gui->window_priv_count; i++)
- {
- if(gui->window_priv[i]->hwnd == hwnd)
- priv=gui->window_priv[i];
- }// Sherpya
- /* display the status msgs */
- renderinfobox(gui->skin, priv);
- RedrawWindow(hwnd, NULL, NULL, RDW_INVALIDATE);
-}
-
-static LRESULT CALLBACK SubProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
-{
- gui_t *gui = (gui_t *) GetWindowLongPtr(hWnd, GWLP_USERDATA);
- if (gui && (gui->subwindow != hWnd)) return FALSE;
-
- switch (message)
- {
- case WM_CLOSE:
- handlemsg(hWnd, evExit);
- return 0;
- case WM_DESTROY:
- PostQuitMessage(0);
- return 0;
- case WM_KEYDOWN:
- {
- switch(wParam)
- {
- case VK_LEFT:
- mplayer_put_key(KEY_LEFT);
- break;
- case VK_UP:
- mplayer_put_key(KEY_UP);
- break;
- case VK_RIGHT:
- mplayer_put_key(KEY_RIGHT);
- break;
- case VK_DOWN:
- mplayer_put_key(KEY_DOWN);
- break;
- case VK_TAB:
- mplayer_put_key(KEY_TAB);
- break;
- case VK_BACK:
- mplayer_put_key(KEY_BS);
- break;
- case VK_DELETE:
- mplayer_put_key(KEY_DELETE);
- break;
- case VK_INSERT:
- mplayer_put_key(KEY_INSERT);
- break;
- case VK_HOME:
- mplayer_put_key(KEY_HOME);
- break;
- case VK_END:
- mplayer_put_key(KEY_END);
- break;
- case VK_PRIOR:
- mplayer_put_key(KEY_PAGE_UP);
- break;
- case VK_NEXT:
- mplayer_put_key(KEY_PAGE_DOWN);
- break;
- case VK_ESCAPE:
- mplayer_put_key(KEY_ESC);
- break;
- }
- break;
- }
- case WM_COMMAND:
- {
- switch(LOWORD(wParam))
- {
- case IDEXIT:
- PostQuitMessage(0);
- handlemsg(hWnd, evExit);
- break;
- case IDFILE_OPEN:
- handlemsg(hWnd, evLoadPlay);
- break;
- case IDURL_OPEN:
- display_openurlwindow(gui, 0);
- break;
- case IDDIR_OPEN:
- {
- static char path[MAX_PATH];
- BROWSEINFO bi;
- LPITEMIDLIST pidl;
- memset(&bi, 0, sizeof(BROWSEINFO));
- bi.lpszTitle = "Choose a Directory...";
- pidl = SHBrowseForFolder(&bi);
- if (SHGetPathFromIDList(pidl, path))
- {
- gui->playlist->clear_playlist(gui->playlist);
- adddirtoplaylist(gui->playlist, path, TRUE);
- gui->startplay(gui);
- }
- break;
- }
- case ID_PTRACK:
- handlemsg(hWnd, evPrev);
- break;
- case ID_SEEKB:
- handlemsg(hWnd, evBackward10sec);
- break;
- case ID_PLAY:
- handlemsg(hWnd, evPlaySwitchToPause);
- break;
- case ID_STOP:
- handlemsg(hWnd, evStop);
- break;
- case ID_SEEKF:
- handlemsg(hWnd, evForward10sec);
- break;
- case ID_NTRACK:
- handlemsg(hWnd, evNext);
- break;
-#ifdef CONFIG_DVDREAD
- case ID_CHAPTERSEL:
- display_chapterselwindow(gui);
- break;
-#endif
- case ID_FULLSCREEN:
- mp_input_queue_cmd(mp_input_parse_cmd("vo_fullscreen"));
- break;
- case ID_MUTE:
- mp_input_queue_cmd(mp_input_parse_cmd("mute"));
- break;
- case ID_ASPECT1:
- mp_input_queue_cmd(mp_input_parse_cmd("switch_ratio 1.777777"));
- break;
- case ID_ASPECT2:
- mp_input_queue_cmd(mp_input_parse_cmd("switch_ratio 1.333333"));
- break;
- case ID_ASPECT3:
- mp_input_queue_cmd(mp_input_parse_cmd("switch_ratio 2.35"));
- break;
- case ID_ASPECT4:
- mp_input_queue_cmd(mp_input_parse_cmd("switch_ratio 0"));
- break;
- case IDSUB_TOGGLE:
- mp_input_queue_cmd(mp_input_parse_cmd("sub_visibility"));
- break;
- case IDSUB_CYCLE:
- mp_input_queue_cmd(mp_input_parse_cmd("sub_select"));
- break;
- }
- return 0;
- }
- case WM_CHAR:
- mplayer_put_key(wParam);
- break;
- case WM_DROPFILES:
- {
- if(!lParam)
- {
- char file[MAX_PATH];
- int filecount = DragQueryFile((HDROP) wParam, -1, file, MAX_PATH);
- int i;
- for(i=0; i<filecount; i++)
- {
- DragQueryFile((HDROP) wParam, i, file, MAX_PATH);
- mplSetFileName(NULL, file, STREAMTYPE_FILE);
- if(!parse_filename(file, playtree, mconfig, 1))
- gui->playlist->add_track(gui->playlist, file, NULL, NULL, 0);
- }
- DragFinish((HDROP) wParam);
- handlemsg(hWnd, evDropFile);
- }
- else
- {
- gui->playlist->clear_playlist(gui->playlist);
- gui->playlist->add_track(gui->playlist, (const char *) wParam, NULL, NULL, 0);
- handlemsg(hWnd, evDropFile);
- }
- SetForegroundWindow(gui->subwindow);
- return 0;
- }
- case WM_LBUTTONDOWN:
- {
- if(!vo_nomouse_input)
- mplayer_put_key(MOUSE_BTN0);
- break;
- }
- case WM_MBUTTONDOWN:
- {
- if(!vo_nomouse_input)
- mplayer_put_key(MOUSE_BTN1);
- break;
- }
- case WM_RBUTTONDOWN:
- {
- POINT point;
- point.x = GET_X_LPARAM(lParam);
- point.y = GET_Y_LPARAM(lParam);
- ClientToScreen(hWnd, &point);
- if(guiIntfStruct.StreamType == STREAMTYPE_DVD)
- EnableMenuItem(gui->dvdmenu, ID_CHAPTERSEL, MF_BYCOMMAND | MF_ENABLED);
- TrackPopupMenu(gui->submenu, 0, point.x, point.y, 0, hWnd, NULL);
- return 0;
- }
- case WM_LBUTTONDBLCLK:
- {
- if(!vo_nomouse_input)
- mplayer_put_key(MOUSE_BTN0_DBL);
- break;
- }
- case WM_MBUTTONDBLCLK:
- {
- if(!vo_nomouse_input)
- mplayer_put_key(MOUSE_BTN1_DBL);
- break;
- }
- case WM_RBUTTONDBLCLK:
- {
- if(!vo_nomouse_input)
- mplayer_put_key(MOUSE_BTN2_DBL);
- break;
- }
- case WM_MOUSEWHEEL:
- {
- int x = GET_WHEEL_DELTA_WPARAM(wParam);
- if(vo_nomouse_input)
- break;
- if (x > 0)
- mplayer_put_key(MOUSE_BTN3);
- else
- mplayer_put_key(MOUSE_BTN4);
- break;
- }
- case WM_XBUTTONDOWN:
- {
- if(vo_nomouse_input)
- break;
- if(HIWORD(wParam) == 1)
- mplayer_put_key(MOUSE_BTN5);
- else
- mplayer_put_key(MOUSE_BTN6);
- break;
- }
- case WM_XBUTTONDBLCLK:
- {
- if(vo_nomouse_input)
- break;
- if(HIWORD(wParam) == 1)
- mplayer_put_key(MOUSE_BTN5_DBL);
- else
- mplayer_put_key(MOUSE_BTN6_DBL);
- break;
- }
- case WM_TIMER:
- {
- if(fullscreen) while(ShowCursor(FALSE) >= 0){}
- KillTimer(hWnd, ID_TIMER);
- return 0;
- }
- case WM_MOUSEMOVE:
- {
- ShowCursor(TRUE);
- SetTimer(hWnd, ID_TIMER, 3000, (TIMERPROC) NULL);
- break;
- }
- case WM_WINDOWPOSCHANGED:
- {
- int tmpheight=0;
- static uint32_t rect_width;
- static uint32_t rect_height;
- RECT rd;
- POINT pt;
- pt.x = 0;
- pt.y = 0;
- GetClientRect(hWnd, &rd);
- ClientToScreen(hWnd, &pt);
-
- rect_width = rd.right - rd.left;
- rect_height = rd.bottom - rd.top;
-
- /* maintain our aspect ratio */
- tmpheight = ((float)rect_width/sub_aspect);
- tmpheight += tmpheight % 2;
- if(tmpheight > rect_height)
- {
- rect_width = ((float)rect_height*sub_aspect);
- rect_width += rect_width % 2;
- }
- else rect_height = tmpheight;
-
- rd.right = rd.left + rect_width;
- rd.bottom = rd.top + rect_height;
-
- AdjustWindowRect(&rd, WS_OVERLAPPEDWINDOW | WS_SIZEBOX, 0);
- SetWindowPos(hWnd, 0, fullscreen?0:pt.x+rd.left, fullscreen?0:pt.y+rd.top,
- fullscreen?vo_screenwidth:rd.right-rd.left, fullscreen?vo_screenheight:rd.bottom-rd.top, SWP_NOOWNERZORDER);
- SetForegroundWindow(hWnd);
- return 0;
- }
- case WM_SYSCOMMAND:
- {
- switch(wParam)
- {
- case SC_SCREENSAVE:
- case SC_MONITORPOWER:
- mp_msg(MSGT_VO, MSGL_V ,"<vo_directx><INFO>killing screensaver\n" );
- return 0;
- }
- break;
- }
- case WM_PAINT:
- {
- PAINTSTRUCT ps;
- RECT rect;
- HDC hdc = BeginPaint(hWnd, &ps);
- HDC hMemDC = CreateCompatibleDC(hdc);
- HBRUSH blackbrush = (HBRUSH)GetStockObject(BLACK_BRUSH);
- int width, height;
- GetClientRect(hWnd, &rect);
- width = rect.right - rect.left;
- height = rect.bottom - rect.top;
- if(guiIntfStruct.Playing == 0)
- {
- int i;
- window *desc = NULL;
-
- for (i=0; i<gui->skin->windowcount; i++)
- if(gui->skin->windows[i]->type == wiSub)
- desc = gui->skin->windows[i];
-
- SelectObject(hMemDC, get_bitmap(hWnd));
- StretchBlt(hdc, 0, 0, width, height, hMemDC, 0, 0, desc->base->bitmap[0]->width,
- desc->base->bitmap[0]->height, SRCCOPY);
- } else {
- FillRect(GetDC(hWnd), &rect, fullscreen?blackbrush:colorbrush);
- }
- DeleteDC(hMemDC);
- EndPaint(hWnd, &ps);
- return 0;
- }
- }
- return DefWindowProc(hWnd, message, wParam, lParam);
-}
-
-/* Window Proc for the gui Window */
-static LRESULT CALLBACK EventProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
-{
- gui_t *gui = (gui_t *) GetWindowLongPtr(hWnd, GWLP_USERDATA);
-
- /* Avoid processing when then window doesn't match gui mainwindow */
- if (gui && (gui->mainwindow != hWnd)) return FALSE;
-
- switch (message)
- {
- case WM_CLOSE:
- handlemsg(hWnd, evExit);
- return 0;
- case WM_DESTROY:
- PostQuitMessage(0);
- return 0;
- case WM_SYSTRAY:
- {
- switch(lParam)
- {
- POINT cursor;
- case WM_RBUTTONDOWN:
- {
- GetCursorPos(&cursor);
- SetForegroundWindow(hWnd);
- TrackPopupMenu(gui->traymenu, 0, cursor.x, cursor.y, 0, hWnd, NULL);
- break;
- }
- case WM_MBUTTONDBLCLK:
- case WM_LBUTTONDBLCLK:
- {
- if(IsWindowVisible(hWnd)) ShowWindow(hWnd, SW_HIDE);
- else { ShowWindow(hWnd, SW_SHOW); SetForegroundWindow(hWnd); }
- break;
- }
- }
- break;
- }
- case WM_KEYDOWN:
- {
- switch(wParam)
- {
- case VK_LEFT:
- mplayer_put_key(KEY_LEFT);
- break;
- case VK_UP:
- mplayer_put_key(KEY_UP);
- break;
- case VK_RIGHT:
- mplayer_put_key(KEY_RIGHT);
- break;
- case VK_DOWN:
- mplayer_put_key(KEY_DOWN);
- break;
- case VK_TAB:
- mplayer_put_key(KEY_TAB);
- break;
- case VK_BACK:
- mplayer_put_key(KEY_BS);
- break;
- case VK_DELETE:
- mplayer_put_key(KEY_DELETE);
- break;
- case VK_INSERT:
- mplayer_put_key(KEY_INSERT);
- break;
- case VK_HOME:
- mplayer_put_key(KEY_HOME);
- break;
- case VK_END:
- mplayer_put_key(KEY_END);
- break;
- case VK_PRIOR:
- mplayer_put_key(KEY_PAGE_UP);
- break;
- case VK_NEXT:
- mplayer_put_key(KEY_PAGE_DOWN);
- break;
- case VK_ESCAPE:
- mplayer_put_key(KEY_ESC);
- break;
- }
- break;
- }
- case WM_CHAR:
- mplayer_put_key(wParam);
- break;
- case WM_COPYDATA:
- {
- if(lParam)
- {
- PCOPYDATASTRUCT cdData;
- cdData = (PCOPYDATASTRUCT) lParam;
- mplSetFileName(NULL, cdData->lpData, STREAMTYPE_FILE);
- if(!parse_filename(cdData->lpData, playtree, mconfig, 1))
- gui->playlist->add_track(gui->playlist, cdData->lpData, NULL, NULL, 0);
- gui->startplay(gui);
- }
- break;
- }
- case WM_DROPFILES:
- {
- if(!lParam)
- {
- char file[MAX_PATH];
- int filecount = DragQueryFile((HDROP) wParam, -1, file, MAX_PATH);
- int i;
- for(i=0; i<filecount; i++)
- {
- DragQueryFile((HDROP) wParam, i, file, MAX_PATH);
- mplSetFileName(NULL, file, STREAMTYPE_FILE);
- if(!parse_filename(file, playtree, mconfig, 1))
- gui->playlist->add_track(gui->playlist, file, NULL, NULL, 0);
- }
- DragFinish((HDROP) wParam);
- handlemsg(hWnd, evDropFile);
- }
- else
- {
- gui->playlist->clear_playlist(gui->playlist);
- gui->playlist->add_track(gui->playlist, (const char *) wParam, NULL, NULL, 0);
- handlemsg(hWnd, evDropFile);
- }
- SetForegroundWindow(gui->mainwindow);
- return 0;
- }
- case WM_LBUTTONDOWN:
- {
- SetCapture(hWnd);
- gui->mousex = GET_X_LPARAM(lParam);
- gui->mousey = GET_Y_LPARAM(lParam);
- /* inside a widget */
- gui->activewidget = clickedinsidewidget(gui, get_windowtype(hWnd), gui->mousex, gui->mousey);
- if(gui->activewidget)
- {
- gui->activewidget->pressed = 1;
- gui->mousewx = gui->mousex - gui->activewidget->x;
- gui->mousewy = gui->mousey - gui->activewidget->y;
- renderwidget(gui->skin, get_drawground(hWnd), gui->activewidget, 0);
- RedrawWindow(hWnd, NULL, NULL, RDW_INVALIDATE);
- handlemsg(hWnd, gui->activewidget->msg);
- }
- break;
- }
- case WM_CAPTURECHANGED:
- {
- if(gui->activewidget)
- {
- gui->activewidget->pressed = 0;
- renderwidget(gui->skin, get_drawground(hWnd), gui->activewidget, 1);
- RedrawWindow(hWnd, NULL, NULL, RDW_INVALIDATE);
- gui->activewidget = NULL;
- }
- break;
- }
- case WM_LBUTTONUP:
- {
- ReleaseCapture();
- if(gui->activewidget)
- {
- gui->activewidget->pressed = 0;
- renderwidget(gui->skin, get_drawground(hWnd), gui->activewidget, 1);
- RedrawWindow(hWnd, NULL, NULL, RDW_INVALIDATE);
- gui->activewidget = NULL;
- }
- break;
- }
- case WM_RBUTTONDOWN:
- {
- POINT point;
- char device[MAX_PATH];
- char searchpath[MAX_PATH];
- char searchpath2[MAX_PATH];
-#ifdef CONFIG_LIBCDIO
- char searchpath3[MAX_PATH];
-#endif
- int len, pos = 0, cdromdrive = 0;
- UINT errmode;
- point.x = GET_X_LPARAM(lParam);
- point.y = GET_Y_LPARAM(lParam);
- ClientToScreen(hWnd, &point);
- errmode = SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOOPENFILEERRORBOX);
- while (GetMenuItemCount(gui->diskmenu) > 0)
- DeleteMenu(gui->diskmenu, 0, MF_BYPOSITION);
- len = GetLogicalDriveStrings(MAX_PATH, device);
- while(pos < len)
- {
- if(GetDriveType(device + pos) == DRIVE_CDROM)
- {
- char volname[MAX_PATH];
- char menuitem[MAX_PATH];
- int flags = MF_STRING;
- mp_msg(MSGT_GPLAYER, MSGL_V, "[GUI] checking %s for CD/VCD/SVCD/DVDs\n", device + pos);
- sprintf(searchpath, "%sVIDEO_TS", device + pos);
- sprintf(searchpath2, "%sMpegav", device + pos);
-#ifdef CONFIG_LIBCDIO
- sprintf(searchpath3, "%sTrack01.cda", device + pos);
-#endif
- if(GetFileAttributes(searchpath) != INVALID_FILE_ATTRIBUTES)
- flags |= MF_ENABLED;
- else if(GetFileAttributes(searchpath2) != INVALID_FILE_ATTRIBUTES)
- flags |= MF_ENABLED;
-#ifdef CONFIG_LIBCDIO
- else if(GetFileAttributes(searchpath3) != INVALID_FILE_ATTRIBUTES)
- flags |= MF_ENABLED;
-#endif
- else
- flags |= MF_GRAYED;
- volname[0] = 0;
- strcpy(menuitem, device + pos);
- menuitem[strlen(menuitem) - 1]=0;
- GetVolumeInformation(device + pos, volname, MAX_PATH, NULL, NULL, NULL, NULL, 0);
- if (strlen(volname))
- {
- capitalize(volname);
- strcat(menuitem, " - ");
- strcat(menuitem, volname);
- }
- AppendMenu(gui->diskmenu, flags, IDPLAYDISK + cdromdrive, menuitem);
- cdromdrive++;
- }
- pos += strlen(device + pos) + 1;
- }
- SetErrorMode(errmode);
- TrackPopupMenu(gui->menu, 0, point.x, point.y, 0, hWnd, NULL);
- return 0;
- }
- case WM_MOUSEMOVE:
- {
- if(wParam & MK_LBUTTON)
- {
- POINT point;
- RECT rect;
- if(gui->activewidget)
- {
- widget *item = gui->activewidget;
-
- if(item->type == tyHpotmeter)
- {
- item->x = GET_X_LPARAM(lParam) - gui->mousewx;
- item->value = (float)((float)((item->x - item->wx) * 100.0f) / (float)(item->wwidth - item->width));
- }
- if(item->type == tyPotmeter)
- {
- gui->mousewx = GET_X_LPARAM(lParam) - gui->activewidget->x;
- item->value = (float) (gui->mousewx * 100.0f) / (float) item->wwidth;
- }
-
- if((item->type == tyPotmeter) || (item->type == tyHpotmeter) || (item->type == tyVpotmeter))
- {
- /* Bound checks */
- if(item->value > 100.0f)
- item->value = 100.0f;
- else if(item->value < 0.0f)
- item->value = 0.0f;
-
- if(item->msg == evSetVolume)
- guiIntfStruct.Volume = (float) item->value;
- else if(item->msg == evSetMoviePosition)
- guiIntfStruct.Position = (float) item->value;
- else if(item->msg == evSetBalance)
- {
- /* make the range for 50% a bit bigger, because the sliders for balance usually suck */
- if((item->value - 50.0f < 1.5f) && (item->value - 50.0f > -1.5f))
- item->value = 50.0f;
- guiIntfStruct.Balance = (float) item->value;
- }
- updatedisplay(gui, hWnd);
- handlemsg(hWnd, item->msg);
- }
- break;
- }
- point.x = GET_X_LPARAM(lParam);
- point.y = GET_Y_LPARAM(lParam);
- ClientToScreen(hWnd, &point);
- GetWindowRect(hWnd, &rect);
- MoveWindow(hWnd, point.x - gui->mousex, point.y - gui->mousey,
- rect.right-rect.left,rect.bottom-rect.top,TRUE);
- break;
- }
- break;
- }
- case WM_COMMAND:
- {
- switch(LOWORD(wParam))
- {
- case IDEXIT:
- PostQuitMessage(0);
- handlemsg(hWnd, evExit);
- break;
- case IDFILE_OPEN:
- handlemsg(hWnd, evLoadPlay);
- break;
- case IDDIR_OPEN:
- {
- static char path[MAX_PATH];
- BROWSEINFO bi;
- LPITEMIDLIST pidl;
- memset(&bi, 0, sizeof(BROWSEINFO));
- bi.lpszTitle = "Choose a Directory...";
- pidl = SHBrowseForFolder(&bi);
- if (SHGetPathFromIDList(pidl, path))
- {
- gui->playlist->clear_playlist(gui->playlist);
- adddirtoplaylist(gui->playlist, path, TRUE);
- gui->startplay(gui);
- }
- break;
- }
- case ID_SKINBROWSER:
- handlemsg(hWnd, evSkinBrowser);
- break;
- case IDURL_OPEN:
- display_openurlwindow(gui, 0);
- break;
- case ID_MUTE:
- mp_input_queue_cmd(mp_input_parse_cmd("mute"));
- break;
- case IDSUBTITLE_OPEN:
- display_opensubtitlewindow(gui);
- break;
- case ID_PTRACK:
- handlemsg(hWnd, evPrev);
- break;
- case ID_SEEKB:
- handlemsg(hWnd, evBackward10sec);
- break;
- case ID_PLAY:
- handlemsg(hWnd, evPlaySwitchToPause);
- break;
- case ID_STOP:
- handlemsg(hWnd, evStop);
- break;
- case ID_SEEKF:
- handlemsg(hWnd, evForward10sec);
- break;
- case ID_NTRACK:
- handlemsg(hWnd, evNext);
- break;
- case ID_SHOWHIDE:
- {
- if(IsWindowVisible(hWnd)) ShowWindow(hWnd, SW_HIDE);
- else ShowWindow(hWnd, SW_SHOW);
- break;
- }