diff --git a/plugins/lua/stockpiles.lua b/plugins/lua/stockpiles.lua index 3e03d9eda..230cfb332 100644 --- a/plugins/lua/stockpiles.lua +++ b/plugins/lua/stockpiles.lua @@ -75,7 +75,7 @@ end local function get_sp_id(opts) if opts.id then return opts.id end - local sp = dfhack.gui.getSelectedStockpile() + local sp = dfhack.gui.getSelectedStockpile(true) if sp then return sp.id end return nil end @@ -212,16 +212,16 @@ function get_stockpile_features(stockpile_number) return config.melt, config.trade, config.dump end +function set_stockpile_features(stockpile_number, melt, trade, dump) + logistics.logistics_setStockpileConfig(stockpile_number, melt, trade, dump) +end + -------------------- -- dialogs -------------------- StockpilesExport = defclass(StockpilesExport, widgets.Window) -StockpilesExport.ATTRS{ - frame_title='Export stockpile settings', - frame={w=33, h=15}, - resizable=true, -} +StockpilesExport.ATTRS{frame_title='Export stockpile settings', frame={w=33, h=15}, resizable=true} function StockpilesExport:init() self:addviews{ @@ -365,22 +365,19 @@ end StockpilesOverlay = defclass(StockpilesOverlay, overlay.OverlayWidget) StockpilesOverlay.ATTRS{ - default_pos={x=53, y=-6}, + default_pos={x=24, y=-6}, default_enabled=true, viewscreens='dwarfmode/Some/Stockpile', - frame={w=27, h=11}, + frame={w=73, h=4}, } function StockpilesOverlay:init() self.minimized = false - self.hovered = false - local main_panel = widgets.ResizingPanel{ + local main_panel = widgets.Panel{ view_id='main', - frame={b=0, l=0, r=0}, frame_style=gui.MEDIUM_FRAME, frame_background=gui.CLEAR_PEN, - autoarrange_subviews=true, visible=function() return not self.minimized end, @@ -388,64 +385,59 @@ function StockpilesOverlay:init() widgets.HotkeyLabel{ frame={t=0, l=0}, label='import settings', + auto_width=true, key='CUSTOM_CTRL_I', on_activate=do_import, }, widgets.HotkeyLabel{ frame={t=1, l=0}, label='export settings', + auto_width=true, key='CUSTOM_CTRL_E', on_activate=do_export, }, widgets.Panel{ - frame={t=2, h=4}, + frame={t=0, l=25}, subviews={ widgets.Label{ - frame={t=1, l=0, h=2}, + frame={t=0, l=0, h=1}, auto_height=false, - text={'Designate items brought', NEWLINE, 'to this stockpile for:'}, + text={'Designate items brought to this stockpile for:'}, + text_pen=COLOR_DARKGREY, + }, widgets.ToggleHotkeyLabel{ + view_id='melt', + frame={t=1, l=0}, + auto_width=true, + key='CUSTOM_CTRL_M', + option_gap=-1, + options={{label='Melting', value=true, pen=COLOR_RED}, + {label='Melting', value=false}}, + on_change=self:callback('toggleLogisticsFeature', 'melt'), + }, widgets.ToggleHotkeyLabel{ + view_id='trade', + frame={t=1, l=16}, + auto_width=true, + key='CUSTOM_CTRL_T', + option_gap=-1, + options={{label='Trading', value=true, pen=COLOR_YELLOW}, + {label='Trading', value=false}}, + on_change=self:callback('toggleLogisticsFeature', 'trade'), + }, widgets.ToggleHotkeyLabel{ + view_id='dump', + frame={t=1, l=32}, + auto_width=true, + key='CUSTOM_CTRL_U', + option_gap=-1, + options={{label='Dumping', value=true, pen=COLOR_LIGHTMAGENTA}, + {label='Dumping', value=false}}, + on_change=self:callback('toggleLogisticsFeature', 'dump'), }, }, - visible=function() - return self.hovered or self.subviews.melt:getOptionValue() or - self.subviews.trade:getOptionValue() or - self.subviews.dump:getOptionValue() - end, - }, widgets.ToggleHotkeyLabel{ - view_id='melt', - frame={t=6, l=2}, - label='melting', - key='CUSTOM_CTRL_M', - on_change=self:callback('toggleLogisticsFeature', 'melt'), - visible=function() - return self.hovered or self.subviews.melt:getOptionValue() - end, - }, widgets.ToggleHotkeyLabel{ - view_id='trade', - frame={t=7, l=2}, - label='trading', - key='CUSTOM_CTRL_T', - on_change=self:callback('toggleLogisticsFeature', 'trade'), - visible=function() - return self.hovered or self.subviews.trade:getOptionValue() - end, - }, widgets.ToggleHotkeyLabel{ - view_id='dump', - frame={t=8, l=2}, - label='dumping', - key='CUSTOM_CTRL_D', - on_change=self:callback('toggleLogisticsFeature', 'dump'), - visible=function() - return self.hovered or self.subviews.dump:getOptionValue() - end, }, }, } self:addviews{ main_panel, MinimizeButton{ - frame={b=0, l=1}, - label_pos='right', - symbol_minimize=string.char(30), - symbol_restore=string.char(31), + frame={t=0, r=1}, get_minimized_fn=function() return self.minimized end, @@ -460,33 +452,25 @@ function StockpilesOverlay:overlay_onupdate() end function StockpilesOverlay:onRenderFrame() - local sp = dfhack.gui.getSelectedStockpile() - local sp_updated = false - if self.cur_stockpile ~= sp then + local sp = dfhack.gui.getSelectedStockpile(true) + if sp and self.cur_stockpile ~= sp then local config = logistics.logistics_getStockpileConfigs(sp.stockpile_number)[1] self.subviews.melt:setOption(config.melt == 1) self.subviews.trade:setOption(config.trade == 1) self.subviews.dump:setOption(config.dump == 1) self.cur_stockpile = sp - sp_updated = true - end - local prev_hovered = self.hovered - self.hovered = not not (self.hovered and self:getMouseFramePos() or - self.subviews.main:getMousePos()) - if self.hovered ~= prev_hovered or sp_updated then - self:updateLayout() - df.global.gps.force_full_display_count = 1 end end function StockpilesOverlay:toggleLogisticsFeature(feature) - local sp = dfhack.gui.getSelectedStockpile() + self.cur_stockpile = nil + local sp = dfhack.gui.getSelectedStockpile(true) + if not sp then return end local config = logistics.logistics_getStockpileConfigs(sp.stockpile_number)[1] -- logical xor logistics.logistics_setStockpileConfig(config.stockpile_number, (feature == 'melt') ~= (config.melt == 1), (feature == 'trade') ~= (config.trade == 1), (feature == 'dump') ~= (config.dump == 1)) - self.cur_stockpile = nil end function StockpilesOverlay:toggleMinimized()