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, entry): position = self.widgets.index(entry) if self.resource_menu_shown: self.hide_resource_menu() self.resource_menu_shown = True on_click = functools.partial(self.add_resource, slot=slot, entry=entry) settlement = entry.settlement() inventory = settlement.get_component( StorageComponent).inventory if settlement else None widget = 'traderoute_resource_selection.xml' def res_filter(res_id): same_icon = slot.findChild( name='button' ).up_image.source == self.icon_for_resource[res_id] already_listed = res_id in self.instance.route.waypoints[position][ 'resource_list'] return not (same_icon or already_listed) dlg = create_resource_selection_dialog(on_click=on_click, inventory=inventory, db=self.session.db, widget=widget, amount_per_line=6, res_filter=res_filter) self._gui.findChild(name="traderoute_resources").addChild(dlg) self._gui.adaptLayout() self._resource_selection_area_layout_hack_fix()
def show_resource_menu(self, slot, entry): """ 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. """ position = self.widgets.index(entry) if self.resource_menu_shown: self.hide_resource_menu() self.resource_menu_shown = True on_click = functools.partial(self.add_resource, slot=slot, entry=entry) settlement = entry.settlement() inventory = settlement.get_component(StorageComponent).inventory if settlement else None widget = "scrollbar_resource_selection.xml" def res_filter(res_id): same_icon = slot.findChild(name='button').up_image.source == self.icon_for_resource[res_id] already_listed = res_id in self.instance.route.waypoints[position]['resource_list'] return not (same_icon or already_listed) dlg = create_resource_selection_dialog(on_click=on_click, inventory=inventory, db=self.session.db, widget=widget, amount_per_line=5, res_filter=res_filter) self._gui.findChild(name="resources_scrollarea").addChild(dlg) self._gui.adaptLayout()
def _show_resource_selection_dialog(self, slot_num): """Shows gui for selecting a resource for slot slot_num""" if isinstance(self.session.ingame_gui.cursor, BuildingTool): return 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.ingame_gui.cursor, ResBarMouseTool): self.session.ingame_gui.cursor = ResBarMouseTool(self.session, self.session.ingame_gui.cursor, self.close_resource_selection_mode) 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.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.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.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, entry): position = self.widgets.index(entry) if self.resource_menu_shown: self.hide_resource_menu() self.resource_menu_shown = True on_click = functools.partial(self.add_resource, slot=slot, entry=entry) settlement = entry.settlement() inventory = settlement.get_component(StorageComponent).inventory if settlement else None widget = 'traderoute_resource_selection.xml' def res_filter(res_id): same_icon = slot.findChild(name='button').up_image.source == self.icon_for_resource[res_id] already_listed = res_id in self.instance.route.waypoints[position]['resource_list'] return not (same_icon or already_listed) dlg = create_resource_selection_dialog(on_click=on_click, inventory=inventory, db=self.session.db, widget=widget, amount_per_line=6, res_filter=res_filter) self._gui.findChild(name="traderoute_resources").addChild(dlg) self._gui.adaptLayout() self._resource_selection_area_layout_hack_fix()
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
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.trade_post.buy_list sell_list = self.trade_post.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.trade_post.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