Entry::Entry(const string &t):
text(),
multiline(false),
+ edit_width(10),
+ edit_height(1),
edit_pos(0),
first_row(0),
visible_rows(1),
text_part(0),
- slider(0)
+ slider(0),
+ got_key_press(false)
{
set_text(t);
}
const Sides &margin = text_part->get_margin();
const GL::Font &font = style->get_font();
unsigned en_width = static_cast<unsigned>(font.get_string_width("n")*style->get_font_size());
- geom.w = max(geom.w, 10*en_width+margin.left+margin.right);
+ geom.w = max(geom.w, edit_width*en_width+margin.left+margin.right);
unsigned line_height = static_cast<unsigned>((font.get_ascent()-font.get_descent())*style->get_font_size());
if(multiline)
{
unsigned line_spacing = style->get_font_size()*6/5;
- geom.h = max(geom.h, line_height+line_spacing*2+margin.top+margin.bottom);
+ geom.h = max(geom.h, line_height+line_spacing*(edit_height-1)+margin.top+margin.bottom);
}
else
geom.h = max(geom.h, line_height+margin.top+margin.bottom);
rebuild();
}
+void Entry::set_edit_size(unsigned w, unsigned h)
+{
+ edit_width = w;
+ edit_height = h;
+ signal_autosize_changed.emit();
+}
+
void Entry::set_multiline(bool m)
{
multiline = m;
void Entry::key_press(unsigned key, unsigned)
{
+ got_key_press = true;
if(key==Input::KEY_LEFT)
{
if(edit_pos>0)
void Entry::character(wchar_t ch)
{
- if(ch>=' ')
+ if(got_key_press && ch>=' ')
{
text.insert(edit_pos, StringCodec::encode<StringCodec::Utf8>(StringCodec::ustring(1, ch)));
++edit_pos;
}
}
+void Entry::focus_out()
+{
+ Widget::focus_out();
+ got_key_press = false;
+}
+
void Entry::on_geometry_change()
{
reposition_slider();
first_row = text.get_n_lines()-visible_rows-static_cast<unsigned>(value);
}
-
-Entry::Loader::Loader(Entry &ent):
- Widget::Loader(ent)
-{ }
-
} // namespace GLtk
} // namespace Msp