Package elisa :: Package plugins :: Package good :: Package pigment :: Module pigment_input
[hide private]
[frames] | no frames]

Source Code for Module elisa.plugins.good.pigment.pigment_input

  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   
 20  import string 
 21  from elisa.base_components.input_provider import PushInputProvider 
 22  from elisa.core.input_event import * 
 23  import pgm 
 24   
25 -class PigmentInput(PushInputProvider):
26 """ 27 This class implements Pigment events support. 28 """ 29
30 - def __init__(self):
31 PushInputProvider.__init__(self) 32 self._handler_ids = [] 33 self._simple_keys = {} 34 35 keys = string.ascii_letters 36 for key in keys: 37 key_value = getattr(EventValue, 'KEY_%s' % key) 38 pgm_key = getattr(pgm.keysyms, key) 39 self._simple_keys[pgm_key] = key_value
40
41 - def bind(self):
42 signal_id = self.viewport.connect('delete-event', 43 self._process_delete_event) 44 self._handler_ids.append(signal_id) 45 signal_id = self.viewport.connect('key-press-event', 46 self._process_press_event) 47 self._handler_ids.append(signal_id) 48 signal_id = self.viewport.connect('key-release-event', 49 self._process_release_event) 50 self._handler_ids.append(signal_id)
51
52 - def unbind(self):
53 for signal_id in self._handler_ids: 54 self.viewport.disconnect(signal_id) 55 56 # releasing our reference to the viewport 57 del self.viewport
58
59 - def _process_delete_event(self, viewport, event):
60 elisa_event = InputEvent(EventSource.OTHER, EventType.OTHER, 61 EventAction.EXIT) 62 elisa_event.origin = self.origin 63 self.input_manager.process_event(elisa_event, self.path)
64
65 - def _process_press_event(self, viewport, event):
66 elisa_event = self._create_event_with_type(event, EventType.KEY_DOWN) 67 self.input_manager.process_event(elisa_event, self.path)
68
69 - def _process_release_event(self, viewport, event):
70 elisa_event = self._create_event_with_type(event, EventType.KEY_UP) 71 self.input_manager.process_event(elisa_event, self.path)
72
73 - def _process_scroll_event(self, viewport, event):
74 if event.direction == pgm.SCROLL_DOWN: 75 elisa_event = InputEvent(EventSource.MOUSE, EventType.OTHER, 76 EventAction.GO_LEFT) 77 elif event.direction == pgm.SCROLL_UP: 78 elisa_event = InputEvent(EventSource.MOUSE, EventType.OTHER, 79 EventAction.GO_RIGHT) 80 81 elisa_event.origin = self.origin 82 self.input_manager.process_event(elisa_event, self.path)
83
84 - def _process_button_press_event(self, viewport, event):
85 if event.button == pgm.BUTTON_LEFT: 86 elisa_event = InputEvent(EventSource.MOUSE, EventType.OTHER, 87 EventAction.GO_DOWN) 88 elif event.button == pgm.BUTTON_RIGHT: 89 elisa_event = InputEvent(EventSource.MOUSE, EventType.OTHER, 90 EventAction.GO_UP) 91 elif event.button == pgm.BUTTON_MIDDLE: 92 elisa_event = InputEvent(EventSource.MOUSE, EventType.OTHER, 93 EventAction.OK) 94 95 elisa_event.origin = self.origin 96 self.input_manager.process_event(elisa_event, self.path)
97
98 - def _create_event_with_type(self, event, event_type):
99 elisa_event = None 100 101 if event_type == EventType.KEY_DOWN: 102 # TODO: support more keys 103 keyval = event.keyval 104 if keyval == pgm.keysyms.Up: 105 elisa_event = InputEvent(EventSource.KEYBOARD, 106 EventType.KEY_DOWN, 107 EventAction.GO_UP) 108 elif keyval == pgm.keysyms.Down: 109 elisa_event = InputEvent(EventSource.KEYBOARD, 110 EventType.KEY_DOWN, 111 EventAction.GO_DOWN) 112 elif keyval == pgm.keysyms.Right: 113 elisa_event = InputEvent(EventSource.KEYBOARD, 114 EventType.KEY_DOWN, 115 EventAction.GO_RIGHT) 116 elif keyval == pgm.keysyms.Left: 117 elisa_event = InputEvent(EventSource.KEYBOARD, 118 EventType.KEY_DOWN, 119 EventAction.GO_LEFT) 120 elif keyval == pgm.keysyms.Return: 121 elisa_event = InputEvent(EventSource.KEYBOARD, 122 EventType.KEY_DOWN, 123 EventAction.OK) 124 elif keyval == pgm.keysyms.BackSpace or \ 125 keyval == pgm.keysyms.space: 126 elisa_event = InputEvent(EventSource.KEYBOARD, 127 EventType.KEY_DOWN, 128 EventAction.MENU) 129 elif keyval == pgm.keysyms.f: 130 elisa_event = InputEvent(EventSource.KEYBOARD, 131 EventType.KEY_DOWN, 132 EventAction.TOGGLE_FULLSCREEN, 133 EventValue.KEY_f) 134 elif keyval == pgm.keysyms.q: 135 elisa_event = InputEvent(EventSource.KEYBOARD, 136 EventType.KEY_DOWN, 137 EventAction.EXIT, 138 EventValue.KEY_q) 139 elif keyval == pgm.keysyms.Escape: 140 elisa_event = InputEvent(EventSource.KEYBOARD, 141 EventType.KEY_DOWN, 142 EventAction.EXIT) 143 elif keyval == pgm.keysyms.s: 144 elisa_event = InputEvent(EventSource.KEYBOARD, 145 EventType.KEY_DOWN, 146 EventAction.STOP, 147 EventValue.KEY_s) 148 elif keyval == pgm.keysyms.x: 149 elisa_event = InputEvent(EventSource.KEYBOARD, 150 EventType.KEY_DOWN, 151 EventAction.PREVIOUS, 152 EventValue.KEY_x) 153 elif keyval == pgm.keysyms.c: 154 elisa_event = InputEvent(EventSource.KEYBOARD, 155 EventType.KEY_DOWN, 156 EventAction.NEXT, 157 EventValue.KEY_c) 158 elif keyval == pgm.keysyms.v: 159 elisa_event = InputEvent(EventSource.KEYBOARD, 160 EventType.KEY_DOWN, 161 EventAction.SEEK_BACKWARD, 162 EventValue.KEY_v) 163 elif keyval == pgm.keysyms.b: 164 elisa_event = InputEvent(EventSource.KEYBOARD, 165 EventType.KEY_DOWN, 166 EventAction.SEEK_FORWARD, 167 EventValue.KEY_b) 168 169 elif keyval in self._simple_keys: 170 event_value = self._simple_keys[keyval] 171 elisa_event = InputEvent(EventSource.KEYBOARD, 172 EventType.KEY_DOWN, 173 EventAction.NONE, 174 event_value) 175 else: 176 self.info('Unrecognized key received: %s', event) 177 else: 178 self.info('Unrecognized key received: %s', event) 179 180 if elisa_event: 181 elisa_event.origin = self.origin 182 183 return elisa_event
184