comparison engine/extensions/pychan/widgets/dropdown.py @ 248:a2d5e2721489

widgets.py split up.
author phoku@33b003aa-7bff-0310-803a-e67f0ece8222
date Thu, 26 Mar 2009 16:20:16 +0000
parents
children 10b5f7f36dd4
comparison
equal deleted inserted replaced
247:040387b7167f 248:a2d5e2721489
1 # -*- coding: utf-8 -*-
2
3 from common import *
4 from widget import Widget
5 from listbox import GenericListmodel
6
7 class DropDown(Widget):
8 """
9 A dropdown or combo box widget for selecting lists of strings.
10
11 New Attributes
12 ==============
13
14 - items: A List of strings. This can be treated like an ordinary python list.
15 but only strings are allowed.
16 - selected: The index of the selected item in the list. Starting from C{0} to C{len(items)-1}.
17 A negative value indicates, that no item is selected.
18 - selected_item: The selected string itself, or C{None} - if no string is selected.
19
20 Data
21 ====
22 The selected attribute can be read and set via L{distributeData} and L{collectData}.
23 The list items can be set via L{distributeInitialData}.
24 """
25 def __init__(self,items=[],**kwargs):
26 self._items = GenericListmodel(*items)
27 self.real_widget = fife.DropDown(self._items)
28 super(DropDown,self).__init__(**kwargs)
29
30 # Prepare Data collection framework
31 self.accepts_initial_data = True
32 self._realSetInitialData = self._setItems
33
34 self.accepts_data = True
35 self._realSetData = self._setSelected
36 self._realGetData = self._getSelected
37
38 def resizeToContent(self,recurse=True):
39 # We append a minimum value, so max() does not bail out,
40 # if no items are in the list
41 _item_widths = map(self.real_font.getWidth,map(str,self._items)) + [self.real_font.getHeight()]
42 max_w = max(_item_widths)
43 self.width = max_w
44 self.height = (self.real_font.getHeight() + 2)
45
46 def _getItems(self): return self._items
47 def _setItems(self,items):
48 # Note we cannot use real_widget.setListModel
49 # for some reason ???
50
51 # Also self assignment can kill you
52 if id(items) != id(self._items):
53 self._items.clear()
54 self._items.extend(items)
55 items = property(_getItems,_setItems)
56
57 def _getSelected(self): return self.real_widget.getSelected()
58 def _setSelected(self,index): self.real_widget.setSelected(index)
59 selected = property(_getSelected,_setSelected)
60 def _getSelectedItem(self):
61 if 0 <= self.selected < len(self._items):
62 return self._items[self.selected]
63 return None
64 selected_item = property(_getSelectedItem)