Changeset 1909
- Timestamp:
- 23/11/08 05:28:15 (7 weeks ago)
- svm:headrev:
cc3e1ea1-1e01-0410-8d68-8b121e83a9d5:11191- Location:
- freevo/src
- Files:
-
- 12 modified
-
dialog/__init__.py (modified) (2 diffs)
-
dialog/dialogs.py (modified) (2 diffs)
-
dialog/display.py (modified) (4 diffs)
-
dialog/widgets.py (modified) (6 diffs)
-
osd.py (modified) (4 diffs)
-
plugin.py (modified) (1 diff)
-
skins/osd/skin.py (modified) (2 diffs)
-
tv/plugins/ivtv_xine_tv.py (modified) (3 diffs)
-
tv/plugins/mplayer.py (modified) (3 diffs)
-
tv/plugins/xine.py (modified) (3 diffs)
-
video/plugins/mplayer.py (modified) (5 diffs)
-
video/plugins/xine.py (modified) (7 diffs)
Legend:
- Unmodified
- Added
- Removed
-
freevo/src/dialog/__init__.py
r1901 r1909 124 124 return _display 125 125 126 def is_dialog_supported(): 127 """ 128 Retrieve whether the current display supports graphics dialogs or not. 129 @return: True if the display supports graphics dialogs, False if not. 130 """ 131 if _display: 132 return _display.supports_dialogs 133 134 return False 135 136 def is_dialog_showing(): 137 """ 138 Retrieve whether a dialog is currently being displayed. 139 140 @return: True if a dialog is being displayed, False if not. 141 """ 142 if _display and _display.supports_dialogs: 143 return _display.current_dialog != None 144 145 return False 126 146 127 147 def show_volume(level, muted, channel=None): … … 183 203 return _display.handle_event(event) 184 204 return False 205 206 def handle_mouse_event(event): 207 if _display and hasattr(_display, 'handle_mouse_event'): 208 _display.handle_mouse_event(event) -
freevo/src/dialog/dialogs.py
r1901 r1909 40 40 """ 41 41 import time 42 42 import pygame.event 43 from pygame.locals import * 43 44 import config 44 45 import rc … … 383 384 384 385 return handled 386 387 def handle_mouse_event(self, evt): 388 widget = self.skin.get_widget_at(evt.pos) 389 390 if widget is None: 391 return 392 new_pos = (evt.pos[0] - self.skin.position[0], evt.pos[1] - self.skin.position[1]) 393 evt_dict = {'pos':new_pos} 394 if evt.type == MOUSEMOTION: 395 evt_dict['rel'] = evt.rel 396 evt_dict['buttons'] = evt.buttons 397 if evt.type in (MOUSEBUTTONDOWN , MOUSEBUTTONUP): 398 evt_dict['button'] = evt.button 399 evt = pygame.event.Event(evt.type, evt_dict) 400 if widget in self.widgets: 401 widget_model = self.widgets[widget] 402 if evt.type == MOUSEMOTION: 403 widget_model.set_active(True) 404 if hasattr(widget_model, 'handle_mouse_event'): 405 widget_model.handle_mouse_event(evt) 385 406 386 407 def get_info_dict(self): -
freevo/src/dialog/display.py
r1901 r1909 53 53 54 54 import dialogs 55 56 from pygame.locals import * 55 57 56 58 class Display(object): … … 218 220 return super(GraphicsDisplay,self).handle_event(evt) 219 221 222 def handle_mouse_event(self, evt): 223 if self.current_dialog and hasattr(self.current_dialog, 'handle_mouse_event'): 224 self.current_dialog.handle_mouse_event(evt) 225 226 220 227 def show_volume(self, level, muted, channel=None): 221 228 if self.volume_dialog is None: … … 248 255 249 256 now = time.time() 257 250 258 left = self.current_time_details[1] - (now - self.current_time_details[0]) 251 _debug_('Queuing current dialog, time left %f' % left) 252 self.waiting[self.current_dialog.priority] = (self.current_dialog, left, True) 253 # We don't finish the dialog as we will be displaying it again when 254 # the higher priority dialog closes. 259 if left > 0.0: 260 _debug_('Queuing current dialog, time left %f' % left) 261 self.waiting[self.current_dialog.priority] = (self.current_dialog, left, True) 262 # We don't finish the dialog as we will be displaying it again when 263 # the higher priority dialog closes. 264 else: 265 # No time left on the clock for this dialog so finish it. 266 self.current_dialog.finish() 255 267 self.hide_dialog_timer.stop() 256 268 self.current_dialog = None … … 304 316 self.hide_image() 305 317 _debug_('Closing dialog priority %s' % priority) 306 # Now check lower priority waiting queue for 318 # Now check lower priority waiting queue for any dialogs waiting to be displayed 307 319 if priority == dialogs.Dialog.HIGH_PRIORITY: 308 320 priority = dialogs.Dialog.NORMAL_PRIORITY -
freevo/src/dialog/widgets.py
r1901 r1909 37 37 """ 38 38 import kaa 39 from pygame.locals import * 39 40 40 41 class WidgetModel(object): … … 141 142 return super(ButtonModel, self).handle_event(event) 142 143 143 def press(self): 144 def handle_mouse_event(self, event): 145 if event.type == MOUSEBUTTONDOWN: 146 self.press(False) 147 148 elif event.type == MOUSEBUTTONUP: 149 self.__unpress() 150 151 152 def press(self, keyboard=True): 144 153 """ 145 154 Press the button. … … 147 156 self.pressed = True 148 157 self.redraw() 149 self.pressed_timer.start(0.2) 158 if keyboard: 159 self.pressed_timer.start(0.2) 150 160 151 161 def __unpress(self): … … 309 319 return super(MenuModel, self).handle_event(event) 310 320 321 def handle_mouse_event(self, event): 322 if event.type == MOUSEMOTION: 323 y = event.pos[1] - self.position[1] 324 size_per_item = self.size[1] / self.items_per_page 325 scroll_height = size_per_item / 4 326 if y <= scroll_height and self.offset >= 1: 327 self.offset -= 1 328 self.__update_page() 329 self.redraw() 330 if y >= (self.size[1] - scroll_height) and (self.offset + self.items_per_page) < len(self.items): 331 self.offset += 1 332 self.__update_page() 333 self.redraw() 334 335 idx = (y / size_per_item) + self.offset 336 self.items[self.active_item].active = False 337 self.active_item = idx 338 self.items[self.active_item].active = True 339 self.redraw() 340 if event.type == MOUSEBUTTONDOWN or event.type == MOUSEBUTTONUP: 341 self.items[self.active_item].handle_mouse_event(event) 342 343 311 344 def activate_item(self, item): 312 345 """ … … 360 393 self.redraw() 361 394 362 def layout(self, items_per_page ):395 def layout(self, items_per_page, position, size): 363 396 """ 364 397 Called by the skin to layout this menu. 365 398 @param items_per_page: The number of items that are to be displayed on a page. 366 399 """ 400 self.position = position 401 self.size = size 367 402 self.offset = 0 368 403 self.active_item = 0 … … 448 483 self.redraw() 449 484 450 def press(self ):485 def press(self, keyboard=True): 451 486 self.set_selected(not self.selected) 452 487 -
freevo/src/osd.py
r1900 r1909 47 47 import rc 48 48 import util 49 49 import dialog 50 50 51 51 if __freevo_app__ == 'main': … … 497 497 if config.SYS_USE_MOUSE: 498 498 if event.type == MOUSEMOTION: 499 if dialog.is_dialog_showing(): 500 dialog.handle_mouse_event(event) 501 # Swallow all mouse events if a dialog is showing even if not over a widget. 502 continue 499 503 app = self.focused_app() 500 504 # Menu … … 520 524 521 525 if event.type == MOUSEBUTTONDOWN: 526 if dialog.is_dialog_showing(): 527 dialog.handle_mouse_event(event) 528 # Swallow all mouse events if a dialog is showing even if not over a widget. 529 continue 522 530 app = self.focused_app() 523 531 # Menu … … 565 573 elif event.button == 3: 566 574 app.destroy() 575 576 if event.type == MOUSEBUTTONUP: 577 if dialog.is_dialog_showing(): 578 dialog.handle_mouse_event(event) 579 # Swallow all mouse events if a dialog is showing even if not over a widget. 580 continue 567 581 568 582 if event.type == KEYDOWN: -
freevo/src/plugin.py
r1790 r1909 148 148 149 149 def poll_wrapper(self): 150 if self.poll_menu_only and rc.app(): 150 import skin 151 if self.poll_menu_only and not skin.active(): 151 152 return 152 153 self.real_poll() -
freevo/src/skins/osd/skin.py
r1900 r1909 98 98 def add(self, obj): 99 99 self.objects.append(obj) 100 101 def get_widget_at(self, pos): 102 if pos[0] > self.position[0] and pos[0] < self.position[0] + self.size[0] and \ 103 pos[1] > self.position[1] and pos[1] < self.position[1] + self.size[1]: 104 x = pos[0] - self.position[0] 105 y = pos[1] - self.position[1] 106 for obj in self.objects: 107 if isinstance(obj, OSDWidget): 108 if x > obj.pos[0] and x < obj.pos[0] + obj.size[0] and \ 109 y > obj.pos[1] and y < obj.pos[1] + obj.size[1]: 110 return obj.name 111 return None 100 112 101 113 … … 516 528 def render_widget(self, image, model): 517 529 if self.first_render: 518 model.layout(self.items_per_page )530 model.layout(self.items_per_page, self.pos, self.size) 519 531 520 532 -
freevo/src/tv/plugins/ivtv_xine_tv.py
r1679 r1909 48 48 import tv.epg_xmltv as epg 49 49 import util.tv_util as tvutil 50 51 import dialog 52 from dialog.display import AppTextDisplay 50 53 51 54 from event import * … … 342 345 343 346 self.tuner.SetChannelByName(channel, True) 347 dialog.enable_overlay_display(AppTextDisplay(self.xine.ShowMessage)) 344 348 345 349 _debug_('Started %r app' % self.mode) … … 349 353 """ Stop the xine player """ 350 354 _debug_('XineIvtv.Stop()', 1) 355 dialog.disable_overlay_display() 351 356 confirmstop_time = int(time.time()) 352 357 # note: the OSD msg is displayed for 5 seconds -
freevo/src/tv/plugins/mplayer.py
r1890 r1909 42 42 import tv.ivtv as ivtv 43 43 import plugin 44 import dialog 45 from dialog.display import AppTextDisplay 46 44 47 45 48 … … 283 286 mixer.setPcmVolume(mixer_vol) 284 287 288 dialog.enable_overlay_display(AppTextDisplay(self.show_message)) 285 289 _debug_('%s: started %s app' % (time.time(), self.mode)) 286 290 … … 417 421 418 422 return False 423 424 def show_message(self, message): 425 self.app.write('osd_show_text "%s"\n' % message) -
freevo/src/tv/plugins/xine.py
r1537 r1909 42 42 import util 43 43 import osd 44 44 import dialog 45 from dialog.display import AppTextDisplay 45 46 from tv.channels import FreevoChannels 46 47 … … 144 145 145 146 self.app = childapp.ChildApp2(command) 147 dialog.enable_overlay_display(AppTextDisplay(self.ShowMessage)) 146 148 return None 147 149 … … 154 156 self.app.stop('quit\n') 155 157 rc.app(None) 158 dialog.disable_overlay_display() 156 159 157 160 if not channel_change: -
freevo/src/video/plugins/mplayer.py
r1885 r1909 39 39 import rc # The RemoteControl class. 40 40 import plugin 41 import dialog 42 from dialog.display import AppTextDisplay 41 43 42 44 from event import * … … 360 362 rc.app(self) 361 363 self.app = MPlayerApp(command, self) 364 dialog.enable_overlay_display(AppTextDisplay(self.show_message)) 362 365 return None 363 366 … … 375 378 self.app.stop('quit\n') 376 379 rc.app(None) 380 dialog.disable_overlay_display() 377 381 self.app = None 378 382 … … 487 491 488 492 if event == OSD_MESSAGE: 489 self. app.write('osd_show_text "%s"\n' % event.arg);493 self.show_message(event.arg) 490 494 return True 491 495 … … 493 497 return self.item.eventhandler(event) 494 498 499 def show_message(self, message): 500 self.app.write('osd_show_text "%s"\n' % message); 495 501 496 502 def reset_seek(self): -
freevo/src/video/plugins/xine.py
r1638 r1909 50 50 import plugin 51 51 52 import dialog 53 from dialog.display import AppTextDisplay 52 54 53 55 class PluginInterface(plugin.Plugin): … … 98 100 self.app = None 99 101 self.plugins = [] 102 self.paused = False 100 103 101 104 self.command = [ '--prio=%s' % config.MPLAYER_NICE ] + \ … … 215 218 216 219 self.app = XineApp(command, self) 220 dialog.enable_overlay_display(AppTextDisplay(self.ShowMessage)) 217 221 return None 218 222 … … 243 247 self.app.stop('quit\n') 244 248 rc.app(None) 249 dialog.disable_overlay_display() 245 250 self.app = None 246 251 … … 260 265 261 266 if event == PAUSE or event == PLAY: 267 self.paused = not self.paused 268 dialog.show_play_state(self.paused and dialog.PLAY_STATE_PAUSE or dialog.PLAY_STATE_PLAY, None) 262 269 self.app.write('pause\n') 263 270 return True … … 272 279 action='SeekRelative-' 273 280 pos = 0 - pos 281 dialog.show_play_state(dialog.PLAY_STATE_SEEK_BACK, None) 274 282 else: 275 283 action='SeekRelative+' 284 dialog.show_play_state(dialog.PLAY_STATE_SEEK_FORWARD, None) 276 285 if pos <= 15: 277 286 pos = 15 … … 384 393 return True 385 394 386 if event == OSD_MESSAGE:387 self.ShowMessage(event.arg)388 return True389 390 395 # nothing found? Try the eventhandler of the object who called us 391 396 return self.item.eventhandler(event)
