def refresh(self): happinesses = [] needed_res = {} for building in self.settlement.buildings: if hasattr(building, 'happiness'): happinesses.append(building.happiness) for res in building.get_currently_not_consumed_resources(): try: needed_res[res] += 1 except KeyError: needed_res[res] = 1 num_happinesses = max(len(happinesses), 1) # make sure not to divide by 0 avg_happiness = int( sum(happinesses, 0.0) / num_happinesses ) self.widget.child_finder('avg_happiness').text = unicode(avg_happiness) + u'/100' container = self.widget.child_finder('most_needed_res_container') if self._old_most_needed_res_icon is not None: container.removeChild(self._old_most_needed_res_icon) self._old_most_needed_res_icon = None if len(needed_res) > 0: most_need_res = heapq.nlargest(1, needed_res.iteritems(), operator.itemgetter(1))[0][0] most_needed_res_icon = create_resource_icon(most_need_res, horizons.main.db) container.addChild(most_needed_res_icon) self._old_most_needed_res_icon = most_needed_res_icon container.adaptLayout()
def _add_line_to_gui(self, resource_id, amount, show_all = False): # later we will modify which resources to be displayed (e.g. all # settlements) via the switch show_all res_name = self.db.get_res_name(resource_id, only_if_inventory = True) # above code returns None if not shown in inventories displayed = (res_name is not None) or show_all if not displayed: return icon = create_resource_icon(resource_id, self.db, size=16) icon.name = 'icon_%s' % resource_id icon.max_size = icon.min_size = icon.size = (16, 16) label = widgets.Label(name = 'resource_%s' % resource_id) label.text = res_name label.min_size = (100, 20) amount_label = widgets.Label(name = 'produced_sum_%s' % resource_id) amount_label.text = unicode(amount) hbox = widgets.HBox() hbox.addChild(icon) hbox.addChild(label) hbox.addChild(amount_label) self._content_vbox.addChild(hbox)
def build_ship_info(self, index, ship, prodline): size = (260, 90) widget = Container(name='showcase_%s' % index, position=(0, 20 + index * 90), min_size=size, max_size=size, size=size) bg_icon = Icon(image='content/gui/images/background/square_80.png', name='bg_%s' % index) widget.addChild(bg_icon) image = 'content/gui/images/objects/ships/76/{unit_id}.png'.format( unit_id=ship) helptext = self.instance.session.db.get_ship_tooltip(ship) unit_icon = Icon(image=image, name='icon_%s' % index, position=(2, 2), helptext=helptext) widget.addChild(unit_icon) # if not buildable, this returns string with reason why to be displayed as helptext #ship_unbuildable = self.is_ship_unbuildable(ship) ship_unbuildable = False if not ship_unbuildable: button = OkButton(position=(60, 50), name='ok_%s' % index, helptext=_('Build this ship!')) button.capture(Callback(self.start_production, prodline)) else: button = CancelButton(position=(60, 50), name='ok_%s' % index, helptext=ship_unbuildable) widget.addChild(button) # Get production line info production = self.producer.create_production_line(prodline) # consumed == negative, reverse to sort in *ascending* order: costs = sorted(production.consumed_res.iteritems(), key=itemgetter(1)) for i, (res, amount) in enumerate(costs): xoffset = 103 + (i % 2) * 55 yoffset = 20 + (i // 2) * 20 icon = create_resource_icon(res, self.instance.session.db) icon.max_size = icon.min_size = icon.size = (16, 16) icon.position = (xoffset, yoffset) label = Label(name='cost_%s_%s' % (index, i)) if res == RES.GOLD: label.text = unicode(-amount) else: label.text = u'{amount:02}t'.format(amount=-amount) label.position = (22 + xoffset, yoffset) widget.addChild(icon) widget.addChild(label) return widget
def update_consumed_res(self): """Updates the container that displays the needed resources of the settler""" container = self.widget.findChild(name="needed_res") # remove icons from the container container.removeChildren(*container.children) # create new ones resources = self.instance.get_currently_not_consumed_resources() for res in resources: icon = create_resource_icon(res, self.instance.session.db) container.addChild(icon) container.adaptLayout()
def update_consumed_res(self): """Updates the container that displays the needed resources of the settler""" container = self.widget.findChild(name="needed_res") # remove icons from the container container.removeAllChildren() # create new ones resources = self.instance.get_currently_not_consumed_resources() for res in resources: icon = create_resource_icon(res, self.instance.session.db) icon.max_size = icon.min_size = icon.size = (32, 32) container.addChild(icon) container.adaptLayout()
def update_needed_resources(self, needed_res_container): """ Update needed resources """ production = self.producer.get_productions()[0] needed_res = production.get_consumed_resources() # Now sort! -amount is the positive value, drop unnecessary res (amount 0) needed_res = dict((res, -amount) for res, amount in needed_res.iteritems() if amount < 0) needed_res = sorted(needed_res.iteritems(), key=itemgetter(1), reverse=True) needed_res_container.removeAllChildren() for i, (res, amount) in enumerate(needed_res): icon = create_resource_icon(res, self.instance.session.db) icon.max_size = icon.min_size = icon.size = (16, 16) label = Label(name="needed_res_lbl_%s" % i) label.text = u"{amount}t".format(amount=amount) new_hbox = HBox(name="needed_res_box_%s" % i) new_hbox.addChildren(icon, label) needed_res_container.addChild(new_hbox)
def update_needed_resources(self, needed_res_container): """ Update needed resources """ production = self.producer.get_productions()[0] needed_res = production.get_consumed_resources() # Now sort! -amount is the positive value, drop unnecessary res (amount 0) needed_res = dict((res, -amount) for res, amount in needed_res.items() if amount < 0) needed_res = sorted(needed_res.items(), key=itemgetter(1), reverse=True) needed_res_container.removeAllChildren() for i, (res, amount) in enumerate(needed_res): icon = create_resource_icon(res, self.instance.session.db) icon.max_size = icon.min_size = icon.size = (16, 16) label = Label(name="needed_res_lbl_%s" % i) label.text = '{amount}t'.format(amount=amount) new_hbox = HBox(name="needed_res_box_%s" % i) new_hbox.addChildren(icon, label) needed_res_container.addChild(new_hbox)
def build_ship_info(self, index, ship, prodline): size = (260, 90) widget = Container(name='showcase_%s' % index, position=(0, 20 + index*90), min_size=size, max_size=size, size=size) bg_icon = Icon(image='content/gui/images/background/square_80.png', name='bg_%s'%index) widget.addChild(bg_icon) icon_path = 'content/gui/images/objects/ships/76/{unit_id}.png'.format(unit_id=ship) helptext = self.instance.session.db.get_ship_tooltip(ship) unit_icon = Icon(image=icon_path, name='icon_%s'%index, position=(2, 2), helptext=helptext) widget.addChild(unit_icon) # if not buildable, this returns string with reason why to be displayed as helptext #ship_unbuildable = self.is_ship_unbuildable(ship) ship_unbuildable = False if not ship_unbuildable: button = OkButton(position=(60, 50), name='ok_%s'%index, helptext=_('Build this ship!')) button.capture(Callback(self.start_production, prodline)) else: button = CancelButton(position=(60, 50), name='ok_%s'%index, helptext=ship_unbuildable) widget.addChild(button) #TODO since this code uses the boat builder as producer, the # gold cost of ships is in consumed res is always 0 since it # is paid from player inventory, not from the boat builder one. production = self.producer.create_production(prodline) # consumed == negative, reverse to sort in *ascending* order: costs = sorted(production.get_consumed_resources().iteritems(), key=itemgetter(1)) for i, (res, amount) in enumerate(costs): xoffset = 103 + (i % 2) * 55 yoffset = 20 + (i // 2) * 20 icon = create_resource_icon(res, self.instance.session.db) icon.max_size = icon.min_size = icon.size = (16, 16) icon.position = (xoffset, yoffset) label = Label(name='cost_%s_%s' % (index, i)) if res == RES.GOLD: label.text = unicode(-amount) else: label.text = u'{amount:02}t'.format(amount=-amount) label.position = (22 + xoffset, yoffset) widget.addChild(icon) widget.addChild(label) return widget
def build_groundunit_info(self, index, groundunit, prodline): size = (260, 90) widget = Container(name='showcase_%s' % index, position=(0, 20 + index*90), min_size=size, max_size=size, size=size) bg_icon = Icon(image='content/gui/images/background/square_80.png', name='bg_%s'%index) widget.addChild(bg_icon) image = 'content/gui/images/objects/groundunit/76/{unit_id}.png'.format(unit_id=groundunit) helptext = self.instance.session.db.get_unit_tooltip(groundunit) unit_icon = Icon(image=image, name='icon_%s'%index, position=(2, 2), helptext=helptext) widget.addChild(unit_icon) # if not buildable, this returns string with reason why to be displayed as helptext #groundunit_unbuildable = self.is_groundunit_unbuildable(groundunit) groundunit_unbuildable = False if not groundunit_unbuildable: button = OkButton(position=(60, 50), name='ok_%s'%index, helptext=_('Build this groundunit!')) button.capture(Callback(self.start_production, prodline)) else: button = CancelButton(position=(60, 50), name='ok_%s'%index, helptext=groundunit_unbuildable) widget.addChild(button) # Get production line info production = self.producer.create_production_line(prodline) # consumed == negative, reverse to sort in *ascending* order: costs = sorted(production.consumed_res.iteritems(), key=itemgetter(1)) for i, (res, amount) in enumerate(costs): xoffset = 103 + (i % 2) * 55 yoffset = 20 + (i // 2) * 20 icon = create_resource_icon(res, self.instance.session.db) icon.max_size = icon.min_size = icon.size = (16, 16) icon.position = (xoffset, yoffset) label = Label(name='cost_%s_%s' % (index, i)) if res == RES.GOLD: label.text = unicode(-amount) else: label.text = u'{amount:02}t'.format(amount=-amount) label.position = (22 + xoffset, yoffset) widget.addChild(icon) widget.addChild(label) return widget
def _add_line_to_gui(self, container, resource_id, amount): res_name = self.db.get_res_name(resource_id) icon = create_resource_icon(resource_id, self.db) icon.name = 'icon_%s' % resource_id icon.max_size = icon.min_size = icon.size = (20, 20) label = widgets.Label(name='resource_%s' % resource_id) label.text = res_name label.min_size = (100, 20) amount_label = widgets.Label(name='produced_sum_%s' % resource_id) amount_label.text = unicode(amount) hbox = widgets.HBox() hbox.addChild(icon) hbox.addChild(label) hbox.addChild(amount_label) container.addChild(hbox)
def _add_line_to_gui(self, container, resource_id, amount): res_name = self.db.get_res_name(resource_id) icon = create_resource_icon(resource_id, self.db) icon.name = 'icon_%s' % resource_id icon.max_size = icon.min_size = icon.size = (20, 20) label = widgets.Label(name = 'resource_%s' % resource_id) label.text = res_name label.min_size = (100, 20) amount_label = widgets.Label(name = 'produced_sum_%s' % resource_id) amount_label.text = unicode(amount) hbox = widgets.HBox() hbox.addChild(icon) hbox.addChild(label) hbox.addChild(amount_label) container.addChild(hbox)
def _add_line_to_gui(self, resource_id, amount, show_all=False): displayed = self.db.get_res_inventory_display(resource_id) if not displayed: return res_name = self.db.get_res_name(resource_id) icon = create_resource_icon(resource_id, self.db) icon.name = 'icon_%s' % resource_id icon.max_size = icon.min_size = icon.size = (20, 20) label = widgets.Label(name = 'resource_%s' % resource_id) label.text = res_name label.min_size = (100, 20) amount_label = widgets.Label(name = 'produced_sum_%s' % resource_id) amount_label.text = unicode(amount) hbox = widgets.HBox() hbox.addChild(icon) hbox.addChild(label) hbox.addChild(amount_label) self._content_vbox.addChild(hbox)
def _add_line_to_gui(self, resource_id, amount): displayed = self.db.get_res_inventory_display(resource_id) if not displayed: return res_name = self.db.get_res_name(resource_id) icon = create_resource_icon(resource_id, self.db) icon.name = 'icon_%s' % resource_id icon.max_size = icon.min_size = icon.size = (20, 20) label = widgets.Label(name='resource_%s' % resource_id) label.text = res_name label.min_size = (100, 20) amount_label = widgets.Label(name='produced_sum_%s' % resource_id) amount_label.text = unicode(amount) hbox = widgets.HBox() hbox.addChild(icon) hbox.addChild(label) hbox.addChild(amount_label) self._content_vbox.addChild(hbox)
def refresh(self): """This function is called by the TabWidget to redraw the widget.""" super(BoatbuilderTab, self).refresh() main_container = self.widget.findChild(name="BB_main_tab") container_active = main_container.findChild(name="container_active") container_inactive = main_container.findChild( name="container_inactive") progress_container = main_container.findChild( name="BB_progress_container") cancel_container = main_container.findChild(name="BB_cancel_container") needed_res_container = self.widget.findChild( name="BB_needed_resources_container") # a boatbuilder is considered active here if it builds sth, no matter if it's paused production_lines = self.producer.get_production_lines() if production_lines: cancel_container.parent.showChild(cancel_container) # Set progress progress_container.parent.showChild(progress_container) progress = math.floor(self.producer.get_production_progress() * 100) self.widget.findChild(name='progress').progress = progress progress_perc = self.widget.findChild(name='BB_progress_perc') progress_perc.text = u'{progress}%'.format(progress=progress) container_active.parent.showChild(container_active) if (Fife.getVersion() >= (0, 4, 0)): container_inactive.parent.hideChild(container_inactive) else: if not container_inactive in container_inactive.parent.hidden_children: container_inactive.parent.hideChild(container_inactive) # Update boatbuilder queue queue = self.producer.get_unit_production_queue() queue_container = container_active.findChild( name="queue_container") queue_container.removeAllChildren() for place_in_queue, unit_type in enumerate(queue): image = self.__class__.SHIP_THUMBNAIL.format(type_id=unit_type) helptext = _("{ship} (place in queue: {place})").format( ship=self.instance.session.db.get_unit_type_name( unit_type), place=place_in_queue + 1) # people don't count properly, always starting at 1.. icon_name = "queue_elem_" + str(place_in_queue) icon = Icon(name=icon_name, image=image, helptext=helptext) rm_from_queue_cb = Callback( RemoveFromQueue(self.producer, place_in_queue).execute, self.instance.session) icon.capture(rm_from_queue_cb, event_name="mouseClicked") queue_container.addChild(icon) # Set built ship info production_line = self.producer._get_production( production_lines[0]) produced_unit_id = production_line.get_produced_units().keys()[0] name = self.instance.session.db.get_unit_type_name( produced_unit_id) container_active.findChild( name="headline_BB_builtship_label").text = _(name) ship_icon = container_active.findChild(name="BB_cur_ship_icon") ship_icon.helptext = self.instance.session.db.get_ship_tooltip( produced_unit_id) ship_icon.image = self.__class__.SHIP_PREVIEW_IMG.format( type_id=produced_unit_id) button_active = container_active.findChild( name="toggle_active_active") button_inactive = container_active.findChild( name="toggle_active_inactive") to_active = not self.producer.is_active() if not to_active: # swap what we want to show and hide button_active, button_inactive = button_inactive, button_active if (Fife.getVersion() >= (0, 4, 0)): button_active.parent.hideChild(button_active) else: if not button_active in button_active.parent.hidden_children: button_active.parent.hideChild(button_active) button_inactive.parent.showChild(button_inactive) set_active_cb = Callback(self.producer.set_active, active=to_active) button_inactive.capture(set_active_cb, event_name="mouseClicked") upgrades_box = container_active.findChild(name="BB_upgrades_box") upgrades_box.removeAllChildren() # Update needed resources production = self.producer.get_productions()[0] needed_res = production.get_consumed_resources() # Now sort! -amount is the positive value, drop unnecessary res (amount 0) needed_res = dict((res, -amount) for res, amount in needed_res.iteritems() if amount < 0) needed_res = sorted(needed_res.iteritems(), key=itemgetter(1), reverse=True) needed_res_container.removeAllChildren() for i, (res, amount) in enumerate(needed_res): icon = create_resource_icon(res, self.instance.session.db) icon.max_size = icon.min_size = icon.size = (16, 16) label = Label(name="needed_res_lbl_%s" % i) label.text = u'{amount}t'.format(amount=amount) new_hbox = HBox(name="needed_res_box_%s" % i) new_hbox.addChildren(icon, label) needed_res_container.addChild(new_hbox) cancel_button = self.widget.findChild(name="BB_cancel_button") cancel_cb = Callback( CancelCurrentProduction(self.producer).execute, self.instance.session) cancel_button.capture(cancel_cb, event_name="mouseClicked") else: # display sth when nothing is produced container_inactive.parent.showChild(container_inactive) for w in (container_active, progress_container, cancel_container): if (Fife.getVersion() >= (0, 4, 0)): w.parent.hideChild(w) else: if not w in w.parent.hidden_children: w.parent.hideChild(w) self.widget.adaptLayout()
def refresh(self): """This function is called by the TabWidget to redraw the widget.""" super(BoatbuilderTab, self).refresh() main_container = self.widget.findChild(name="BB_main_tab") container_active = main_container.findChild(name="container_active") container_inactive = main_container.findChild(name="container_inactive") progress_container = main_container.findChild(name="BB_progress_container") cancel_container = main_container.findChild(name="BB_cancel_container") needed_res_container = self.widget.findChild(name="BB_needed_resources_container") # a boatbuilder is considered active here if it build sth, no matter if it's paused production_lines = self.producer.get_production_lines() if production_lines: cancel_container.parent.showChild(cancel_container) # Set progress progress_container.parent.showChild(progress_container) progress = math.floor(self.producer.get_production_progress() * 100) self.widget.findChild(name='progress').progress = progress progress_perc = self.widget.findChild(name='BB_progress_perc') progress_perc.text = u'{progress}%'.format(progress=progress) container_active.parent.showChild(container_active) if not container_inactive in container_inactive.parent.hidden_children: container_inactive.parent.hideChild(container_inactive) # Update boatbuilder queue queue = self.producer.get_unit_production_queue() queue_container = container_active.findChild(name="queue_container") queue_container.removeAllChildren() for place_in_queue, unit_type in enumerate(queue): image = self.__class__.SHIP_THUMBNAIL.format(type_id=unit_type) helptext = _(u"{ship} (place in queue: {place})") #xgettext:python-format helptext.format(ship=self.instance.session.db.get_unit_type_name(unit_type), place=place_in_queue+1) # people don't count properly, always starting at 1.. icon_name = "queue_elem_"+str(place_in_queue) icon = Icon(name=icon_name, image=image, helptext=helptext) rm_from_queue_cb = Callback(RemoveFromQueue(self.producer, place_in_queue).execute, self.instance.session) icon.capture(rm_from_queue_cb, event_name="mouseClicked") queue_container.addChild( icon ) # Set built ship info production_line = self.producer._get_production(production_lines[0]) produced_unit_id = production_line.get_produced_units().keys()[0] name = self.instance.session.db.get_unit_type_name(produced_unit_id) container_active.findChild(name="headline_BB_builtship_label").text = _(name) ship_icon = container_active.findChild(name="BB_cur_ship_icon") ship_icon.helptext = self.instance.session.db.get_ship_tooltip(produced_unit_id) ship_icon.image = self.__class__.SHIP_PREVIEW_IMG.format(type_id=produced_unit_id) button_active = container_active.findChild(name="toggle_active_active") button_inactive = container_active.findChild(name="toggle_active_inactive") to_active = not self.producer.is_active() if not to_active: # swap what we want to show and hide button_active, button_inactive = button_inactive, button_active if not button_active in button_active.parent.hidden_children: button_active.parent.hideChild(button_active) button_inactive.parent.showChild(button_inactive) set_active_cb = Callback(self.producer.set_active, active=to_active) button_inactive.capture(set_active_cb, event_name="mouseClicked") upgrades_box = container_active.findChild(name="BB_upgrades_box") upgrades_box.removeAllChildren() # upgrades_box.addChild(Label(text=u"+ love")) # upgrades_box.addChild(Label(text=u"+ affection")) # no upgrades in 2010.1 release ---^ upgrades_box.stylize('menu_black') # Update needed resources production = self.producer.get_productions()[0] needed_res = production.get_consumed_resources() # Now sort! -amount is the positive value, drop unnecessary res (amount 0) needed_res = dict((res, -amount) for res, amount in needed_res.iteritems() if amount < 0) needed_res = sorted(needed_res.iteritems(), key=itemgetter(1), reverse=True) needed_res_container.removeAllChildren() for i, (res, amount) in enumerate(needed_res): icon = create_resource_icon(res, self.instance.session.db) icon.max_size = icon.min_size = icon.size = (16, 16) label = Label(name="needed_res_lbl_%s" % i) label.text = u'{amount}t'.format(amount=amount) new_hbox = HBox(name="needed_res_box_%s" % i) new_hbox.addChildren(icon, label) needed_res_container.addChild(new_hbox) cancel_button = self.widget.findChild(name="BB_cancel_button") cancel_cb = Callback(CancelCurrentProduction(self.producer).execute, self.instance.session) cancel_button.capture(cancel_cb, event_name="mouseClicked") else: # display sth when nothing is produced container_inactive.parent.showChild(container_inactive) for w in (container_active, progress_container, cancel_container): if not w in w.parent.hidden_children: w.parent.hideChild(w) self.widget.adaptLayout()
def refresh(self): """This function is called by the TabWidget to redraw the widget.""" super(BoatbuilderTab, self).refresh() THUMB_PATH = "content/gui/images/objects/ships/116/%s.png" main_container = self.widget.findChild(name="BB_main_tab") container_active = main_container.findChild(name="container_active") container_inactive = main_container.findChild(name="container_inactive") progress_container = main_container.findChild(name="BB_progress_container") cancel_container = main_container.findChild(name="BB_cancel_container") needed_res_container = self.widget.findChild(name="BB_needed_resources_container") # a boatbuilder is considered active here if it build sth, no matter if it's paused production_lines = self.producer.get_production_lines() if production_lines: if cancel_container is None: main_container.addChild(main_container.cancel_container) cancel_container = main_container.cancel_container if needed_res_container is None: main_container.insertChildBefore(main_container.needed_res_container, cancel_container) needed_res_container = main_container.needed_res_container # Set progress if progress_container is None: main_container.insertChildBefore( main_container.progress_container, self.widget.findChild(name="BB_needed_resources_container")) progress_container = main_container.progress_container progress = math.floor(self.producer.get_production_progress() * 100) self.widget.findChild(name='progress').progress = progress self.widget.findChild(name='BB_progress_perc').text = u'{progress}%'.format(progress=progress) # remove other container, but save it if container_inactive is not None: main_container.container_inactive = container_inactive main_container.removeChild( container_inactive ) if container_active is None: main_container.insertChildBefore( main_container.container_active, progress_container) container_active = main_container.container_active # Update boatbuilder queue queue = self.producer.get_unit_production_queue() queue_container = container_active.findChild(name="queue_container") queue_container.removeAllChildren() for place_in_queue, unit_type in enumerate(queue): image = self.__class__.SHIP_THUMBNAIL.format(type_id=unit_type) #xgettext:python-format helptext = _(u"{ship} (place in queue: {place})").format( ship=self.instance.session.db.get_unit_type_name(unit_type), place=place_in_queue+1 ) # people don't count properly, always starting at 1.. icon_name = "queue_elem_"+str(place_in_queue) icon = Icon(name=icon_name, image=image, helptext=helptext) icon.capture( Callback(RemoveFromQueue(self.producer, place_in_queue).execute, self.instance.session), event_name="mouseClicked" ) queue_container.addChild( icon ) # Set built ship info produced_unit_id = self.producer._get_production(production_lines[0]).get_produced_units().keys()[0] name = self.instance.session.db.get_unit_type_name(produced_unit_id) container_active.findChild(name="headline_BB_builtship_label").text = _(name) container_active.findChild(name="BB_cur_ship_icon").helptext = "Storage: 4 slots, 120t \nHealth: 100" container_active.findChild(name="BB_cur_ship_icon").image = THUMB_PATH % produced_unit_id button_active = container_active.findChild(name="toggle_active_active") button_inactive = container_active.findChild(name="toggle_active_inactive") if not self.producer.is_active(): # if production is paused # remove active button, if it's there, and save a reference to it if button_active is not None: container_active.button_active = button_active container_active.removeChild( button_active ) # restore inactive button, if it isn't in the gui if button_inactive is None: # insert at the end container_active.insertChild(container_active.button_inactive, len(container_active.children)) container_active.mapEvents({ 'toggle_active_inactive' : Callback(self.producer.set_active, active=True) }) # TODO: make this button do sth else: # remove inactive button, if it's there, and save a reference to it if button_inactive is not None: container_active.button_inactive = button_inactive container_active.removeChild( button_inactive ) # restore active button, if it isn't in the gui if button_active is None: # insert at the end container_active.insertChild(container_active.button_active, len(container_active.children)) container_active.mapEvents({ 'toggle_active_active' : Callback(self.producer.set_active, active=False) }) upgrades_box = container_active.findChild(name="BB_upgrades_box") for child in upgrades_box.children[:]: upgrades_box.removeChild(child) # upgrades_box.addChild( pychan.widgets.Label(text=u"+ love") ) # upgrades_box.addChild( pychan.widgets.Label(text=u"+ affection") ) # no upgrades in 2010.1 release ---^ upgrades_box.stylize('menu_black') # Update needed resources production = self.producer.get_productions()[0] needed_res = production.get_consumed_resources() # Now sort! -amount is the positive value, drop unnecessary res (amount 0) needed_res = dict((res, -amount) for res, amount in needed_res.iteritems() if amount < 0) needed_res = sorted(needed_res.iteritems(), key=itemgetter(1), reverse=True) needed_res_container.removeAllChildren() for i, (res, amount) in enumerate(needed_res): icon = create_resource_icon(res, self.instance.session.db) icon.max_size = icon.min_size = icon.size = (16, 16) label = Label(name="needed_res_lbl_%s" % i) label.text = u'{amount}t'.format(amount=amount) new_hbox = HBox(name="needed_res_box_%s" % i) new_hbox.addChildren(icon, label) needed_res_container.addChild(new_hbox) cancel_button = self.widget.findChild(name="BB_cancel_button") cancel_cb = Callback(CancelCurrentProduction(self.producer).execute, self.instance.session) cancel_button.capture(cancel_cb, event_name="mouseClicked") else: # display sth when nothing is produced # remove other container, but save it if container_active is not None: main_container.container_active = container_active main_container.removeChild( container_active ) if container_inactive is None: main_container.insertChildBefore( main_container.container_inactive, progress_container) container_inactive = main_container.container_inactive if progress_container is not None: main_container.progress_container = progress_container main_container.removeChild(progress_container) if needed_res_container is not None: main_container.needed_res_container = needed_res_container main_container.removeChild(needed_res_container) if cancel_container is not None: main_container.cancel_container = cancel_container main_container.removeChild(cancel_container) self.widget.adaptLayout()