Mercurial > mplayer.hg
annotate Gui/mplayer/gtk/sb.c @ 6813:cdfa9de87202
Reorganized the README. More general information up front, more concise
steps. Added Step0 with downloading instructions instead of repeating this
in several steps. Mention system wide as well as per user file locations.
Rewordings everywhere, hopefully clearer.
author | diego |
---|---|
date | Fri, 26 Jul 2002 03:53:27 +0000 |
parents | 77980ab4e296 |
children | ded48a755830 |
rev | line source |
---|---|
2901 | 1 |
2 #include <sys/stat.h> | |
3 #include <glob.h> | |
4 #include <unistd.h> | |
2985 | 5 #include <string.h> |
6 #include <stdlib.h> | |
4818
3473ca9ef158
new gui interface, and gtk moved into mplayer process. fork ... bleh :)
pontscho
parents:
3587
diff
changeset
|
7 #include <stdio.h> |
2901 | 8 |
9 #include "sb.h" | |
10 #include "../../events.h" | |
11 #include "../../../config.h" | |
12 #include "../../../help_mp.h" | |
13 | |
14 #include "../widgets.h" | |
15 #include "../app.h" | |
16 | |
17 GtkWidget * SkinList; | |
18 char * sbSelectedSkin=NULL; | |
19 char * sbMPlayerDirInHome=NULL; | |
20 char * sbMPlayerPrefixDir=NULL; | |
21 | |
4818
3473ca9ef158
new gui interface, and gtk moved into mplayer process. fork ... bleh :)
pontscho
parents:
3587
diff
changeset
|
22 char * gtkOldSkin; |
5690 | 23 static char * prev; |
2901 | 24 |
6146 | 25 int gtkVSkinBrowser = 0; |
26 GtkWidget * SkinBrowser; | |
27 | |
28 void ShowSkinBrowser( void ) | |
29 { | |
30 if ( gtkVSkinBrowser ) gtkActive( SkinBrowser ); | |
31 else SkinBrowser=create_SkinBrowser(); | |
6755 | 32 gtkVisible++; |
6146 | 33 } |
34 | |
35 void HideSkinBrowser( void ) | |
36 { | |
6755 | 37 if ( !gtkVSkinBrowser ) return; |
38 gtkVSkinBrowser=0; gtkVisible--; | |
6146 | 39 gtk_widget_destroy( SkinBrowser ); |
40 } | |
41 | |
2901 | 42 int gtkFillSkinList( gchar * mdir ) |
43 { | |
44 gchar * str[2]; | |
45 gchar * tmp; | |
46 int i; | |
47 glob_t gg; | |
48 struct stat fs; | |
49 | |
4818
3473ca9ef158
new gui interface, and gtk moved into mplayer process. fork ... bleh :)
pontscho
parents:
3587
diff
changeset
|
50 gtkOldSkin=strdup( skinName ); |
5690 | 51 prev=gtkOldSkin; |
2901 | 52 if ( ( str[0]=(char *)calloc( 1,7 ) ) == NULL ) |
53 { | |
54 gtkMessageBox( GTK_MB_FATAL,MSGTR_SKINBROWSER_NotEnoughMemory ); | |
55 return 0; | |
56 } | |
57 str[1]=""; | |
58 strcpy( str[0],"default" ); | |
59 if ( gtkFindCList( SkinList,str[0] ) == -1 ) gtk_clist_append( GTK_CLIST( SkinList ),str ); | |
60 free( str[0] ); | |
61 | |
62 glob( mdir,GLOB_NOSORT,NULL,&gg ); | |
63 for( i=0;i<gg.gl_pathc;i++ ) | |
64 { | |
65 if ( !strcmp( gg.gl_pathv[i],"." ) || !strcmp( gg.gl_pathv[i],".." ) ) continue; | |
66 stat( gg.gl_pathv[i],&fs ); | |
67 if ( S_ISDIR( fs.st_mode ) ) | |
68 { | |
69 tmp=strrchr( gg.gl_pathv[i],'/' ); tmp++; | |
70 if ( !strcmp( tmp,"default" ) ) continue; | |
71 if ( ( str[0]=(char *)malloc( strlen( tmp ) + 1 ) ) == NULL ) { gtkMessageBox( GTK_MB_FATAL,MSGTR_SKINBROWSER_NotEnoughMemory ); return 0; } | |
72 strcpy( str[0],tmp ); | |
73 if ( gtkFindCList( SkinList,str[0] ) == -1 ) gtk_clist_append( GTK_CLIST( SkinList ),str ); | |
74 free( str[0] ); | |
75 } | |
76 } | |
77 globfree( &gg ); | |
78 return 1; | |
79 } | |
80 | |
81 void on_SkinBrowser_destroy( GtkObject * object,gpointer user_data ) | |
6146 | 82 { HideSkinBrowser(); } |
83 | |
84 void on_SkinBrowser_show( GtkObject * object,gpointer user_data ) | |
85 { gtkVSkinBrowser=(int)user_data; } | |
2901 | 86 |
87 void on_SkinBrowser_Cancel( GtkObject * object,gpointer user_data ) | |
88 { | |
5690 | 89 if ( strcmp( sbSelectedSkin,gtkOldSkin ) ) ChangeSkin( gtkOldSkin ); |
6146 | 90 HideSkinBrowser(); |
4818
3473ca9ef158
new gui interface, and gtk moved into mplayer process. fork ... bleh :)
pontscho
parents:
3587
diff
changeset
|
91 } |
3473ca9ef158
new gui interface, and gtk moved into mplayer process. fork ... bleh :)
pontscho
parents:
3587
diff
changeset
|
92 |
3473ca9ef158
new gui interface, and gtk moved into mplayer process. fork ... bleh :)
pontscho
parents:
3587
diff
changeset
|
93 void on_SkinBrowser_Ok( GtkObject * object,gpointer user_data ) |
3473ca9ef158
new gui interface, and gtk moved into mplayer process. fork ... bleh :)
pontscho
parents:
3587
diff
changeset
|
94 { |
3473ca9ef158
new gui interface, and gtk moved into mplayer process. fork ... bleh :)
pontscho
parents:
3587
diff
changeset
|
95 ChangeSkin( sbSelectedSkin ); |
3473ca9ef158
new gui interface, and gtk moved into mplayer process. fork ... bleh :)
pontscho
parents:
3587
diff
changeset
|
96 if ( skinName ) free( skinName ); |
3473ca9ef158
new gui interface, and gtk moved into mplayer process. fork ... bleh :)
pontscho
parents:
3587
diff
changeset
|
97 skinName=strdup( sbSelectedSkin ); |
6146 | 98 HideSkinBrowser(); |
2901 | 99 } |
100 | |
101 void on_SkinList_select_row( GtkCList * clist,gint row,gint column,GdkEvent * bevent,gpointer user_data ) | |
102 { | |
103 gtk_clist_get_text( clist,row,0,&sbSelectedSkin ); | |
5690 | 104 if ( strcmp( prev,sbSelectedSkin ) ) |
105 { | |
106 prev=sbSelectedSkin; | |
107 ChangeSkin( sbSelectedSkin ); | |
6222 | 108 gtkActive( SkinBrowser ); |
5690 | 109 } |
2901 | 110 if( !bevent ) return; |
5690 | 111 if( bevent->type == GDK_2BUTTON_PRESS ) |
112 { | |
113 if ( skinName ) free( skinName ); | |
114 skinName=strdup( sbSelectedSkin ); | |
6146 | 115 HideSkinBrowser(); |
5690 | 116 } |
2901 | 117 } |
118 | |
119 GtkWidget * create_SkinBrowser( void ) | |
120 { | |
121 GtkWidget * SkinBrowser; | |
122 GtkWidget * frame5; | |
123 GtkWidget * frame6; | |
124 GtkWidget * frame7; | |
125 GtkWidget * frame8; | |
126 GtkWidget * vbox5; | |
127 GtkWidget * label; | |
128 GtkWidget * hseparator4; | |
129 GtkWidget * scrolledwindow1; | |
130 GtkWidget * label2; | |
131 GtkWidget * hseparator5; | |
132 GtkWidget * hbuttonbox4; | |
133 GtkWidget * Cancel; | |
134 GtkWidget * Ok; | |
135 GtkAccelGroup * accel_group; | |
136 | |
137 accel_group = gtk_accel_group_new (); | |
138 | |
139 SkinBrowser=gtk_window_new( GTK_WINDOW_DIALOG ); | |
140 gtk_widget_set_name( SkinBrowser,MSGTR_SkinBrowser ); | |
141 gtk_object_set_data( GTK_OBJECT( SkinBrowser ),MSGTR_SkinBrowser,SkinBrowser ); | |
142 gtk_widget_set_usize( SkinBrowser,256,320 ); | |
143 gtk_container_set_border_width( GTK_CONTAINER( SkinBrowser ),1 ); | |
144 // GTK_WIDGET_SET_FLAGS( SkinBrowser,GTK_CAN_FOCUS ); | |
145 GTK_WIDGET_SET_FLAGS( SkinBrowser,GTK_CAN_DEFAULT ); | |
146 gtk_widget_set_events( SkinBrowser,GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK | GDK_FOCUS_CHANGE_MASK | GDK_STRUCTURE_MASK | GDK_PROPERTY_CHANGE_MASK | GDK_VISIBILITY_NOTIFY_MASK ); | |
147 gtk_window_set_title( GTK_WINDOW( SkinBrowser ),MSGTR_SkinBrowser ); | |
148 gtk_window_set_position( GTK_WINDOW( SkinBrowser ),GTK_WIN_POS_CENTER ); | |
149 gtk_window_set_policy( GTK_WINDOW( SkinBrowser ),FALSE,FALSE,TRUE ); | |
6651 | 150 gtk_window_set_wmclass( GTK_WINDOW( SkinBrowser ),MSGTR_SkinBrowser,"MPlayer" ); |
151 | |
152 gtk_widget_realize( SkinBrowser ); | |
153 gtkAddIcon( SkinBrowser ); | |
2901 | 154 |
155 frame5=gtk_frame_new( NULL ); | |
156 gtk_widget_set_name( frame5,"frame5" ); | |
157 gtk_widget_ref( frame5 ); | |
6146 | 158 gtk_object_set_data_full( GTK_OBJECT( SkinBrowser ),"frame5",frame5,(GtkDestroyNotify)gtk_widget_unref ); |
2901 | 159 gtk_widget_show( frame5 ); |
160 gtk_container_add( GTK_CONTAINER( SkinBrowser ),frame5 ); | |
161 gtk_frame_set_shadow_type( GTK_FRAME( frame5 ),GTK_SHADOW_IN ); | |
162 | |
163 frame6=gtk_frame_new( NULL ); | |
164 gtk_widget_set_name( frame6,"frame6" ); | |
165 gtk_widget_ref( frame6 ); | |
6146 | 166 gtk_object_set_data_full( GTK_OBJECT( SkinBrowser ),"frame6",frame6,(GtkDestroyNotify)gtk_widget_unref ); |
2901 | 167 gtk_widget_show( frame6 ); |
168 gtk_container_add( GTK_CONTAINER( frame5 ),frame6 ); | |
169 gtk_frame_set_shadow_type( GTK_FRAME( frame6 ),GTK_SHADOW_NONE ); | |
170 | |
171 frame7=gtk_frame_new( NULL ); | |
172 gtk_widget_set_name( frame7,"frame7" ); | |
173 gtk_widget_ref( frame7 ); | |
6146 | 174 gtk_object_set_data_full( GTK_OBJECT( SkinBrowser ),"frame7",frame7,(GtkDestroyNotify)gtk_widget_unref ); |
2901 | 175 gtk_widget_show( frame7 ); |
176 gtk_container_add( GTK_CONTAINER( frame6 ),frame7 ); | |
177 gtk_frame_set_shadow_type( GTK_FRAME( frame7 ),GTK_SHADOW_ETCHED_OUT ); | |
178 | |
179 frame8=gtk_frame_new( NULL ); | |
180 gtk_widget_set_name( frame8,"frame8" ); | |
181 gtk_widget_ref( frame8 ); | |
6146 | 182 gtk_object_set_data_full( GTK_OBJECT( SkinBrowser ),"frame8",frame8,(GtkDestroyNotify)gtk_widget_unref ); |
2901 | 183 gtk_widget_show( frame8 ); |
184 gtk_container_add( GTK_CONTAINER( frame7 ),frame8 ); | |
185 gtk_frame_set_shadow_type( GTK_FRAME( frame8 ),GTK_SHADOW_NONE ); | |
186 | |
187 vbox5=gtk_vbox_new( FALSE,0 ); | |
188 gtk_widget_set_name( vbox5,"vbox5" ); | |
189 gtk_widget_ref( vbox5 ); | |
6146 | 190 gtk_object_set_data_full( GTK_OBJECT( SkinBrowser ),"vbox5",vbox5,(GtkDestroyNotify)gtk_widget_unref ); |
2901 | 191 gtk_widget_show( vbox5 ); |
192 gtk_container_add( GTK_CONTAINER( frame8 ),vbox5 ); | |
193 | |
3587 | 194 label=gtk_label_new( MSGTR_SKIN_LABEL ); |
2901 | 195 gtk_widget_set_name( label,"label" ); |
196 gtk_widget_ref( label ); | |
6146 | 197 gtk_object_set_data_full( GTK_OBJECT( SkinBrowser ),"label",label,(GtkDestroyNotify)gtk_widget_unref ); |
2901 | 198 gtk_widget_show( label ); |
199 gtk_box_pack_start( GTK_BOX( vbox5 ),label,FALSE,FALSE,0 ); | |
200 gtk_label_set_justify( GTK_LABEL( label ),GTK_JUSTIFY_RIGHT ); | |
201 gtk_misc_set_alignment( GTK_MISC( label ),7.45058e-09,7.45058e-09 ); | |
202 | |
203 hseparator4=gtk_hseparator_new(); | |
204 gtk_widget_set_name( hseparator4,"hseparator4" ); | |
205 gtk_widget_ref( hseparator4 ); | |
6146 | 206 gtk_object_set_data_full( GTK_OBJECT( SkinBrowser ),"hseparator4",hseparator4,(GtkDestroyNotify)gtk_widget_unref ); |
2901 | 207 gtk_widget_show( hseparator4 ); |
208 gtk_box_pack_start( GTK_BOX( vbox5 ),hseparator4,FALSE,TRUE,0 ); | |
209 gtk_widget_set_usize( hseparator4,-2,5 ); | |
210 | |
211 scrolledwindow1=gtk_scrolled_window_new( NULL,NULL ); | |
212 gtk_widget_set_name( scrolledwindow1,"scrolledwindow1" ); | |
213 gtk_widget_ref( scrolledwindow1 ); | |
6146 | 214 gtk_object_set_data_full( GTK_OBJECT( SkinBrowser ),"scrolledwindow1",scrolledwindow1,(GtkDestroyNotify)gtk_widget_unref ); |
2901 | 215 gtk_widget_show( scrolledwindow1 ); |
216 gtk_box_pack_start( GTK_BOX( vbox5 ),scrolledwindow1,TRUE,TRUE,0 ); | |
217 gtk_container_set_border_width( GTK_CONTAINER( scrolledwindow1 ),2 ); | |
218 gtk_scrolled_window_set_policy( GTK_SCROLLED_WINDOW( scrolledwindow1 ),GTK_POLICY_NEVER,GTK_POLICY_AUTOMATIC ); | |
219 | |
220 SkinList=gtk_clist_new( 1 ); | |
221 gtk_widget_set_name( SkinList,"SkinList" ); | |
222 gtk_widget_ref( SkinList ); | |
6146 | 223 gtk_object_set_data_full( GTK_OBJECT( SkinBrowser ),"SkinList",SkinList,(GtkDestroyNotify)gtk_widget_unref ); |
2901 | 224 gtk_widget_show( SkinList ); |
225 gtk_container_add( GTK_CONTAINER( scrolledwindow1 ),SkinList ); | |
226 gtk_clist_set_column_width( GTK_CLIST( SkinList ),0,80 ); | |
227 gtk_clist_set_selection_mode( GTK_CLIST( SkinList ),GTK_SELECTION_SINGLE ); | |
228 gtk_clist_column_titles_hide( GTK_CLIST( SkinList ) ); | |
229 gtk_clist_set_shadow_type( GTK_CLIST( SkinList ),GTK_SHADOW_ETCHED_OUT ); | |
230 | |
231 label2=gtk_label_new( "label2" ); | |
232 gtk_widget_set_name( label2,"label2" ); | |
233 gtk_widget_ref( label2 ); | |
234 gtk_object_set_data_full( GTK_OBJECT( SkinBrowser ),"label2",label2,(GtkDestroyNotify)gtk_widget_unref ); | |
235 gtk_widget_show( label2 ); | |
236 gtk_clist_set_column_widget( GTK_CLIST( SkinList ),0,label2 ); | |
237 | |
238 hseparator5=gtk_hseparator_new(); | |
239 gtk_widget_set_name( hseparator5,"hseparator5" ); | |
240 gtk_widget_ref( hseparator5 ); | |
241 gtk_object_set_data_full( GTK_OBJECT( SkinBrowser ),"hseparator5",hseparator5,(GtkDestroyNotify)gtk_widget_unref ); | |
242 gtk_widget_show( hseparator5 ); | |
243 gtk_box_pack_start( GTK_BOX( vbox5 ),hseparator5,FALSE,TRUE,0 ); | |
244 gtk_widget_set_usize( hseparator5,-2,9 ); | |
245 | |
246 hbuttonbox4=gtk_hbutton_box_new(); | |
247 gtk_widget_set_name( hbuttonbox4,"hbuttonbox4" ); | |
248 gtk_widget_ref( hbuttonbox4 ); | |
249 gtk_object_set_data_full( GTK_OBJECT( SkinBrowser ),"hbuttonbox4",hbuttonbox4,(GtkDestroyNotify)gtk_widget_unref ); | |
3587 | 250 gtk_widget_set_usize( hbuttonbox4,-2,25 ); |
2901 | 251 gtk_widget_show( hbuttonbox4 ); |
252 gtk_box_pack_start( GTK_BOX( vbox5 ),hbuttonbox4,FALSE,TRUE,0 ); | |
253 gtk_button_box_set_layout( GTK_BUTTON_BOX( hbuttonbox4 ),GTK_BUTTONBOX_END ); | |
3587 | 254 gtk_button_box_set_spacing( GTK_BUTTON_BOX( hbuttonbox4 ),5 ); |
255 gtk_button_box_set_child_size( GTK_BUTTON_BOX( hbuttonbox4 ),75,0 ); | |
2901 | 256 |
257 Ok=gtk_button_new_with_label( MSGTR_Ok ); | |
258 gtk_widget_set_name( Ok,MSGTR_Ok ); | |
259 gtk_widget_ref( Ok ); | |
260 gtk_object_set_data_full( GTK_OBJECT( SkinBrowser ),MSGTR_Ok,Ok,(GtkDestroyNotify)gtk_widget_unref ); | |
261 gtk_widget_show( Ok ); | |
262 gtk_container_add( GTK_CONTAINER( hbuttonbox4 ),Ok ); | |
3587 | 263 gtk_widget_set_usize( Ok,-2,22 ); |
2901 | 264 gtk_widget_add_accelerator( Ok,"released",accel_group,GDK_Return,0,GTK_ACCEL_VISIBLE ); |
265 | |
266 Cancel=gtk_button_new_with_label( MSGTR_Cancel ); | |
267 gtk_widget_set_name( Cancel,MSGTR_Cancel ); | |
268 gtk_widget_ref( Cancel ); | |
269 gtk_object_set_data_full( GTK_OBJECT( SkinBrowser ),MSGTR_Cancel,Cancel,(GtkDestroyNotify)gtk_widget_unref ); | |
270 gtk_widget_show( Cancel ); | |
271 gtk_container_add( GTK_CONTAINER( hbuttonbox4 ),Cancel ); | |
3587 | 272 gtk_widget_set_usize( Cancel,-2,22 ); |
2901 | 273 gtk_widget_add_accelerator( Cancel,"released",accel_group,GDK_Escape,0,GTK_ACCEL_VISIBLE ); |
274 | |
6146 | 275 gtk_signal_connect( GTK_OBJECT( SkinBrowser ),"destroy",GTK_SIGNAL_FUNC( on_SkinBrowser_destroy ),0 ); |
6794 | 276 gtk_signal_connect( GTK_OBJECT( SkinBrowser ),"show",GTK_SIGNAL_FUNC( on_SkinBrowser_show ),(void *)1 ); |
6146 | 277 gtk_signal_connect( GTK_OBJECT( SkinBrowser ),"hide",GTK_SIGNAL_FUNC( on_SkinBrowser_show ),0 ); |
278 | |
2901 | 279 gtk_signal_connect( GTK_OBJECT( SkinList ),"select_row",GTK_SIGNAL_FUNC( on_SkinList_select_row ),NULL ); |
4818
3473ca9ef158
new gui interface, and gtk moved into mplayer process. fork ... bleh :)
pontscho
parents:
3587
diff
changeset
|
280 gtk_signal_connect( GTK_OBJECT( Ok ),"released",GTK_SIGNAL_FUNC( on_SkinBrowser_Ok ),NULL ); |
2901 | 281 gtk_signal_connect( GTK_OBJECT( Cancel ),"released",GTK_SIGNAL_FUNC( on_SkinBrowser_Cancel ),NULL ); |
282 | |
283 if ( ( sbMPlayerDirInHome=(char *)calloc( 1,strlen( skinDirInHome ) + 4 ) ) != NULL ) | |
284 { strcpy( sbMPlayerDirInHome,skinDirInHome ); strcat( sbMPlayerDirInHome,"/*" ); } | |
285 if ( ( sbMPlayerPrefixDir=(char *)calloc( 1,strlen( skinMPlayerDir ) + 4 ) ) != NULL ) | |
286 { strcpy( sbMPlayerPrefixDir,skinMPlayerDir ); strcat( sbMPlayerPrefixDir,"/*" ); } | |
287 | |
288 gtk_window_add_accel_group( GTK_WINDOW( SkinBrowser ),accel_group ); | |
289 gtk_widget_grab_focus( SkinList ); | |
290 | |
291 return SkinBrowser; | |
292 } |