Package elisa :: Package plugins :: Package poblesec :: Package base :: Module preview_list

Source Code for Module elisa.plugins.poblesec.base.preview_list

  1  # -*- coding: utf-8 -*- 
  2  # Moovida - Home multimedia server 
  3  # Copyright (C) 2006-2009 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 Moovida with Fluendo's plugins. 
 11  # 
 12  # The GPL part of Moovida is also available under a commercial licensing 
 13  # agreement from Fluendo. 
 14  # See "LICENSE.Moovida" in the root directory of this distribution package 
 15  # for details on that license. 
 16   
 17  from elisa.core.utils import locale_helper 
 18  from elisa.core.input_event import EventValue 
 19  from elisa.core.utils.cancellable_defer import CancelledError 
 20   
 21  from elisa.plugins.pigment.widgets.list_vertical import ListVertical 
 22  from elisa.plugins.pigment.widgets.box import HBox, ALIGNMENT 
 23   
 24  from elisa.plugins.poblesec.base.list import BaseListController 
 25  from elisa.plugins.poblesec.widgets.menu_item import MenuItemWidget, \ 
 26                                                       DoubleLineMenuItemWidget 
 27  from elisa.plugins.poblesec.widgets.button import PanelButton 
 28  from elisa.plugins.poblesec.widgets.widget_with_actions import WidgetWithActions 
 29   
 30   
31 -class Shortcut(PanelButton):
32 pass
33 34
35 -class ListItemWidgetWithActions(WidgetWithActions):
36 """ 37 DOCME 38 """
39 - def _create_widgets(self, *args):
40 super(ListItemWidgetWithActions, self)._create_widgets(*args) 41 42 self.container = HBox() 43 self.container.navigable = True 44 self.add(self.container, forward_signals=False) 45 self.set_focus_proxy(self.container) 46 47 #FIXME use CSS style 48 self.container.alignment = ALIGNMENT.START 49 self.container.visible = True 50 51 self.container.pack_start(self.item_widget) 52 self.item_widget.visible = True 53 54 self.update_style_properties(self.style.get_items())
55
56 - def show_actions(self, actions_widget):
57 self.container.pack_start(actions_widget)
58
59 - def hide_actions(self, actions_widget):
60 self.container.remove(actions_widget)
61 62
63 -class SimpleListController(BaseListController):
64 65 list_widget = ListVertical 66 item_widget_cls = None 67 item_widget_kwargs = {} 68
69 - def __init__(self):
70 super(SimpleListController, self).__init__() 71 self._delayed_actions = None
72
73 - def nodes_setup(self):
74 item_widget_name = self._view_mode.name 75 widget_kwargs = {'contextual_actions': self._contextual_actions, 76 'item_widget_cls': self.item_widget_cls, 77 'item_widget_name': item_widget_name, 78 'item_widget_kwargs': self.item_widget_kwargs} 79 self.nodes = self.list_widget(self.node_widget, visible_range_size=10, 80 widget_kwargs=widget_kwargs) 81 self.nodes.start_offset = 1 82 self.nodes.set_name("vertical") 83 self.nodes.visible = True 84 85 self.widget.set_focus_proxy(self.nodes)
86
87 - def fastscroller_setup(self):
88 self.fastscroller = ListVertical(Shortcut, visible_range_size=10) 89 self.fastscroller.start_offset = 1 90 self.fastscroller.render_empty_items = True 91 self.fastscroller.set_name("fastscroller") # FIXME: remove name 92 self.fastscroller.visible = True
93
94 - def layout_components(self):
95 self.components_container = HBox() 96 self.components_container.set_name('previewlist_components_container') 97 self.components_container.navigable = True 98 self.components_container.visible = True 99 self.widget.add(self.components_container) 100 101 if self.fastscroller is not None: 102 self.components_container.pack_start(self.fastscroller) 103 self.components_container.pack_end(self.nodes) 104 105 # swallow events to create a 'dead end' 106 self.components_container.add_navigation_rule(self.fastscroller, 107 EventValue.KEY_GO_UP, 108 None) 109 self.components_container.add_navigation_rule(self.fastscroller, 110 EventValue.KEY_GO_DOWN, 111 None) 112 self.components_container.add_navigation_rule(self.nodes, 113 EventValue.KEY_GO_UP, 114 None) 115 self.components_container.add_navigation_rule(self.nodes, 116 EventValue.KEY_GO_DOWN, 117 None)
118
119 - def shortcut_renderer(self, shortcut, widget):
120 # Default implementation 121 widget.text.label = shortcut
122 123
124 -class PreviewListController(SimpleListController):
125 pass
126 127 153 label_deferred = self._view_mode.get_label(item) 154 label_deferred.addCallbacks(got_label, _failure) 155 self.register_deferred(widget, label_deferred) 156 157 # Set the default image of the widget 158 artwork_box = widget.item_widget.artwork_box 159 artwork_box.icon.clear() 160 artwork_box.thumbnail.clear() 161 default_image = self._view_mode.get_default_image(item) 162 if default_image: 163 self.frontend.load_from_theme(default_image, artwork_box.icon) 164 165 # Set the real image of the widget 166 theme = self.frontend.get_theme() 167 image_deferred = self._view_mode.get_image(item, theme) 168 if image_deferred is not None: 169 def got_thumbnail(thumbnail_file): 170 if thumbnail_file is not None: 171 if not isinstance(thumbnail_file, unicode): 172 thumbnail_file = thumbnail_file.decode(locale_helper.system_encoding()) 173 artwork_box.icon.clear() 174 artwork_box.thumbnail.set_from_file(thumbnail_file, 128) 175 176 self.register_deferred(widget, image_deferred) 177 image_deferred.addCallbacks(got_thumbnail, _failure) 178 179 # Set info glyphs of the widget 180 if hasattr(item, 'static_glyphs'): 181 widget.item_widget.static_glyphs = item.static_glyphs 182 if hasattr(item, 'dynamic_glyphs'): 183 widget.item_widget.dynamic_glyphs = item.dynamic_glyphs 184 185 188 191 192
193 -class DoubleLineMenuItemPreviewListController(MenuItemPreviewListController):
194 195 """ 196 Preview list controller tied to the double line menu item widget. 197 """ 198 199 item_widget_cls = DoubleLineMenuItemWidget 200
201 - def node_renderer(self, item, widget):
202 super(DoubleLineMenuItemPreviewListController, self).node_renderer(item, widget) 203 204 def _failure(failure): 205 # Swallow errbacks only when the deferred has been cancelled 206 failure.trap(CancelledError)
207 208 # Render the sublabel of the widget 209 widget.item_widget.sublabel.visible = False 210 def got_sublabel(text): 211 widget.item_widget.sublabel.label = text 212 widget.item_widget.sublabel.visible = True
213 sublabel_deferred = self._view_mode.get_sublabel(item) 214 sublabel_deferred.addCallbacks(got_sublabel, _failure) 215 self.register_deferred(widget, sublabel_deferred) 216