apply folding expression and std::optional
This commit is contained in:
parent
4917b18c70
commit
be836b5b48
@ -204,6 +204,7 @@
|
|||||||
# define _nana_cxx_constexpr_if
|
# define _nana_cxx_constexpr_if
|
||||||
# define _nana_cxx_folding_expression
|
# define _nana_cxx_folding_expression
|
||||||
# define _nana_cxx_nested_namespace_definition
|
# define _nana_cxx_nested_namespace_definition
|
||||||
|
# define _nana_std_optional
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -14,7 +14,11 @@
|
|||||||
#define NANA_WIDGET_CONTENT_MEASURER_INTERFACE_HEADER_INCLUDED
|
#define NANA_WIDGET_CONTENT_MEASURER_INTERFACE_HEADER_INCLUDED
|
||||||
|
|
||||||
#include <nana/basic_types.hpp>
|
#include <nana/basic_types.hpp>
|
||||||
|
#ifdef _nana_std_optional
|
||||||
|
# include <optional>
|
||||||
|
#else
|
||||||
# include <nana/optional.hpp>
|
# include <nana/optional.hpp>
|
||||||
|
#endif
|
||||||
#include <nana/paint/graphics.hpp>
|
#include <nana/paint/graphics.hpp>
|
||||||
|
|
||||||
namespace nana
|
namespace nana
|
||||||
@ -35,7 +39,7 @@ namespace nana
|
|||||||
* @param limit_width True if limits the width, false if limits the height.
|
* @param limit_width True if limits the width, false if limits the height.
|
||||||
* @return the size of content.
|
* @return the size of content.
|
||||||
*/
|
*/
|
||||||
virtual optional<size> measure(graph_reference graph, unsigned limit_pixels, bool limit_width) const = 0;
|
virtual ::std::optional<size> measure(graph_reference graph, unsigned limit_pixels, bool limit_width) const = 0;
|
||||||
|
|
||||||
/// Returns the extension to the size of widget from content extent
|
/// Returns the extension to the size of widget from content extent
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -461,7 +461,7 @@ namespace API
|
|||||||
* @return if optional has a value, the first size indicates the content extent, the second size indicates the size of
|
* @return if optional has a value, the first size indicates the content extent, the second size indicates the size of
|
||||||
* widget by the content extent.
|
* widget by the content extent.
|
||||||
*/
|
*/
|
||||||
optional<std::pair<::nana::size, ::nana::size>> content_extent(window wd, unsigned limited_px, bool limit_width);
|
std::optional<std::pair<::nana::size, ::nana::size>> content_extent(window wd, unsigned limited_px, bool limit_width);
|
||||||
}//end namespace API
|
}//end namespace API
|
||||||
|
|
||||||
}//end namespace nana
|
}//end namespace nana
|
||||||
|
|||||||
@ -34,7 +34,12 @@ namespace nana
|
|||||||
::std::string get(std::string msgid_utf8, Args&&... args) const
|
::std::string get(std::string msgid_utf8, Args&&... args) const
|
||||||
{
|
{
|
||||||
std::vector<std::string> arg_strs;
|
std::vector<std::string> arg_strs;
|
||||||
|
|
||||||
|
#ifdef _nana_cxx_folding_expression
|
||||||
|
(_m_fetch_args(arg_strs, std::forward<Args>(args)),...);
|
||||||
|
#else
|
||||||
_m_fetch_args(arg_strs, std::forward<Args>(args)...);
|
_m_fetch_args(arg_strs, std::forward<Args>(args)...);
|
||||||
|
#endif
|
||||||
|
|
||||||
auto msgstr = _m_get(std::move(msgid_utf8));
|
auto msgstr = _m_get(std::move(msgid_utf8));
|
||||||
_m_replace_args(msgstr, &arg_strs);
|
_m_replace_args(msgstr, &arg_strs);
|
||||||
@ -53,25 +58,28 @@ namespace nana
|
|||||||
std::string _m_get(std::string&& msgid) const;
|
std::string _m_get(std::string&& msgid) const;
|
||||||
void _m_replace_args(::std::string& str, std::vector<::std::string> * arg_strs) const;
|
void _m_replace_args(::std::string& str, std::vector<::std::string> * arg_strs) const;
|
||||||
|
|
||||||
void _m_fetch_args(std::vector<std::string>&) const; //Termination of _m_fetch_args
|
#ifndef _nana_cxx_folding_expression
|
||||||
|
static void _m_fetch_args(std::vector<std::string>&); //Termination of _m_fetch_args
|
||||||
|
#endif
|
||||||
|
|
||||||
void _m_fetch_args(std::vector<std::string>& v, const char* arg) const;
|
static void _m_fetch_args(std::vector<std::string>& v, const char* arg);
|
||||||
void _m_fetch_args(std::vector<std::string>& v, const std::string& arg) const;
|
static void _m_fetch_args(std::vector<std::string>& v, const std::string& arg);
|
||||||
void _m_fetch_args(std::vector<std::string>& v, std::string& arg) const;
|
static void _m_fetch_args(std::vector<std::string>& v, std::string& arg);
|
||||||
void _m_fetch_args(std::vector<std::string>& v, std::string&& arg) const;
|
static void _m_fetch_args(std::vector<std::string>& v, std::string&& arg);
|
||||||
void _m_fetch_args(std::vector<std::string>& v, const wchar_t* arg) const;
|
static void _m_fetch_args(std::vector<std::string>& v, const wchar_t* arg);
|
||||||
void _m_fetch_args(std::vector<std::string>& v, const std::wstring& arg) const;
|
static void _m_fetch_args(std::vector<std::string>& v, const std::wstring& arg);
|
||||||
void _m_fetch_args(std::vector<std::string>& v, std::wstring& arg) const;
|
static void _m_fetch_args(std::vector<std::string>& v, std::wstring& arg);
|
||||||
void _m_fetch_args(std::vector<std::string>& v, std::wstring&& arg) const;
|
static void _m_fetch_args(std::vector<std::string>& v, std::wstring&& arg);
|
||||||
|
|
||||||
template<typename Arg>
|
template<typename Arg>
|
||||||
void _m_fetch_args(std::vector<std::string>& v, Arg&& arg) const
|
static void _m_fetch_args(std::vector<std::string>& v, Arg&& arg)
|
||||||
{
|
{
|
||||||
std::stringstream ss;
|
std::stringstream ss;
|
||||||
ss << arg;
|
ss << arg;
|
||||||
v.emplace_back(ss.str());
|
v.emplace_back(ss.str());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef _nana_cxx_folding_expression
|
||||||
template<typename ...Args>
|
template<typename ...Args>
|
||||||
void _m_fetch_args(std::vector<std::string>& v, const char* arg, Args&&... args) const
|
void _m_fetch_args(std::vector<std::string>& v, const char* arg, Args&&... args) const
|
||||||
{
|
{
|
||||||
@ -136,6 +144,7 @@ namespace nana
|
|||||||
v.emplace_back(ss.str());
|
v.emplace_back(ss.str());
|
||||||
_m_fetch_args(v, std::forward<Args>(args)...);
|
_m_fetch_args(v, std::forward<Args>(args)...);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
};//end class internationalization
|
};//end class internationalization
|
||||||
|
|
||||||
class i18n_eval
|
class i18n_eval
|
||||||
@ -180,7 +189,11 @@ namespace nana
|
|||||||
i18n_eval(std::string msgid_utf8, Args&&... args)
|
i18n_eval(std::string msgid_utf8, Args&&... args)
|
||||||
: msgid_(std::move(msgid_utf8))
|
: msgid_(std::move(msgid_utf8))
|
||||||
{
|
{
|
||||||
|
#ifdef _nana_cxx_folding_expression
|
||||||
|
(_m_fetch_args(std::forward<Args>(args)), ...);
|
||||||
|
#else
|
||||||
_m_fetch_args(std::forward<Args>(args)...);
|
_m_fetch_args(std::forward<Args>(args)...);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
i18n_eval(const i18n_eval&);
|
i18n_eval(const i18n_eval&);
|
||||||
@ -193,6 +206,7 @@ namespace nana
|
|||||||
|
|
||||||
std::string operator()() const;
|
std::string operator()() const;
|
||||||
private:
|
private:
|
||||||
|
#ifndef _nana_cxx_folding_expression
|
||||||
void _m_fetch_args(){} //Termination of _m_fetch_args
|
void _m_fetch_args(){} //Termination of _m_fetch_args
|
||||||
|
|
||||||
template<typename Arg, typename ...Args>
|
template<typename Arg, typename ...Args>
|
||||||
@ -201,6 +215,7 @@ namespace nana
|
|||||||
_m_add_args(std::forward<Arg>(arg));
|
_m_add_args(std::forward<Arg>(arg));
|
||||||
_m_fetch_args(std::forward<Args>(args)...);
|
_m_fetch_args(std::forward<Args>(args)...);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
template<typename Arg>
|
template<typename Arg>
|
||||||
void _m_add_args(Arg&& arg)
|
void _m_add_args(Arg&& arg)
|
||||||
|
|||||||
@ -15,8 +15,11 @@
|
|||||||
#ifndef NANA_STD_OPTIONAL_HEADER_INCLUDED
|
#ifndef NANA_STD_OPTIONAL_HEADER_INCLUDED
|
||||||
#define NANA_STD_OPTIONAL_HEADER_INCLUDED
|
#define NANA_STD_OPTIONAL_HEADER_INCLUDED
|
||||||
|
|
||||||
#include <stdexcept>
|
|
||||||
#include <nana/c++defines.hpp>
|
#include <nana/c++defines.hpp>
|
||||||
|
|
||||||
|
#ifndef _nana_std_optional
|
||||||
|
#include <stdexcept>
|
||||||
|
|
||||||
namespace nana
|
namespace nana
|
||||||
{
|
{
|
||||||
namespace detail
|
namespace detail
|
||||||
@ -361,4 +364,9 @@ namespace nana
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
namespace std
|
||||||
|
{
|
||||||
|
using nana::optional;
|
||||||
|
}
|
||||||
|
#endif //_nana_std_optional
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@ -1450,7 +1450,7 @@ namespace API
|
|||||||
restrict::wd_manager().set_safe_place(reinterpret_cast<basic_window*>(wd), std::move(fn));
|
restrict::wd_manager().set_safe_place(reinterpret_cast<basic_window*>(wd), std::move(fn));
|
||||||
}
|
}
|
||||||
|
|
||||||
optional<std::pair<size, size>> content_extent(window wd, unsigned limited_px, bool limit_width)
|
std::optional<std::pair<size, size>> content_extent(window wd, unsigned limited_px, bool limit_width)
|
||||||
{
|
{
|
||||||
auto iwd = reinterpret_cast<basic_window*>(wd);
|
auto iwd = reinterpret_cast<basic_window*>(wd);
|
||||||
internal_scope_guard lock;
|
internal_scope_guard lock;
|
||||||
|
|||||||
@ -27,7 +27,7 @@ namespace nana{ namespace drawerbase
|
|||||||
: trigger_{ t }
|
: trigger_{ t }
|
||||||
{}
|
{}
|
||||||
|
|
||||||
optional<size> measure(graph_reference graph, unsigned limit_pixels, bool /*limit_width*/) const override
|
std::optional<size> measure(graph_reference graph, unsigned limit_pixels, bool /*limit_width*/) const override
|
||||||
{
|
{
|
||||||
//Button doesn't provide a support of vfit and hfit
|
//Button doesn't provide a support of vfit and hfit
|
||||||
if (limit_pixels)
|
if (limit_pixels)
|
||||||
|
|||||||
@ -90,7 +90,7 @@ namespace nana
|
|||||||
: drw_{ drwimpl }
|
: drw_{ drwimpl }
|
||||||
{}
|
{}
|
||||||
|
|
||||||
optional<size> measure(graph_reference graph, unsigned limit_pixels, bool /*limit_width*/) const override
|
std::optional<size> measure(graph_reference graph, unsigned limit_pixels, bool /*limit_width*/) const override
|
||||||
{
|
{
|
||||||
//Combox doesn't provide a support of vfit and hfit
|
//Combox doesn't provide a support of vfit and hfit
|
||||||
if (limit_pixels)
|
if (limit_pixels)
|
||||||
|
|||||||
@ -653,7 +653,7 @@ namespace nana
|
|||||||
: impl_{ impl }
|
: impl_{ impl }
|
||||||
{}
|
{}
|
||||||
|
|
||||||
optional<size> measure(graph_reference graph, unsigned limit_pixels, bool limit_width) const override
|
std::optional<size> measure(graph_reference graph, unsigned limit_pixels, bool limit_width) const override
|
||||||
{
|
{
|
||||||
//Label now doesn't support to measure content with a specified height.
|
//Label now doesn't support to measure content with a specified height.
|
||||||
if (graph && ((0 == limit_pixels) || limit_width))
|
if (graph && ((0 == limit_pixels) || limit_width))
|
||||||
|
|||||||
@ -74,7 +74,7 @@ namespace nana
|
|||||||
: impl_{impl}
|
: impl_{impl}
|
||||||
{}
|
{}
|
||||||
|
|
||||||
optional<size> measure(graph_reference /*graph*/, unsigned limit_pixels, bool /*limit_width*/) const override
|
std::optional<size> measure(graph_reference /*graph*/, unsigned limit_pixels, bool /*limit_width*/) const override
|
||||||
{
|
{
|
||||||
//Picture doesn't provide a support of vfit and hfit
|
//Picture doesn't provide a support of vfit and hfit
|
||||||
if (!limit_pixels)
|
if (!limit_pixels)
|
||||||
|
|||||||
@ -414,45 +414,47 @@ namespace nana
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void internationalization::_m_fetch_args(std::vector<std::string>&) const
|
#ifndef _nana_cxx_folding_expression
|
||||||
|
void internationalization::_m_fetch_args(std::vector<std::string>&)
|
||||||
{}
|
{}
|
||||||
|
#endif
|
||||||
|
|
||||||
void internationalization::_m_fetch_args(std::vector<std::string>& v, const char* arg) const
|
void internationalization::_m_fetch_args(std::vector<std::string>& v, const char* arg)
|
||||||
{
|
{
|
||||||
v.emplace_back(arg);
|
v.emplace_back(arg);
|
||||||
}
|
}
|
||||||
|
|
||||||
void internationalization::_m_fetch_args(std::vector<std::string>& v, const std::string& arg) const
|
void internationalization::_m_fetch_args(std::vector<std::string>& v, const std::string& arg)
|
||||||
{
|
{
|
||||||
v.emplace_back(arg);
|
v.emplace_back(arg);
|
||||||
}
|
}
|
||||||
|
|
||||||
void internationalization::_m_fetch_args(std::vector<std::string>& v, std::string& arg) const
|
void internationalization::_m_fetch_args(std::vector<std::string>& v, std::string& arg)
|
||||||
{
|
{
|
||||||
v.emplace_back(arg);
|
v.emplace_back(arg);
|
||||||
}
|
}
|
||||||
|
|
||||||
void internationalization::_m_fetch_args(std::vector<std::string>& v, std::string&& arg) const
|
void internationalization::_m_fetch_args(std::vector<std::string>& v, std::string&& arg)
|
||||||
{
|
{
|
||||||
v.emplace_back(std::move(arg));
|
v.emplace_back(std::move(arg));
|
||||||
}
|
}
|
||||||
|
|
||||||
void internationalization::_m_fetch_args(std::vector<std::string>& v, const wchar_t* arg) const
|
void internationalization::_m_fetch_args(std::vector<std::string>& v, const wchar_t* arg)
|
||||||
{
|
{
|
||||||
v.emplace_back(to_utf8(arg));
|
v.emplace_back(to_utf8(arg));
|
||||||
}
|
}
|
||||||
|
|
||||||
void internationalization::_m_fetch_args(std::vector<std::string>& v, const std::wstring& arg) const
|
void internationalization::_m_fetch_args(std::vector<std::string>& v, const std::wstring& arg)
|
||||||
{
|
{
|
||||||
v.emplace_back(to_utf8(arg));
|
v.emplace_back(to_utf8(arg));
|
||||||
}
|
}
|
||||||
|
|
||||||
void internationalization::_m_fetch_args(std::vector<std::string>& v, std::wstring& arg) const
|
void internationalization::_m_fetch_args(std::vector<std::string>& v, std::wstring& arg)
|
||||||
{
|
{
|
||||||
v.emplace_back(to_utf8(arg));
|
v.emplace_back(to_utf8(arg));
|
||||||
}
|
}
|
||||||
|
|
||||||
void internationalization::_m_fetch_args(std::vector<std::string>& v, std::wstring&& arg) const
|
void internationalization::_m_fetch_args(std::vector<std::string>& v, std::wstring&& arg)
|
||||||
{
|
{
|
||||||
v.emplace_back(to_utf8(arg));
|
v.emplace_back(to_utf8(arg));
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user