@@ -175,7 +175,7 @@ local function is_interior(bounds, x, y)
175175 y ~= bounds .y1 and y ~= bounds .y2
176176end
177177
178- -- adjusted from CycleHotkeyLabel on the planner panel
178+ -- adjusted from WeaponSpiketrapPanel (HotKey & Slider) on the planner panel
179179local weapon_quantity = 1
180180
181181local function get_quantity (filter , hollow , bounds )
@@ -687,6 +687,43 @@ function PlannerOverlay:init()
687687
688688 local buildingplan = require (' plugins.buildingplan' )
689689
690+ -- WeaponSpiketrapPanel defined outside of main_panel, otherwise addviews breaks -> addviews expects table
691+ local WeaponSpiketrapPanel = defclass (WeaponSpiketrapPanel , widgets .Panel )
692+ WeaponSpiketrapPanel .ATTRS {
693+ view_id = ' weapons' ,
694+ visible = is_weapon_or_spike_trap ,
695+ }
696+
697+ function WeaponSpiketrapPanel :init ()
698+ self .options = utils .tabulate (function (i ) return {label = ' (' .. i .. ' )' , value = i , pen = COLOR_YELLOW } end , 1 , 10 )
699+
700+ self :addviews {
701+ widgets .CycleHotkeyLabel {
702+ view_id = ' weapons_hotkey' ,
703+ frame = {b = 4 , l = 1 , w = 28 },
704+ key = ' CUSTOM_T' ,
705+ key_back = ' CUSTOM_SHIFT_T' ,
706+ label = ' Number of weapons:' ,
707+ options = self .options ,
708+ initial_option = weapon_quantity ,
709+ on_change = function (val )
710+ weapon_quantity = val
711+ end
712+ },
713+
714+ widgets .Slider {
715+ view_id = ' weapons_slider' ,
716+ frame = {b = 6 , l = 4 , w = 35 },
717+ num_stops =# self .options ,
718+ get_idx_fn = function () return weapon_quantity end ,
719+ on_change = function (val )
720+ weapon_quantity = val
721+ self .subviews .weapons_hotkey :setOption (val )
722+ end
723+ }
724+ }
725+ end
726+
690727 main_panel :addviews {
691728 widgets .Label {
692729 frame = {},
@@ -757,16 +794,9 @@ function PlannerOverlay:init()
757794 {label = ' Down' , value = df .construction_type .DownStair },
758795 },
759796 },
760- widgets .CycleHotkeyLabel { -- TODO: this thing also needs a slider
761- view_id = ' weapons' ,
762- frame = {b = 4 , l = 1 , w = 28 },
763- key = ' CUSTOM_T' ,
764- key_back = ' CUSTOM_SHIFT_T' ,
765- label = ' Number of weapons:' ,
766- visible = is_weapon_or_spike_trap ,
767- options = utils .tabulate (function (i ) return {label = ' (' .. i .. ' )' , value = i , pen = COLOR_YELLOW } end , 1 , 10 ),
768- on_change = function (val ) weapon_quantity = val end ,
769- },
797+
798+ WeaponSpiketrapPanel {},
799+
770800 widgets .ToggleHotkeyLabel {
771801 view_id = ' engraved' ,
772802 frame = {b = 4 , l = 1 , w = 22 },
0 commit comments