diff options
| author | Alexander Gavrilov | 2012-09-20 11:11:20 +0400 |
|---|---|---|
| committer | Alexander Gavrilov | 2012-09-20 11:11:20 +0400 |
| commit | c39a33722316ee91f7a42abcd76149788dd19196 (patch) | |
| tree | e057fabb61758db013f91f633ca5a97bbbd166a2 /library/modules | |
| parent | 7ce772ae0ea69ab26009a27d71bd681382ecfac7 (diff) | |
| download | dfhack-c39a33722316ee91f7a42abcd76149788dd19196.tar.gz dfhack-c39a33722316ee91f7a42abcd76149788dd19196.tar.bz2 dfhack-c39a33722316ee91f7a42abcd76149788dd19196.tar.xz | |
Add unit/item/job/building getter hook vmethods to dfhack_viewscreen.
Diffstat (limited to 'library/modules')
| -rw-r--r-- | library/modules/Gui.cpp | 11 | ||||
| -rw-r--r-- | library/modules/Screen.cpp | 41 |
2 files changed, 52 insertions, 0 deletions
diff --git a/library/modules/Gui.cpp b/library/modules/Gui.cpp index 10a20dc2..bc7deedc 100644 --- a/library/modules/Gui.cpp +++ b/library/modules/Gui.cpp @@ -691,6 +691,8 @@ df::job *Gui::getSelectedJob(color_ostream &out, bool quiet) return job; } + else if (auto dfscreen = dfhack_viewscreen::try_cast(top)) + return dfscreen->getSelectedJob(); else return getSelectedWorkshopJob(out, quiet); } @@ -781,6 +783,9 @@ static df::unit *getAnyUnit(df::viewscreen *top) return NULL; } + if (auto dfscreen = dfhack_viewscreen::try_cast(top)) + return dfscreen->getSelectedUnit(); + if (!Gui::dwarfmode_hotkey(top)) return NULL; @@ -875,6 +880,9 @@ static df::item *getAnyItem(df::viewscreen *top) return NULL; } + if (auto dfscreen = dfhack_viewscreen::try_cast(top)) + return dfscreen->getSelectedItem(); + if (!Gui::dwarfmode_hotkey(top)) return NULL; @@ -942,6 +950,9 @@ static df::building *getAnyBuilding(df::viewscreen *top) using df::global::world; using df::global::ui_sidebar_menus; + if (auto dfscreen = dfhack_viewscreen::try_cast(top)) + return dfscreen->getSelectedBuilding(); + if (!Gui::dwarfmode_hotkey(top)) return NULL; diff --git a/library/modules/Screen.cpp b/library/modules/Screen.cpp index 9f258fe0..8057d17a 100644 --- a/library/modules/Screen.cpp +++ b/library/modules/Screen.cpp @@ -50,6 +50,10 @@ using namespace DFHack; #include "df/tile_page.h" #include "df/interfacest.h" #include "df/enabler.h" +#include "df/unit.h" +#include "df/item.h" +#include "df/job.h" +#include "df/building.h" using namespace df::enums; using df::global::init; @@ -322,6 +326,11 @@ bool dfhack_viewscreen::is_instance(df::viewscreen *screen) return dfhack_screens.count(screen) != 0; } +dfhack_viewscreen *dfhack_viewscreen::try_cast(df::viewscreen *screen) +{ + return is_instance(screen) ? static_cast<dfhack_viewscreen*>(screen) : NULL; +} + void dfhack_viewscreen::check_resize() { auto size = Screen::getWindowSize(); @@ -637,3 +646,35 @@ void dfhack_lua_viewscreen::onDismiss() lua_pushstring(Lua::Core::State, "onDismiss"); safe_call_lua(do_notify, 1, 0); } + +df::unit *dfhack_lua_viewscreen::getSelectedUnit() +{ + Lua::StackUnwinder frame(Lua::Core::State); + lua_pushstring(Lua::Core::State, "onGetSelectedUnit"); + safe_call_lua(do_notify, 1, 1); + return Lua::GetDFObject<df::unit>(Lua::Core::State, -1); +} + +df::item *dfhack_lua_viewscreen::getSelectedItem() +{ + Lua::StackUnwinder frame(Lua::Core::State); + lua_pushstring(Lua::Core::State, "onGetSelectedItem"); + safe_call_lua(do_notify, 1, 1); + return Lua::GetDFObject<df::item>(Lua::Core::State, -1); +} + +df::job *dfhack_lua_viewscreen::getSelectedJob() +{ + Lua::StackUnwinder frame(Lua::Core::State); + lua_pushstring(Lua::Core::State, "onGetSelectedJob"); + safe_call_lua(do_notify, 1, 1); + return Lua::GetDFObject<df::job>(Lua::Core::State, -1); +} + +df::building *dfhack_lua_viewscreen::getSelectedBuilding() +{ + Lua::StackUnwinder frame(Lua::Core::State); + lua_pushstring(Lua::Core::State, "onGetSelectedBuilding"); + safe_call_lua(do_notify, 1, 1); + return Lua::GetDFObject<df::building>(Lua::Core::State, -1); +} |
