Mercurial > fife-parpg
changeset 227:d642169490f7
* Happy birthday, LinuxDonald! *
- Fixed issue where only the first widgets were displayed (old max_height 5000px, new: 500000px)
- New ObjectIconList-widget
author | cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222 |
---|---|
date | Fri, 20 Mar 2009 15:17:28 +0000 |
parents | 9b50a2702054 |
children | 756b895e1dab |
files | clients/editor/plugins/objectselector.py |
diffstat | 1 files changed, 38 insertions(+), 21 deletions(-) [+] |
line wrap: on
line diff
--- a/clients/editor/plugins/objectselector.py Fri Mar 20 11:43:06 2009 +0000 +++ b/clients/editor/plugins/objectselector.py Fri Mar 20 15:17:28 2009 +0000 @@ -7,26 +7,21 @@ #from internal import DEFAULT_STYLE # TODO: -# - Scrollarea in previewmode only displays about 1/3 of items (checked against Rio de Hola items) -# - Better event handling in ObjectIcon +# - Better event handling in ObjectIcon and ObjectIconList # - Label background color can't be set +# - Model-View design for ObjectIconList _DEFAULT_BASE_COLOR = internal.DEFAULT_STYLE['default']['base_color'] _DEFAULT_SELECTION_COLOR = internal.DEFAULT_STYLE['default']['selection_color'] _DEFAULT_COLOR_STEP = Color(10, 10, 10) -_selected_objectitem = None - - class ObjectIcon(widgets.VBox): """ The ObjectIcon is used to represent the object in the object selector. - Unlike """ ATTRIBUTES = widgets.VBox.ATTRIBUTES + [ attrs.Attr("text"), attrs.Attr("image"), attrs.BoolAttr("selected") ] def __init__(self,callback,**kwargs): - self.real_widget = fife.Container() - super(ObjectIcon,self).__init__(_real_widget=self.real_widget,**kwargs) + super(ObjectIcon,self).__init__(**kwargs) self.callback = callback @@ -61,16 +56,12 @@ image = property(_getImage, _setImage) def _setSelected(self, enabled): - global _selected_objectitem - - if enabled == True: - if _selected_objectitem is not None: - _selected_objectitem.selected = False - - _selected_objectitem = self - else: - if self.selected: - _selected_objectitem = None + if isinstance(self.parent, ObjectIconList): + if enabled == True: + self.parent.selected_item = self + else: + if self.selected: + self.parent.selected_item = None # + Color(0,0,0) to force variable copy if self.selected: @@ -79,8 +70,9 @@ self.base_color = _DEFAULT_BASE_COLOR + Color(0,0,0) def _isSelected(self): - _selected_objectitem - return self == _selected_objectitem + if isinstance(self.parent, ObjectIconList): + return self == self.parent.selected_item + return False selected = property(_isSelected, _setSelected) #--- Event handling ---# @@ -94,6 +86,31 @@ self.selected = True self.callback() +class ObjectIconList(widgets.VBox): + def __init__(self,**kwargs): + super(ObjectIconList, self).__init__(max_size=(5000,500000), **kwargs) + self.base_color = self.background_color + + # TODO: Pychan doesn't support keyevents for nonfocusable widgets, yet + self.capture(self._keyPressed, "keyPressed") + self.capture(self._keyPressed, "keyReleased") + self._selectedItem = None + + def _keyPressed(self, event): + print "KeyEvent", event + + def _setSelectedItem(self, item): + if isinstance(item, ObjectIcon) or item is None: + if self._selectedItem is not None: + tmp = self._selectedItem + self._selectedItem = item + tmp.selected = False + else: + self._selectedItem = item + + def _getSelectedItem(self): + return self._selectedItem + selected_item = property(_getSelectedItem, _setSelectedItem) class ObjectSelector(object): """The ObjectSelector class offers a gui Widget that let's you select the object you @@ -172,7 +189,7 @@ preview Images""" if self.objects is not None: self.mainScrollArea.removeChild(self.objects) - self.objects = widgets.VBox(name='list', size=(200,1000)) + self.objects = ObjectIconList(name='list', size=(200,1000)) self.objects.base_color = self.mainScrollArea.background_color self.mainScrollArea.addChild(self.objects)