|
|
@ -6,8 +6,10 @@ local logistics = require('plugins.logistics')
|
|
|
|
local overlay = require('plugins.overlay')
|
|
|
|
local overlay = require('plugins.overlay')
|
|
|
|
local widgets = require('gui.widgets')
|
|
|
|
local widgets = require('gui.widgets')
|
|
|
|
|
|
|
|
|
|
|
|
local STOCKPILES_DIR = 'dfhack-config/stockpiles';
|
|
|
|
local STOCKPILES_DIR = 'dfhack-config/stockpiles'
|
|
|
|
local STOCKPILES_LIBRARY_DIR = 'hack/data/stockpiles';
|
|
|
|
local STOCKPILES_LIBRARY_DIR = 'hack/data/stockpiles'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
local BAD_FILENAME_REGEX = '[^%w._]'
|
|
|
|
|
|
|
|
|
|
|
|
--------------------
|
|
|
|
--------------------
|
|
|
|
-- plugin logic
|
|
|
|
-- plugin logic
|
|
|
@ -66,7 +68,7 @@ end
|
|
|
|
|
|
|
|
|
|
|
|
local function assert_safe_name(name)
|
|
|
|
local function assert_safe_name(name)
|
|
|
|
if not name or #name == 0 then qerror('name missing or empty') end
|
|
|
|
if not name or #name == 0 then qerror('name missing or empty') end
|
|
|
|
if name:find('[^%w._]') then
|
|
|
|
if name:find(BAD_FILENAME_REGEX) then
|
|
|
|
qerror('name can only contain numbers, letters, periods, and underscores')
|
|
|
|
qerror('name can only contain numbers, letters, periods, and underscores')
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
@ -212,20 +214,42 @@ end
|
|
|
|
StockpilesExport = defclass(StockpilesExport, widgets.Window)
|
|
|
|
StockpilesExport = defclass(StockpilesExport, widgets.Window)
|
|
|
|
StockpilesExport.ATTRS{
|
|
|
|
StockpilesExport.ATTRS{
|
|
|
|
frame_title='Export stockpile settings',
|
|
|
|
frame_title='Export stockpile settings',
|
|
|
|
frame={w=50, h=45},
|
|
|
|
frame={w=33, h=15},
|
|
|
|
resizable=true,
|
|
|
|
resizable=true,
|
|
|
|
resize_min={w=50, h=20},
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function StockpilesExport:init()
|
|
|
|
function StockpilesExport:init()
|
|
|
|
self:addviews{
|
|
|
|
self:addviews{
|
|
|
|
widgets.EditField{}, widgets.Label{frame={}, text='Include which elements?'},
|
|
|
|
widgets.EditField{
|
|
|
|
widgets.ToggleHotkeyLabel{},
|
|
|
|
view_id='edit',
|
|
|
|
|
|
|
|
frame={t=0, l=0, r=0},
|
|
|
|
|
|
|
|
label_text='name: ',
|
|
|
|
|
|
|
|
on_char=function(ch)
|
|
|
|
|
|
|
|
return not ch:match(BAD_FILENAME_REGEX)
|
|
|
|
|
|
|
|
end,
|
|
|
|
|
|
|
|
}, widgets.Label{frame={t=2, l=0}, text='Include which elements?'},
|
|
|
|
|
|
|
|
widgets.ToggleHotkeyLabel{frame={t=4, l=0}, label='General settings', initial_option=false},
|
|
|
|
|
|
|
|
widgets.ToggleHotkeyLabel{
|
|
|
|
|
|
|
|
frame={t=5, l=0},
|
|
|
|
|
|
|
|
label='Container settings',
|
|
|
|
|
|
|
|
initial_option=false,
|
|
|
|
|
|
|
|
}, widgets.ToggleHotkeyLabel{frame={t=6, l=0}, label='Categories', initial_option=true},
|
|
|
|
|
|
|
|
widgets.ToggleHotkeyLabel{frame={t=7, l=0}, label='Subtypes', initial_option=true},
|
|
|
|
|
|
|
|
widgets.ToggleHotkeyLabel{frame={t=8, l=0}, label='DFHack features', initial_option=true},
|
|
|
|
|
|
|
|
widgets.HotkeyLabel{
|
|
|
|
|
|
|
|
frame={t=10, l=0},
|
|
|
|
|
|
|
|
label='export',
|
|
|
|
|
|
|
|
key='SELECT',
|
|
|
|
|
|
|
|
enabled=function()
|
|
|
|
|
|
|
|
return #self.subviews.edit.text > 0
|
|
|
|
|
|
|
|
end,
|
|
|
|
|
|
|
|
on_activate=self:callback('on_submit'),
|
|
|
|
|
|
|
|
},
|
|
|
|
}
|
|
|
|
}
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
function StockpilesExport:onInput(keys)
|
|
|
|
function StockpilesExport:on_submit(text)
|
|
|
|
-- if required
|
|
|
|
self:dismiss()
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
StockpilesExportScreen = defclass(StockpilesExportScreen, gui.ZScreenModal)
|
|
|
|
StockpilesExportScreen = defclass(StockpilesExportScreen, gui.ZScreenModal)
|
|
|
@ -263,8 +287,12 @@ function MinimizeButton:init()
|
|
|
|
|
|
|
|
|
|
|
|
ensure_key(self, 'frame').h = 1
|
|
|
|
ensure_key(self, 'frame').h = 1
|
|
|
|
|
|
|
|
|
|
|
|
local is_hovered = function() return self.hovered end
|
|
|
|
local is_hovered = function()
|
|
|
|
local is_not_hovered = function() return not self.hovered end
|
|
|
|
return self.hovered
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
local is_not_hovered = function()
|
|
|
|
|
|
|
|
return not self.hovered
|
|
|
|
|
|
|
|
end
|
|
|
|
local get_action_symbol = function()
|
|
|
|
local get_action_symbol = function()
|
|
|
|
return self.get_minimized_fn() and self.symbol_minimize or self.symbol_restore
|
|
|
|
return self.get_minimized_fn() and self.symbol_minimize or self.symbol_restore
|
|
|
|
end
|
|
|
|
end
|
|
|
@ -274,8 +302,7 @@ function MinimizeButton:init()
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
local hovered_text = {'[', {text=get_action_symbol}, ']'}
|
|
|
|
local hovered_text = {'[', {text=get_action_symbol}, ']'}
|
|
|
|
table.insert(hovered_text,
|
|
|
|
table.insert(hovered_text, self.label_pos == 'left' and 1 or #hovered_text + 1,
|
|
|
|
self.label_pos == 'left' and 1 or #hovered_text + 1,
|
|
|
|
|
|
|
|
{text=get_label, hpen=dfhack.pen.parse{fg=COLOR_BLACK, bg=COLOR_WHITE}})
|
|
|
|
{text=get_label, hpen=dfhack.pen.parse{fg=COLOR_BLACK, bg=COLOR_WHITE}})
|
|
|
|
|
|
|
|
|
|
|
|
self:addviews{
|
|
|
|
self:addviews{
|
|
|
@ -285,7 +312,10 @@ function MinimizeButton:init()
|
|
|
|
text={'[', {text=get_action_symbol}, ']'},
|
|
|
|
text={'[', {text=get_action_symbol}, ']'},
|
|
|
|
text_pen=dfhack.pen.parse{fg=COLOR_BLACK, bg=COLOR_LIGHTRED},
|
|
|
|
text_pen=dfhack.pen.parse{fg=COLOR_BLACK, bg=COLOR_LIGHTRED},
|
|
|
|
text_hpen=dfhack.pen.parse{fg=COLOR_WHITE, bg=COLOR_RED},
|
|
|
|
text_hpen=dfhack.pen.parse{fg=COLOR_WHITE, bg=COLOR_RED},
|
|
|
|
on_click=function() self.on_click() self:updateLayout() end,
|
|
|
|
on_click=function()
|
|
|
|
|
|
|
|
self.on_click()
|
|
|
|
|
|
|
|
self:updateLayout()
|
|
|
|
|
|
|
|
end,
|
|
|
|
visible=is_not_hovered,
|
|
|
|
visible=is_not_hovered,
|
|
|
|
}, widgets.Label{
|
|
|
|
}, widgets.Label{
|
|
|
|
view_id='hovered_label',
|
|
|
|
view_id='hovered_label',
|
|
|
@ -294,7 +324,10 @@ function MinimizeButton:init()
|
|
|
|
auto_width=true,
|
|
|
|
auto_width=true,
|
|
|
|
text_pen=dfhack.pen.parse{fg=COLOR_BLACK, bg=COLOR_LIGHTRED},
|
|
|
|
text_pen=dfhack.pen.parse{fg=COLOR_BLACK, bg=COLOR_LIGHTRED},
|
|
|
|
text_hpen=dfhack.pen.parse{fg=COLOR_WHITE, bg=COLOR_RED},
|
|
|
|
text_hpen=dfhack.pen.parse{fg=COLOR_WHITE, bg=COLOR_RED},
|
|
|
|
on_click=function() self.on_click() self:updateLayout() end,
|
|
|
|
on_click=function()
|
|
|
|
|
|
|
|
self.on_click()
|
|
|
|
|
|
|
|
self:updateLayout()
|
|
|
|
|
|
|
|
end,
|
|
|
|
visible=is_hovered,
|
|
|
|
visible=is_hovered,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -403,13 +436,14 @@ function StockpilesOverlay:init()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
self:addviews{
|
|
|
|
self:addviews{
|
|
|
|
main_panel,
|
|
|
|
main_panel, MinimizeButton{
|
|
|
|
MinimizeButton{
|
|
|
|
|
|
|
|
frame={b=0, l=1},
|
|
|
|
frame={b=0, l=1},
|
|
|
|
label_pos='right',
|
|
|
|
label_pos='right',
|
|
|
|
symbol_minimize=string.char(30),
|
|
|
|
symbol_minimize=string.char(30),
|
|
|
|
symbol_restore=string.char(31),
|
|
|
|
symbol_restore=string.char(31),
|
|
|
|
get_minimized_fn=function() return self.minimized end,
|
|
|
|
get_minimized_fn=function()
|
|
|
|
|
|
|
|
return self.minimized
|
|
|
|
|
|
|
|
end,
|
|
|
|
on_click=self:callback('toggleMinimized'),
|
|
|
|
on_click=self:callback('toggleMinimized'),
|
|
|
|
},
|
|
|
|
},
|
|
|
|
}
|
|
|
|
}
|
|
|
|