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,9 +22,7 @@
|
|||||||
|
|
||||||
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