Mercurial > mplayer.hg
annotate gui/ui/actions.c @ 34064:54becc464788
Set MPlayer filename in uiSetFileName().
This ensures that filename always points to guiInfo.Filename (the GUI
filename).
If guiInit() is called without filename being set, leave it that way.
(This applies if the GUI should not start playing immediately.)
author | ib |
---|---|
date | Thu, 29 Sep 2011 13:26:32 +0000 |
parents | 57d711d3dcca |
children | 360ed500a6e9 |
rev | line source |
---|---|
26458 | 1 /* |
2 * This file is part of MPlayer. | |
3 * | |
4 * MPlayer is free software; you can redistribute it and/or modify | |
5 * it under the terms of the GNU General Public License as published by | |
6 * the Free Software Foundation; either version 2 of the License, or | |
7 * (at your option) any later version. | |
8 * | |
9 * MPlayer is distributed in the hope that it will be useful, | |
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
12 * GNU General Public License for more details. | |
13 * | |
14 * You should have received a copy of the GNU General Public License along | |
15 * with MPlayer; if not, write to the Free Software Foundation, Inc., | |
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | |
17 */ | |
23077 | 18 |
19 #include <stdlib.h> | |
20 #include <string.h> | |
21 | |
33556 | 22 #include "actions.h" |
32881 | 23 #include "gmplayer.h" |
24 #include "gui/app.h" | |
25 #include "gui/interface.h" | |
26 #include "gui/skin/font.h" | |
27 #include "gui/skin/skin.h" | |
33742
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33740
diff
changeset
|
28 #include "gui/util/list.h" |
33739 | 29 #include "gui/util/mem.h" |
33737 | 30 #include "gui/util/string.h" |
32881 | 31 #include "gui/wm/wsxdnd.h" |
32 #include "widgets.h" | |
23077 | 33 |
26382
b2f4abcf20ed
Make include paths consistent; do not use ../ in them.
diego
parents:
26365
diff
changeset
|
34 #include "config.h" |
b2f4abcf20ed
Make include paths consistent; do not use ../ in them.
diego
parents:
26365
diff
changeset
|
35 #include "help_mp.h" |
32881 | 36 #include "input/input.h" |
30653
3d23e24c5c60
Declare externally used variables from vd.c as extern in vd.h.
diego
parents:
29263
diff
changeset
|
37 #include "libmpcodecs/vd.h" |
26382
b2f4abcf20ed
Make include paths consistent; do not use ../ in them.
diego
parents:
26365
diff
changeset
|
38 #include "libvo/video_out.h" |
32881 | 39 #include "mp_core.h" |
23077 | 40 #include "stream/stream.h" |
41 | |
33555 | 42 int uiGotoTheNext = 1; |
23077 | 43 |
33555 | 44 void uiFullScreen(void) |
23077 | 45 { |
33960 | 46 if (!guiInfo.VideoWindow) |
32881 | 47 return; |
48 | |
33960 | 49 wsFullScreen(&guiApp.subWindow); |
23077 | 50 |
33960 | 51 vo_fs = guiApp.subWindow.isFullScreen; |
23077 | 52 |
33555 | 53 wsSetLayer(wsDisplay, guiApp.mainWindow.WindowID, guiApp.subWindow.isFullScreen); |
32881 | 54 |
33555 | 55 if (guiApp.menuIsPresent) |
56 wsSetLayer(wsDisplay, guiApp.menuWindow.WindowID, guiApp.subWindow.isFullScreen); | |
32881 | 57 |
33555 | 58 if (guiInfo.Playing) |
59 wsSetBackgroundRGB(&guiApp.subWindow, 0, 0, 0); | |
32881 | 60 else |
33555 | 61 wsSetBackgroundRGB(&guiApp.subWindow, guiApp.sub.R, guiApp.sub.G, guiApp.sub.B); |
23077 | 62 } |
63 | |
33555 | 64 void uiPlay(void) |
23077 | 65 { |
33555 | 66 if (!guiInfo.Filename || |
67 (guiInfo.Filename[0] == 0) || | |
33615
1f9a31d4f114
Replace all playback integer constants by their symbolic constants.
ib
parents:
33614
diff
changeset
|
68 (guiInfo.Playing == GUI_PLAY)) |
32881 | 69 return; |
23077 | 70 |
33615
1f9a31d4f114
Replace all playback integer constants by their symbolic constants.
ib
parents:
33614
diff
changeset
|
71 if (guiInfo.Playing == GUI_PAUSE) { |
33555 | 72 uiPause(); |
32881 | 73 return; |
74 } | |
75 | |
33731
81f71d910333
Cosmetic: Change prefix for symbolic constants from GMP to GUI.
ib
parents:
33725
diff
changeset
|
76 gui(GUI_SET_STATE, (void *)GUI_PLAY); |
33555 | 77 uiSubRender = 0; |
78 wsSetBackgroundRGB(&guiApp.subWindow, 0, 0, 0); | |
79 wsClearWindow(guiApp.subWindow); | |
23077 | 80 } |
81 | |
33555 | 82 void uiPause(void) |
23077 | 83 { |
33555 | 84 if (!guiInfo.Playing) |
32881 | 85 return; |
86 | |
33615
1f9a31d4f114
Replace all playback integer constants by their symbolic constants.
ib
parents:
33614
diff
changeset
|
87 if (guiInfo.Playing == GUI_PLAY) { |
32881 | 88 mp_cmd_t *cmd = calloc(1, sizeof(*cmd)); |
89 cmd->id = MP_CMD_PAUSE; | |
90 cmd->name = strdup("pause"); | |
91 mp_input_queue_cmd(cmd); | |
92 } else | |
33615
1f9a31d4f114
Replace all playback integer constants by their symbolic constants.
ib
parents:
33614
diff
changeset
|
93 guiInfo.Playing = GUI_PLAY; |
23077 | 94 } |
95 | |
33555 | 96 void uiState(void) |
32881 | 97 { |
33615
1f9a31d4f114
Replace all playback integer constants by their symbolic constants.
ib
parents:
33614
diff
changeset
|
98 if (guiInfo.Playing == GUI_STOP || guiInfo.Playing == GUI_PAUSE) { |
33978 | 99 btnSet(evPlaySwitchToPause, btnReleased); |
100 btnSet(evPauseSwitchToPlay, btnDisabled); | |
32881 | 101 } else { |
33978 | 102 btnSet(evPlaySwitchToPause, btnDisabled); |
103 btnSet(evPauseSwitchToPlay, btnReleased); | |
32881 | 104 } |
23077 | 105 } |
106 | |
33555 | 107 void uiRelSeek(float sec) |
32881 | 108 { |
32971 | 109 rel_seek_secs = sec; |
32881 | 110 abs_seek_pos = 0; |
111 } | |
112 | |
33555 | 113 void uiAbsSeek(float percent) |
32881 | 114 { |
33555 | 115 if (guiInfo.StreamType == STREAMTYPE_STREAM) |
32881 | 116 return; |
117 | |
32971 | 118 rel_seek_secs = percent / 100.0; |
32881 | 119 abs_seek_pos = 3; |
23077 | 120 } |
121 | |
33555 | 122 void uiChangeSkin(char *name) |
23077 | 123 { |
32893 | 124 int prev, bprev; |
32881 | 125 |
33555 | 126 prev = guiApp.menuIsPresent; |
127 bprev = guiApp.playbarIsPresent; | |
32881 | 128 |
129 mainVisible = 0; | |
130 | |
32893 | 131 if (skinRead(name) != 0) { |
132 if (skinRead(skinName) != 0) { | |
32894 | 133 mainVisible = 1; |
134 return; | |
32893 | 135 } |
32881 | 136 } |
137 | |
138 // reload menu window | |
23077 | 139 |
33555 | 140 if (prev && guiApp.menuIsPresent) { |
141 free(menuDrawBuffer); | |
142 menuDrawBuffer = calloc(1, guiApp.menu.Bitmap.ImageSize); | |
32881 | 143 |
33555 | 144 if (!menuDrawBuffer) { |
33530 | 145 gmp_msg(MSGT_GPLAYER, MSGL_FATAL, MSGTR_NEMDB); |
33768 | 146 mplayer(MPLAYER_EXIT_GUI, EXIT_ERROR, 0); |
32881 | 147 } |
23077 | 148 |
33555 | 149 wsResizeWindow(&guiApp.menuWindow, guiApp.menu.width, guiApp.menu.height); |
150 wsResizeImage(&guiApp.menuWindow, guiApp.menu.width, guiApp.menu.height); | |
151 wsSetShape(&guiApp.menuWindow, guiApp.menu.Mask.Image); | |
152 wsVisibleWindow(&guiApp.menuWindow, wsHideWindow); | |
32881 | 153 } else |
33555 | 154 uiMenuInit(); |
32881 | 155 |
156 // reload sub window | |
23077 | 157 |
33555 | 158 if (guiApp.sub.Bitmap.Image) |
159 wsResizeImage(&guiApp.subWindow, guiApp.sub.Bitmap.Width, guiApp.sub.Bitmap.Height); | |
32881 | 160 |
33555 | 161 if (!guiApp.subWindow.isFullScreen && !guiInfo.Playing) { |
162 wsResizeWindow(&guiApp.subWindow, guiApp.sub.width, guiApp.sub.height); | |
33993 | 163 wsMoveWindow(&guiApp.subWindow, False, guiApp.sub.x, guiApp.sub.y); |
32881 | 164 } |
165 | |
33555 | 166 if (guiApp.sub.Bitmap.Image) |
167 wsConvert(&guiApp.subWindow, guiApp.sub.Bitmap.Image); | |
23077 | 168 |
33555 | 169 if (!guiInfo.Playing) { |
170 uiSubRender = 1; | |
171 wsSetBackgroundRGB(&guiApp.subWindow, guiApp.sub.R, guiApp.sub.G, guiApp.sub.B); | |
172 wsClearWindow(guiApp.subWindow); | |
173 wsPostRedisplay(&guiApp.subWindow); | |
32881 | 174 } |
175 | |
33555 | 176 // reload playbar |
32881 | 177 |
178 if (bprev) | |
33555 | 179 wsDestroyWindow(&guiApp.playbarWindow); |
32881 | 180 |
33555 | 181 uiPlaybarInit(); |
23077 | 182 |
32881 | 183 // reload main window |
184 | |
33555 | 185 free(mainDrawBuffer); |
186 mainDrawBuffer = calloc(1, guiApp.main.Bitmap.ImageSize); | |
23077 | 187 |
33555 | 188 if (!mainDrawBuffer) { |
33530 | 189 gmp_msg(MSGT_GPLAYER, MSGL_FATAL, MSGTR_NEMDB); |
33768 | 190 mplayer(MPLAYER_EXIT_GUI, EXIT_ERROR, 0); |
32881 | 191 } |
23077 | 192 |
33555 | 193 wsDestroyWindow(&guiApp.mainWindow); |
32881 | 194 |
33555 | 195 wsCreateWindow(&guiApp.mainWindow, guiApp.main.x, guiApp.main.y, guiApp.main.width, guiApp.main.height, wsNoBorder, wsShowMouseCursor | wsHandleMouseButton | wsHandleMouseMove, wsShowFrame | wsMaxSize | wsHideWindow, "MPlayer"); |
196 wsCreateImage(&guiApp.mainWindow, guiApp.main.Bitmap.Width, guiApp.main.Bitmap.Height); | |
197 wsSetShape(&guiApp.mainWindow, guiApp.main.Mask.Image); | |
198 wsSetIcon(wsDisplay, guiApp.mainWindow.WindowID, &guiIcon); | |
23077 | 199 |
33555 | 200 guiApp.mainWindow.ReDraw = (void *)uiMainDraw; |
201 guiApp.mainWindow.MouseHandler = uiMainMouseHandle; | |
202 guiApp.mainWindow.KeyHandler = uiMainKeyHandle; | |
203 guiApp.mainWindow.DandDHandler = uiDandDHandler; | |
32881 | 204 |
33555 | 205 wsXDNDMakeAwareness(&guiApp.mainWindow); |
23077 | 206 |
33555 | 207 if (!guiApp.mainDecoration) |
208 wsWindowDecoration(&guiApp.mainWindow, 0); | |
32881 | 209 |
33555 | 210 wsVisibleWindow(&guiApp.mainWindow, wsShowWindow); |
32881 | 211 mainVisible = 1; |
212 | |
33555 | 213 btnModify(evSetVolume, guiInfo.Volume); |
214 btnModify(evSetBalance, guiInfo.Balance); | |
215 btnModify(evSetMoviePosition, guiInfo.Position); | |
33978 | 216 btnSet(evFullScreen, (guiApp.subWindow.isFullScreen ? btnPressed : btnReleased)); |
23077 | 217 |
33555 | 218 wsSetLayer(wsDisplay, guiApp.mainWindow.WindowID, guiApp.subWindow.isFullScreen); |
219 wsSetLayer(wsDisplay, guiApp.menuWindow.WindowID, guiApp.subWindow.isFullScreen); | |
32881 | 220 } |
221 | |
33555 | 222 void uiSetFileName(char *dir, char *name, int type) |
32881 | 223 { |
224 if (!name) | |
225 return; | |
23077 | 226 |
32881 | 227 if (!dir) |
33740
2c02269701bd
Remove macros guiSetFilename() and guiSetDF() from interface.h.
ib
parents:
33739
diff
changeset
|
228 setdup(&guiInfo.Filename, name); |
32881 | 229 else |
33740
2c02269701bd
Remove macros guiSetFilename() and guiSetDF() from interface.h.
ib
parents:
33739
diff
changeset
|
230 setddup(&guiInfo.Filename, dir, name); |
23077 | 231 |
34064 | 232 filename = guiInfo.Filename; |
33555 | 233 guiInfo.StreamType = type; |
34064 | 234 |
33897 | 235 nfree(guiInfo.AudioFilename); |
236 nfree(guiInfo.SubtitleFilename); | |
23077 | 237 } |
238 | |
33555 | 239 void uiCurr(void) |
23077 | 240 { |
32881 | 241 plItem *curr; |
242 int stop = 0; | |
23077 | 243 |
33615
1f9a31d4f114
Replace all playback integer constants by their symbolic constants.
ib
parents:
33614
diff
changeset
|
244 if (guiInfo.Playing == GUI_PAUSE) |
32881 | 245 return; |
23077 | 246 |
33555 | 247 switch (guiInfo.StreamType) { |
32881 | 248 #ifdef CONFIG_DVDREAD |
249 case STREAMTYPE_DVD: | |
250 break; | |
32953 | 251 #endif |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
27370
diff
changeset
|
252 |
27370
14c5017f40d2
Change a bunch of video/audio-output-specific preprocessor directives from
diego
parents:
27341
diff
changeset
|
253 #ifdef CONFIG_VCD |
32881 | 254 case STREAMTYPE_VCD: |
255 break; | |
32953 | 256 #endif |
32881 | 257 |
258 default: | |
259 | |
33742
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33740
diff
changeset
|
260 curr = listSet(gtkGetCurrPlItem, NULL); |
32881 | 261 |
262 if (curr) { | |
33555 | 263 uiSetFileName(curr->path, curr->name, STREAMTYPE_FILE); |
264 uiGotoTheNext = 0; | |
32881 | 265 break; |
266 } | |
267 | |
268 return; | |
269 } | |
270 | |
271 if (stop) | |
33555 | 272 uiEventHandling(evStop, 0); |
32881 | 273 |
33615
1f9a31d4f114
Replace all playback integer constants by their symbolic constants.
ib
parents:
33614
diff
changeset
|
274 if (guiInfo.Playing == GUI_PLAY) |
33555 | 275 uiEventHandling(evPlay, 0); |
23077 | 276 } |
277 | |
33555 | 278 void uiPrev(void) |
23077 | 279 { |
32881 | 280 plItem *prev; |
281 int stop = 0; | |
282 | |
33615
1f9a31d4f114
Replace all playback integer constants by their symbolic constants.
ib
parents:
33614
diff
changeset
|
283 if (guiInfo.Playing == GUI_PAUSE) |
32881 | 284 return; |
285 | |
33555 | 286 switch (guiInfo.StreamType) { |
32881 | 287 #ifdef CONFIG_DVDREAD |
288 case STREAMTYPE_DVD: | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
27370
diff
changeset
|
289 |
33876
4789b8eed97e
Get rid of a bunch of needless or redundant guiInfo members.
ib
parents:
33874
diff
changeset
|
290 if (--guiInfo.Chapter == 0) { |
4789b8eed97e
Get rid of a bunch of needless or redundant guiInfo members.
ib
parents:
33874
diff
changeset
|
291 guiInfo.Chapter = 1; |
32881 | 292 |
33876
4789b8eed97e
Get rid of a bunch of needless or redundant guiInfo members.
ib
parents:
33874
diff
changeset
|
293 if (--guiInfo.Track <= 0) { |
4789b8eed97e
Get rid of a bunch of needless or redundant guiInfo members.
ib
parents:
33874
diff
changeset
|
294 guiInfo.Track = 1; |
32881 | 295 stop = 1; |
296 } | |
297 } | |
298 | |
299 break; | |
32953 | 300 #endif |
32881 | 301 |
27370
14c5017f40d2
Change a bunch of video/audio-output-specific preprocessor directives from
diego
parents:
27341
diff
changeset
|
302 #ifdef CONFIG_VCD |
32881 | 303 case STREAMTYPE_VCD: |
33874 | 304 if (--guiInfo.Track == 1) { |
305 guiInfo.Track = 2; | |
32881 | 306 stop = 1; |
307 } | |
308 break; | |
32953 | 309 #endif |
32881 | 310 |
311 default: | |
312 | |
33742
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33740
diff
changeset
|
313 prev = listSet(gtkGetPrevPlItem, NULL); |
32881 | 314 |
315 if (prev) { | |
33555 | 316 uiSetFileName(prev->path, prev->name, STREAMTYPE_FILE); |
317 uiGotoTheNext = 0; | |
33898 | 318 guiInfo.Track--; |
32881 | 319 break; |
320 } | |
321 | |
322 return; | |
323 } | |
324 | |
325 if (stop) | |
33555 | 326 uiEventHandling(evStop, 0); |
32881 | 327 |
33615
1f9a31d4f114
Replace all playback integer constants by their symbolic constants.
ib
parents:
33614
diff
changeset
|
328 if (guiInfo.Playing == GUI_PLAY) |
33555 | 329 uiEventHandling(evPlay, 0); |
23077 | 330 } |
331 | |
33555 | 332 void uiNext(void) |
23077 | 333 { |
32881 | 334 int stop = 0; |
335 plItem *next; | |
23077 | 336 |
33615
1f9a31d4f114
Replace all playback integer constants by their symbolic constants.
ib
parents:
33614
diff
changeset
|
337 if (guiInfo.Playing == GUI_PAUSE) |
32881 | 338 return; |
339 | |
33555 | 340 switch (guiInfo.StreamType) { |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
26458
diff
changeset
|
341 #ifdef CONFIG_DVDREAD |
32881 | 342 case STREAMTYPE_DVD: |
343 | |
33876
4789b8eed97e
Get rid of a bunch of needless or redundant guiInfo members.
ib
parents:
33874
diff
changeset
|
344 if (guiInfo.Chapter++ == guiInfo.Chapters) { |
4789b8eed97e
Get rid of a bunch of needless or redundant guiInfo members.
ib
parents:
33874
diff
changeset
|
345 guiInfo.Chapter = 1; |
32881 | 346 |
33876
4789b8eed97e
Get rid of a bunch of needless or redundant guiInfo members.
ib
parents:
33874
diff
changeset
|
347 if (++guiInfo.Track > guiInfo.Tracks) { |
4789b8eed97e
Get rid of a bunch of needless or redundant guiInfo members.
ib
parents:
33874
diff
changeset
|
348 guiInfo.Track = guiInfo.Tracks; |
32881 | 349 stop = 1; |
350 } | |
351 } | |
352 | |
353 break; | |
32953 | 354 #endif |
32881 | 355 |
27370
14c5017f40d2
Change a bunch of video/audio-output-specific preprocessor directives from
diego
parents:
27341
diff
changeset
|
356 #ifdef CONFIG_VCD |
32881 | 357 case STREAMTYPE_VCD: |
33003 | 358 |
33876
4789b8eed97e
Get rid of a bunch of needless or redundant guiInfo members.
ib
parents:
33874
diff
changeset
|
359 if (++guiInfo.Track >= guiInfo.Tracks) { |
4789b8eed97e
Get rid of a bunch of needless or redundant guiInfo members.
ib
parents:
33874
diff
changeset
|
360 stop = (guiInfo.Track > guiInfo.Tracks); |
4789b8eed97e
Get rid of a bunch of needless or redundant guiInfo members.
ib
parents:
33874
diff
changeset
|
361 guiInfo.Track = FFMAX(2, guiInfo.Tracks); |
32881 | 362 } |
33003 | 363 |
32881 | 364 break; |
32953 | 365 #endif |
32881 | 366 |
367 default: | |
368 | |
33742
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33740
diff
changeset
|
369 next = listSet(gtkGetNextPlItem, NULL); |
32881 | 370 |
371 if (next) { | |
33555 | 372 uiSetFileName(next->path, next->name, STREAMTYPE_FILE); |
373 uiGotoTheNext = 0; | |
33898 | 374 guiInfo.Track++; |
32881 | 375 break; |
376 } | |
377 | |
378 return; | |
379 } | |
380 | |
381 if (stop) | |
33555 | 382 uiEventHandling(evStop, 0); |
32881 | 383 |
33615
1f9a31d4f114
Replace all playback integer constants by their symbolic constants.
ib
parents:
33614
diff
changeset
|
384 if (guiInfo.Playing == GUI_PLAY) |
33555 | 385 uiEventHandling(evPlay, 0); |
23077 | 386 } |