/*
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 program 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.
This program 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 this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02111-1307 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_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 <interface.h>
#include "gui.h"
#include "wincfg.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 mplayer_put_key(int code);
extern void print_version(void);
extern int WinID;
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);
|