From ce0b009e851f37ee522e7e0ef420a0e9fb0b246e Mon Sep 17 00:00:00 2001 From: Matthew Cline Date: Sun, 22 Nov 2009 20:56:08 -0800 Subject: 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. --- crawl-ref/source/macro.cc | 15 +++++++++++++++ crawl-ref/source/macro.h | 9 +++++++++ 2 files changed, 24 insertions(+) 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 prev_pause_status; +}; + int getchm(int (*rgetch)() = NULL); // keymaps applied (ie for prompts) int getchm(KeymapContext context, int (*rgetch)() = NULL); -- cgit v1.2.3-54-g00ecf