diff options
Diffstat (limited to 'gui/mplayer/widgets.c')
-rw-r--r-- | gui/mplayer/widgets.c | 238 |
1 files changed, 238 insertions, 0 deletions
diff --git a/gui/mplayer/widgets.c b/gui/mplayer/widgets.c new file mode 100644 index 0000000000..1d4ee6123c --- /dev/null +++ b/gui/mplayer/widgets.c @@ -0,0 +1,238 @@ + +#include <stdlib.h> +#include <stdio.h> + +#include <sys/types.h> +#include <sys/stat.h> +#include <sys/wait.h> +#include <unistd.h> +#include <string.h> +#include <signal.h> + +#include <gdk/gdkprivate.h> +#include <gdk/gdkkeysyms.h> +#include <gdk/gdkx.h> +#include <gdk/gdk.h> +#include <gtk/gtk.h> + +#include "widgets.h" +#include "app.h" +#include "wm/ws.h" + + +#include "gtk/menu.h" +#include "play.h" +#include "gtk/fs.h" + +#include "../config.h" +#include "../help_mp.h" +#include "../mp_msg.h" + +GtkWidget * PopUpMenu = NULL; + +GtkWidget * WarningPixmap; +GtkWidget * ErrorPixmap; + +int gtkPopupMenu = 0; +int gtkPopupMenuParam = 0; +int gtkInited = 0; + +#include "gtk/sb.h" +#include "gtk/pl.h" +#include "gtk/fs.h" +#include "gtk/mb.h" +#include "gtk/about.h" +#include "gtk/opts.h" +#include "gtk/menu.h" +#include "gtk/url.h" +#include "gtk/eq.h" + +#include "pixmaps/MPlayer_mini.xpm" + +// --- init & close gtk + +GdkPixmap * gtkIcon = NULL; +GdkBitmap * gtkIconMask = NULL; +Pixmap guiIcon; +Pixmap guiIconMask; + +void gtkInit( void ) +{ + mp_dbg( MSGT_GPLAYER,MSGL_DBG2,"[widget] init GTK ...\n" ); +#ifdef HAVE_GTK2_GUI + gtk_disable_setlocale(); +#endif + gtk_init( 0,NULL ); +// gdk_set_use_xshm( TRUE ); + + { + GtkWidget * win; + win=gtk_window_new( GTK_WINDOW_TOPLEVEL ); + + if ( !gtkIcon ) + gtkIcon=gdk_pixmap_colormap_create_from_xpm_d( win->window,gdk_colormap_get_system(),>kIconMask,&win->style->bg[GTK_STATE_NORMAL],MPlayer_mini_xpm ); + + guiIcon=GDK_WINDOW_XWINDOW( gtkIcon ); + guiIconMask=GDK_WINDOW_XWINDOW( gtkIconMask ); + + gtk_widget_destroy( win ); + } + + gtkInited=1; +} + +void gtkAddIcon( GtkWidget * window ) +{ wsSetIcon( gdk_display,GDK_WINDOW_XWINDOW( window->window ),guiIcon,guiIconMask ); } + +void gtkClearList( GtkWidget * list ) +{ gtk_clist_clear( GTK_CLIST( list ) ); } + +int gtkFindCList( GtkWidget * list,char * item ) +{ + gint j,t; + gchar * tmpstr; + for( t=0,j=0;j<GTK_CLIST( list )->rows;j++ ) + { + gtk_clist_get_text( GTK_CLIST( list ),j,0,&tmpstr ); + if ( !strcmp( tmpstr,item ) ) return j; + } + return -1; +} + +void gtkSetDefaultToCList( GtkWidget * list,char * item ) +{ + gint i; + if ( ( i=gtkFindCList( list,item ) ) > -1 ) gtk_clist_select_row( GTK_CLIST( list ),i,0 ); +} + +void gtkEventHandling( void ) +{ + int i; + for( i=0;i < 25;i++ ) gtk_main_iteration_do( 0 ); +} + +// --- funcs + +void gtkMessageBox( int type,const gchar * str ) +{ + if ( !gtkInited ) return; + ShowMessageBox( str ); + gtk_label_set_text( GTK_LABEL( gtkMessageBoxText ),str ); + /* enable linewrapping by alex */ +// GTK_LABEL(gtkMessageBoxText)->max_width = 80; + if (strlen(str) > 80) + gtk_label_set_line_wrap(GTK_LABEL(gtkMessageBoxText), TRUE); + else + gtk_label_set_line_wrap(GTK_LABEL(gtkMessageBoxText), FALSE); + switch( type) + { + case GTK_MB_FATAL: + gtk_window_set_title( GTK_WINDOW( MessageBox ),MSGTR_MSGBOX_LABEL_FatalError ); + gtk_widget_hide( WarningPixmap ); + gtk_widget_show( ErrorPixmap ); + break; + case GTK_MB_ERROR: + gtk_window_set_title( GTK_WINDOW( MessageBox ),MSGTR_MSGBOX_LABEL_Error ); + gtk_widget_hide( WarningPixmap ); + gtk_widget_show( ErrorPixmap ); + break; + case GTK_MB_WARNING: + gtk_window_set_title( GTK_WINDOW( MessageBox ),MSGTR_MSGBOX_LABEL_Warning ); + gtk_widget_show( WarningPixmap ); + gtk_widget_hide( ErrorPixmap ); + break; + } + gtk_widget_show( MessageBox ); + gtkSetLayer( MessageBox ); + if ( type == GTK_MB_FATAL ) + while ( MessageBox ) gtk_main_iteration_do( 0 ); +} + +void gtkSetLayer( GtkWidget * wdg ) +{ + wsSetLayer( gdk_display,GDK_WINDOW_XWINDOW( wdg->window ),appMPlayer.subWindow.isFullScreen ); + gtkActive( wdg ); +} + +void gtkActive( GtkWidget * wdg ) +{ wsMoveTopWindow( gdk_display,GDK_WINDOW_XWINDOW( wdg->window )); } + +void gtkShow( int type,char * param ) +{ + switch( type ) + { + case evEqualizer: + ShowEqualizer(); + gtkSetLayer( Equalizer ); + break; + case evSkinBrowser: + ShowSkinBrowser(); +// gtkClearList( SkinList ); + if ( gtkFillSkinList( sbMPlayerPrefixDir ) && + gtkFillSkinList( sbMPlayerPrefixDir_obsolete ) && + gtkFillSkinList( sbMPlayerDirInHome ) && + gtkFillSkinList( sbMPlayerDirInHome_obsolete ) ) + { + gtkSetDefaultToCList( SkinList,param ); + gtk_clist_sort( GTK_CLIST( SkinList ) ); + gtk_widget_show( SkinBrowser ); + gtkSetLayer( SkinBrowser ); + } + else + { + gtk_widget_destroy( SkinBrowser ); + gtkMessageBox( GTK_MB_ERROR,"Skin dirs not found ... Please install skins." ); + } + break; + case evPreferences: + ShowPreferences(); + break; + case evPlayList: + ShowPlayList(); + gtkSetLayer( PlayList ); + break; + case evLoad: + ShowFileSelect( fsVideoSelector,0 ); + gtkSetLayer( fsFileSelect ); + break; + case evFirstLoad: + ShowFileSelect( fsVideoSelector,0 ); + gtkSetLayer( fsFileSelect ); + break; + case evLoadSubtitle: + ShowFileSelect( fsSubtitleSelector,0 ); + gtkSetLayer( fsFileSelect ); + break; + case evLoadAudioFile: + ShowFileSelect( fsAudioSelector,0 ); + gtkSetLayer( fsFileSelect ); + break; + case evAbout: + ShowAboutBox(); + gtkSetLayer( About ); + break; + case evShowPopUpMenu: + gtkPopupMenu=evNone; + gtkPopupMenuParam=0; + if ( PopUpMenu ) + { + gtk_widget_hide( PopUpMenu ); + gtk_widget_destroy( PopUpMenu ); + } + PopUpMenu=create_PopUpMenu(); + gtk_menu_popup( GTK_MENU( PopUpMenu ),NULL,NULL,NULL,NULL,0,0 ); + break; + case evHidePopUpMenu: + if ( PopUpMenu ) + { + gtk_widget_hide( PopUpMenu ); + gtk_widget_destroy( PopUpMenu ); + PopUpMenu=NULL; + } + break; + case evPlayNetwork: + ShowURLDialogBox(); + gtkSetLayer( URL ); + break; + } +} |