25 lines
		
	
	
		
			941 B
		
	
	
	
		
			C++
		
	
			
		
		
	
	
			25 lines
		
	
	
		
			941 B
		
	
	
	
		
			C++
		
	
| #include "df/viewscreen_setupdwarfgamest.h"
 | |
| 
 | |
| struct embark_profile_name_hook : df::viewscreen_setupdwarfgamest {
 | |
|     typedef df::viewscreen_setupdwarfgamest interpose_base;
 | |
| 
 | |
|     DEFINE_VMETHOD_INTERPOSE(void, feed, (std::set<df::interface_key> *input)) {
 | |
|         int ch = -1;
 | |
|         for (auto it = input->begin(); ch == -1 && it != input->end(); ++it) {
 | |
|             ch = Screen::keyToChar(*it);
 | |
|         }
 | |
|         // Intercept all printable characters except space.
 | |
|         // If space is intercepted the shift-space abort key will not work.
 | |
|         if (in_save_profile && ch >= 33 && ch <= 126) {
 | |
|             profile_name.push_back((char)ch);
 | |
|         } else {
 | |
|             if (input->count(df::interface_key::LEAVESCREEN)) {
 | |
|                 input->insert(df::interface_key::SETUPGAME_SAVE_PROFILE_ABORT);
 | |
|             }
 | |
|             INTERPOSE_NEXT(feed)(input);
 | |
|         }
 | |
|     }
 | |
| };
 | |
| 
 | |
| IMPLEMENT_VMETHOD_INTERPOSE(embark_profile_name_hook, feed);
 |