ソースを参照

Calculate the SpinBox value using the Expression class

This closes #31780.
Hugo Locurcio 6 年 前
コミット
86a31e9e38
1 ファイル変更12 行追加8 行削除
  1. 12 8
      scene/gui/spin_box.cpp

+ 12 - 8
scene/gui/spin_box.cpp

@@ -29,6 +29,7 @@
 /*************************************************************************/
 
 #include "spin_box.h"
+#include "core/math/expression.h"
 #include "core/os/input.h"
 
 Size2 SpinBox::get_minimum_size() const {
@@ -50,15 +51,18 @@ void SpinBox::_value_changed(double) {
 
 void SpinBox::_text_entered(const String &p_string) {
 
-	/*
-	if (!p_string.is_numeric())
+	Ref<Expression> expr;
+	expr.instance();
+	Error err = expr->parse(p_string);
+	if (err != OK) {
 		return;
-	*/
-	String value = p_string;
-	if (prefix != "" && p_string.begins_with(prefix))
-		value = p_string.substr(prefix.length(), p_string.length() - prefix.length());
-	set_value(value.to_double());
-	_value_changed(0);
+	}
+
+	Variant value = expr->execute(Array(), NULL, false);
+	if (value.get_type() != Variant::NIL) {
+		set_value(value);
+		_value_changed(0);
+	}
 }
 
 LineEdit *SpinBox::get_line_edit() {