Package elisa :: Package plugins :: Package bad :: Package gtk_frontend :: Module gtk_node_view
[hide private]
[frames] | no frames]

Source Code for Module elisa.plugins.bad.gtk_frontend.gtk_node_view

  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 pygtk 
 21  pygtk.require('2.0') 
 22  import gtk 
 23   
 24  from elisa.extern.translation import Translatable 
 25   
 26  from elisa.base_components.controller import Controller 
 27  from elisa.core import plugin_registry, common 
 28  NodeViewClass = plugin_registry.get_component_class('base:node_view') 
 29   
 30   
31 -class GtkNodeView(NodeViewClass):
32 """ 33 This class implements gtk node view support 34 used by gtk tree view 35 """ 36 37 supported_controllers = ('base:node_controller', 'poblenou:node_controller') 38
39 - def __init__(self):
40 NodeViewClass.__init__(self) 41 self.context_path = 'gtk:gtk_context' 42 self.load_more_string = 'Downloading data...' 43 self.iter = None
44
45 - def _get_fake_iter_node(self):
46 if isinstance(self.parent, GtkNodeView): 47 parent_iter = self.parent.iter 48 else: 49 parent_iter = None 50 51 treemodel = self.root.treeview.get_model() 52 first_iter = treemodel.iter_children(parent_iter) 53 54 if first_iter == None: 55 return None 56 57 first_iter_text = treemodel.get_value(first_iter, 0) 58 if first_iter_text == self.load_more_string: 59 return first_iter 60 return None
61 62
63 - def create_node(self, controller, position):
64 treeview = self.root.treeview 65 treemodel = treeview.get_model() 66 67 treeview.connect("row-expanded", self._gtk_row_expanded) 68 treeview.connect("row-collapsed", self._gtk_row_collapsed) 69 treeview.connect("row-activated", self._gtk_row_activated) 70 71 if isinstance(self.parent, GtkNodeView): 72 parent_iter = self.parent.iter 73 else: 74 parent_iter = None 75 76 fake_iter = self._get_fake_iter_node() 77 label = controller.model.text 78 if isinstance(label, Translatable): 79 translator = common.application.translator 80 label = translator.translateTranslatable(label, 81 self.frontend.languages) 82 83 if fake_iter: 84 treemodel.set_value(fake_iter, 0, label) 85 self.iter = fake_iter 86 else: 87 self.iter = treemodel.insert(parent_iter, position, [label]) 88 89 if controller.model.has_children: 90 treemodel.insert(self.iter, 0, [self.load_more_string])
91 92
93 - def child_view_creating(self, view, controller, position):
96 97
98 - def removed(self, elements, position):
99 treemodel = self.root.treeview.get_model() 100 for controller in elements: 101 child_view = self[position] 102 print "remove %r view in %r (position %r)" % (child_view.controller.model.text, self.controller.model.text, position) 103 treemodel.remove(child_view.iter) 104 NodeViewClass.removed(self, elements, position)
105 106
107 - def modified(self, key, value):
108 pass
109 110
111 - def dirtied(self):
112 pass
113 114
115 - def attribute_set(self, origin, key, old_value, new_value):
116 #if key not in ('hover_delayed'): 117 # print "%s : %s=%s"%(self.controller.model.text, key, new_value) 118 if key == 'expanded': 119 self._expand(new_value) 120 if key == 'current_index': 121 self.root.select_from_view(self[new_value]) 122 if key == 'selected': 123 if new_value == True: 124 self._expand(True) 125 index = self.controller.current_index 126 self.root.select_from_view(self[index])
127
128 - def _expand(self, expand):
129 #expand = True, expand the none, if not, collapse it. 130 treeview = self.root.treeview 131 treemodel = treeview.get_model() 132 if self.iter: 133 tree_path = treemodel.get_path(self.iter) 134 if expand == True: 135 treeview.expand_row(tree_path, False) 136 else: 137 treeview.collapse_row(tree_path)
138 139 140
141 - def _gtk_row_expanded(self, treeview, iter, tree_path):
142 treemodel = treeview.get_model() 143 if treemodel.get_path(iter) == treemodel.get_path(self.iter): 144 # FIXME: this cannot be done in the view but has to be done in the 145 # controller 146 self.controller.model.activity.loadmore(self.controller.model) 147 self.controller.expanded = True
148 149
150 - def _gtk_row_collapsed(self, treeview, iter, tree_path):
151 treemodel = treeview.get_model() 152 if treemodel.get_path(iter) == treemodel.get_path(self.iter): 153 self.controller.expanded = False
154 155
156 - def _gtk_row_activated(self, treeview, path, view_column):
157 treemodel = treeview.get_model() 158 if path == treemodel.get_path(self.iter): 159 # FIXME: this cannot be done in the view but has to be done in the 160 # controller 161 self.debug("action callback called on %r" % self.controller.model.text) 162 if callable(self.controller.model.activate_action): 163 self.controller.model.activate_action(self.controller)
164 165
166 - def get_path(self):
167 path = [self.parent.controller.index(self.controller)] 168 if isinstance(self.parent, NodeViewClass): 169 parent_path = self.parent.get_path() 170 if len(parent_path) > 0: 171 path = parent_path + path 172 173 return path
174