Merge branch 'hotfixes-0.9.1' into develop

Conflicts:
	include/nana/gui/widgets/progress.hpp
	source/gui/widgets/date_chooser.cpp
	source/gui/widgets/progress.cpp
	source/gui/widgets/treebox.cpp
This commit is contained in:
cnjinhao
2015-02-02 18:55:23 +08:00
15 changed files with 201 additions and 71 deletions

View File

@@ -53,7 +53,7 @@ namespace nana
void trigger::week_name(unsigned index, const nana::string& str)
{
if(0 <= index && index < 7)
if(index < 7)
this->weekstr_[index] = str;
}

View File

@@ -643,7 +643,7 @@ namespace nana{ namespace widgets
pre_calc_line(i, pixels);
}
std::size_t take_lines() const
std::size_t take_lines() const override
{
std::size_t lines = 0;
for (auto & mtr : linemtr_)
@@ -652,7 +652,7 @@ namespace nana{ namespace widgets
return lines;
}
std::size_t take_lines(std::size_t pos) const
std::size_t take_lines(std::size_t pos) const override
{
return (pos < linemtr_.size() ? linemtr_[pos].take_lines : 0);
}

View File

@@ -29,53 +29,138 @@ namespace nana
{
typedef trigger::node_type node_type;
bool no_sensitive_compare(const nana::string& text, const nana::char_t *pattern, std::size_t len)
bool no_sensitive_compare(const nana::string& text, const nana::char_t *pattern, std::size_t len)
{
if(len <= text.length())
{
if(len <= text.length())
const nana::char_t * s = text.c_str();
for(std::size_t i = 0; i < len; ++i)
{
const nana::char_t * s = text.c_str();
for(std::size_t i = 0; i < len; ++i)
if('a' <= s[i] && s[i] <= 'z')
{
if('a' <= s[i] && s[i] <= 'z')
{
if(pattern[i] != s[i] - ('a' - 'A'))
return false;
}
else
if(pattern[i] != s[i]) return false;
if(pattern[i] != s[i] - ('a' - 'A'))
return false;
}
return true;
else
if(pattern[i] != s[i]) return false;
}
return true;
}
return false;
}
const node_type* find_track_child_node(const node_type* node, const node_type * end, const nana::char_t* pattern, std::size_t len, bool &finish)
{
if(node->value.second.expanded)
{
node = node->child;
while(node)
{
if(no_sensitive_compare(node->value.second.text, pattern, len)) return node;
if(node == end) break;
if(node->value.second.expanded)
{
auto t = find_track_child_node(node, end, pattern, len, finish);
if(t || finish)
return t;
}
node = node->next;
}
return false;
}
const node_type* find_track_child_node(const node_type* node, const node_type * end, const nana::char_t* pattern, std::size_t len, bool &finish)
finish = (node && (node == end));
return nullptr;
}
class tlwnd_drawer
: public drawer_trigger, public compset_interface
{
public:
typedef drawer_trigger::graph_reference graph_reference;
void assign(const item_attribute_t & item_attr, const pat::cloneable<renderer_interface>* renderer, const pat::cloneable<compset_placer_interface> * compset_placer)
{
if(node->value.second.expanded)
if(renderer && compset_placer)
{
node = node->child;
renderer_ = *renderer;
placer_ = *compset_placer;
while(node)
{
if(no_sensitive_compare(node->value.second.text, pattern, len)) return node;
item_attr_ = item_attr;
if(node == end) break;
if(node->value.second.expanded)
{
auto t = find_track_child_node(node, end, pattern, len, finish);
if(t || finish)
return t;
}
node = node->next;
}
_m_draw();
}
}
private:
void _m_draw()
{
item_r_.x = item_r_.y = 0;
item_r_.width = placer_->item_width(*this->graph_, item_attr_);
item_r_.height = placer_->item_height(*this->graph_);
finish = (node && (node == end));
return nullptr;
comp_attribute_t attr;
if(comp_attribute(component::text, attr))
{
nana::paint::graphics item_graph(item_r_.width, item_r_.height);
item_graph.typeface(graph_->typeface());
auto bgcolor = widget_->background();
auto fgcolor = widget_->foreground();
renderer_->bground(item_graph, bgcolor, fgcolor, this);
renderer_->expander(item_graph, bgcolor, fgcolor, this);
renderer_->crook(item_graph, bgcolor, fgcolor, this);
renderer_->icon(item_graph, bgcolor, fgcolor, this);
renderer_->text(item_graph, bgcolor, fgcolor, this);
item_graph.paste(attr.area, *graph_, 1, 1);
graph_->rectangle(0x0, false);
}
}
private:
// Implementation of drawer_trigger
void attached(widget_reference wd, graph_reference graph) override
{
widget_ = &wd;
graph_ = &graph;
graph.typeface(widget_->typeface());
}
private:
// Implementation of compset_interface
virtual const item_attribute_t& item_attribute() const override
{
return item_attr_;
}
class tooltip_window;
virtual bool comp_attribute(component_t comp, comp_attribute_t& comp_attr) const override
{
comp_attr.area = item_r_;
return placer_->locate(comp, item_attr_, &comp_attr.area);
}
private:
::nana::paint::graphics * graph_;
::nana::pat::cloneable<renderer_interface> renderer_;
::nana::pat::cloneable<compset_placer_interface> placer_;
widget *widget_;
item_attribute_t item_attr_;
nana::rectangle item_r_;
};//end class tlwnd_drawer
class tooltip_window
: public widget_object<category::root_tag, tlwnd_drawer>
{
public:
tooltip_window(window wd, const rectangle& r)
: widget_object<category::root_tag, tlwnd_drawer>(wd, false, rectangle(r).pare_off(-1), appear::bald<appear::floating>())
{
API::take_active(handle(), false, nullptr);
}
drawer_trigger_t & impl()
{
return get_drawer_trigger();
}
};//end class tooltip_window
//item_locator should be defined before the definition of basic_implement
class trigger::item_locator
@@ -1456,7 +1541,6 @@ namespace nana
}
};//end class tooltip_window
//class trigger
//struct treebox_node_type
trigger::treebox_node_type::treebox_node_type()

View File

@@ -1,6 +1,7 @@
/*
* Paint Image Implementation
* Copyright(C) 2003-2013 Jinhao(cnjinhao@hotmail.com)
* Nana C++ Library(http://www.nanapro.org)
* Copyright(C) 2003-2015 Jinhao(cnjinhao@hotmail.com)
*
* Distributed under the Boost Software License, Version 1.0.
* (See accompanying file LICENSE_1_0.txt or copy at
@@ -62,6 +63,8 @@ namespace paint
::DeleteObject(info.hbmMask);
return true;
}
#else
if(is_ico_){} //kill the unused compiler warning in Linux.
#endif
return false;
}

View File

@@ -958,8 +958,7 @@ namespace nana
unsigned level_of_run = begin_character->level;
bool head_of_run = true;
std::vector<entity>::iterator last = end - 1;
std::vector<entity>::iterator begin_neutral = end;
auto begin_neutral = end;
//N1. A sequence of neutrals takes the direction of the surrounding strong text if the text on both sides has the same direction.
//European and Arabic numbers act as if they were R in terms of their influence on neutrals.