Merge remote-tracking branch 'nana_jinhao/develop' into develop

This commit is contained in:
qPCR4vir 2015-07-17 08:52:45 +02:00
commit cfcec75b54
4 changed files with 116 additions and 80 deletions

View File

@ -26,29 +26,38 @@ namespace nana{
{ {
struct implement; struct implement;
public: public:
group( window parent, ///< using field_reference = place::field_reference;
std::wstring titel_ ={STR("")}, ///<
bool format =false, ///< Use a formated label?
unsigned gap =2, ///< betwen the content and the external limit
rectangle r ={} ///<
);
/// The default construction
group();
/// The construction that creates the widget
group(window parent, const rectangle& = {}, bool visible = true);
/// The destruction
~group(); ~group();
group& enable_format_caption(bool format);
place& get_place(); place& get_place();
void collocate();
void div(const char* div_str);
field_reference operator[](const char* field);
template<typename Widget, typename ...Args> template<typename Widget, typename ...Args>
Widget* create_child(const char* field, Args && ... args) Widget* create_child(const char* field, Args && ... args)
{ {
auto wdg = new Widget(inner(), std::forward<Args>(args)...); auto wdg = new Widget(handle(), std::forward<Args>(args)...);
_m_add_child(field, wdg); _m_add_child(field, wdg);
return wdg; return wdg;
} }
window inner();
private: private:
void _m_add_child(const char* field, widget*); void _m_add_child(const char* field, widget*);
void _m_complete_creation() override;
::nana::string _m_caption() const override; ::nana::string _m_caption() const override;
void _m_caption(::nana::string&&) override; void _m_caption(::nana::string&&) override;
private: private:

View File

@ -21,7 +21,7 @@
#include <mutex> #include <mutex>
#endif #endif
#include <map> #include <map>
#include <nana/paint/detail/image_ico.hpp> #include "../../paint/detail/image_ico.hpp"
#elif defined(NANA_X11) #elif defined(NANA_X11)
#include <nana/system/platform.hpp> #include <nana/system/platform.hpp>
#include <nana/gui/detail/bedrock.hpp> #include <nana/gui/detail/bedrock.hpp>

View File

@ -24,75 +24,66 @@ namespace nana{
struct group::implement struct group::implement
{ {
label caption; label caption;
panel<false> content;
place place_outter;
place place_content; place place_content;
implement(group* host): unsigned gap{2};
caption(*host),
content(*host), void create(window pnl)
place_outter(*host), {
place_content(content) caption.create(pnl);
{} place_content.bind(pnl);
}
}; };
group::group( window parent, ///< group::group()
std::wstring titel_ /*={}*/, ///< : impl_(new implement)
bool format /*=false*/, ///<
unsigned gap /*=2*/, ///<
rectangle r /*={} */ ///<
)
: panel (parent, r),
impl_(new implement(this))
{ {
impl_->caption.format(format);
::nana::size sz = impl_->caption.measure(1000);
std::stringstream ft;
ft << "vert margin=[0," << gap << ","<<gap<<","<<gap<<"]"
<< " <weight=" << sz.height << " <weight=5> <titel weight=" << sz.width+1 << "> >"
<< " <content>";
auto & outter = impl_->place_outter;
outter.div(ft.str().c_str());
outter["titel"] << impl_->caption;
outter["content"] << impl_->content;
outter.collocate();
color pbg = API::bgcolor( parent);
impl_->caption.bgcolor(pbg.blend(colors::black, 0.975) );
color bg=pbg.blend(colors::black, 0.950 );
bgcolor(pbg);
impl_->content.bgcolor(bg);
drawing dw(*this);
// This drawing function is owner by the onwer of dw (the outer panel of the group widget), not by dw !!
dw.draw([gap, sz, bg, pbg](paint::graphics& graph)
{
graph.rectangle(true, pbg);
graph.round_rectangle(rectangle(point(gap - 1, sz.height / 2),
nana::size(graph.width() - 2 * (gap - 1), graph.height() - sz.height / 2 - (gap - 1))
),
3, 3, colors::gray_border, true, bg);
});
} }
group::group(window parent, const rectangle& r, bool vsb)
: group()
{
create(parent, r, vsb);
}
group::~group() group::~group()
{ {
} }
group& group::enable_format_caption(bool format)
{
impl_->caption.format(format);
return *this;
}
place& group::get_place() place& group::get_place()
{ {
return impl_->place_content; return impl_->place_content;
} }
window group::inner()
void group::collocate()
{ {
return impl_->content; impl_->place_content.collocate();
}
void group::div(const char* div_str)
{
::nana::size sz = impl_->caption.measure(1000);
std::stringstream ss;
ss << "vert margin=[0," << impl_->gap << "," << impl_->gap << "," << impl_->gap << "]"
<< " <weight=" << sz.height << " <weight=5> <nanaGroupTitle2015 weight=" << sz.width + 1 << "> >"
<< " <"<<(div_str ? div_str : "")<<">";
impl_->place_content.div(ss.str().c_str());
}
group::field_reference group::operator[](const char* field)
{
return impl_->place_content.field(field);
} }
void group::_m_add_child(const char* field, widget* wdg) void group::_m_add_child(const char* field, widget* wdg)
@ -100,6 +91,42 @@ namespace nana{
impl_->place_content[field] << wdg->handle(); impl_->place_content[field] << wdg->handle();
} }
void group::_m_complete_creation()
{
panel::_m_complete_creation();
impl_->create(handle());
this->div(nullptr);
auto & outter = impl_->place_content;
outter["nanaGroupTitle2015"] << impl_->caption;
outter.collocate();
color pbg = API::bgcolor(this->parent());
impl_->caption.bgcolor(pbg.blend(colors::black, 0.975));
color bg = pbg.blend(colors::black, 0.950);
bgcolor(pbg);
drawing dw(*this);
::nana::size sz = impl_->caption.measure(1000);
// This drawing function is owner by the onwer of dw (the outer panel of the group widget), not by dw !!
dw.draw([this, sz, bg, pbg](paint::graphics& graph)
{
auto gap_px = impl_->gap - 1;
graph.rectangle(true, pbg);
graph.round_rectangle(rectangle(point(gap_px, sz.height / 2),
nana::size(graph.width() - 2 * gap_px, graph.height() - sz.height / 2 - gap_px)
),
3, 3, colors::gray_border, true, bg);
});
}
::nana::string group::_m_caption() const ::nana::string group::_m_caption() const
{ {
return impl_->caption.caption(); return impl_->caption.caption();