add new inputbox::boolean
other fixes for width of inputbox's elements
This commit is contained in:
parent
d53254b89a
commit
0cfd06b23f
@ -109,6 +109,24 @@ namespace nana
|
|||||||
virtual unsigned fixed_pixels() const;
|
virtual unsigned fixed_pixels() const;
|
||||||
};
|
};
|
||||||
public:
|
public:
|
||||||
|
class boolean
|
||||||
|
: public abstract_content
|
||||||
|
{
|
||||||
|
struct implement;
|
||||||
|
public:
|
||||||
|
boolean(::std::string label, bool initial_value);
|
||||||
|
~boolean();
|
||||||
|
|
||||||
|
bool value() const;
|
||||||
|
private:
|
||||||
|
//Implementation of abstract_content
|
||||||
|
const ::std::string& label() const override;
|
||||||
|
window create(window, unsigned label_px) override;
|
||||||
|
unsigned fixed_pixels() const override;
|
||||||
|
private:
|
||||||
|
std::unique_ptr<implement> impl_;
|
||||||
|
};
|
||||||
|
|
||||||
class integer
|
class integer
|
||||||
: public abstract_content
|
: public abstract_content
|
||||||
{
|
{
|
||||||
@ -122,6 +140,7 @@ namespace nana
|
|||||||
//Implementation of abstract_content
|
//Implementation of abstract_content
|
||||||
const ::std::string& label() const override;
|
const ::std::string& label() const override;
|
||||||
window create(window, unsigned label_px) override;
|
window create(window, unsigned label_px) override;
|
||||||
|
unsigned fixed_pixels() const override;
|
||||||
private:
|
private:
|
||||||
std::unique_ptr<implement> impl_;
|
std::unique_ptr<implement> impl_;
|
||||||
};
|
};
|
||||||
@ -139,6 +158,7 @@ namespace nana
|
|||||||
//Implementation of abstract_content
|
//Implementation of abstract_content
|
||||||
const ::std::string& label() const override;
|
const ::std::string& label() const override;
|
||||||
window create(window, unsigned label_px) override;
|
window create(window, unsigned label_px) override;
|
||||||
|
unsigned fixed_pixels() const override;
|
||||||
private:
|
private:
|
||||||
std::unique_ptr<implement> impl_;
|
std::unique_ptr<implement> impl_;
|
||||||
};
|
};
|
||||||
@ -166,6 +186,7 @@ namespace nana
|
|||||||
//Implementation of abstract_content
|
//Implementation of abstract_content
|
||||||
const ::std::string& label() const override;
|
const ::std::string& label() const override;
|
||||||
window create(window, unsigned label_px) override;
|
window create(window, unsigned label_px) override;
|
||||||
|
unsigned fixed_pixels() const override;
|
||||||
private:
|
private:
|
||||||
std::unique_ptr<implement> impl_;
|
std::unique_ptr<implement> impl_;
|
||||||
};
|
};
|
||||||
|
@ -14,6 +14,7 @@
|
|||||||
#include <nana/gui/widgets/label.hpp>
|
#include <nana/gui/widgets/label.hpp>
|
||||||
#include <nana/gui/widgets/button.hpp>
|
#include <nana/gui/widgets/button.hpp>
|
||||||
#include <nana/gui/widgets/spinbox.hpp>
|
#include <nana/gui/widgets/spinbox.hpp>
|
||||||
|
#include <nana/gui/widgets/checkbox.hpp>
|
||||||
#include <nana/gui/widgets/combox.hpp>
|
#include <nana/gui/widgets/combox.hpp>
|
||||||
#include <nana/gui/widgets/textbox.hpp>
|
#include <nana/gui/widgets/textbox.hpp>
|
||||||
#include <nana/gui/widgets/panel.hpp>
|
#include <nana/gui/widgets/panel.hpp>
|
||||||
@ -526,8 +527,8 @@ namespace nana
|
|||||||
|
|
||||||
ss_content << "><margin=[15] weight=38<><buttons arrange=80 gap=10 weight=170>>>";
|
ss_content << "><margin=[15] weight=38<><buttons arrange=80 gap=10 weight=170>>>";
|
||||||
|
|
||||||
if (desc_extent.width < 170)
|
if (desc_extent.width < 200)
|
||||||
desc_extent.width = 170;
|
desc_extent.width = 200;
|
||||||
|
|
||||||
//Make sure the complete display of input extent
|
//Make sure the complete display of input extent
|
||||||
if (desc_extent.width < fixed_pixels)
|
if (desc_extent.width < fixed_pixels)
|
||||||
@ -653,6 +654,70 @@ namespace nana
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//class boolean
|
||||||
|
struct inputbox::boolean::implement
|
||||||
|
{
|
||||||
|
bool value;
|
||||||
|
::std::string empty_label_text;
|
||||||
|
::std::string label_text;
|
||||||
|
::nana::panel<false> dock;
|
||||||
|
::nana::checkbox checkbox;
|
||||||
|
};
|
||||||
|
|
||||||
|
inputbox::boolean::boolean(::std::string label, bool initial_value)
|
||||||
|
: impl_(new implement)
|
||||||
|
{
|
||||||
|
impl_->value = initial_value;
|
||||||
|
impl_->label_text = std::move(label);
|
||||||
|
impl_->empty_label_text = " ";
|
||||||
|
}
|
||||||
|
|
||||||
|
inputbox::boolean::~boolean()
|
||||||
|
{}
|
||||||
|
|
||||||
|
bool inputbox::boolean::value() const
|
||||||
|
{
|
||||||
|
return (impl_->checkbox.empty() ? impl_->value : impl_->checkbox.checked());
|
||||||
|
}
|
||||||
|
|
||||||
|
//Implementation of abstract_content
|
||||||
|
const ::std::string& inputbox::boolean::label() const
|
||||||
|
{
|
||||||
|
return impl_->empty_label_text;
|
||||||
|
}
|
||||||
|
|
||||||
|
window inputbox::boolean::create(window owner, unsigned label_px)
|
||||||
|
{
|
||||||
|
auto impl = impl_.get();
|
||||||
|
|
||||||
|
impl->dock.create(owner);
|
||||||
|
|
||||||
|
paint::graphics graph{ ::nana::size{ 10, 10 } };
|
||||||
|
auto value_px = graph.text_extent_size(impl->label_text).width + 20;
|
||||||
|
|
||||||
|
impl->checkbox.create(impl->dock, rectangle{ (std::max)(static_cast<int>(label_px) - 18, 0), 0, value_px, 0 });
|
||||||
|
impl->checkbox.check(impl->value);
|
||||||
|
impl->checkbox.caption(impl->label_text);
|
||||||
|
|
||||||
|
impl->dock.events().resized.connect_unignorable([impl, value_px](const ::nana::arg_resized&)
|
||||||
|
{
|
||||||
|
impl->checkbox.size({ value_px, 24 });
|
||||||
|
});
|
||||||
|
|
||||||
|
impl->checkbox.events().destroy.connect_unignorable([impl](const arg_destroy&)
|
||||||
|
{
|
||||||
|
impl->value = impl->checkbox.checked();
|
||||||
|
});
|
||||||
|
|
||||||
|
return impl->dock;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned inputbox::boolean::fixed_pixels() const
|
||||||
|
{
|
||||||
|
paint::graphics graph{ ::nana::size{ 10, 10 } };
|
||||||
|
return graph.text_extent_size(impl_->label_text).width;
|
||||||
|
}
|
||||||
|
|
||||||
//class integer
|
//class integer
|
||||||
struct inputbox::integer::implement
|
struct inputbox::integer::implement
|
||||||
{
|
{
|
||||||
@ -705,10 +770,7 @@ namespace nana
|
|||||||
impl->label.caption(impl->label_text);
|
impl->label.caption(impl->label_text);
|
||||||
impl->label.format(true);
|
impl->label.format(true);
|
||||||
|
|
||||||
//get the longest value
|
auto const value_px = fixed_pixels();
|
||||||
int longest = (std::abs(static_cast<int>(impl->begin < 0 ? impl->begin * 10 : impl->begin)) < std::abs(static_cast<int>(impl->last < 0 ? impl->last * 10 : impl->last)) ? impl->last : impl->begin);
|
|
||||||
paint::graphics graph{ ::nana::size{ 10, 10 } };
|
|
||||||
auto value_px = graph.text_extent_size(std::to_wstring(longest)).width + 34;
|
|
||||||
|
|
||||||
impl->spinbox.create(impl->dock, rectangle{ static_cast<int>(label_px + 10), 0, value_px, 0 });
|
impl->spinbox.create(impl->dock, rectangle{ static_cast<int>(label_px + 10), 0, value_px, 0 });
|
||||||
impl->spinbox.range(impl->begin, impl->last, impl->step);
|
impl->spinbox.range(impl->begin, impl->last, impl->step);
|
||||||
@ -728,6 +790,14 @@ namespace nana
|
|||||||
|
|
||||||
return impl->dock;
|
return impl->dock;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unsigned inputbox::integer::fixed_pixels() const
|
||||||
|
{
|
||||||
|
//get the longest value
|
||||||
|
int longest = (std::abs(static_cast<int>(impl_->begin < 0 ? impl_->begin * 10 : impl_->begin)) < std::abs(static_cast<int>(impl_->last < 0 ? impl_->last * 10 : impl_->last)) ? impl_->last : impl_->begin);
|
||||||
|
paint::graphics graph{ ::nana::size{ 10, 10 } };
|
||||||
|
return graph.text_extent_size(std::to_wstring(longest)).width + 34;
|
||||||
|
}
|
||||||
//end class integer
|
//end class integer
|
||||||
|
|
||||||
|
|
||||||
@ -783,10 +853,7 @@ namespace nana
|
|||||||
impl->label.caption(impl->label_text);
|
impl->label.caption(impl->label_text);
|
||||||
impl->label.format(true);
|
impl->label.format(true);
|
||||||
|
|
||||||
//get the longest value
|
auto value_px = fixed_pixels();
|
||||||
auto longest = (std::abs(static_cast<int>(impl->begin < 0 ? impl->begin * 10 : impl->begin)) < std::abs(static_cast<int>(impl->last < 0 ? impl->last * 10 : impl->last)) ? impl->last : impl->begin);
|
|
||||||
paint::graphics graph{ ::nana::size{ 10, 10 } };
|
|
||||||
auto value_px = graph.text_extent_size(std::to_wstring(longest)).width + 34;
|
|
||||||
|
|
||||||
impl->spinbox.create(impl->dock, rectangle{ static_cast<int>(label_px + 10), 0, value_px, 0 });
|
impl->spinbox.create(impl->dock, rectangle{ static_cast<int>(label_px + 10), 0, value_px, 0 });
|
||||||
impl->spinbox.range(impl->begin, impl->last, impl->step);
|
impl->spinbox.range(impl->begin, impl->last, impl->step);
|
||||||
@ -806,6 +873,14 @@ namespace nana
|
|||||||
|
|
||||||
return impl->dock;
|
return impl->dock;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unsigned inputbox::real::fixed_pixels() const
|
||||||
|
{
|
||||||
|
//get the longest value
|
||||||
|
auto longest = (std::abs(static_cast<int>(impl_->begin < 0 ? impl_->begin * 10 : impl_->begin)) < std::abs(static_cast<int>(impl_->last < 0 ? impl_->last * 10 : impl_->last)) ? impl_->last : impl_->begin);
|
||||||
|
paint::graphics graph{ ::nana::size{ 10, 10 } };
|
||||||
|
return graph.text_extent_size(std::to_wstring(longest)).width + 34;
|
||||||
|
}
|
||||||
//end class real
|
//end class real
|
||||||
|
|
||||||
|
|
||||||
@ -887,7 +962,7 @@ namespace nana
|
|||||||
impl->label.caption(impl->label_text);
|
impl->label.caption(impl->label_text);
|
||||||
impl->label.format(true);
|
impl->label.format(true);
|
||||||
|
|
||||||
unsigned value_px = 0;
|
unsigned const value_px = fixed_pixels();
|
||||||
if (impl->options.empty())
|
if (impl->options.empty())
|
||||||
{
|
{
|
||||||
impl->textbox.create(impl->dock, rectangle{ static_cast<int>(label_px + 10), 0, 0, 0 });
|
impl->textbox.create(impl->dock, rectangle{ static_cast<int>(label_px + 10), 0, 0, 0 });
|
||||||
@ -898,16 +973,6 @@ namespace nana
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//get the longest value
|
|
||||||
paint::graphics graph{ ::nana::size{ 10, 10 } };
|
|
||||||
for (auto & s : impl->options)
|
|
||||||
{
|
|
||||||
auto px = graph.text_extent_size(s).width;
|
|
||||||
if (px > value_px)
|
|
||||||
value_px = px;
|
|
||||||
}
|
|
||||||
value_px += 34;
|
|
||||||
|
|
||||||
impl->combox.create(impl->dock, rectangle{ static_cast<int>(label_px + 10), 0, value_px, 0 });
|
impl->combox.create(impl->dock, rectangle{ static_cast<int>(label_px + 10), 0, value_px, 0 });
|
||||||
|
|
||||||
for (auto & s : impl->options)
|
for (auto & s : impl->options)
|
||||||
@ -919,7 +984,7 @@ namespace nana
|
|||||||
impl->dock.events().resized.connect_unignorable([impl, label_px, value_px](const ::nana::arg_resized& arg)
|
impl->dock.events().resized.connect_unignorable([impl, label_px, value_px](const ::nana::arg_resized& arg)
|
||||||
{
|
{
|
||||||
impl->label.size({ label_px, arg.height });
|
impl->label.size({ label_px, arg.height });
|
||||||
if (value_px)
|
if (impl->textbox.empty())
|
||||||
impl->combox.size({ value_px, 24 });
|
impl->combox.size({ value_px, 24 });
|
||||||
else
|
else
|
||||||
impl->textbox.size({arg.width - label_px - 10, 24});
|
impl->textbox.size({arg.width - label_px - 10, 24});
|
||||||
@ -932,6 +997,24 @@ namespace nana
|
|||||||
});
|
});
|
||||||
return impl->dock;
|
return impl->dock;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unsigned inputbox::text::fixed_pixels() const
|
||||||
|
{
|
||||||
|
if (impl_->options.empty())
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
paint::graphics graph{ ::nana::size{ 10, 10 } };
|
||||||
|
unsigned long_px = 0;
|
||||||
|
//get the longest value
|
||||||
|
for (auto & s : impl_->options)
|
||||||
|
{
|
||||||
|
auto px = graph.text_extent_size(s).width;
|
||||||
|
if (px > long_px)
|
||||||
|
long_px = px;
|
||||||
|
}
|
||||||
|
|
||||||
|
return long_px + 34;
|
||||||
|
}
|
||||||
//end class text
|
//end class text
|
||||||
|
|
||||||
|
|
||||||
@ -1212,6 +1295,9 @@ namespace nana
|
|||||||
each_pixels.push_back(px.height);
|
each_pixels.push_back(px.height);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//if (fixed_px < 150)
|
||||||
|
// fixed_px = 150;
|
||||||
|
|
||||||
inputbox_window input_wd(owner_, images_, valid_areas_, description_, title_, contents.size(), label_px + 10 + fixed_px, each_pixels);
|
inputbox_window input_wd(owner_, images_, valid_areas_, description_, title_, contents.size(), label_px + 10 + fixed_px, each_pixels);
|
||||||
|
|
||||||
std::vector<window> inputs;
|
std::vector<window> inputs;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user