96 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			96 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /*
 | |
|  *	Nana GUI Library Definition
 | |
|  *	Copyright(C) 2003-2015 Jinhao(cnjinhao@hotmail.com)
 | |
|  *
 | |
|  *	Distributed under the Boost Software License, Version 1.0. 
 | |
|  *	(See accompanying file LICENSE_1_0.txt or copy at 
 | |
|  *	http://www.boost.org/LICENSE_1_0.txt)
 | |
|  *
 | |
|  *	@file: nana/gui/wvl.cpp
 | |
|  *	@description:
 | |
|  *		the file contains the files required for running of Nana.GUI 
 | |
|  */
 | |
| 
 | |
| #include <nana/gui/wvl.hpp>
 | |
| #include <nana/gui/detail/bedrock.hpp>
 | |
| #include <nana/std_thread.hpp>
 | |
| #include <iostream> 
 | |
| #include <chrono>
 | |
| 
 | |
| //#define NANA_AUTOMATIC_GUI_TESTING
 | |
| namespace nana
 | |
| {
 | |
| 	namespace detail
 | |
| 	{
 | |
| 		void form_loader_private::insert_form(::nana::widget* p)
 | |
| 		{
 | |
| 			bedrock::instance().manage_form_loader(reinterpret_cast<basic_window*>(p->handle()), true);
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	void click(widget& w)
 | |
| 	{
 | |
| 		std::cout << "Automatically clicking widget "<<w.caption()<<":\n";
 | |
| 		arg_click arg;
 | |
| 		arg.window_handle = w.handle();
 | |
| 		w.events().click.emit(arg, w.handle());
 | |
| 	}
 | |
| 
 | |
| 	/// in seconds
 | |
| 	void Wait(unsigned wait)
 | |
| 	{
 | |
| 		if (!wait) return;
 | |
| 		std::cout << "waiting " << wait << " sec...\n";
 | |
| 		std::this_thread::sleep_for(std::chrono::seconds{ wait });
 | |
| 	}
 | |
| 
 | |
| 	void pump()
 | |
| 	{
 | |
| 		internal_scope_guard lock;
 | |
| 		detail::bedrock::instance().pump_event(nullptr, false);
 | |
| 	}
 | |
| 
 | |
| 
 | |
| 	void exec(
 | |
| 		unsigned wait,         // = 1,      ///< for the GUI to be constructed, in seconds  
 | |
| 		unsigned wait_end,     // = 1,      ///< for the GUI to be destructed, in seconds
 | |
| 		std::function<void()>f // = {}      ///< emit events to mimics user actions and may asert results
 | |
| 	)
 | |
| 	{
 | |
| 	#ifdef NANA_AUTOMATIC_GUI_TESTING
 | |
| 			
 | |
| 	    std::cout << "Will wait " << wait << " sec...\n";
 | |
| 
 | |
| 	    std::thread t([wait, &f, wait_end]()
 | |
| 			{ 
 | |
| 				Wait( wait );
 | |
| 				std::cout << "running... \n"  ;
 | |
| 				if (f)
 | |
| 				{
 | |
| 					f();
 | |
| 					std::cout << "\nCongratulations, this was not trivial !" << std::endl;
 | |
| 				}else
 | |
| 				{
 | |
| 					std::cout << "\nJust a trivial test." << std::endl;
 | |
| 				}
 | |
| 				std::cout << "Done... \n";
 | |
| 				std::cout << "Now again ";
 | |
| 				Wait(wait_end);
 | |
| 				std::cout << "Done... Now API::exit all ...\n";
 | |
| 				API::exit_all();   
 | |
| 			});		
 | |
| 
 | |
| 		pump();
 | |
| 		if (t.joinable())
 | |
| 			t.join();
 | |
| 
 | |
| 	#else
 | |
| 		static_cast<void>(wait);
 | |
| 		static_cast<void>(wait_end);
 | |
| 		static_cast<void>(f); //to eliminte unused parameter compiler warning.
 | |
| 
 | |
| 		pump();
 | |
| 	#endif
 | |
| 	}
 | |
| }//end namespace nana
 | 
