1 /*****************************************************************************
2 * wince.h: private WinCE interface descriptor
3 *****************************************************************************
4 * Copyright (C) 1999-2004 VideoLAN
7 * Authors: Gildas Bazin <gbazin@videolan.org>
8 * Marodon Cedric <cedric_marodon@yahoo.fr>
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation; either version 2 of the License, or
13 * (at your option) any later version.
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
20 * You should have received a copy of the GNU General Public License
21 * along with this program; if not, write to the Free Software
22 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
23 *****************************************************************************/
25 #ifndef WINCE_RESOURCE
27 #define SLIDER_HEIGHT 50
28 #define SLIDER_MAX_POS 10000
29 #define MENU_HEIGHT 26
37 #if defined( UNDER_CE ) && defined(__MINGW32__)
38 /* This is a gross hack for the wince gcc cross-compiler */
53 /*****************************************************************************
54 * intf_sys_t: description and status of wxwindows interface
55 *****************************************************************************/
58 /* the parent window */
59 CBaseWindow *p_window;
64 /* The input thread */
65 input_thread_t * p_input;
68 int i_slider_pos; /* slider position */
69 int i_slider_oldpos; /* previous position */
70 vlc_bool_t b_slider_free; /* slider status */
72 /* The messages window */
73 msg_subscription_t* p_sub; /* message bank subscription */
75 /* Playlist management */
76 int i_playing; /* playlist selected item */
78 /* Send an event to show a dialog */
79 void (*pf_show_dialog) ( intf_thread_t *p_intf, int i_dialog, int i_arg,
80 intf_dialog_args_t *p_arg );
82 CBaseWindow *p_main_window;
84 /* Dynamic Menu management */
85 vector<MenuItemExt*> *p_audio_menu;
86 vector<MenuItemExt*> *p_video_menu;
87 vector<MenuItemExt*> *p_navig_menu;
88 vector<MenuItemExt*> *p_settings_menu;
90 VideoWindow *p_video_window;
93 /*****************************************************************************
95 *****************************************************************************/
100 CBaseWindow( intf_thread_t *_p_intf = 0, CBaseWindow *_p_parent = 0,
101 HINSTANCE _hInst = 0 )
102 : hWnd(0), hInst(_hInst), p_parent(_p_parent), p_intf(_p_intf) {};
103 virtual ~CBaseWindow() {};
105 HWND hWnd; // The main window handle
107 static LRESULT CALLBACK BaseWndProc( HWND, UINT, WPARAM, LPARAM );
108 static int CreateDialogBox( HWND, CBaseWindow * );
110 HWND GetHandle() { return hWnd; }
111 BOOL Show( BOOL b_show ) { return (hWnd && ShowWindow(hWnd, b_show)); }
112 BOOL IsShown( void ) { return (hWnd && IsWindowVisible(hWnd)); }
116 HINSTANCE hInst; // The current instance
117 HWND hwndCB; // The command bar handle
119 HINSTANCE GetInstance () const { return hInst; }
120 virtual LRESULT WndProc( HWND, UINT, WPARAM, LPARAM ) { return 0; };
122 CBaseWindow *p_parent;
123 intf_thread_t *p_intf;
133 CBaseWindow *CreateDialogsProvider( intf_thread_t *, CBaseWindow *, HINSTANCE);
134 CBaseWindow *CreateVideoWindow( intf_thread_t *, HWND );
135 void PopupMenu( intf_thread_t *, HWND, POINT );
138 class Interface : public CBaseWindow
145 BOOL InitInstance( HINSTANCE, intf_thread_t * );
147 HWND CreateMenuBar( HWND, HINSTANCE );
148 void TogglePlayButton( int i_playing_status );
151 HWND hwndMain; // Handle to the main window.
153 HWND hwndCB; // Handle to the command bar (contains menu)
154 HWND hwndTB; // Handle to the toolbar.
155 HWND hwndSlider; // Handle to the Sliderbar.
157 HWND hwndVol; // Handle to the volume trackbar.
158 HWND hwndSB; // Handle to the status bar.
167 virtual LRESULT WndProc( HWND, UINT, WPARAM, LPARAM );
169 void OnShowDialog( int );
171 void OnPlayStream( void );
172 void OnStopStream( void );
173 void OnPrevStream( void );
174 void OnNextStream( void );
175 void OnSlowStream( void );
176 void OnFastStream( void );
178 void OnVideoOnTop( void );
179 void OnSliderUpdate( int wp );
180 void OnChange( int wp );
181 void VolumeChange( int i_volume );
182 void VolumeUpdate( void );
184 int i_old_playing_status;
190 HMENU menu_navigation;
192 vlc_bool_t b_volume_hold;
196 class FileInfo : public CBaseWindow
200 FileInfo( intf_thread_t *, CBaseWindow *, HINSTANCE );
201 virtual ~FileInfo(){};
203 void UpdateFileInfo(void);
207 HWND hwnd_fileinfo; // handle to fileinfo window
208 HWND hwndTV; // handle to tree-view control
210 TCHAR szFileInfoClassName[100]; // Main window class name
211 TCHAR szFileInfoTitle[100]; // Main window name
213 virtual LRESULT WndProc( HWND, UINT, WPARAM, LPARAM );
214 BOOL CreateTreeView( HWND );
218 class Messages : public CBaseWindow
222 Messages( intf_thread_t *, CBaseWindow *, HINSTANCE );
223 virtual ~Messages(){};
225 void UpdateLog(void);
229 virtual LRESULT WndProc( HWND, UINT, WPARAM, LPARAM );
232 vlc_bool_t b_verbose;
235 /* ItemInfo Dialog */
236 class ItemInfoDialog : public CBaseWindow
240 ItemInfoDialog( intf_thread_t *, CBaseWindow *,
241 HINSTANCE, playlist_item_t * );
242 virtual ~ItemInfoDialog(){};
246 intf_thread_t *p_intf;
247 HWND hwndCB; // Handle to the command bar (but no menu)
249 playlist_item_t *p_item;
251 /* Event handlers (these functions should _not_ be virtual) */
255 virtual LRESULT WndProc( HWND, UINT, WPARAM, LPARAM );
257 /* Controls for the iteminfo dialog box */
265 HWND enabled_checkbox;
271 class SubsFileDialog;
272 class OpenDialog : public CBaseWindow
276 OpenDialog( intf_thread_t *, CBaseWindow *, HINSTANCE, int, int );
277 virtual ~OpenDialog(){};
280 void UpdateMRL( int i_access_method );
286 virtual LRESULT WndProc( HWND, UINT, WPARAM, LPARAM );
296 HWND subsfile_checkbox;
298 HWND subsfile_button;
299 SubsFileDialog *subsfile_dialog;
304 HWND net_port_label[4];
309 HWND net_addrs_label[4];
316 void FilePanel( HWND hwnd );
317 void NetPanel( HWND hwnd );
319 void OnSubsFileEnable();
320 void OnSubsFileSettings( HWND hwnd );
324 void OnFilePanelChange();
326 void OnNetPanelChange( int event );
327 void OnNetTypeChange( int event );
328 void DisableNETCtrl();
333 vector<string> subsfile_mrl;
336 /* Subtitles File Dialog */
337 class SubsFileDialog: public CBaseWindow
341 SubsFileDialog( intf_thread_t *, CBaseWindow *, HINSTANCE );
342 virtual ~SubsFileDialog(){};
344 vector<string> subsfile_mrl;
348 friend class OpenDialog;
365 virtual LRESULT WndProc( HWND, UINT, WPARAM, LPARAM );
367 /* Event handlers (these functions should _not_ be virtual) */
372 class Playlist : public CBaseWindow
376 Playlist( intf_thread_t *, CBaseWindow *, HINSTANCE );
377 virtual ~Playlist(){};
379 void UpdatePlaylist();
380 void ShowPlaylist( bool );
390 HWND hwndCB; // Handle to the command bar (contains menu)
391 HWND hwndTB; // Handle to the toolbar.
395 void UpdateItem( int );
396 LRESULT ProcessCustomDraw( LPARAM lParam );
397 void HandlePopupMenu( HWND hwnd, POINT point);
399 void DeleteItem( int item );
404 void OnDeleteSelection();
405 void OnInvertSelection();
406 void OnEnableSelection();
407 void OnDisableSelection();
409 void OnActivateItem( int i_item );
410 void ShowInfos( HWND hwnd, int i_item );
419 void OnSort( UINT event );
420 void OnColSelect( int iSubItem );
425 void OnPopupInfo( HWND hwnd );
427 virtual LRESULT WndProc( HWND, UINT, WPARAM, LPARAM );
435 Timer( intf_thread_t *p_intf, HWND hwnd, Interface *_p_main_interface );
440 intf_thread_t *p_intf;
441 Interface *p_main_interface;
442 //Interface *p_main_interface;
443 int i_old_playing_status;
448 void RefreshSettingsMenu( intf_thread_t *_p_intf, HMENU hMenu );
449 void RefreshAudioMenu( intf_thread_t *_p_intf, HMENU hMenu );
450 void RefreshVideoMenu( intf_thread_t *_p_intf, HMENU hMenu );
451 void RefreshNavigMenu( intf_thread_t *_p_intf, HMENU hMenu );
452 void RefreshMenu( intf_thread_t *, vector<MenuItemExt*> *, HMENU, int,
453 char **, int *, int );
454 int wce_GetMenuItemCount( HMENU );
455 void CreateMenuItem( intf_thread_t *, vector<MenuItemExt*> *, HMENU, char *,
456 vlc_object_t *, int * );
457 HMENU CreateChoicesMenu( intf_thread_t *, vector<MenuItemExt*> *, char *,
458 vlc_object_t *, int * );
459 void OnMenuEvent( intf_thread_t *, int );
461 /*****************************************************************************
462 * A small helper class which encapsulate wxMenuitem with some other useful
464 *****************************************************************************/
469 MenuItemExt( intf_thread_t *_p_intf, int _id, char *_psz_var,
470 int _i_object_id, vlc_value_t _val, int _i_val_type );
472 virtual ~MenuItemExt();
474 static void ClearList( vector<MenuItemExt*> * );
477 intf_thread_t *p_intf;
488 /* Preferences Dialog */
489 /* Preferences Dialog */
491 class PrefsDialog: public CBaseWindow
495 PrefsDialog( intf_thread_t *, CBaseWindow *, HINSTANCE );
496 virtual ~PrefsDialog(){};
500 /* Event handlers (these functions should _not_ be virtual) */
502 /*void OnCancel( UINT event );
503 void OnSave( UINT event );
504 void OnResetAll( UINT event );
505 void OnAdvanced( UINT event );*/
509 HWND advanced_checkbox;
512 PrefsTreeCtrl *prefs_tree;
514 virtual LRESULT WndProc( HWND, UINT, WPARAM, LPARAM );
517 /*****************************************************************************
518 * A small helper function for utf8 <-> unicode conversions
519 *****************************************************************************/
521 extern wchar_t pwsz_mbtow_wince[2048];
522 extern char psz_wtomb_wince[2048];
523 static inline wchar_t *_FROMMB( const char *psz_in )
525 mbstowcs( pwsz_mbtow_wince, psz_in, 2048 );
526 pwsz_mbtow_wince[2048-1] = 0;
527 return pwsz_mbtow_wince;
529 static inline char *_TOMB( const wchar_t *pwsz_in )
531 wcstombs( psz_wtomb_wince, pwsz_in, 2048 );
532 psz_wtomb_wince[2048-1] = 0;
533 return psz_wtomb_wince;
536 # define _FROMMB(a) a
540 #if defined( ENABLE_NLS ) && defined( ENABLE_UTF8 )
542 #else // ENABLE_NLS && ENABLE_UTF8
546 /*****************************************************************************
547 * Misc definitions (mainly from aygshell.h)
548 *****************************************************************************/
549 #define _WIN32_IE 0x0500
551 #define SHFS_SHOWSIPBUTTON 0x0004
552 #define SHFS_HIDESIPBUTTON 0x0008
553 #define SHIDIM_FLAGS 0x0001
554 #define SHIDIF_DONEBUTTON 0x0001
555 #define SHIDIF_SIPDOWN 0x0008
556 #define SHIDIF_FULLSCREENNOMENUBAR 0x0010
557 #define SHCMBF_HMENU 0x0010
558 #define SHCMBF_EMPTYBAR 0x0001
559 #define GN_CONTEXTMENU 1000
560 #define SHRG_RETURNCMD 0x0001
561 #define SHRG_NOTIFYPARENT 0x0002
562 #define SHCMBM_GETSUBMENU (WM_USER + 401)
563 #define SHCMBM_GETMENU (WM_USER + 402)
564 #ifndef TBSTYLE_NO_DROPDOWN_ARROW
565 #define TBSTYLE_NO_DROPDOWN_ARROW 0x0080
567 #define lstrlenW wcslen
568 #define SHGetMenu(hwnd) \
569 (HMENU)SendMessage((hwnd), SHCMBM_GETMENU, (WPARAM)0, (LPARAM)0)
570 #define TrackPopupMenu(hm,u,x,y,r,hw,p) \
571 TrackPopupMenuEx((hm),(u),(x),(y),(hw),0)
574 typedef struct tagSHMENUBARINFO
585 } SHMENUBARINFO, *PSHMENUBARINFO;
587 BOOL SHCreateMenuBar( SHMENUBARINFO *pmbi );
588 BOOL SHFullScreen(HWND hwndRequester, DWORD dwState);
590 typedef struct tagSHINITDLGINFO
595 } SHINITDLGINFO, *PSHINITDLGINFO;
597 BOOL SHInitDialog(PSHINITDLGINFO pshidi);
599 typedef struct tagNMRGINFO
604 } NMRGINFO, *PNMRGINFO;
606 BOOL WINAPI CommandBar_InsertMenubarEx(HWND, HINSTANCE, LPTSTR, WORD);
608 typedef struct tagSHRGI
614 } SHRGINFO, *PSHRGINFO;
616 DWORD SHRecognizeGesture(SHRGINFO *shrg);
618 typedef enum tagSIPSTATE
627 BOOL SHSipPreference(HWND, SIPSTATE);
629 BOOL SHSipInfo(UINT, UINT, PVOID, UINT);
635 RECT rcVisibleDesktop;
642 #if defined( WIN32 ) && !defined( UNDER_CE )
643 # define SHFullScreen(a,b)
644 # define SHInitDialog(a)
645 # define SHCreateMenuBar(a) 1
646 # define SHRecognizeGesture(a) 0
647 # define SHSipPreference(a,b)
649 # define SHSipInfo(a,b,c,d) 0
652 #endif //WINCE_RESOURCE
654 #define IDD_ABOUT 101
655 #define IDI_ICON1 102
656 #define IDB_BITMAP1 103
657 #define IDB_BITMAP2 111
658 #define IDR_MENUBAR1 113
659 #define IDD_FILEINFO 118
660 #define IDD_DUMMY 118
661 #define IDD_MESSAGES 119
662 #define IDR_MENUBAR 120
663 #define IDR_MENUBAR2 121
664 #define IDD_PLAYLIST 122
665 #define IDB_BITMAP3 123
666 #define IDD_ITEMINFO 124
668 #define IDSAVEAS 1002
669 #define ID_FILE 40028
670 #define ID_VIEW 40030
671 #define ID_SETTINGS 40032
672 #define ID_AUDIO 40034
673 #define ID_EMPTY 40034
674 #define ID_VIDEO 40036
675 #define ID_NAVIGATION 40038
676 #define IDM_FILE 40042
677 #define IDM_VIEW 40044
678 #define IDM_SETTINGS 40046
679 #define IDM_AUDIO 40048
680 #define IDM_VIDEO 40050
681 #define IDM_NAVIGATION 40053
682 #define ID_FILE_QUICKOPEN 40057
683 #define ID_FILE_OPENFILE 40058
684 #define ID_FILE_OPENDIR 40059
685 #define ID_FILE_OPENNET 40060
686 #define ID_FILE_EXIT 40061
687 #define ID_VIEW_PLAYLIST 40063
688 #define ID_VIEW_MESSAGES 40064
689 #define ID_VIEW_MEDIAINFO 40065
690 #define ID_VIEW_STREAMINFO 40066
691 #define ID_PREFERENCES 40071
692 #define ID_FILE_ABOUT 40069
693 #define IDM_MANAGE 40087
694 #define IDM_SORT 40088
695 #define IDM_SEL 40089
696 #define ID_SORT_AUTHOR 40091
697 #define ID_SORT_RAUTHOR 40092
698 #define ID_SORT_SHUFFLE 40095
699 #define ID_SEL_INVERT 40096
700 #define ID_SEL_DELETE 40097
701 #define ID_SEL_SELECTALL 40098
702 #define ID_SEL_ENABLE 40100
703 #define ID_SEL_DISABLE 40101
704 #define ID_SORT_TITLE 40102
705 #define ID_SORT_RTITLE 40103
706 #define ID_MANAGE_ADDFILE 40104
707 #define ID_MANAGE_ADDDIRECTORY 40105
708 #define ID_MANAGE_ADDMRL 40106
709 #define ID_MANAGE_OPENPL 40107
710 #define ID_MANAGE_SAVEPL 40108
711 #define StopStream_Event 57601
712 #define PlayStream_Event 57602
713 #define PrevStream_Event 57603
714 #define NextStream_Event 57604
715 #define SlowStream_Event 57605
716 #define FastStream_Event 57606