generalize burrow code to other unit assignment screens
							parent
							
								
									09e3ed427a
								
							
						
					
					
						commit
						e41017a26b
					
				| @ -1,70 +0,0 @@ | |||||||
| local _ENV = mkmodule('plugins.sort.burrows') |  | ||||||
| 
 |  | ||||||
| local sortoverlay = require('plugins.sort.sortoverlay') |  | ||||||
| local widgets = require('gui.widgets') |  | ||||||
| 
 |  | ||||||
| local unit_selector = df.global.game.main_interface.unit_selector |  | ||||||
| 
 |  | ||||||
| -- ---------------------- |  | ||||||
| -- BurrowOverlay |  | ||||||
| -- |  | ||||||
| 
 |  | ||||||
| BurrowOverlay = defclass(BurrowOverlay, sortoverlay.SortOverlay) |  | ||||||
| BurrowOverlay.ATTRS{ |  | ||||||
|     default_pos={x=62, y=6}, |  | ||||||
|     viewscreens='dwarfmode/UnitSelector/BURROW_ASSIGNMENT', |  | ||||||
|     frame={w=26, h=1}, |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| local function get_unit_id_search_key(unit_id) |  | ||||||
|     local unit = df.unit.find(unit_id) |  | ||||||
|     if not unit then return end |  | ||||||
|     return ('%s %s %s'):format( |  | ||||||
|         dfhack.units.getReadableName(unit),  -- last name is in english |  | ||||||
|         dfhack.units.getProfessionName(unit), |  | ||||||
|         dfhack.TranslateName(unit.name, false, true))  -- get untranslated last name |  | ||||||
| end |  | ||||||
| 
 |  | ||||||
| function BurrowOverlay:init() |  | ||||||
|     self:addviews{ |  | ||||||
|         widgets.BannerPanel{ |  | ||||||
|             frame={l=0, t=0, r=0, h=1}, |  | ||||||
|             subviews={ |  | ||||||
|                 widgets.EditField{ |  | ||||||
|                     view_id='search', |  | ||||||
|                     frame={l=1, t=0, r=1}, |  | ||||||
|                     label_text="Search: ", |  | ||||||
|                     key='CUSTOM_ALT_S', |  | ||||||
|                     on_change=function(text) self:do_search(text) end, |  | ||||||
|                 }, |  | ||||||
|             }, |  | ||||||
|         }, |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     self:register_handler('BURROW', unit_selector.unid, |  | ||||||
|         curry(sortoverlay.flags_vector_search, {get_search_key_fn=get_unit_id_search_key}, |  | ||||||
|             unit_selector.selected)) |  | ||||||
| end |  | ||||||
| 
 |  | ||||||
| function BurrowOverlay:get_key() |  | ||||||
|     if unit_selector.context == df.unit_selector_context_type.BURROW_ASSIGNMENT then |  | ||||||
|         return 'BURROW' |  | ||||||
|     end |  | ||||||
| end |  | ||||||
| 
 |  | ||||||
| function BurrowOverlay:onRenderBody(dc) |  | ||||||
|     BurrowOverlay.super.onRenderBody(self, dc) |  | ||||||
|     if self.refresh_search then |  | ||||||
|         self.refresh_search = nil |  | ||||||
|         self:do_search(self.subviews.search.text) |  | ||||||
|     end |  | ||||||
| end |  | ||||||
| 
 |  | ||||||
| function BurrowOverlay:onInput(keys) |  | ||||||
|     if keys._MOUSE_L then |  | ||||||
|         self.refresh_search = true |  | ||||||
|     end |  | ||||||
|     return BurrowOverlay.super.onInput(self, keys) |  | ||||||
| end |  | ||||||
| 
 |  | ||||||
| return _ENV |  | ||||||
| @ -0,0 +1,91 @@ | |||||||
|  | local _ENV = mkmodule('plugins.sort.unitselector') | ||||||
|  | 
 | ||||||
|  | local sortoverlay = require('plugins.sort.sortoverlay') | ||||||
|  | local widgets = require('gui.widgets') | ||||||
|  | 
 | ||||||
|  | local unit_selector = df.global.game.main_interface.unit_selector | ||||||
|  | 
 | ||||||
|  | -- pen, pit, chain, and cage assignment are handled by dedicated screens | ||||||
|  | -- squad fill position screen has a specialized overlay | ||||||
|  | -- we *could* add search functionality to vanilla screens for pit and cage, | ||||||
|  | -- but then we'd have to handle the itemid vector | ||||||
|  | local HANDLED_SCREENS = { | ||||||
|  |     ZONE_BEDROOM_ASSIGNMENT='already', | ||||||
|  |     ZONE_OFFICE_ASSIGNMENT='already', | ||||||
|  |     ZONE_DINING_HALL_ASSIGNMENT='already', | ||||||
|  |     ZONE_TOMB_ASSIGNMENT='already', | ||||||
|  |     -- this one should technically appear further to the left, but when the screen | ||||||
|  |     -- gets small enough that that matters, the vanilla widgets are unreadable | ||||||
|  |     WORKER_ASSIGNMENT='selected', | ||||||
|  |     OCCUPATION_ASSIGNMENT='selected', | ||||||
|  |     BURROW_ASSIGNMENT='selected', | ||||||
|  |     SQUAD_KILL_ORDER='selected', | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | -- ---------------------- | ||||||
|  | -- UnitSelectorOverlay | ||||||
|  | -- | ||||||
|  | 
 | ||||||
|  | UnitSelectorOverlay = defclass(UnitSelectorOverlay, sortoverlay.SortOverlay) | ||||||
|  | UnitSelectorOverlay.ATTRS{ | ||||||
|  |     default_pos={x=62, y=6}, | ||||||
|  |     viewscreens='dwarfmode/UnitSelector', | ||||||
|  |     frame={w=26, h=1}, | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | local function get_unit_id_search_key(unit_id) | ||||||
|  |     local unit = df.unit.find(unit_id) | ||||||
|  |     if not unit then return end | ||||||
|  |     return ('%s %s %s'):format( | ||||||
|  |         dfhack.units.getReadableName(unit),  -- last name is in english | ||||||
|  |         dfhack.units.getProfessionName(unit), | ||||||
|  |         dfhack.TranslateName(unit.name, false, true))  -- get untranslated last name | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | function UnitSelectorOverlay:init() | ||||||
|  |     self:addviews{ | ||||||
|  |         widgets.BannerPanel{ | ||||||
|  |             frame={l=0, t=0, r=0, h=1}, | ||||||
|  |             visible=self:callback('get_key'), | ||||||
|  |             subviews={ | ||||||
|  |                 widgets.EditField{ | ||||||
|  |                     view_id='search', | ||||||
|  |                     frame={l=1, t=0, r=1}, | ||||||
|  |                     label_text="Search: ", | ||||||
|  |                     key='CUSTOM_ALT_S', | ||||||
|  |                     on_change=function(text) self:do_search(text) end, | ||||||
|  |                 }, | ||||||
|  |             }, | ||||||
|  |         }, | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     for name,flags_vec in pairs(HANDLED_SCREENS) do | ||||||
|  |         self:register_handler(name, unit_selector.unid, | ||||||
|  |             curry(sortoverlay.flags_vector_search, {get_search_key_fn=get_unit_id_search_key}, | ||||||
|  |             unit_selector[flags_vec])) | ||||||
|  |     end | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | function UnitSelectorOverlay:get_key() | ||||||
|  |     local key = df.unit_selector_context_type[unit_selector.context] | ||||||
|  |     if HANDLED_SCREENS[key] then | ||||||
|  |         return key | ||||||
|  |     end | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | function UnitSelectorOverlay:onRenderBody(dc) | ||||||
|  |     UnitSelectorOverlay.super.onRenderBody(self, dc) | ||||||
|  |     if self.refresh_search then | ||||||
|  |         self.refresh_search = nil | ||||||
|  |         self:do_search(self.subviews.search.text) | ||||||
|  |     end | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | function UnitSelectorOverlay:onInput(keys) | ||||||
|  |     if keys._MOUSE_L then | ||||||
|  |         self.refresh_search = true | ||||||
|  |     end | ||||||
|  |     return UnitSelectorOverlay.super.onInput(self, keys) | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | return _ENV | ||||||
		Loading…
	
		Reference in New Issue