summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/menu.cc
diff options
context:
space:
mode:
Diffstat (limited to 'crawl-ref/source/menu.cc')
-rw-r--r--crawl-ref/source/menu.cc29
1 files changed, 29 insertions, 0 deletions
diff --git a/crawl-ref/source/menu.cc b/crawl-ref/source/menu.cc
index 7b78c92b1e..e4a3ea7904 100644
--- a/crawl-ref/source/menu.cc
+++ b/crawl-ref/source/menu.cc
@@ -1382,3 +1382,32 @@ bool formatted_scroller::process_key( int keyin )
return true;
}
+
+int ToggleableMenu::pre_process(int key)
+{
+ if ( std::find(toggle_keys.begin(), toggle_keys.end(), key) !=
+ toggle_keys.end() )
+ {
+ // Toggle all menu entries
+ for ( unsigned int i = 0; i < items.size(); ++i )
+ {
+ ToggleableMenuEntry* const p =
+ dynamic_cast<ToggleableMenuEntry*>(items[i]);
+ if ( p )
+ p->toggle();
+ }
+
+ // Toggle title
+ ToggleableMenuEntry* const pt =
+ dynamic_cast<ToggleableMenuEntry*>(title);
+ if ( pt )
+ pt->toggle();
+
+ // Redraw
+ draw_menu();
+
+ // Don't further process the key
+ return 0;
+ }
+ return key;
+}