def rebuild(self): self.name_display.text = "%s (%s)" % (self.base.name, self.base.spec.name) self.state_display.color = state_colors[self.base.power_state] self.state_display.text = self.base.power_state_name available_item_types = { i.item_type for i in g.items.values() if i.available() and i.buildable_in(self.base.location) } mutable = not self.base.spec.force_cpu for item_type in item.all_types(): pane = getattr(self, item_type.id + "_pane") item_mutable = mutable and item_type in available_item_types pane.change_button.visible = item_mutable current = self.get_current(item_type) if current is None: current_build = "" if mutable and not item_mutable: current_name = _("N/A") else: current_name = _("None") else: current_name = g.items[current.id].name if current.done: current_build = "" else: current_build = _("Completion in %s.") % \ g.to_time(current.cost_left[2]) pane.name_panel.text = "%s: %s" % (item_type.label, current_name) pane.build_panel.text = current_build pane.needs_rebuild = True count = "" if self.base.spec.size > 1: current = getattr(self.base.cpus, "count", 0) size = self.base.spec.size if size == current: count = _("x%d (max)") % current elif current == 0: count = _("(room for %d)") % size else: #Translators: current and maximum number of CPUs in a base count = _("x{CURRENT:d} (max {SIZE:d})").format( CURRENT=current, SIZE=size) self.cpu_pane.name_panel.text += " " + count info_text = "" # Base Total CPU. info_text += _("CPU per day: %d") % self.base.cpu + "\n" # Maintenace cost. info_text += _("Maintenance:") + "\n" info_text += self.base.spec.describe_maintenance(self.base.maintenance) info_text += "\n" # Detection chance display. info_text += self.base.get_detect_info() self.info_frame.text = info_text # Rebuild dialogs # FIXME: needs_rebuild bug with multiple_build_dialog, should not. #self.multiple_build_dialog.needs_rebuild = True self.build_dialog.needs_rebuild = True super(BaseScreen, self).rebuild()
def __init__(self, *args, **kwargs): if len(args) < 3: kwargs.setdefault("size", (.90, .70)) base = kwargs.pop("base", None) super(BaseScreen, self).__init__(*args, **kwargs) self.base = base self.build_dialog = BuildDialog(self) self.multiple_build_dialog = MultipleBuildDialog(self) self.header = widget.Widget(self, (0, 0), (-1, .08), anchor=constants.TOP_LEFT) self.name_display = text.Text(self.header, (-.5, 0), (-1, -.5), anchor=constants.TOP_CENTER, borders=constants.ALL, border_color="pane_background", background_color="pane_background_empty", shrink_factor=.85, bold=True) self.next_base_button = \ button.FunctionButton(self.name_display, (-1, 0), (.03, -1), anchor=constants.TOP_RIGHT, text=">", hotkey=">", function=self.switch_base, kwargs={"forwards": True}) self.add_key_handler(pygame.K_RIGHT, self.next_base_button.activate_with_sound) self.prev_base_button = \ button.FunctionButton(self.name_display, (0, 0), (.03, -1), anchor=constants.TOP_LEFT, text="<", hotkey="<", function=self.switch_base, kwargs={"forwards": False}) self.add_key_handler(pygame.K_LEFT, self.prev_base_button.activate_with_sound) self.state_display = text.Text( self.header, (-.5, -.5), (-1, -.5), anchor=constants.TOP_CENTER, borders=(constants.LEFT, constants.RIGHT, constants.BOTTOM), border_color="pane_background", background_color="pane_background_empty", shrink_factor=.8, bold=True) self.back_button = \ button.ExitDialogButton(self, (-.5, -1), autotranslate=True, text=N_("&BACK"), anchor=constants.BOTTOM_CENTER, ) self.info_frame = text.Text(self, (-1, .09), (.26, .53), anchor=constants.TOP_RIGHT, background_color="pane_background", borders=constants.ALL, bold=True, align=constants.LEFT, valign=constants.TOP) self.contents_frame = \ widget.BorderedWidget(self, (0, .09), (.60, .53), anchor=constants.TOP_LEFT, background_color="pane_background", borders=range(6)) for i, item_type in enumerate(item.all_types()): setattr( self, item_type.id + "_pane", ItemPane(self.contents_frame, (.01, .01 + .08 * i), item_type=item_type))