# HG changeset patch # User cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222 # Date 1237503943 0 # Node ID 567863be0abc059a7f145fab1a62f4bb60fa3dd8 # Parent da2ca208c2213a49eb3039371923b92502311f1e * First version of previewmode icons in ObjectSelector - Needs better event handling to enable keyboard users to select items * Fixed a small bug which caused longer loading times when entering previewmode diff -r da2ca208c221 -r 567863be0abc clients/editor/plugins/objectselector.py --- a/clients/editor/plugins/objectselector.py Thu Mar 19 22:04:48 2009 +0000 +++ b/clients/editor/plugins/objectselector.py Thu Mar 19 23:05:43 2009 +0000 @@ -1,8 +1,49 @@ # coding: utf-8 -from pychan import widgets, tools +from pychan import widgets, tools, attrs import fife +# TODO: +# - Scrollarea in previewmode does not display the last item properly +# - Better event handling in ObjectIcon + +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") ] + + def __init__(self,**kwargs): + self.real_widget = fife.Container() + super(ObjectIcon,self).__init__(_real_widget=self.real_widget,**kwargs) + + vbox = widgets.VBox(padding=3) + + # Icon + self.icon = widgets.Icon(**kwargs) + self.addChild(self.icon) + + # Label + hbox = widgets.HBox(padding=1) + self.addChild(hbox) + self.label = widgets.Label(**kwargs) + hbox.addChild(self.label) + + + def _setText(self, text): + self.label.text = text + + def _getText(self): + return self.label.text + text = property(_getText, _setText) + + def _setImage(self, image): + self.icon.image = image + + def _getImage(self): + return self.icon.image + image = property(_getImage, _setImage) + class ObjectSelector(object): """The ObjectSelector class offers a gui Widget that let's you select the object you wish to use to in the editor. @@ -27,10 +68,17 @@ # Add the drop down with list of namespaces self.namespaces = widgets.DropDown() vbox.addChild(self.namespaces) - self.namespaces.capture(self.update_namespace) + self.namespaces.items = self.engine.getModel().getNamespaces() self.namespaces.selected = 0 + # Events for namespacelist + # TODO: Replace with SelectionEvent, once pychan supports it + self.namespaces.capture(self.update_namespace, "action") + self.namespaces.capture(self.update_namespace, "mouseWheelMovedUp") + self.namespaces.capture(self.update_namespace, "mouseWheelMovedDown") + self.namespaces.capture(self.update_namespace, "keyReleased") + # This scrollarea is used to display the preview images self.mainScrollArea = widgets.ScrollArea(size=(230,300)) self.objects = None @@ -40,7 +88,6 @@ self.setImageList() vbox.addChild(self.mainScrollArea) - # Add another Hbox to hold the close button hbox = widgets.HBox(parent=self.gui) vbox.addChild(hbox) @@ -75,6 +122,7 @@ if self.objects is not None: self.mainScrollArea.removeChild(self.objects) self.objects = widgets.VBox(name='list', size=(200,300)) + self.objects.base_color = self.mainScrollArea.background_color self.mainScrollArea.addChild(self.objects) def setTextList(self): @@ -103,14 +151,17 @@ objects = self.engine.getModel().getObjects(self.namespaces.selected_item) for obj in objects: image = self._getImage(obj) - if image is not None: - imagebutton = widgets.ImageButton(up_image=image, down_image=image, hover_image=image) - imagebutton.capture(tools.callbackWithArguments(self.objectSelected, obj)) - self.objects.addChild(imagebutton) - self.objects._recursiveResizeToContent() - self.gui.adaptLayout() - else: + if image is None: print 'No image available for selected object' + image = "" + + icon = ObjectIcon(image=image, text=obj.getId()) + icon.capture(tools.callbackWithArguments(self.objectSelected, obj), "mouseClicked") + self.objects.addChild(icon) + + self.objects._recursiveResizeToContent() + self.gui.adaptLayout() + if len(objects)>0: self.objectSelected(objects[0])