{
text.insert(pos, t);
+ unsigned old_edit_pos = edit_pos;
if(edit_pos>=pos)
edit_pos += t.size();
if(selection_active && selection_pos>=pos)
selection_pos += t.size();
+ if(edit_pos!=old_edit_pos)
+ signal_edit_position_changed.emit(edit_pos);
+
if(multiline)
check_view_range();
{
text.erase(pos, len);
+ unsigned old_edit_pos = edit_pos;
if(edit_pos>=pos+len)
edit_pos -= len;
else if(edit_pos>=pos)
selection_pos = pos;
}
+ if(edit_pos!=old_edit_pos)
+ signal_edit_position_changed.emit(edit_pos);
+
if(multiline)
check_view_range();
+
rebuild();
}
return true;
}
+void Entry::translate_position(unsigned pos, unsigned &row, unsigned &col) const
+{
+ text.offset_to_coords(pos, row, col);
+}
+
+unsigned Entry::translate_position(unsigned row, unsigned col) const
+{
+ return text.coords_to_offset(row, col);
+}
+
void Entry::set_edit_size(unsigned w, unsigned h)
{
edit_width = w;
selection_pos = edit_pos;
selection_active = select;
+ unsigned old_edit_pos = edit_pos;
edit_pos = min(ep, text.size());
+
+ if(edit_pos!=old_edit_pos)
+ signal_edit_position_changed.emit(edit_pos);
+
if(multiline)
check_view_range();
rebuild();
unsigned row, col;
text.offset_to_coords(edit_pos, row, col);
+ unsigned old_first_row = first_row;
if(first_row>row)
first_row = row;
else if(row>=first_row+visible_rows)
first_row = row+1-visible_rows;
+ if(first_row!=old_first_row)
+ signal_scroll_position_changed.emit(first_row);
+
unsigned scroll = max(text.get_n_lines(), visible_rows)-visible_rows;
slider->set_range(0, scroll);
slider->set_value(scroll-first_row);
void Entry::slider_value_changed(double value)
{
if(text.get_n_lines()>visible_rows)
+ {
+ unsigned old_first_row = first_row;
first_row = text.get_n_lines()-visible_rows-static_cast<unsigned>(value);
+ if(first_row!=old_first_row)
+ signal_scroll_position_changed.emit(first_row);
+ }
}
void multiline(bool);
};
+ sigc::signal<void, unsigned> signal_edit_position_changed;
+ sigc::signal<void, unsigned> signal_scroll_position_changed;
+
// Deprecated
sigc::signal<void> signal_enter;
void set_edit_position(unsigned p) { set_edit_position(p, false); }
unsigned get_edit_position() const { return edit_pos; }
+ unsigned get_scroll_position() const { return first_row; }
+ unsigned get_visible_rows() const { return visible_rows; }
bool get_selection(unsigned &, unsigned &) const;
+ void translate_position(unsigned, unsigned &, unsigned &) const;
+ unsigned translate_position(unsigned, unsigned) const;
/** Sets the minimum size of the editing area, in characters and rows. This
only affects autosizing. */