modify group methods, fix a compiling-error
This commit is contained in:
		
							parent
							
								
									19a44b772b
								
							
						
					
					
						commit
						be031e9b7f
					
				@ -26,29 +26,38 @@ namespace nana{
 | 
			
		||||
	{
 | 
			
		||||
		struct implement;
 | 
			
		||||
	public:
 | 
			
		||||
		group(	window    parent,         ///< 
 | 
			
		||||
				std::wstring    titel_ ={STR("")},     ///< 
 | 
			
		||||
				bool      format =false,  ///< Use a formated label?
 | 
			
		||||
				unsigned  gap =2,         ///< betwen the content  and the external limit
 | 
			
		||||
				rectangle r ={}           ///<
 | 
			
		||||
			);
 | 
			
		||||
		using field_reference = place::field_reference;
 | 
			
		||||
 | 
			
		||||
		/// The default construction
 | 
			
		||||
		group();
 | 
			
		||||
 | 
			
		||||
		/// The construction that creates the widget
 | 
			
		||||
		group(window parent, const rectangle& = {}, bool visible = true);
 | 
			
		||||
 | 
			
		||||
		/// The destruction
 | 
			
		||||
		~group();
 | 
			
		||||
 | 
			
		||||
		group& enable_format_caption(bool format);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		place& get_place();
 | 
			
		||||
 | 
			
		||||
		void collocate();
 | 
			
		||||
		void div(const char* div_str);
 | 
			
		||||
		field_reference operator[](const char* field);
 | 
			
		||||
 | 
			
		||||
		
 | 
			
		||||
		template<typename Widget, typename ...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);
 | 
			
		||||
			return wdg;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		window inner();
 | 
			
		||||
	private:
 | 
			
		||||
		void _m_add_child(const char* field, widget*);
 | 
			
		||||
 | 
			
		||||
		void _m_complete_creation() override;
 | 
			
		||||
		::nana::string _m_caption() const override;
 | 
			
		||||
		void _m_caption(::nana::string&&) override;
 | 
			
		||||
	private:
 | 
			
		||||
 | 
			
		||||
@ -21,7 +21,7 @@
 | 
			
		||||
        #include <mutex>
 | 
			
		||||
	#endif
 | 
			
		||||
	#include <map>
 | 
			
		||||
	#include <nana/paint/detail/image_ico.hpp>
 | 
			
		||||
	#include "../../paint/detail/image_ico.hpp"
 | 
			
		||||
#elif defined(NANA_X11)
 | 
			
		||||
	#include <nana/system/platform.hpp>
 | 
			
		||||
	#include <nana/gui/detail/bedrock.hpp>
 | 
			
		||||
 | 
			
		||||
@ -24,75 +24,66 @@ namespace nana{
 | 
			
		||||
	struct group::implement
 | 
			
		||||
	{
 | 
			
		||||
		label	caption;
 | 
			
		||||
		panel<false>	content;
 | 
			
		||||
		place place_outter;
 | 
			
		||||
		place	place_content;
 | 
			
		||||
 | 
			
		||||
		implement(group* host):
 | 
			
		||||
			caption(*host),
 | 
			
		||||
			content(*host),
 | 
			
		||||
			place_outter(*host),
 | 
			
		||||
			place_content(content)
 | 
			
		||||
		{}
 | 
			
		||||
		unsigned gap{2};
 | 
			
		||||
 | 
			
		||||
		void create(window pnl)
 | 
			
		||||
		{
 | 
			
		||||
			caption.create(pnl);
 | 
			
		||||
			place_content.bind(pnl);
 | 
			
		||||
		}
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	group::group(	window    parent,              ///<
 | 
			
		||||
					std::wstring    titel_ /*={}*/,     ///<
 | 
			
		||||
					bool      format /*=false*/,  ///<
 | 
			
		||||
					unsigned  gap /*=2*/,         ///<
 | 
			
		||||
					rectangle r /*={} */          ///<
 | 
			
		||||
              )
 | 
			
		||||
			  :	panel (parent, r),
 | 
			
		||||
				impl_(new implement(this))
 | 
			
		||||
	group::group()
 | 
			
		||||
		: impl_(new implement)
 | 
			
		||||
	{
 | 
			
		||||
		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::enable_format_caption(bool format)
 | 
			
		||||
	{
 | 
			
		||||
		impl_->caption.format(format);
 | 
			
		||||
		return *this;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	place& group::get_place()
 | 
			
		||||
	{
 | 
			
		||||
		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)
 | 
			
		||||
@ -100,6 +91,42 @@ namespace nana{
 | 
			
		||||
		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
 | 
			
		||||
	{
 | 
			
		||||
		return impl_->caption.caption();
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user