Home | Trees | Indices | Help |
---|
|
1 # -*- coding: utf-8 -*- 2 # Elisa - Home multimedia server 3 # Copyright (C) 2006-2008 Fluendo Embedded S.L. (www.fluendo.com). 4 # All rights reserved. 5 # 6 # This file is available under one of two license agreements. 7 # 8 # This file is licensed under the GPL version 3. 9 # See "LICENSE.GPL" in the root of this distribution including a special 10 # exception to use Elisa with Fluendo's plugins. 11 # 12 # The GPL part of Elisa is also available under a commercial licensing 13 # agreement from Fluendo. 14 # See "LICENSE.Elisa" in the root directory of this distribution package 15 # for details on that license. 16 17 18 __maintainer__ = 'Lionel Martin <lionel@fluendo.com>' 19 __maintainer2__ = 'Philippe Normand <philippe@fluendo.com>' 20 21 22 from elisa.base_components.view import View 23 from elisa.core import player, common, plugin_registry 24 25 from elisa.extern.translation import gettexter, N_, Translatable 26 T_ = gettexter('elisa-gtk-frontend') 27 28 import pygtk 29 pygtk.require('2.0') 30 import gtk 31 32 import pygst 33 pygst.require('0.10') 34 import gst 35 import gst.interfaces 36 import platform 37 3840 """ 41 Code generously donated by Edward Hervey 42 GTK Widget properly displaying GStreamer video sink 43 """ 44 45 __gsignals__ = {} 4682 83 84 PlayerViewClass = plugin_registry.get_component_class('base:player_view') 8548 gtk.DrawingArea.__init__(self) 49 self.videosink = None 50 self.have_set_xid = False 51 self.can_set_xid = False 52 self.unset_flags(gtk.DOUBLE_BUFFERED) 53 self.unset_flags(gtk.SENSITIVE)54 5557 """ 'expose-event' override """ 58 if self.videosink: 59 if not self.have_set_xid and self.can_set_xid: 60 self.set_xwindow_id() 61 elif self.have_set_xid: 62 self.videosink.expose() 63 return False64 6567 """ set the widget's XID on the configured videosink. """ 68 if not self.videosink: 69 return 70 if self.have_set_xid: 71 return 72 73 if self.window: 74 if platform.system() == 'Windows': 75 xid = self.window.handle 76 else: 77 xid = self.window.xid 78 79 self.videosink.set_xwindow_id(xid) 80 self.have_set_xid = True 81 self.videosink.expose()87 """ 88 This class implements gtk list view support 89 """ 90 supported_controllers = ('base:player_controller',) 9121593 PlayerViewClass.__init__(self) 94 self.context_path = 'gtk:gtk_context' 95 96 self.vbox = gtk.VBox() 97 self.videopanel = ViewerWidget() 98 self.videopanel.set_size_request(200, 200) 99 self.hbox = gtk.HBox() 100 self.vbox.pack_start(self.videopanel, expand=False) 101 self.vbox.pack_end(self.hbox, expand=False) 102 103 translator = common.application.translator 104 label = translator.translateTranslatable(T_(N_("no media"))) 105 self.uri_widget = gtk.Label(label) 106 107 self.state_widget = gtk.combo_box_new_text() 108 for state in player.STATES[1:4]: 109 self.state_widget.append_text(str(state)) 110 self.state_widget.connect("changed", self._gtk_state_changed) 111 112 self.hbox.pack_start(self.uri_widget) 113 114 if platform.system() == 'Windows': 115 vsink = 'directdrawsink' 116 else: 117 vsink = 'ximagesink' 118 119 self._video_sink = gst.element_factory_make(vsink) 120 self.player.video_sink = self._video_sink 121 self.videopanel.videosink = self._video_sink 122 123 self.context_handle = self.vbox124 125127 self.videopanel.have_set_xid = False 128 self.videopanel.can_set_xid = True 129 self.videopanel.set_xwindow_id()130132 # FIXME: may be redirected to the controller instead 133 new_state = widget.get_active_text() 134 next_state = None 135 136 if new_state == str(player.STATES.PLAYING): 137 next_state = player.STATES.PLAYING 138 elif new_state == str(player.STATES.PAUSED): 139 next_state = player.STATES.PAUSED 140 elif new_state == str(player.STATES.STOPPED): 141 next_state = player.STATES.STOPPED 142 143 if not next_state: 144 return 145 146 old_state = self.player.state 147 if old_state != next_state: 148 self.controller.model.state = next_state149 150152 PlayerViewClass.attribute_set(self, origin, key, old_value, new_value) 153 if key == 'state': 154 if new_value == player.STATES.PLAYING: 155 self._play() 156 elif new_value == player.STATES.PAUSED: 157 self._pause() 158 elif new_value == player.STATES.STOPPED: 159 self._stop() 160 if key == 'uri': 161 self.player.uri = new_value 162 label = new_value.label 163 if isinstance(label, Translatable): 164 translator = common.application.translator 165 label = translator.translateTranslatable(label, 166 self.frontend.languages) 167 self.uri_widget.set_text(label) 168 169 self._update_combo()170172 PlayerViewClass.controller_changed(self, old_controller, new_controller) 173 174 if self.controller.uri != None: 175 label = self.controller.uri.label 176 if isinstance(label, Translatable): 177 translator = common.application.translator 178 label = translator.translateTranslatable(label, 179 self.frontend.languages) 180 self.uri_widget.set_text(label) 181 182 state = self.controller.state 183 if state == player.STATES.PLAYING: 184 self._play() 185 elif state == player.STATES.PAUSED: 186 self._pause() 187 elif state == player.STATES.STOPPED: 188 self._stop() 189 190 self._update_combo()191 194 195197 if self.state_widget not in self.hbox.get_children(): 198 self.state_widget.size = (100,10) 199 self.hbox.pack_end(self.state_widget) 200 self.state_widget.show()201203 self._update_combo() 204 self._init_xwindow_id() 205 self.state_widget.set_active(player.STATES.index(player.STATES.PAUSED)-1)206208 self._update_combo() 209 self.state_widget.set_active(player.STATES.index(player.STATES.STOPPED)-1)210212 self._update_combo() 213 self._init_xwindow_id() 214 self.state_widget.set_active(player.STATES.index(player.STATES.PLAYING)-1)
Home | Trees | Indices | Help |
---|
Generated by Epydoc 3.0beta1 on Wed Jan 16 19:11:05 2008 | http://epydoc.sourceforge.net |