@ -68,6 +68,15 @@ void SpinBox::_text_submitted(const String &p_string) {
_value_changed ( 0 ) ;
}
void SpinBox : : _text_changed ( const String & p_string ) {
int cursor_pos = line_edit - > get_caret_column ( ) ;
_text_submitted ( p_string ) ;
// Line edit 'set_text' method resets the cursor position so we need to undo that.
line_edit - > set_caret_column ( cursor_pos ) ;
}
LineEdit * SpinBox : : get_line_edit ( ) {
return line_edit ;
}
@ -244,6 +253,24 @@ String SpinBox::get_prefix() const {
return prefix ;
}
void SpinBox : : set_update_on_text_changed ( bool p_update ) {
if ( update_on_text_changed = = p_update ) {
return ;
}
update_on_text_changed = p_update ;
if ( p_update ) {
line_edit - > connect ( " text_changed " , callable_mp ( this , & SpinBox : : _text_changed ) , Vector < Variant > ( ) , CONNECT_DEFERRED ) ;
} else {
line_edit - > disconnect ( " text_changed " , callable_mp ( this , & SpinBox : : _text_changed ) ) ;
}
}
bool SpinBox : : get_update_on_text_changed ( ) const {
return update_on_text_changed ;
}
void SpinBox : : set_editable ( bool p_editable ) {
line_edit - > set_editable ( p_editable ) ;
}
@ -267,11 +294,14 @@ void SpinBox::_bind_methods() {
ClassDB : : bind_method ( D_METHOD ( " get_prefix " ) , & SpinBox : : get_prefix ) ;
ClassDB : : bind_method ( D_METHOD ( " set_editable " , " editable " ) , & SpinBox : : set_editable ) ;
ClassDB : : bind_method ( D_METHOD ( " is_editable " ) , & SpinBox : : is_editable ) ;
ClassDB : : bind_method ( D_METHOD ( " set_update_on_text_changed " ) , & SpinBox : : set_update_on_text_changed ) ;
ClassDB : : bind_method ( D_METHOD ( " get_update_on_text_changed " ) , & SpinBox : : get_update_on_text_changed ) ;
ClassDB : : bind_method ( D_METHOD ( " apply " ) , & SpinBox : : apply ) ;
ClassDB : : bind_method ( D_METHOD ( " get_line_edit " ) , & SpinBox : : get_line_edit ) ;
ADD_PROPERTY ( PropertyInfo ( Variant : : INT , " align " , PROPERTY_HINT_ENUM , " Left,Center,Right,Fill " ) , " set_align " , " get_align " ) ;
ADD_PROPERTY ( PropertyInfo ( Variant : : BOOL , " editable " ) , " set_editable " , " is_editable " ) ;
ADD_PROPERTY ( PropertyInfo ( Variant : : BOOL , " update_on_text_changed " ) , " set_update_on_text_changed " , " get_update_on_text_changed " ) ;
ADD_PROPERTY ( PropertyInfo ( Variant : : STRING , " prefix " ) , " set_prefix " , " get_prefix " ) ;
ADD_PROPERTY ( PropertyInfo ( Variant : : STRING , " suffix " ) , " set_suffix " , " get_suffix " ) ;
}
@ -284,7 +314,6 @@ SpinBox::SpinBox() {
line_edit - > set_mouse_filter ( MOUSE_FILTER_PASS ) ;
line_edit - > set_align ( LineEdit : : ALIGN_LEFT ) ;
//connect("value_changed",this,"_value_changed");
line_edit - > connect ( " text_submitted " , callable_mp ( this , & SpinBox : : _text_submitted ) , Vector < Variant > ( ) , CONNECT_DEFERRED ) ;
line_edit - > connect ( " focus_exited " , callable_mp ( this , & SpinBox : : _line_edit_focus_exit ) , Vector < Variant > ( ) , CONNECT_DEFERRED ) ;
line_edit - > connect ( " gui_input " , callable_mp ( this , & SpinBox : : _line_edit_input ) ) ;