You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

719 lines
19 KiB

/*****************************************************************************
* wince.h: private WinCE interface descriptor
*****************************************************************************
* Copyright (C) 1999-2004 the VideoLAN team
* $Id$
*
* Authors: Gildas Bazin <gbazin@videolan.org>
* Marodon Cedric <cedric_marodon@yahoo.fr>
*
* 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 Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
#ifndef WINCE_RESOURCE
#define SLIDER_HEIGHT 50
#define SLIDER_MAX_POS 10000
#define MENU_HEIGHT 26
#define FILE_ACCESS 1
#define NET_ACCESS 2
#define OPEN_NORMAL 0
#define OPEN_STREAM 1
#if defined( UNDER_CE ) && defined(__MINGW32__)
/* This is a gross hack for the wince gcc cross-compiler */
# define _off_t long
#endif
#include <vlc_keys.h>
#include <vlc_messages.h>
#include <stdio.h>
#include <string>
#include <vector>
using namespace std;
class CBaseWindow;
class MenuItemExt;
class VideoWindow;
/*****************************************************************************
* intf_sys_t: description and status of wxwindows interface
*****************************************************************************/
struct intf_sys_t
{
/* the parent window */
CBaseWindow *p_window;
/* special actions */
bool b_playing;
/* The input thread */
input_thread_t * p_input;
/* The slider */
int i_slider_pos; /* slider position */
int i_slider_oldpos; /* previous position */
bool b_slider_free; /* slider status */
/* Playlist management */
int i_playing; /* playlist selected item */
/* Send an event to show a dialog */
void (*pf_show_dialog) ( intf_thread_t *p_intf, int i_dialog, int i_arg,
intf_dialog_args_t *p_arg );
/* Dynamic Menu management */
vector<MenuItemExt*> *p_audio_menu;
vector<MenuItemExt*> *p_video_menu;
vector<MenuItemExt*> *p_navig_menu;
vector<MenuItemExt*> *p_settings_menu;
VideoWindow *p_video_window;
HANDLE thread_ready;
};
/*****************************************************************************
* Prototypes
*****************************************************************************/
class CBaseWindow
{
public:
CBaseWindow( intf_thread_t *_p_intf = 0, CBaseWindow *_p_parent = 0,
HINSTANCE _hInst = 0 )
: hWnd(0), hInst(_hInst), p_parent(_p_parent), p_intf(_p_intf) {};
virtual ~CBaseWindow() {};
HWND hWnd; // The main window handle
static LRESULT CALLBACK BaseWndProc( HWND, UINT, WPARAM, LPARAM );
static int CreateDialogBox( HWND, CBaseWindow * );
HWND GetHandle() { return hWnd; }
BOOL Show( BOOL b_show ) { return (hWnd && ShowWindow(hWnd, b_show)); }
BOOL IsShown( void ) { return (hWnd && IsWindowVisible(hWnd)); }
protected:
HINSTANCE hInst; // The current instance
HWND hwndCB; // The command bar handle
HINSTANCE GetInstance () const { return hInst; }
virtual LRESULT WndProc( HWND, UINT, WPARAM, LPARAM ) { return 0; };
CBaseWindow *p_parent;
intf_thread_t *p_intf;
};
class FileInfo;
class Messages;
class Playlist;
class Timer;
class OpenDialog;
class PrefsDialog;
CBaseWindow *CreateDialogsProvider( intf_thread_t *, CBaseWindow *, HINSTANCE);
CBaseWindow *CreateVideoWindow( intf_thread_t *, HWND );
void PopupMenu( intf_thread_t *, HWND, POINT );
/* Main Interface */
class Interface : public CBaseWindow
{
public:
/* Constructor */
Interface( intf_thread_t *, CBaseWindow *, HINSTANCE );
~Interface();
BOOL InitInstance();
HWND CreateMenuBar( HWND, HINSTANCE );
void TogglePlayButton( int i_playing_status );
void Update();
HWND hwndMain; // Handle to the main window.
HWND hwndCB; // Handle to the command bar (contains menu)
HWND hwndTB; // Handle to the toolbar.
HWND hwndSlider; // Handle to the Sliderbar.
HWND hwndLabel;
HWND hwndVol; // Handle to the volume trackbar.
HWND hwndSB; // Handle to the status bar.
HMENU hPopUpMenu;
HMENU hMenu;
Timer *timer;
CBaseWindow *video;
protected:
virtual LRESULT WndProc( HWND, UINT, WPARAM, LPARAM );
void OnShowDialog( int );
void OnPlayStream( void );
void OnStopStream( void );
void OnPrevStream( void );
void OnNextStream( void );
void OnSlowStream( void );
void OnFastStream( void );
void OnVideoOnTop( void );
void OnSliderUpdate( int wp );
void OnChange( int wp );
void VolumeChange( int i_volume );
void VolumeUpdate( void );
int i_old_playing_status;
private:
HMENU menu_settings;
HMENU menu_video;
HMENU menu_audio;
HMENU menu_navigation;
bool b_volume_hold;
};
/* File Info */
class FileInfo : public CBaseWindow
{
public:
/* Constructor */
FileInfo( intf_thread_t *, CBaseWindow *, HINSTANCE );
virtual ~FileInfo(){};
void UpdateFileInfo(void);
protected:
HWND hwnd_fileinfo; // handle to fileinfo window
HWND hwndTV; // handle to tree-view control
TCHAR szFileInfoClassName[100]; // Main window class name
TCHAR szFileInfoTitle[100]; // Main window name
virtual LRESULT WndProc( HWND, UINT, WPARAM, LPARAM );
BOOL CreateTreeView( HWND );
};
struct msg_cb_data_t
{
Messages *self;
};
/* Messages */
class Messages : public CBaseWindow
{
public:
/* Constructor */
Messages( intf_thread_t *, CBaseWindow *, HINSTANCE );
~Messages();
static void sinkMessage (msg_cb_data_t *, msg_item_t *, unsigned);
void sinkMessage (msg_item_t *item, unsigned);
protected:
virtual LRESULT WndProc( HWND, UINT, WPARAM, LPARAM );
/* The messages window */
msg_subscription_t* sub; /* message bank subscription */
msg_cb_data_t *cb_data;
HWND hListView;
bool b_verbose;
};
/* ItemInfo Dialog */
class ItemInfoDialog : public CBaseWindow
{
public:
/* Constructor */
ItemInfoDialog( intf_thread_t *, CBaseWindow *,
HINSTANCE, playlist_item_t * );
virtual ~ItemInfoDialog(){};
protected:
intf_thread_t *p_intf;
HWND hwndCB; // Handle to the command bar (but no menu)
playlist_item_t *p_item;
/* Event handlers (these functions should _not_ be virtual) */
void OnOk();
void UpdateInfo();
virtual LRESULT WndProc( HWND, UINT, WPARAM, LPARAM );
/* Controls for the iteminfo dialog box */
HWND uri_label;
HWND uri_text;
HWND name_label;
HWND name_text;
HWND checkbox_label;
HWND enabled_checkbox;
HWND info_tree;
};
/* Open Dialog */
class SubsFileDialog;
class OpenDialog : public CBaseWindow
{
public:
/* Constructor */
OpenDialog( intf_thread_t *, CBaseWindow *, HINSTANCE, int, int );
virtual ~OpenDialog(){};
void UpdateMRL();
void UpdateMRL( int i_access_method );
HWND file_combo;
protected:
virtual LRESULT WndProc( HWND, UINT, WPARAM, LPARAM );
HWND mrl_box;
HWND mrl_label;
HWND mrl_combo;
HWND label;
HWND notebook;
HWND browse_button;
HWND subsfile_checkbox;
HWND subsfile_label;
HWND subsfile_button;
SubsFileDialog *subsfile_dialog;
HWND net_radios[4];
HWND net_label[4];
HWND net_port_label[4];
HWND net_ports[4];
HWND hUpdown[4];
int i_net_ports[4];
HWND net_addrs_label[4];
HWND net_addrs[4];
int i_open_arg;
int i_access;
int i_net_type;
void FilePanel( HWND hwnd );
void NetPanel( HWND hwnd );
void OnSubsFileEnable();
void OnSubsFileSettings( HWND hwnd );
void OnPageChange();
void OnFilePanelChange();
void OnFileBrowse();
void OnNetPanelChange( int event );
void OnNetTypeChange( int event );
void DisableNETCtrl();
void OnOk();
vector<string> mrl;
vector<string> subsfile_mrl;
};
/* Subtitles File Dialog */
class SubsFileDialog: public CBaseWindow
{
public:
/* Constructor */
SubsFileDialog( intf_thread_t *, CBaseWindow *, HINSTANCE );
virtual ~SubsFileDialog(){};
vector<string> subsfile_mrl;
HWND file_combo;
protected:
friend class OpenDialog;
HWND file_box;
HWND browse_button;
HWND enc_box;
HWND enc_label;
HWND encoding_combo;
HWND misc_box;
HWND delay_label;
HWND delay_edit;
HWND delay_spinctrl;
HWND fps_label;
HWND fps_edit;
HWND fps_spinctrl;
virtual LRESULT WndProc( HWND, UINT, WPARAM, LPARAM );
/* Event handlers (these functions should _not_ be virtual) */
void OnFileBrowse();
};
/* Playlist */
class Playlist : public CBaseWindow
{
public:
/* Constructor */
Playlist( intf_thread_t *, CBaseWindow *, HINSTANCE );
virtual ~Playlist(){};
void UpdatePlaylist();
void ShowPlaylist( bool );
protected:
bool b_need_update;
vlc_mutex_t lock;
int i_title_sorted;
int i_author_sorted;
HWND hwndCB; // Handle to the command bar (contains menu)
HWND hwndTB; // Handle to the toolbar.
HWND hListView;
void Rebuild();
void UpdateItem( int );
LRESULT ProcessCustomDraw( LPARAM lParam );
void HandlePopupMenu( HWND hwnd, POINT point);
void DeleteItem( int item );
void OnOpen();
void OnSave();
void OnDeleteSelection();
void OnInvertSelection();
void OnEnableSelection();
void OnDisableSelection();
void OnSelectAll();
void OnActivateItem( int i_item );
void ShowInfos( HWND hwnd, int i_item );
void OnUp();
void OnDown();
void OnRandom();
void OnLoop();
void OnRepeat();
void OnSort( UINT event );
void OnColSelect( int iSubItem );
void OnPopupPlay();
void OnPopupDel();
void OnPopupEna();
void OnPopupInfo( HWND hwnd );
virtual LRESULT WndProc( HWND, UINT, WPARAM, LPARAM );
};
/* Timer */
class Timer
{
public:
/* Constructor */
Timer( intf_thread_t *p_intf, HWND hwnd, Interface *_p_main_interface );
virtual ~Timer();
void Notify( void );
private:
intf_thread_t *p_intf;
Interface *p_main_interface;
//Interface *p_main_interface;
int i_old_playing_status;
int i_old_rate;
};
/* Menus */
void RefreshSettingsMenu( intf_thread_t *_p_intf, HMENU hMenu );
void RefreshAudioMenu( intf_thread_t *_p_intf, HMENU hMenu );
void RefreshVideoMenu( intf_thread_t *_p_intf, HMENU hMenu );
void RefreshNavigMenu( intf_thread_t *_p_intf, HMENU hMenu );
void RefreshMenu( intf_thread_t *, vector<MenuItemExt*> *, HMENU, int,
char **, vlc_object_t **, int );
int wce_GetMenuItemCount( HMENU );
void CreateMenuItem( intf_thread_t *, vector<MenuItemExt*> *, HMENU, char *,
vlc_object_t *, int * );
HMENU CreateChoicesMenu( intf_thread_t *, vector<MenuItemExt*> *, char *,
vlc_object_t *, int * );
void OnMenuEvent( intf_thread_t *, int );
/*****************************************************************************
* A small helper class which encapsulate wxMenuitem with some other useful
* things.
*****************************************************************************/
class MenuItemExt
{
public:
/* Constructor */
MenuItemExt( intf_thread_t *_p_intf, int _id, char *_psz_var,
vlc_object_t * p_object, vlc_value_t _val, int _i_val_type );
virtual ~MenuItemExt();
static void ClearList( vector<MenuItemExt*> * );
int id;
intf_thread_t *p_intf;
char *psz_var;
int i_val_type;
vlc_object_t * p_object;
vlc_value_t val;
private:
};
/* Preferences Dialog */
/* Preferences Dialog */
class PrefsTreeCtrl;
class PrefsDialog: public CBaseWindow
{
public:
/* Constructor */
PrefsDialog( intf_thread_t *, CBaseWindow *, HINSTANCE );
virtual ~PrefsDialog(){};
protected:
/* Event handlers (these functions should _not_ be virtual) */
void OnOk( void );
/*void OnCancel( UINT event );
void OnSave( UINT event );
void OnResetAll( UINT event );
void OnAdvanced( UINT event );*/
HWND save_button;
HWND reset_button;
HWND advanced_checkbox;
HWND advanced_label;
PrefsTreeCtrl *prefs_tree;
virtual LRESULT WndProc( HWND, UINT, WPARAM, LPARAM );
};
/*****************************************************************************
* A small helper function for utf8 <-> unicode conversions
*****************************************************************************/
#ifdef UNICODE
extern wchar_t pwsz_mbtow_wince[2048];
extern char psz_wtomb_wince[2048];
static inline wchar_t *_FROMMB( const char *psz_in )
{
mbstowcs( pwsz_mbtow_wince, psz_in, 2048 );
pwsz_mbtow_wince[2048-1] = 0;
return pwsz_mbtow_wince;
}
static inline char *_TOMB( const wchar_t *pwsz_in )
{
wcstombs( psz_wtomb_wince, pwsz_in, 2048 );
psz_wtomb_wince[2048-1] = 0;
return psz_wtomb_wince;
}
#else
# define _FROMMB(a) a
# define _TOMB(a) a
#endif
/*****************************************************************************
* Misc definitions (mainly from aygshell.h)
*****************************************************************************/
#define _WIN32_IE 0x0500
#define SHFS_SHOWSIPBUTTON 0x0004
#define SHFS_HIDESIPBUTTON 0x0008
#define SHIDIM_FLAGS 0x0001
#define SHIDIF_DONEBUTTON 0x0001
#define SHIDIF_SIPDOWN 0x0008
#define SHIDIF_FULLSCREENNOMENUBAR 0x0010
#define SHCMBF_HMENU 0x0010
#define SHCMBF_EMPTYBAR 0x0001
#define GN_CONTEXTMENU 1000
#define SHRG_RETURNCMD 0x0001
#define SHRG_NOTIFYPARENT 0x0002
#define SHCMBM_GETSUBMENU (WM_USER + 401)
#define SHCMBM_GETMENU (WM_USER + 402)
#ifndef TBSTYLE_NO_DROPDOWN_ARROW
#define TBSTYLE_NO_DROPDOWN_ARROW 0x0080
#endif
#define lstrlenW wcslen
#define SHGetMenu(hwnd) \
(HMENU)SendMessage((hwnd), SHCMBM_GETMENU, (WPARAM)0, (LPARAM)0)
#define TrackPopupMenu(hm,u,x,y,r,hw,p) \
TrackPopupMenuEx((hm),(u),(x),(y),(hw),0)
extern "C" {
typedef struct tagSHMENUBARINFO
{
DWORD cbSize;
HWND hwndParent;
DWORD dwFlags;
UINT nToolBarId;
HINSTANCE hInstRes;
int nBmpId;
int cBmpImages;
HWND hwndMB;
COLORREF clrBk;
} SHMENUBARINFO, *PSHMENUBARINFO;
BOOL SHCreateMenuBar( SHMENUBARINFO *pmbi );
BOOL SHFullScreen(HWND hwndRequester, DWORD dwState);
typedef struct tagSHINITDLGINFO
{
DWORD dwMask;
HWND hDlg;
DWORD dwFlags;
} SHINITDLGINFO, *PSHINITDLGINFO;
BOOL SHInitDialog(PSHINITDLGINFO pshidi);
typedef struct tagNMRGINFO
{
NMHDR hdr;
POINT ptAction;
DWORD dwItemSpec;
} NMRGINFO, *PNMRGINFO;
BOOL WINAPI CommandBar_InsertMenubarEx(HWND, HINSTANCE, LPTSTR, WORD);
typedef struct tagSHRGI
{
DWORD cbSize;
HWND hwndClient;
POINT ptDown;
DWORD dwFlags;
} SHRGINFO, *PSHRGINFO;
DWORD SHRecognizeGesture(SHRGINFO *shrg);
typedef enum tagSIPSTATE
{
SIP_UP = 0,
SIP_DOWN,
SIP_FORCEDOWN,
SIP_UNCHANGED,
SIP_INPUTDIALOG,
} SIPSTATE;
BOOL SHSipPreference(HWND, SIPSTATE);
BOOL SHSipInfo(UINT, UINT, PVOID, UINT);
typedef struct
{
DWORD cbSize;
DWORD fdwFlags;
RECT rcVisibleDesktop;
RECT rcSipRect;
DWORD dwImDataSize;
VOID *pvImData;
} SIPINFO;
}
#if defined( WIN32 ) && !defined( UNDER_CE )
# define SHFullScreen(a,b)
# define SHInitDialog(a)
# define SHCreateMenuBar(a) 1
# define SHRecognizeGesture(a) 0
# define SHSipPreference(a,b)
# define SHSipInfo(a,b,c,d) 0
#endif
#endif //WINCE_RESOURCE
#define IDD_ABOUT 101
#define IDI_ICON1 102
#define IDB_BITMAP1 103
#define IDB_BITMAP2 111
#define IDR_MENUBAR1 113
#define IDD_FILEINFO 118
#define IDD_DUMMY 118
#define IDD_MESSAGES 119
#define IDR_MENUBAR 120
#define IDR_MENUBAR2 121
#define IDD_PLAYLIST 122
#define IDB_BITMAP3 123
#define IDD_ITEMINFO 124
#define IDCLEAR 1001
#define IDSAVEAS 1002
#define ID_FILE 40028
#define ID_VIEW 40030
#define ID_SETTINGS 40032
#define ID_AUDIO 40034
#define ID_EMPTY 40034
#define ID_VIDEO 40036
#define ID_NAVIGATION 40038
#define IDM_FILE 40042
#define IDM_VIEW 40044
#define IDM_SETTINGS 40046
#define IDM_AUDIO 40048
#define IDM_VIDEO 40050
#define IDM_NAVIGATION 40053
#define ID_FILE_QUICKOPEN 40057
#define ID_FILE_OPENFILE 40058
#define ID_FILE_OPENDIR 40059
#define ID_FILE_OPENNET 40060
#define ID_FILE_EXIT 40061
#define ID_VIEW_PLAYLIST 40063
#define ID_VIEW_MESSAGES 40064
#define ID_VIEW_MEDIAINFO 40065
#define ID_VIEW_STREAMINFO 40066
#define ID_PREFERENCES 40071
#define ID_FILE_ABOUT 40069
#define IDM_MANAGE 40087
#define IDM_SORT 40088
#define IDM_SEL 40089
#define ID_SORT_AUTHOR 40091
#define ID_SORT_RAUTHOR 40092
#define ID_SORT_SHUFFLE 40095
#define ID_SEL_INVERT 40096
#define ID_SEL_DELETE 40097
#define ID_SEL_SELECTALL 40098
#define ID_SEL_ENABLE 40100
#define ID_SEL_DISABLE 40101
#define ID_SORT_TITLE 40102
#define ID_SORT_RTITLE 40103
#define ID_MANAGE_ADDFILE 40104
#define ID_MANAGE_ADDDIRECTORY 40105
#define ID_MANAGE_ADDMRL 40106
#define ID_MANAGE_OPENPL 40107
#define ID_MANAGE_SAVEPL 40108
#define StopStream_Event 57601
#define PlayStream_Event 57602
#define PrevStream_Event 57603
#define NextStream_Event 57604
#define SlowStream_Event 57605
#define FastStream_Event 57606