Add widget_traits class
This commit is contained in:
		
							parent
							
								
									7b30855976
								
							
						
					
					
						commit
						bf35932bfb
					
				@ -483,16 +483,6 @@ namespace nana
 | 
				
			|||||||
			basic_event<arg_unload>	unload;
 | 
								basic_event<arg_unload>	unload;
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
	}//end namespace detail
 | 
						}//end namespace detail
 | 
				
			||||||
 | 
					 | 
				
			||||||
	namespace dev
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		template<typename Widget>
 | 
					 | 
				
			||||||
		struct event_mapping
 | 
					 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			typedef general_events type;
 | 
					 | 
				
			||||||
		};
 | 
					 | 
				
			||||||
	}//end namespace dev
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
}//end namespace nana
 | 
					}//end namespace nana
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
				
			|||||||
@ -24,6 +24,17 @@ namespace nana
 | 
				
			|||||||
	class drawer_trigger;
 | 
						class drawer_trigger;
 | 
				
			||||||
	class widget;
 | 
						class widget;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						namespace dev
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							/// Traits for widget classes
 | 
				
			||||||
 | 
							template<typename Widget>
 | 
				
			||||||
 | 
							struct widget_traits
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								using event_type = ::nana::general_events;
 | 
				
			||||||
 | 
								using scheme_type = ::nana::widget_colors;
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace API
 | 
					namespace API
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	void effects_edge_nimbus(window, effects::edge_nimbus);
 | 
						void effects_edge_nimbus(window, effects::edge_nimbus);
 | 
				
			||||||
@ -76,13 +87,6 @@ namespace API
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	void exit();
 | 
						void exit();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	template<typename Scheme>
 | 
					 | 
				
			||||||
	Scheme& get_scheme()
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		auto & brock = ::nana::detail::bedrock::instance();
 | 
					 | 
				
			||||||
		return static_cast<Scheme&>(brock.get_scheme_template(::nana::detail::scheme_factory<Scheme>{}));
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	nana::string transform_shortkey_text(nana::string text, nana::string::value_type &shortkey, nana::string::size_type *skpos);
 | 
						nana::string transform_shortkey_text(nana::string text, nana::string::value_type &shortkey, nana::string::size_type *skpos);
 | 
				
			||||||
	bool register_shortkey(window, unsigned long);
 | 
						bool register_shortkey(window, unsigned long);
 | 
				
			||||||
	void unregister_shortkey(window);
 | 
						void unregister_shortkey(window);
 | 
				
			||||||
@ -142,16 +146,16 @@ namespace API
 | 
				
			|||||||
	bool	set_parent_window(window, window new_parent);
 | 
						bool	set_parent_window(window, window new_parent);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	template<typename Widget=::nana::widget>
 | 
						template<typename Widget=::nana::widget>
 | 
				
			||||||
	typename ::nana::dev::event_mapping<Widget>::type & events(window wd)
 | 
						typename ::nana::dev::widget_traits<Widget>::event_type & events(window wd)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		typedef typename ::nana::dev::event_mapping<Widget>::type event_type;
 | 
							using event_type = typename ::nana::dev::widget_traits<Widget>::event_type;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		internal_scope_guard lock;
 | 
							internal_scope_guard lock;
 | 
				
			||||||
		auto * general_evt = detail::get_general_events(wd);
 | 
							auto * general_evt = detail::get_general_events(wd);
 | 
				
			||||||
		if (nullptr == general_evt)
 | 
							if (nullptr == general_evt)
 | 
				
			||||||
			throw std::invalid_argument("API::events(): bad parameter window handle, no events object or invalid window handle.");
 | 
								throw std::invalid_argument("API::events(): bad parameter window handle, no events object or invalid window handle.");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (std::is_same<decltype(*general_evt), event_type>::value)
 | 
							if (std::is_same<::nana::general_events, event_type>::value)
 | 
				
			||||||
			return *static_cast<event_type*>(general_evt);
 | 
								return *static_cast<event_type*>(general_evt);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		auto * widget_evt = dynamic_cast<event_type*>(general_evt);
 | 
							auto * widget_evt = dynamic_cast<event_type*>(general_evt);
 | 
				
			||||||
@ -169,6 +173,25 @@ namespace API
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	void umake_event(event_handle);
 | 
						void umake_event(event_handle);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						template<typename Widget = ::nana::widget>
 | 
				
			||||||
 | 
						typename ::nana::dev::widget_traits<Widget>::scheme_type & scheme(window wd)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							using scheme_type = typename ::nana::dev::widget_traits<Widget>::scheme_type;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							internal_scope_guard lock;
 | 
				
			||||||
 | 
							auto * wdg_colors = ::nana::dev::get_scheme(wd);
 | 
				
			||||||
 | 
							if (nullptr == wdg_colors)
 | 
				
			||||||
 | 
								throw std::invalid_argument("API::scheme(): bad parameter window handle, no events object or invalid window handle.");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if (std::is_same<::nana::widget_colors, scheme_type>::value)
 | 
				
			||||||
 | 
								return *static_cast<scheme_type*>(wdg_colors);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							auto * comp_wdg_colors = dynamic_cast<scheme_type*>(wdg_colors);
 | 
				
			||||||
 | 
							if (nullptr == comp_wdg_colors)
 | 
				
			||||||
 | 
								throw std::invalid_argument("API::scheme(): bad template parameter Widget, the widget type and window handle do not match.");
 | 
				
			||||||
 | 
							return *comp_wdg_colors;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	nana::point window_position(window);
 | 
						nana::point window_position(window);
 | 
				
			||||||
	void move_window(window, int x, int y);
 | 
						void move_window(window, int x, int y);
 | 
				
			||||||
	void move_window(window wd, const rectangle&);
 | 
						void move_window(window wd, const rectangle&);
 | 
				
			||||||
 | 
				
			|||||||
@ -22,8 +22,6 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
namespace nana
 | 
					namespace nana
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	class drawer_trigger;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	/// Abstract class for defining the capacity interface.
 | 
						/// Abstract class for defining the capacity interface.
 | 
				
			||||||
	class widget
 | 
						class widget
 | 
				
			||||||
		: nana::noncopyable, nana::nonmovable
 | 
							: nana::noncopyable, nana::nonmovable
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user