Added lua GUI front-end for autobutcher.

develop
Robert Heinrich 2013-03-29 01:48:45 +01:00 committed by Anuradha Dissanayake
parent 80de3c05fa
commit fd265b37d6
4 changed files with 819 additions and 2 deletions

@ -112,7 +112,7 @@ if (BUILD_SUPPORTED)
DFHACK_PLUGIN(tweak tweak.cpp)
DFHACK_PLUGIN(feature feature.cpp)
DFHACK_PLUGIN(lair lair.cpp)
DFHACK_PLUGIN(zone zone.cpp)
DFHACK_PLUGIN(zone zone.cpp LINK_LIBRARIES lua)
DFHACK_PLUGIN(catsplosion catsplosion.cpp)
DFHACK_PLUGIN(regrass regrass.cpp)
DFHACK_PLUGIN(forceequip forceequip.cpp)

@ -0,0 +1,12 @@
local _ENV = mkmodule('plugins.zone')
--[[
Native functions:
* autobutcher_isEnabled()
* autowatch_isEnabled()
--]]
return _ENV

@ -40,6 +40,11 @@ using namespace std;
#include "Console.h"
#include "Export.h"
#include "PluginManager.h"
#include "MiscUtils.h"
#include "LuaTools.h"
#include "DataFuncs.h"
#include "modules/Units.h"
#include "modules/Maps.h"
#include "modules/Gui.h"
@ -51,7 +56,7 @@ using namespace std;
#include "MiscUtils.h"
#include <VTableInterpose.h>
#include <df/ui.h>
#include "df/ui.h"
#include "df/world.h"
#include "df/world_raws.h"
#include "df/building_def.h"
@ -2716,6 +2721,8 @@ bool compareUnitAgesOlder(df::unit* i, df::unit* j)
return (age_i > age_j);
}
//enum WatchedRaceSubtypes
//{
// femaleKid=0,
@ -2892,6 +2899,17 @@ public:
// to ignore them for a while but still keep the target count settings
std::vector<WatchedRace*> watched_races;
// helper for sorting the watchlist alphabetically
bool compareRaceNames(WatchedRace* i, WatchedRace* j)
{
string name_i = getRaceName(i->raceId);
string name_j = getRaceName(j->raceId);
return (name_i < name_j);
}
static void autobutcher_sortWatchList(color_ostream &out);
// default target values for autobutcher
static int default_fk = 5;
static int default_mk = 1;
@ -3282,6 +3300,7 @@ command_result df_autobutcher(color_ostream &out, vector <string> & parameters)
WatchedRace * w = new WatchedRace(watch_race, target_raceids.back(), target_fk, target_mk, target_fa, target_ma);
w->UpdateConfig(out);
watched_races.push_back(w);
autobutcher_sortWatchList(out);
}
target_raceids.pop_back();
}
@ -3367,6 +3386,7 @@ command_result autoButcher( color_ostream &out, bool verbose = false )
announce = "New race added to autobutcher watchlist: " + getRaceName(w->raceId);
Gui::showAnnouncement(announce, 2, false);
//out << announce << endl;
autobutcher_sortWatchList(out);
}
}
@ -3475,6 +3495,7 @@ command_result init_autobutcher(color_ostream &out)
w->rconfig = *p;
watched_races.push_back(w);
}
autobutcher_sortWatchList(out);
return CR_OK;
}
@ -3541,6 +3562,294 @@ command_result cleanup_autonestbox(color_ostream &out)
return CR_OK;
}
/////////////////////////////////////
// API functions to control autobutcher with a lua script
static bool autobutcher_isEnabled() { return enable_autobutcher; }
static bool autowatch_isEnabled() { return enable_autobutcher_autowatch; }
static size_t autobutcher_getSleep(color_ostream &out)
{
return sleep_autobutcher;
}
static void autobutcher_setSleep(color_ostream &out, size_t ticks)
{
sleep_autobutcher = ticks;
if(config_autobutcher.isValid())
config_autobutcher.ival(1) = sleep_autobutcher;
}
static void autobutcher_setEnabled(color_ostream &out, bool enable)
{
if(enable)
{
enable_autobutcher = true;
start_autobutcher(out);
autoButcher(out, false);
}
else
{
enable_autobutcher = false;
if(config_autobutcher.isValid())
config_autobutcher.ival(0) = enable_autobutcher;
out << "Autobutcher stopped." << endl;
}
}
static void autowatch_setEnabled(color_ostream &out, bool enable)
{
if(enable)
{
out << "Auto-adding to watchlist started." << endl;
enable_autobutcher_autowatch = true;
if(config_autobutcher.isValid())
config_autobutcher.ival(2) = enable_autobutcher_autowatch;
}
else
{
out << "Auto-adding to watchlist stopped." << endl;
enable_autobutcher_autowatch = false;
if(config_autobutcher.isValid())
config_autobutcher.ival(2) = enable_autobutcher_autowatch;
}
}
static size_t autobutcher_getWatchListSize()
{
return watched_races.size();
}
// get race name for a watchlist index
static std::string autobutcher_getWatchListRace(color_ostream &out, size_t idx)
{
if(idx >= watched_races.size())
return "INVALID";
WatchedRace * w = watched_races[idx];
return getRaceName(w->raceId);
}
// get FK for a watchlist index
static size_t autobutcher_getWatchListRaceFK(color_ostream &out, size_t idx)
{
if(idx >= watched_races.size())
return -1;
WatchedRace * w = watched_races[idx];
return w->fk;
}
// get FA for a watchlist index
static size_t autobutcher_getWatchListRaceFA(color_ostream &out, size_t idx)
{
if(idx >= watched_races.size())
return -1;
WatchedRace * w = watched_races[idx];
return w->fa;
}
// get MK for a watchlist index
static size_t autobutcher_getWatchListRaceMK(color_ostream &out, size_t idx)
{
if(idx >= watched_races.size())
return -1;
WatchedRace * w = watched_races[idx];
return w->mk;
}
// get MA for a watchlist index
static size_t autobutcher_getWatchListRaceMA(color_ostream &out, size_t idx)
{
if(idx >= watched_races.size())
return -1;
WatchedRace * w = watched_races[idx];
return w->ma;
}
// set FK for a watchlist index
static void autobutcher_setWatchListRaceFK(color_ostream &out, size_t idx, size_t value)
{
if(idx >= watched_races.size())
return;
WatchedRace * w = watched_races[idx];
w->fk = value;
w->UpdateConfig(out);
}
// set FA for a watchlist index
static void autobutcher_setWatchListRaceFA(color_ostream &out, size_t idx, size_t value)
{
if(idx >= watched_races.size())
return;
WatchedRace * w = watched_races[idx];
w->fa = value;
w->UpdateConfig(out);
}
// set MK for a watchlist index
static void autobutcher_setWatchListRaceMK(color_ostream &out, size_t idx, size_t value)
{
if(idx >= watched_races.size())
return;
WatchedRace * w = watched_races[idx];
w->mk = value;
w->UpdateConfig(out);
}
// set MA for a watchlist index
static void autobutcher_setWatchListRaceMA(color_ostream &out, size_t idx, size_t value)
{
if(idx >= watched_races.size())
return;
WatchedRace * w = watched_races[idx];
w->ma = value;
w->UpdateConfig(out);
}
// check if "watch" is enabled for watchlist index
static bool autobutcher_isWatchListRaceWatched(color_ostream &out, size_t idx)
{
if(idx >= watched_races.size())
return false;
WatchedRace * w = watched_races[idx];
return w->isWatched;
}
// set "watched" status for a watchlist index
static void autobutcher_setWatchListRaceWatched(color_ostream &out, size_t idx, bool watched)
{
if(idx >= watched_races.size())
return;
WatchedRace * w = watched_races[idx];
w->isWatched = watched;
w->UpdateConfig(out);
}
// remove entry from watchlist
static void autobutcher_removeFromWatchList(color_ostream &out, size_t idx)
{
if(idx >= watched_races.size())
return;
WatchedRace * w = watched_races[idx];
w->RemoveConfig(out);
watched_races.erase(watched_races.begin()+idx);
}
// sort watchlist alphabetically
static void autobutcher_sortWatchList(color_ostream &out)
{
sort(watched_races.begin(), watched_races.end(), compareRaceNames);
}
// get default target values for new races
static size_t autobutcher_getDefaultMK(color_ostream &out)
{
return default_mk;
}
static size_t autobutcher_getDefaultMA(color_ostream &out)
{
return default_ma;
}
static size_t autobutcher_getDefaultFK(color_ostream &out)
{
return default_fk;
}
static size_t autobutcher_getDefaultFA(color_ostream &out)
{
return default_fa;
}
// set default target values for new races
static void autobutcher_setDefaultTargetNew(color_ostream &out, size_t fk, size_t mk, size_t fa, size_t ma)
{
default_fk = fk;
default_mk = mk;
default_fa = fa;
default_ma = ma;
if(config_autobutcher.isValid())
{
config_autobutcher.ival(3) = default_fk;
config_autobutcher.ival(4) = default_mk;
config_autobutcher.ival(5) = default_fa;
config_autobutcher.ival(6) = default_ma;
}
}
// set default target values for ALL races (update watchlist and set new default)
static void autobutcher_setDefaultTargetAll(color_ostream &out, size_t fk, size_t mk, size_t fa, size_t ma)
{
for(size_t i=0; i<watched_races.size(); i++)
{
WatchedRace * w = watched_races[i];
w->fk = fk;
w->mk = mk;
w->fa = fa;
w->ma = ma;
w->UpdateConfig(out);
}
autobutcher_setDefaultTargetNew(out, fk, mk, fa, ma);
}
static std::string testString(color_ostream &out, size_t i)
{
out << "where will this be written?" << std::endl;
return getRaceName(i);
}
// DFHACK_LUA_FUNCTION(autobutcher_setEnabled),
DFHACK_PLUGIN_LUA_FUNCTIONS {
DFHACK_LUA_FUNCTION(autobutcher_isEnabled),
DFHACK_LUA_FUNCTION(autowatch_isEnabled),
DFHACK_LUA_FUNCTION(autobutcher_setEnabled),
DFHACK_LUA_FUNCTION(autowatch_setEnabled),
DFHACK_LUA_FUNCTION(autobutcher_getSleep),
DFHACK_LUA_FUNCTION(autobutcher_setSleep),
DFHACK_LUA_FUNCTION(autobutcher_getWatchListSize),
DFHACK_LUA_FUNCTION(autobutcher_getWatchListRace),
DFHACK_LUA_FUNCTION(autobutcher_isWatchListRaceWatched),
DFHACK_LUA_FUNCTION(autobutcher_setWatchListRaceWatched),
DFHACK_LUA_FUNCTION(autobutcher_getWatchListRaceFK),
DFHACK_LUA_FUNCTION(autobutcher_getWatchListRaceFA),
DFHACK_LUA_FUNCTION(autobutcher_getWatchListRaceMK),
DFHACK_LUA_FUNCTION(autobutcher_getWatchListRaceMA),
DFHACK_LUA_FUNCTION(autobutcher_setWatchListRaceFK),
DFHACK_LUA_FUNCTION(autobutcher_setWatchListRaceFA),
DFHACK_LUA_FUNCTION(autobutcher_setWatchListRaceMK),
DFHACK_LUA_FUNCTION(autobutcher_setWatchListRaceMA),
DFHACK_LUA_FUNCTION(autobutcher_getDefaultFK),
DFHACK_LUA_FUNCTION(autobutcher_getDefaultFA),
DFHACK_LUA_FUNCTION(autobutcher_getDefaultMK),
DFHACK_LUA_FUNCTION(autobutcher_getDefaultMA),
DFHACK_LUA_FUNCTION(autobutcher_setDefaultTargetNew),
DFHACK_LUA_FUNCTION(autobutcher_setDefaultTargetAll),
DFHACK_LUA_FUNCTION(autobutcher_removeFromWatchList),
DFHACK_LUA_FUNCTION(autobutcher_sortWatchList),
DFHACK_LUA_FUNCTION(testString),
DFHACK_LUA_END
};
// end lua API
//START zone filters
using df::global::ui_building_item_cursor;

