/*
* 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 "gui/interface.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 */
extern void renderinfobox(skin_t *skin, window_priv_t *priv);
extern void renderwidget(skin_t *skin, image *dest, widget *item, int state);
extern 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-&
|