def _show_resource_selection_dialog(self, slot_num): """Shows gui for selecting a resource for slot slot_num""" self._hide_resource_selection_dialog() inv = self._get_current_inventory() if inv is None: return self._show_dummy_slot() # set mousetool to get notified on clicks outside the resbar area if not isinstance(self.session.cursor, ResBarMouseTool): def on_away_click(): self._hide_resource_selection_dialog() self._hide_dummy_slot() self.session.cursor = ResBarMouseTool(self.session, self.session.cursor, on_away_click) on_click = functools.partial(self._set_resource_slot, slot_num) cur_res = self._get_current_resources() res_filter = lambda res_id : res_id not in cur_res dlg = create_resource_selection_dialog(on_click, inv, self.session.db, widget='resbar_resource_selection.xml', res_filter=res_filter) # position dlg below slot cur_gui = self.gui[slot_num] background_icon = cur_gui.findChild(name="background_icon") dlg.position = (cur_gui.position[0] + background_icon.position[0], cur_gui.position[1] + background_icon.position[1] + background_icon.size[1] ) dlg.show() self._res_selection_dialog = dlg
def _show_resource_selection_dialog(self, slot_num): """Shows gui for selecting a resource for slot slot_num""" self._hide_resource_selection_dialog() inv = self._get_current_inventory() if inv is None: return self._show_dummy_slot() # set mousetool to get notified on clicks outside the resbar area if not isinstance(self.session.cursor, ResBarMouseTool): def on_away_click(): self._hide_resource_selection_dialog() self._hide_dummy_slot() self.session.cursor = ResBarMouseTool(self.session, self.session.cursor, on_away_click) on_click = functools.partial(self._set_resource_slot, slot_num) cur_res = self._get_current_resources() res_filter = lambda res_id : res_id not in cur_res dlg = create_resource_selection_dialog(on_click, inv, self.session.db, widget='resbar_resource_selection.xml', res_filter=res_filter) # position dlg below slot cur_gui = self.gui[slot_num] background_icon = cur_gui.findChild(name="background_icon") dlg.position = (cur_gui.position[0] + background_icon.position[0], cur_gui.position[1] + background_icon.position[1] + background_icon.size[1] ) dlg.findChild(name="make_default_btn").capture(self._make_configuration_default) reset_default_btn = dlg.findChild(name="reset_default_btn") # this is a quadruple-use button. # If there is no user set default, restore to factory default # If the current config is different from user default, set to default # If this is the current user set config, remove user set config and fall back to factory default # If there is no user set config and the current config is the system default, # the button should be disabled, but the first case below is shown because # we can't disable it if self._custom_default_resources is None: reset_default_btn.text = _("Reset to default") reset_default_btn.helptext = _("Reset this configuration to the factory default.") reset_default_btn.capture(Callback(self._drop_settlement_resource_configuration)) elif self._custom_default_resources != self._get_current_resources(): reset_default_btn.text = _("Reset to default") reset_default_btn.helptext = _("Reset this settlement's displayed resources to the default configuration you have saved.") reset_default_btn.capture(Callback(self._drop_settlement_resource_configuration)) else: reset_default_btn.text = _("Reset to factory") reset_default_btn.helptext = _("Reset the default configuration (which you see here) to the factory default for all settlements.") cb = Callback.ChainedCallbacks( self._drop_settlement_resource_configuration, # remove specific config Callback(self._make_configuration_default, reset=True) # remove global config ) reset_default_btn.capture( cb ) dlg.show() self._res_selection_dialog = dlg
def show_resource_menu(self, slot_id): """ Displays a menu where players can choose which resource to add in the selected slot. Available resources are all possible resources and a 'None' resource which allows to delete slot actions. The resources are ordered by their res_id. """ # create dlg buy_list = self.tradepost.buy_list sell_list = self.tradepost.sell_list res_filter = lambda res_id: res_id not in buy_list and res_id not in sell_list on_click = functools.partial(self.add_resource, slot_id=slot_id) inventory = self.tradepost.get_inventory() self.resources = create_resource_selection_dialog(on_click, inventory, self.session.db, res_filter=res_filter) self.resources.position = self.widget.position self.hide() # hides tab that invoked the selection widget self.session.ingame_gui.minimap_to_front() self.resources.show() # show selection widget, still display old tab icons