@ -0,0 +1,496 @@
-- A GUI front-end for the autobutcher plugin.
-- requires to be called from the stock screen (z)
--[[
API overview (zone/autobutcher plugin functions which can be used by this lua script):
autobutcher_isEnabled() - returns true if autobutcher is running
autowatch_isEnabled() - returns true if autowatch is running
autobutcher_getSleep() - get sleep timer in ticks
autobutcher_setSleep(int) - set sleep timer in ticks
autobutcher_getWatchListSize() - return size of watchlist
autobutcher_getWatchListRace(idx) - return race name for this watchlist index
autobutcher_isWatchListRaceWatched(idx) - true if this watchlist index is watched
autobutcher_setWatchListRaceWatched(idx, bool) - set watchlist index to watched/unwatched
autobutcher_getWatchListRaceFK() - get target fk
autobutcher_getWatchListRaceFA() - get target fa
autobutcher_getWatchListRaceMK() - get target mk
autobutcher_getWatchListRaceMA() - get target ma
autobutcher_setWatchListRaceFK(value) - set fk
autobutcher_setWatchListRaceFA(value) - set fa
autobutcher_setWatchListRaceMK(value) - set mk
autobutcher_setWatchListRaceMA(value) - set ma
autobutcher_removeFromWatchList(idx) - remove watchlist entry
autobutcher_sortWatchList() - sort the watchlist alphabetically
testString(id) - returns race name for this race id (gonna be removed soon)
--]]
local gui = require 'gui'
local utils = require 'utils'
local widgets = require 'gui.widgets'
local dlg = require 'gui.dialogs'
local plugin = require 'plugins.zone'
WatchList = defclass(WatchList, gui.FramedScreen)
WatchList.ATTRS {
frame_title = 'Autobutcher Watchlist',
frame_inset = 0, -- cover full DF window
frame_background = COLOR_BLACK,
frame_style = gui.BOUNDARY_FRAME,
}
-- width of the race name column in the UI
local racewidth = 25
function nextAutowatchState()
if(plugin.autowatch_isEnabled()) then
return 'stop'
end
return 'start'
end
function nextAutobutcherState()
if(plugin.autobutcher_isEnabled()) then
return 'stop'
end
return 'start'
end
function getSleepTimer()
return plugin.autobutcher_getSleep()
end
function setSleepTimer(ticks)
plugin.autobutcher_setSleep(ticks)
end
function WatchList:init(args)
self:addviews{
widgets.Panel{
frame = { l = 0, r = 0 },
frame_inset = 1,
subviews = {
widgets.Label{
frame = { l = 0, t = 0 },
text_pen = COLOR_CYAN,
text = {
{ text = 'Race', width = racewidth }, ' ',
{ text = 'female', width = 6 }, ' ',
{ text = ' male', width = 6 }, ' ',
{ text = 'Female', width = 6 }, ' ',
{ text = ' Male', width = 6 }, ' ',
{ text = 'watching?' },
NEWLINE,
{ text = '', width = racewidth }, ' ',
{ text = ' kids', width = 6 }, ' ',
{ text = ' kids', width = 6 }, ' ',
{ text = 'adults', width = 6 }, ' ',
{ text = 'adults', width = 6 }, ' ',
}
},
widgets.List{
view_id = 'list',
frame = { t = 3, b = 3 },
not_found_label = 'Watchlist is empty.',
edit_pen = COLOR_LIGHTCYAN,
text_pen = { fg = COLOR_GREY, bg = COLOR_BLACK },
cursor_pen = { fg = COLOR_WHITE, bg = COLOR_GREEN },
--on_select = self:callback('onSelectConstraint'),
},
widgets.Label{
view_id = 'bottom_ui',
frame = { b = 0, h = 1 },
text = 'filled by updateBottom()'
}
}
},
}
self:initListChoices()
self:updateBottom()
end
-- update the bottom part of the UI (after sleep timer changed etc)
function WatchList:updateBottom()
self.subviews.bottom_ui:setText(
{
{ key = 'CUSTOM_F', text = ': f kids',
on_activate = self:callback('onEditFK') }, ', ',
{ key = 'CUSTOM_M', text = ': m kids',
on_activate = self:callback('onEditMK') }, ', ',
{ key = 'CUSTOM_SHIFT_F', text = ': f adults',
on_activate = self:callback('onEditFA') }, ', ',
{ key = 'CUSTOM_SHIFT_M', text = ': m adults',
on_activate = self:callback('onEditMA') }, ', ',
{ key = 'CUSTOM_SHIFT_X', text = ': Delete',
on_activate = self:callback('onDeleteConstraint') }, ', ',
{ key = 'CUSTOM_W', text = ': toggle watch',
on_activate = self:callback('onToggleWatching') }, ', ', NEWLINE,
{ key = 'CUSTOM_SHIFT_A', text = ': '..nextAutobutcherState()..' Autobutcher',
on_activate = self:callback('onToggleAutobutcher') }, ', ',
{ key = 'CUSTOM_SHIFT_W', text = ': '..nextAutowatchState()..' Autowatch',
on_activate = self:callback('onToggleAutowatch') }, ', ',
{ key = 'CUSTOM_SHIFT_S', text = ': sleep timer ('..getSleepTimer()..' ticks)',
on_activate = self:callback('onEditSleepTimer') }, ', ',
})
end
function WatchList:initListChoices()
local choices = {}
-- first two rows are for "edit all races" and "edit new races"
local fk = plugin.autobutcher_getDefaultFK()
local fa = plugin.autobutcher_getDefaultFA()
local mk = plugin.autobutcher_getDefaultMK()
local ma = plugin.autobutcher_getDefaultMA()
local watched = '---'
table.insert (choices, {
text = {
{ text = '!! ALL RACES PLUS NEW', width = racewidth, pad_char = ' ' }, --' ',
{ text = tostring(fk), width = 7, rjustify = true },
{ text = tostring(mk), width = 7, rjustify = true },
{ text = tostring(fa), width = 7, rjustify = true },
{ text = tostring(ma), width = 7, rjustify = true },
{ text = watched, width = 6, rjustify = true }
}
})
table.insert (choices, {
text = {
{ text = '!! ONLY NEW RACES', width = racewidth, pad_char = ' ' }, --' ',
{ text = tostring(fk), width = 7, rjustify = true },
{ text = tostring(mk), width = 7, rjustify = true },
{ text = tostring(fa), width = 7, rjustify = true },
{ text = tostring(ma), width = 7, rjustify = true },
{ text = watched, width = 6, rjustify = true }
}
})
-- fill with watchlist
for i=0, plugin.autobutcher_getWatchListSize()-1 do
local racestr = plugin.autobutcher_getWatchListRace(i)
fk = plugin.autobutcher_getWatchListRaceFK(i)
fa = plugin.autobutcher_getWatchListRaceFA(i)
mk = plugin.autobutcher_getWatchListRaceMK(i)
ma = plugin.autobutcher_getWatchListRaceMA(i)
local watched = 'no'
if plugin.autobutcher_isWatchListRaceWatched(i) then
watched = 'yes'
end
table.insert (choices, {
text = {
{ text = racestr, width = racewidth, pad_char = ' ' }, --' ',
{ text = tostring(fk), width = 7, rjustify = true },
{ text = tostring(mk), width = 7, rjustify = true },
{ text = tostring(fa), width = 7, rjustify = true },
{ text = tostring(ma), width = 7, rjustify = true },
{ text = watched, width = 6, rjustify = true }
}
})
end
local list = self.subviews.list
list:setChoices(choices)
end
function WatchList:onInput(keys)
if keys.LEAVESCREEN then
self:dismiss()
else
WatchList.super.onInput(self, keys)
end
end
-- check the user input for target population values
function WatchList:checkUserInput(count, text)
if count == nil then
dlg.showMessage('Invalid Number', 'This is not a number: '..text..NEWLINE..'(for zero enter a 0)', COLOR_LIGHTRED)
return false
end
if count < 0 then
dlg.showMessage('Invalid Number', 'Negative numbers make no sense!', COLOR_LIGHTRED)
return false
end
return true
end
-- check the user input for sleep timer
function WatchList:checkUserInputSleep(count, text)
if count == nil then
dlg.showMessage('Invalid Number', 'This is not a number: '..text..NEWLINE..'(for zero enter a 0)', COLOR_LIGHTRED)
return false
end
if count < 1000 then
dlg.showMessage('Invalid Number',
'Minimum allowed timer value is 1000!'..NEWLINE..'Too low values could decrease performance'..NEWLINE..'and are not necessary!',
COLOR_LIGHTRED)
return false
end
return true
end
function WatchList:onEditFK()
local selidx,selobj = self.subviews.list:getSelected()
local fk = plugin.autobutcher_getDefaultFK();
local mk = plugin.autobutcher_getDefaultMK();
local fa = plugin.autobutcher_getDefaultFA();
local ma = plugin.autobutcher_getDefaultMA();
local race = 'ALL RACES PLUS NEW'
if selidx == 2 then
race = 'ONLY NEW RACES'
end
local watchindex = selidx - 3
if selidx > 2 then
fk = plugin.autobutcher_getWatchListRaceFK(watchindex)
race = plugin.autobutcher_getWatchListRace(watchindex)
end
dlg.showInputPrompt(
'Race: '..race,
'Enter desired maximum of female kids:',
COLOR_WHITE,
' '..fk,
function(text)
local count = tonumber(text)
if self:checkUserInput(count, text) then
fk = count
if selidx == 1 then
plugin.autobutcher_setDefaultTargetAll( fk, mk, fa, ma )
end
if selidx == 2 then
plugin.autobutcher_setDefaultTargetNew( fk, mk, fa, ma )
end
if selidx > 2 then
plugin.autobutcher_setWatchListRaceFK(watchindex, fk)
end
self:initListChoices()
end
end
)
end
function WatchList:onEditMK()
local selidx = self.subviews.list:getSelected()
local fk = plugin.autobutcher_getDefaultFK();
local mk = plugin.autobutcher_getDefaultMK();
local fa = plugin.autobutcher_getDefaultFA();
local ma = plugin.autobutcher_getDefaultMA();
local race = 'ALL RACES PLUS NEW'
if selidx == 2 then
race = 'ONLY NEW RACES'
end
local watchindex = selidx - 3
if selidx > 2 then
mk = plugin.autobutcher_getWatchListRaceMK(watchindex)
race = plugin.autobutcher_getWatchListRace(watchindex)
end
dlg.showInputPrompt(
'Race: '..race,
'Enter desired maximum of male kids:',
COLOR_WHITE,
' '..mk,
function(text)
local count = tonumber(text)
if self:checkUserInput(count, text) then
mk = count
if selidx == 1 then
plugin.autobutcher_setDefaultTargetAll( fk, mk, fa, ma )
end
if selidx == 2 then
plugin.autobutcher_setDefaultTargetNew( fk, mk, fa, ma )
end
if selidx > 2 then
plugin.autobutcher_setWatchListRaceMK(watchindex, mk)
end
self:initListChoices()
end
end
)
end
function WatchList:onEditFA()
local selidx = self.subviews.list:getSelected()
local fk = plugin.autobutcher_getDefaultFK();
local mk = plugin.autobutcher_getDefaultMK();
local fa = plugin.autobutcher_getDefaultFA();
local ma = plugin.autobutcher_getDefaultMA();
local race = 'ALL RACES PLUS NEW'
if selidx == 2 then
race = 'ONLY NEW RACES'
end
local watchindex = selidx - 3
if selidx > 2 then
fa = plugin.autobutcher_getWatchListRaceFA(watchindex)
race = plugin.autobutcher_getWatchListRace(watchindex)
end
dlg.showInputPrompt(
'Race: '..race,
'Enter desired maximum of female adults:',
COLOR_WHITE,
' '..fa,
function(text)
local count = tonumber(text)
if self:checkUserInput(count, text) then
fa = count
if selidx == 1 then
plugin.autobutcher_setDefaultTargetAll( fk, mk, fa, ma )
end
if selidx == 2 then
plugin.autobutcher_setDefaultTargetNew( fk, mk, fa, ma )
end
if selidx > 2 then
plugin.autobutcher_setWatchListRaceFA(watchindex, fa)
end
self:initListChoices()
end
end
)
end
function WatchList:onEditMA()
local selidx = self.subviews.list:getSelected()
local fk = plugin.autobutcher_getDefaultFK();
local mk = plugin.autobutcher_getDefaultMK();
local fa = plugin.autobutcher_getDefaultFA();
local ma = plugin.autobutcher_getDefaultMA();
local race = 'ALL RACES PLUS NEW'
if selidx == 2 then
race = 'ONLY NEW RACES'
end
local watchindex = selidx - 3
if selidx > 2 then
ma = plugin.autobutcher_getWatchListRaceMA(watchindex)
race = plugin.autobutcher_getWatchListRace(watchindex)
end
dlg.showInputPrompt(
'Race: '..race,
'Enter desired maximum of male adults:',
COLOR_WHITE,
' '..ma,
function(text)
local count = tonumber(text)
if self:checkUserInput(count, text) then
ma = count
if selidx == 1 then
plugin.autobutcher_setDefaultTargetAll( fk, mk, fa, ma )
end
if selidx == 2 then
plugin.autobutcher_setDefaultTargetNew( fk, mk, fa, ma )
end
if selidx > 2 then
plugin.autobutcher_setWatchListRaceMA(watchindex, ma)
end
self:initListChoices()
end
end
)
end
function WatchList:onEditSleepTimer()
local sleep = getSleepTimer()
dlg.showInputPrompt(
'Edit Sleep Timer',
'Enter new sleep timer in ticks:'..NEWLINE..'(1 ingame day equals 1200 ticks)',
COLOR_WHITE,
' '..sleep,
function(text)
local count = tonumber(text)
if self:checkUserInputSleep(count, text) then
sleep = count
setSleepTimer(sleep)
self:updateBottom()
end
end
)
end
function WatchList:onToggleWatching()
local selidx = self.subviews.list:getSelected()
if(selidx == 0) then
--print('special handling for zero - list empty?')
end
if (selidx == 1) then
--print('special handling for first row - ALL animals')
end
if (selidx == 2) then
--print('special handling for second row - NEW animals')
end
if selidx > 2 then
--print('handling for single animal on watchlist')
local idx = selidx - 3
if plugin.autobutcher_isWatchListRaceWatched(idx) then
plugin.autobutcher_setWatchListRaceWatched(idx, false)
else
plugin.autobutcher_setWatchListRaceWatched(idx, true)
end
end
self:initListChoices()
end
function WatchList:onDeleteConstraint()
local selidx,selobj = self.subviews.list:getSelected()
if(selidx < 3) then
-- print('cannot delete this entry')
return
end
local idx = selidx - 3
dlg.showYesNoPrompt(
'Delete from Watchlist',
'Really delete the selected entry?'..NEWLINE..'(you could just toggle watch instead)',
COLOR_YELLOW,
function()
plugin.autobutcher_removeFromWatchList(idx)
self:initListChoices()
end
)
end
function WatchList:onToggleAutobutcher()
if(plugin.autobutcher_isEnabled()) then
plugin.autobutcher_setEnabled(false)
plugin.autobutcher_sortWatchList()
else
plugin.autobutcher_setEnabled(true)
end
self:initListChoices()
self:updateBottom()
end
function WatchList:onToggleAutowatch()
if(plugin.autowatch_isEnabled()) then
plugin.autowatch_setEnabled(false)
else
plugin.autowatch_setEnabled(true)
end
self:initListChoices()
self:updateBottom()
end
local screen = WatchList{ }
screen:show()