Entry::Entry(const string &t):
text(),
multiline(false),
+ edit_width(10),
+ edit_height(1),
edit_pos(0),
first_row(0),
visible_rows(1),
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;
private:
Text text;
bool multiline;
+ unsigned edit_width;
+ unsigned edit_height;
unsigned edit_pos;
unsigned first_row;
unsigned visible_rows;
void set_text(const std::string &);
const std::string &get_text() const { return text.get(); }
+
+ /** Sets the minimum size of the editing area, in characters and rows. This
+ only affects autosizing. */
+ void set_edit_size(unsigned w, unsigned h);
+
void set_multiline(bool);
bool is_multiline() const { return multiline; }