Mercurial > fife-parpg
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) |