FEATURE: use width and height instead of weight
This commit is contained in:
parent
97ca4ac3de
commit
708152ed78
@ -58,7 +58,7 @@ namespace nana
|
|||||||
{
|
{
|
||||||
div_start, div_end, splitter,
|
div_start, div_end, splitter,
|
||||||
identifier, dock, fit, hfit, vfit, vert, grid, number, array, reparray,
|
identifier, dock, fit, hfit, vfit, vert, grid, number, array, reparray,
|
||||||
weight, gap, margin, arrange, variable, repeated, min_px, max_px, left, right, top, bottom, undisplayed, invisible,
|
weight, width, height, gap, margin, arrange, variable, repeated, min_px, max_px, left, right, top, bottom, undisplayed, invisible,
|
||||||
collapse, parameters,
|
collapse, parameters,
|
||||||
equal,
|
equal,
|
||||||
eof, error
|
eof, error
|
||||||
@ -235,15 +235,21 @@ namespace nana
|
|||||||
|
|
||||||
idstr_.assign(idstart, sp_);
|
idstr_.assign(idstart, sp_);
|
||||||
|
|
||||||
if ("weight" == idstr_ || "min" == idstr_ || "max" == idstr_)
|
if ( "weight" == idstr_
|
||||||
|
|| "min" == idstr_
|
||||||
|
|| "max" == idstr_
|
||||||
|
|| "width" == idstr_
|
||||||
|
|| "height" == idstr_
|
||||||
|
)
|
||||||
{
|
{
|
||||||
auto ch = idstr_[1];
|
auto c3 = idstr_[2], c1 =idstr_[0];
|
||||||
_m_attr_number_value();
|
_m_attr_number_value();
|
||||||
switch (ch)
|
switch (c3)
|
||||||
{
|
{
|
||||||
case 'e': return token::weight;
|
case 'i': return c1=='w'? token::weight : token::height;
|
||||||
case 'i': return token::min_px;
|
case 'n': return token::min_px;
|
||||||
case 'a': return token::max_px;
|
case 'x': return token::max_px;
|
||||||
|
case 'd': return token::width;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if ("dock" == idstr_)
|
else if ("dock" == idstr_)
|
||||||
@ -742,6 +748,7 @@ namespace nana
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
enum class kind{ arrange, vertical_arrange, grid, splitter, dock, dockpane};
|
enum class kind{ arrange, vertical_arrange, grid, splitter, dock, dockpane};
|
||||||
|
using token = place_parts::tokenizer::token;
|
||||||
|
|
||||||
division(kind k, std::string&& n) noexcept
|
division(kind k, std::string&& n) noexcept
|
||||||
: kind_of_division(k),
|
: kind_of_division(k),
|
||||||
@ -1082,6 +1089,7 @@ namespace nana
|
|||||||
|
|
||||||
::nana::rectangle field_area;
|
::nana::rectangle field_area;
|
||||||
number_t weight;
|
number_t weight;
|
||||||
|
token weigth_type=token::weight;
|
||||||
number_t min_px, max_px;
|
number_t min_px, max_px;
|
||||||
|
|
||||||
place_parts::margin margin;
|
place_parts::margin margin;
|
||||||
@ -2616,10 +2624,10 @@ namespace nana
|
|||||||
|
|
||||||
auto place::implement::scan_div(place_parts::tokenizer& tknizer) -> std::unique_ptr<division>
|
auto place::implement::scan_div(place_parts::tokenizer& tknizer) -> std::unique_ptr<division>
|
||||||
{
|
{
|
||||||
typedef place_parts::tokenizer::token token;
|
using token = place_parts::tokenizer::token ;
|
||||||
|
|
||||||
std::unique_ptr<division> div;
|
std::unique_ptr<division> div;
|
||||||
token div_type = token::eof;
|
token div_type = token::eof , weight_type=token::weight;
|
||||||
auto fit = fit_policy::none;
|
auto fit = fit_policy::none;
|
||||||
place_parts::repeated_array fit_parameters;
|
place_parts::repeated_array fit_parameters;
|
||||||
|
|
||||||
@ -2726,7 +2734,7 @@ namespace nana
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case token::weight: case token::min_px: case token::max_px:
|
case token::weight: case token::min_px: case token::max_px: case token::width: case token::height:
|
||||||
{
|
{
|
||||||
auto n = tknizer.number();
|
auto n = tknizer.number();
|
||||||
//If n is the type of real, convert it to integer.
|
//If n is the type of real, convert it to integer.
|
||||||
@ -2736,7 +2744,9 @@ namespace nana
|
|||||||
|
|
||||||
switch (tk)
|
switch (tk)
|
||||||
{
|
{
|
||||||
case token::weight: weight = n; break;
|
case token::weight: weight = n; weight_type = token::weight; break; // we could detect errors here (redefinitions and duplicates)
|
||||||
|
case token::width : weight = n; weight_type = token::width ; break;
|
||||||
|
case token::height: weight = n; weight_type = token::height; break;
|
||||||
case token::min_px: min_px = n; break;
|
case token::min_px: min_px = n; break;
|
||||||
case token::max_px: max_px = n; break;
|
case token::max_px: max_px = n; break;
|
||||||
default: break; //Useless
|
default: break; //Useless
|
||||||
@ -2805,10 +2815,16 @@ namespace nana
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
token unmatch = token::width;
|
||||||
switch (div_type)
|
switch (div_type)
|
||||||
{
|
{
|
||||||
case token::eof:
|
case token::eof: unmatch = token::height; // "horitontal" div
|
||||||
case token::vert:
|
case token::vert: // "vertical" div
|
||||||
|
for (auto& ch : children)
|
||||||
|
if (ch->weigth_type == unmatch)
|
||||||
|
throw std::invalid_argument("nana.place: unmatch vertical-heigth/horizontal-width betwen division '"
|
||||||
|
+name+"' and children division '" + ch->name);
|
||||||
|
|
||||||
div.reset(new div_arrange(token::vert == div_type, std::move(name), std::move(arrange)));
|
div.reset(new div_arrange(token::vert == div_type, std::move(name), std::move(arrange)));
|
||||||
break;
|
break;
|
||||||
case token::grid:
|
case token::grid:
|
||||||
@ -2837,6 +2853,7 @@ namespace nana
|
|||||||
default:
|
default:
|
||||||
throw std::invalid_argument("nana.place: invalid division type.");
|
throw std::invalid_argument("nana.place: invalid division type.");
|
||||||
}
|
}
|
||||||
|
div->weigth_type = weight_type;
|
||||||
|
|
||||||
//Requirements for min/max
|
//Requirements for min/max
|
||||||
//1, min and max != negative
|
//1, min and max != negative
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user