diff options
| author | Alexander Gavrilov | 2012-08-24 13:20:08 +0400 |
|---|---|---|
| committer | Alexander Gavrilov | 2012-08-24 13:20:08 +0400 |
| commit | e825dc5ddb1f2c0798b571ebcb02a52e184fc689 (patch) | |
| tree | f5fe92c3ea5b2f56e677f8d9d0b670e252317b4c /library/modules | |
| parent | b12b9fa91e3be0d4d157f144f4b20202cdb72917 (diff) | |
| download | dfhack-e825dc5ddb1f2c0798b571ebcb02a52e184fc689.tar.gz dfhack-e825dc5ddb1f2c0798b571ebcb02a52e184fc689.tar.bz2 dfhack-e825dc5ddb1f2c0798b571ebcb02a52e184fc689.tar.xz | |
Tweak the API for current viewscreen, and dispatch show/dismiss from C++.
Diffstat (limited to 'library/modules')
| -rw-r--r-- | library/modules/Gui.cpp | 16 | ||||
| -rw-r--r-- | library/modules/Screen.cpp | 30 |
2 files changed, 37 insertions, 9 deletions
diff --git a/library/modules/Gui.cpp b/library/modules/Gui.cpp index 9d3ee96e..91a17e99 100644 --- a/library/modules/Gui.cpp +++ b/library/modules/Gui.cpp @@ -983,17 +983,19 @@ void Gui::showPopupAnnouncement(std::string message, int color, bool bright) world->status.popups.push_back(popup); } -df::viewscreen * Gui::GetCurrentScreen() +df::viewscreen *Gui::getCurViewscreen(bool skip_dismissed) { df::viewscreen * ws = &gview->view; - while(ws) + while (ws && ws->child) + ws = ws->child; + + if (skip_dismissed) { - if(ws->child) - ws = ws->child; - else - return ws; + while (ws && Screen::isDismissed(ws) && ws->parent) + ws = ws->parent; } - return 0; + + return ws; } bool Gui::getViewCoords (int32_t &x, int32_t &y, int32_t &z) diff --git a/library/modules/Screen.cpp b/library/modules/Screen.cpp index 9b6839a4..c2377f2c 100644 --- a/library/modules/Screen.cpp +++ b/library/modules/Screen.cpp @@ -235,14 +235,26 @@ bool Screen::show(df::viewscreen *screen, df::viewscreen *before) if (screen->child) screen->child->parent = screen; + if (dfhack_viewscreen::is_instance(screen)) + static_cast<dfhack_viewscreen*>(screen)->onShow(); + return true; } -void Screen::dismiss(df::viewscreen *screen) +void Screen::dismiss(df::viewscreen *screen, bool to_first) { CHECK_NULL_POINTER(screen); - screen->breakdown_level = interface_breakdown_types::STOPSCREEN; + if (screen->breakdown_level != interface_breakdown_types::NONE) + return; + + if (to_first) + screen->breakdown_level = interface_breakdown_types::TOFIRST; + else + screen->breakdown_level = interface_breakdown_types::STOPSCREEN; + + if (dfhack_viewscreen::is_instance(screen)) + static_cast<dfhack_viewscreen*>(screen)->onDismiss(); } bool Screen::isDismissed(df::viewscreen *screen) @@ -261,6 +273,8 @@ static std::set<df::viewscreen*> dfhack_screens; dfhack_viewscreen::dfhack_viewscreen() : text_input_mode(false) { dfhack_screens.insert(this); + + last_size = Screen::getWindowSize(); } dfhack_viewscreen::~dfhack_viewscreen() @@ -576,3 +590,15 @@ void dfhack_lua_viewscreen::feed(std::set<df::interface_key> *keys) lua_pushlightuserdata(Lua::Core::State, keys); safe_call_lua(do_input, 1, 0); } + +void dfhack_lua_viewscreen::onShow() +{ + lua_pushstring(Lua::Core::State, "onShow"); + safe_call_lua(do_notify, 1, 0); +} + +void dfhack_lua_viewscreen::onDismiss() +{ + lua_pushstring(Lua::Core::State, "onDismiss"); + safe_call_lua(do_notify, 1, 0); +} |
