diff options
author | Matthew Cline <zelgadis@sourceforge.net> | 2009-11-22 20:56:08 -0800 |
---|---|---|
committer | Matthew Cline <zelgadis@sourceforge.net> | 2009-11-22 21:02:48 -0800 |
commit | ce0b009e851f37ee522e7e0ef420a0e9fb0b246e (patch) | |
tree | 8c363c6cf37ebc36f2c615a666b00ebe3ce1b978 | |
parent | 55abf2cd3e897e7c06b860427a31484810b203dc (diff) | |
download | crawl-ref-ce0b009e851f37ee522e7e0ef420a0e9fb0b246e.tar.gz crawl-ref-ce0b009e851f37ee522e7e0ef420a0e9fb0b246e.zip |
New class pause_all_key_recorders
If declared on the stack, it will pause all key recorders as soon as
declared, then return them to their previous pausing state when it goes
out of scope.
-rw-r--r-- | crawl-ref/source/macro.cc | 15 | ||||
-rw-r--r-- | crawl-ref/source/macro.h | 9 |
2 files changed, 24 insertions, 0 deletions
diff --git a/crawl-ref/source/macro.cc b/crawl-ref/source/macro.cc index 25e916430f..d1fa5f004e 100644 --- a/crawl-ref/source/macro.cc +++ b/crawl-ref/source/macro.cc @@ -995,6 +995,21 @@ void key_recorder::clear() macro_trigger_keys.clear(); } +pause_all_key_recorders::pause_all_key_recorders() +{ + for (unsigned int i = 0; i < recorders.size(); i++) + { + prev_pause_status.push_back(recorders[i]->paused); + recorders[i]->paused = true; + } +} + +pause_all_key_recorders::~pause_all_key_recorders() +{ + for (unsigned int i = 0; i < recorders.size(); i++) + recorders[i]->paused = prev_pause_status[i]; +} + void add_key_recorder(key_recorder* recorder) { for (int i = 0, size = recorders.size(); i < size; i++) diff --git a/crawl-ref/source/macro.h b/crawl-ref/source/macro.h index f38cd9c20f..0e847a1b55 100644 --- a/crawl-ref/source/macro.h +++ b/crawl-ref/source/macro.h @@ -40,6 +40,15 @@ public: void clear(); }; +class pause_all_key_recorders { +public: + pause_all_key_recorders(); + ~pause_all_key_recorders(); + +private: + std::vector<bool> prev_pause_status; +}; + int getchm(int (*rgetch)() = NULL); // keymaps applied (ie for prompts) int getchm(KeymapContext context, int (*rgetch)() = NULL); |