Skip to content

Commit

Permalink
Merge pull request #4872 from chdoc/fix-planneroverlay
Browse files Browse the repository at this point in the history
fix type confusion when using quick filter slot '0'
  • Loading branch information
myk002 authored Aug 25, 2024
2 parents 0eb5efb + e2e562e commit e085e12
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 26 deletions.
1 change: 1 addition & 0 deletions docs/changelog.txt
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ Template for new versions:
- System clipboard: when pasting single lines from the system clipboard, replace newlines with spaces so they don't show up as strange CP437 glyphs in-game
- `exterminate`: don't kill friendly undead (unless ``--include-friendly`` is passed) when specifying ``undead`` as the target
- `gui/settings-manager`: work details overlay no longer disappears when you click on a unit in the unit list
- `buildingplan`: fixed type confusion when using quick filter slot '0'

## Misc Improvements
- `orders`: more space efficient workshop overlay
Expand Down
69 changes: 43 additions & 26 deletions plugins/lua/buildingplan/planneroverlay.lua
Original file line number Diff line number Diff line change
Expand Up @@ -462,12 +462,29 @@ end
--

-- Used to store a table of the following format:
-- table<integer, { label: string, mats: string[] }>
-- integer: quick filter slot
-- table<string, { label: string, mats: string[] }>
-- string: quick filter slot (must be strings because of the way persistence works)
-- label: string representation of the filter
-- mats: list of material names allowed by the filter
BUILDINGPLAN_FILTERS_KEY = "buildingplan/quick-filters"

-- old saves may use numbers as keys, which we convert to string keys on load
dfhack.onStateChange[BUILDINGPLAN_FILTERS_KEY] = function(sc)
if sc ~= SC_MAP_LOADED or df.global.gamemode ~= df.game_mode.DWARF then
return
end
local saved_filters = dfhack.persistent.getSiteData(BUILDINGPLAN_FILTERS_KEY, {})
local new_filters = {}
for k, v in pairs(saved_filters) do
if type(k) == 'number' then
new_filters[tostring(k)] = v
elseif type(k) == 'string' then
new_filters[k] = v
end
end
dfhack.persistent.saveSiteData(BUILDINGPLAN_FILTERS_KEY, new_filters)
end

QuickFilter = defclass(QuickFilter, widgets.Panel)
QuickFilter.ATTRS{
idx=DEFAULT_NIL,
Expand Down Expand Up @@ -584,7 +601,7 @@ function PlannerOverlay:init()
self.selected = 1
self.state = ensure_key(config.data, 'planner')

self.selected_favorite = 1
self.selected_favorite = '1'

local main_panel = widgets.Panel{
view_id='main',
Expand Down Expand Up @@ -886,46 +903,46 @@ function PlannerOverlay:init()
frame_background=gui.CLEAR_PEN,
visible=self:callback('show_favorites'),
subviews={
QuickFilter{idx=1, frame={t=0,l=0},
QuickFilter{idx='1', frame={t=0,l=0},
on_click_fn=self:callback("save_restore_filter"),
is_selected_fn=make_is_selected_filter(1) },
QuickFilter{idx=2, frame={t=1,l=0},
is_selected_fn=make_is_selected_filter('1') },
QuickFilter{idx='2', frame={t=1,l=0},
on_click_fn=self:callback("save_restore_filter"),
is_selected_fn=make_is_selected_filter(2) },
QuickFilter{idx=3, frame={t=2,l=0},
is_selected_fn=make_is_selected_filter('2') },
QuickFilter{idx='3', frame={t=2,l=0},
on_click_fn=self:callback("save_restore_filter"),
is_selected_fn=make_is_selected_filter(3) },
QuickFilter{idx=4, frame={t=3,l=0},
is_selected_fn=make_is_selected_filter('3') },
QuickFilter{idx='4', frame={t=3,l=0},
on_click_fn=self:callback("save_restore_filter"),
is_selected_fn=make_is_selected_filter(4) },
QuickFilter{idx=5, frame={t=4,l=0},
is_selected_fn=make_is_selected_filter('4') },
QuickFilter{idx='5', frame={t=4,l=0},
on_click_fn=self:callback("save_restore_filter"),
is_selected_fn=make_is_selected_filter(5) },
QuickFilter{idx=6, frame={t=0,l=27},
is_selected_fn=make_is_selected_filter('5') },
QuickFilter{idx='6', frame={t=0,l=27},
on_click_fn=self:callback("save_restore_filter"),
is_selected_fn=make_is_selected_filter(6) },
QuickFilter{idx=7, frame={t=1,l=27},
is_selected_fn=make_is_selected_filter('6') },
QuickFilter{idx='7', frame={t=1,l=27},
on_click_fn=self:callback("save_restore_filter"),
is_selected_fn=make_is_selected_filter(7) },
QuickFilter{idx=8, frame={t=2,l=27},
is_selected_fn=make_is_selected_filter('7') },
QuickFilter{idx='8', frame={t=2,l=27},
on_click_fn=self:callback("save_restore_filter"),
is_selected_fn=make_is_selected_filter(8) },
QuickFilter{idx=9, frame={t=3,l=27},
is_selected_fn=make_is_selected_filter('8') },
QuickFilter{idx='9', frame={t=3,l=27},
on_click_fn=self:callback("save_restore_filter"),
is_selected_fn=make_is_selected_filter(9) },
QuickFilter{idx=0, frame={t=4,l=27},
is_selected_fn=make_is_selected_filter('9') },
QuickFilter{idx='0', frame={t=4,l=27},
on_click_fn=self:callback("save_restore_filter"),
is_selected_fn=make_is_selected_filter(0) },
is_selected_fn=make_is_selected_filter('0') },
widgets.CycleHotkeyLabel {
view_id='slot_select',
frame={b=0, l=2},
key='CUSTOM_X',
key_back='CUSTOM_SHIFT_X',
label='next/previous slot',
auto_width=true,
options=utils.tabulate(function(i) return {label="", value=i} end, 0, 9),
initial_option=1,
on_change=function(val) print(val) self.selected_favorite = val end,
options=utils.tabulate(function(i) return {label="", value=tostring(i)} end, 0, 9),
initial_option='1',
on_change=function(val) self.selected_favorite = val end,
},
widgets.HotkeyLabel{
frame={b=0, l=28},
Expand Down

0 comments on commit e085e12

Please sign in to comment.