comparison gui/mplayer/widgets.c @ 23077:17bf4f4b0715

Gui --> gui
author diego
date Mon, 23 Apr 2007 07:42:42 +0000
parents
children afa125da85cf
comparison
equal deleted inserted replaced
23076:39dd908375b2 23077:17bf4f4b0715
1
2 #include <stdlib.h>
3 #include <stdio.h>
4
5 #include <sys/types.h>
6 #include <sys/stat.h>
7 #include <sys/wait.h>
8 #include <unistd.h>
9 #include <string.h>
10 #include <signal.h>
11
12 #include <gdk/gdkprivate.h>
13 #include <gdk/gdkkeysyms.h>
14 #include <gdk/gdkx.h>
15 #include <gdk/gdk.h>
16 #include <gtk/gtk.h>
17
18 #include "widgets.h"
19 #include "app.h"
20 #include "wm/ws.h"
21
22
23 #include "gtk/menu.h"
24 #include "play.h"
25 #include "gtk/fs.h"
26
27 #include "../config.h"
28 #include "../help_mp.h"
29 #include "../mp_msg.h"
30
31 GtkWidget * PopUpMenu = NULL;
32
33 GtkWidget * WarningPixmap;
34 GtkWidget * ErrorPixmap;
35
36 int gtkPopupMenu = 0;
37 int gtkPopupMenuParam = 0;
38 int gtkInited = 0;
39
40 #include "gtk/sb.h"
41 #include "gtk/pl.h"
42 #include "gtk/fs.h"
43 #include "gtk/mb.h"
44 #include "gtk/about.h"
45 #include "gtk/opts.h"
46 #include "gtk/menu.h"
47 #include "gtk/url.h"
48 #include "gtk/eq.h"
49
50 #include "pixmaps/MPlayer_mini.xpm"
51
52 // --- init & close gtk
53
54 GdkPixmap * gtkIcon = NULL;
55 GdkBitmap * gtkIconMask = NULL;
56 Pixmap guiIcon;
57 Pixmap guiIconMask;
58
59 void gtkInit( void )
60 {
61 mp_dbg( MSGT_GPLAYER,MSGL_DBG2,"[widget] init GTK ...\n" );
62 #ifdef HAVE_GTK2_GUI
63 gtk_disable_setlocale();
64 #endif
65 gtk_init( 0,NULL );
66 // gdk_set_use_xshm( TRUE );
67
68 {
69 GtkWidget * win;
70 win=gtk_window_new( GTK_WINDOW_TOPLEVEL );
71
72 if ( !gtkIcon )
73 gtkIcon=gdk_pixmap_colormap_create_from_xpm_d( win->window,gdk_colormap_get_system(),&gtkIconMask,&win->style->bg[GTK_STATE_NORMAL],MPlayer_mini_xpm );
74
75 guiIcon=GDK_WINDOW_XWINDOW( gtkIcon );
76 guiIconMask=GDK_WINDOW_XWINDOW( gtkIconMask );
77
78 gtk_widget_destroy( win );
79 }
80
81 gtkInited=1;
82 }
83
84 void gtkAddIcon( GtkWidget * window )
85 { wsSetIcon( gdk_display,GDK_WINDOW_XWINDOW( window->window ),guiIcon,guiIconMask ); }
86
87 void gtkClearList( GtkWidget * list )
88 { gtk_clist_clear( GTK_CLIST( list ) ); }
89
90 int gtkFindCList( GtkWidget * list,char * item )
91 {
92 gint j,t;
93 gchar * tmpstr;
94 for( t=0,j=0;j<GTK_CLIST( list )->rows;j++ )
95 {
96 gtk_clist_get_text( GTK_CLIST( list ),j,0,&tmpstr );
97 if ( !strcmp( tmpstr,item ) ) return j;
98 }
99 return -1;
100 }
101
102 void gtkSetDefaultToCList( GtkWidget * list,char * item )
103 {
104 gint i;
105 if ( ( i=gtkFindCList( list,item ) ) > -1 ) gtk_clist_select_row( GTK_CLIST( list ),i,0 );
106 }
107
108 void gtkEventHandling( void )
109 {
110 int i;
111 for( i=0;i < 25;i++ ) gtk_main_iteration_do( 0 );
112 }
113
114 // --- funcs
115
116 void gtkMessageBox( int type,const gchar * str )
117 {
118 if ( !gtkInited ) return;
119 ShowMessageBox( str );
120 gtk_label_set_text( GTK_LABEL( gtkMessageBoxText ),str );
121 /* enable linewrapping by alex */
122 // GTK_LABEL(gtkMessageBoxText)->max_width = 80;
123 if (strlen(str) > 80)
124 gtk_label_set_line_wrap(GTK_LABEL(gtkMessageBoxText), TRUE);
125 else
126 gtk_label_set_line_wrap(GTK_LABEL(gtkMessageBoxText), FALSE);
127 switch( type)
128 {
129 case GTK_MB_FATAL:
130 gtk_window_set_title( GTK_WINDOW( MessageBox ),MSGTR_MSGBOX_LABEL_FatalError );
131 gtk_widget_hide( WarningPixmap );
132 gtk_widget_show( ErrorPixmap );
133 break;
134 case GTK_MB_ERROR:
135 gtk_window_set_title( GTK_WINDOW( MessageBox ),MSGTR_MSGBOX_LABEL_Error );
136 gtk_widget_hide( WarningPixmap );
137 gtk_widget_show( ErrorPixmap );
138 break;
139 case GTK_MB_WARNING:
140 gtk_window_set_title( GTK_WINDOW( MessageBox ),MSGTR_MSGBOX_LABEL_Warning );
141 gtk_widget_show( WarningPixmap );
142 gtk_widget_hide( ErrorPixmap );
143 break;
144 }
145 gtk_widget_show( MessageBox );
146 gtkSetLayer( MessageBox );
147 if ( type == GTK_MB_FATAL )
148 while ( MessageBox ) gtk_main_iteration_do( 0 );
149 }
150
151 void gtkSetLayer( GtkWidget * wdg )
152 {
153 wsSetLayer( gdk_display,GDK_WINDOW_XWINDOW( wdg->window ),appMPlayer.subWindow.isFullScreen );
154 gtkActive( wdg );
155 }
156
157 void gtkActive( GtkWidget * wdg )
158 { wsMoveTopWindow( gdk_display,GDK_WINDOW_XWINDOW( wdg->window )); }
159
160 void gtkShow( int type,char * param )
161 {
162 switch( type )
163 {
164 case evEqualizer:
165 ShowEqualizer();
166 gtkSetLayer( Equalizer );
167 break;
168 case evSkinBrowser:
169 ShowSkinBrowser();
170 // gtkClearList( SkinList );
171 if ( gtkFillSkinList( sbMPlayerPrefixDir ) &&
172 gtkFillSkinList( sbMPlayerPrefixDir_obsolete ) &&
173 gtkFillSkinList( sbMPlayerDirInHome ) &&
174 gtkFillSkinList( sbMPlayerDirInHome_obsolete ) )
175 {
176 gtkSetDefaultToCList( SkinList,param );
177 gtk_clist_sort( GTK_CLIST( SkinList ) );
178 gtk_widget_show( SkinBrowser );
179 gtkSetLayer( SkinBrowser );
180 }
181 else
182 {
183 gtk_widget_destroy( SkinBrowser );
184 gtkMessageBox( GTK_MB_ERROR,"Skin dirs not found ... Please install skins." );
185 }
186 break;
187 case evPreferences:
188 ShowPreferences();
189 break;
190 case evPlayList:
191 ShowPlayList();
192 gtkSetLayer( PlayList );
193 break;
194 case evLoad:
195 ShowFileSelect( fsVideoSelector,0 );
196 gtkSetLayer( fsFileSelect );
197 break;
198 case evFirstLoad:
199 ShowFileSelect( fsVideoSelector,0 );
200 gtkSetLayer( fsFileSelect );
201 break;
202 case evLoadSubtitle:
203 ShowFileSelect( fsSubtitleSelector,0 );
204 gtkSetLayer( fsFileSelect );
205 break;
206 case evLoadAudioFile:
207 ShowFileSelect( fsAudioSelector,0 );
208 gtkSetLayer( fsFileSelect );
209 break;
210 case evAbout:
211 ShowAboutBox();
212 gtkSetLayer( About );
213 break;
214 case evShowPopUpMenu:
215 gtkPopupMenu=evNone;
216 gtkPopupMenuParam=0;
217 if ( PopUpMenu )
218 {
219 gtk_widget_hide( PopUpMenu );
220 gtk_widget_destroy( PopUpMenu );
221 }
222 PopUpMenu=create_PopUpMenu();
223 gtk_menu_popup( GTK_MENU( PopUpMenu ),NULL,NULL,NULL,NULL,0,0 );
224 break;
225 case evHidePopUpMenu:
226 if ( PopUpMenu )
227 {
228 gtk_widget_hide( PopUpMenu );
229 gtk_widget_destroy( PopUpMenu );
230 PopUpMenu=NULL;
231 }
232 break;
233 case evPlayNetwork:
234 ShowURLDialogBox();
235 gtkSetLayer( URL );
236 break;
237 }
238 }