| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | /*************************************************************************/ | 
					
						
							|  |  |  | /*  line_edit.h                                                          */ | 
					
						
							|  |  |  | /*************************************************************************/ | 
					
						
							|  |  |  | /*                       This file is part of:                           */ | 
					
						
							|  |  |  | /*                           GODOT ENGINE                                */ | 
					
						
							| 
									
										
										
										
											2017-08-27 14:16:55 +02:00
										 |  |  | /*                      https://godotengine.org                          */ | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | /*************************************************************************/ | 
					
						
							| 
									
										
										
										
											2020-01-01 11:16:22 +01:00
										 |  |  | /* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur.                 */ | 
					
						
							|  |  |  | /* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md).   */ | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | /*                                                                       */ | 
					
						
							|  |  |  | /* Permission is hereby granted, free of charge, to any person obtaining */ | 
					
						
							|  |  |  | /* a copy of this software and associated documentation files (the       */ | 
					
						
							|  |  |  | /* "Software"), to deal in the Software without restriction, including   */ | 
					
						
							|  |  |  | /* without limitation the rights to use, copy, modify, merge, publish,   */ | 
					
						
							|  |  |  | /* distribute, sublicense, and/or sell copies of the Software, and to    */ | 
					
						
							|  |  |  | /* permit persons to whom the Software is furnished to do so, subject to */ | 
					
						
							|  |  |  | /* the following conditions:                                             */ | 
					
						
							|  |  |  | /*                                                                       */ | 
					
						
							|  |  |  | /* The above copyright notice and this permission notice shall be        */ | 
					
						
							|  |  |  | /* included in all copies or substantial portions of the Software.       */ | 
					
						
							|  |  |  | /*                                                                       */ | 
					
						
							|  |  |  | /* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,       */ | 
					
						
							|  |  |  | /* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF    */ | 
					
						
							|  |  |  | /* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ | 
					
						
							|  |  |  | /* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY  */ | 
					
						
							|  |  |  | /* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,  */ | 
					
						
							|  |  |  | /* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE     */ | 
					
						
							|  |  |  | /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.                */ | 
					
						
							|  |  |  | /*************************************************************************/ | 
					
						
							| 
									
										
										
										
											2018-01-05 00:50:27 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | #ifndef LINE_EDIT_H
 | 
					
						
							|  |  |  | #define LINE_EDIT_H
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include "scene/gui/control.h"
 | 
					
						
							| 
									
										
										
										
											2016-05-16 20:25:17 -03:00
										 |  |  | #include "scene/gui/popup_menu.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | class LineEdit : public Control { | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	GDCLASS(LineEdit, Control); | 
					
						
							| 
									
										
										
										
											2015-08-15 07:47:22 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | public: | 
					
						
							|  |  |  | 	enum Align { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		ALIGN_LEFT, | 
					
						
							|  |  |  | 		ALIGN_CENTER, | 
					
						
							|  |  |  | 		ALIGN_RIGHT, | 
					
						
							|  |  |  | 		ALIGN_FILL | 
					
						
							|  |  |  | 	}; | 
					
						
							| 
									
										
										
										
											2016-05-16 20:25:17 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	enum MenuItems { | 
					
						
							|  |  |  | 		MENU_CUT, | 
					
						
							|  |  |  | 		MENU_COPY, | 
					
						
							|  |  |  | 		MENU_PASTE, | 
					
						
							|  |  |  | 		MENU_CLEAR, | 
					
						
							|  |  |  | 		MENU_SELECT_ALL, | 
					
						
							|  |  |  | 		MENU_UNDO, | 
					
						
							| 
									
										
										
										
											2017-10-29 23:14:33 +00:00
										 |  |  | 		MENU_REDO, | 
					
						
							| 
									
										
										
										
											2016-05-16 20:25:17 -03:00
										 |  |  | 		MENU_MAX | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	}; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-15 07:47:22 +01:00
										 |  |  | private: | 
					
						
							|  |  |  | 	Align align; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	bool editable; | 
					
						
							|  |  |  | 	bool pass; | 
					
						
							| 
									
										
										
										
											2018-02-05 16:22:34 +01:00
										 |  |  | 	bool text_changed_dirty; | 
					
						
							| 
									
										
										
										
											2016-03-09 00:00:52 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	String undo_text; | 
					
						
							|  |  |  | 	String text; | 
					
						
							| 
									
										
										
										
											2016-06-27 19:47:40 +08:00
										 |  |  | 	String placeholder; | 
					
						
							| 
									
										
										
										
											2019-06-22 14:42:36 +02:00
										 |  |  | 	String placeholder_translated; | 
					
						
							| 
									
										
										
										
											2018-04-28 20:24:48 +02:00
										 |  |  | 	String secret_character; | 
					
						
							| 
									
										
										
										
											2016-06-28 11:45:17 +08:00
										 |  |  | 	float placeholder_alpha; | 
					
						
							| 
									
										
										
										
											2017-08-07 14:09:56 +03:00
										 |  |  | 	String ime_text; | 
					
						
							|  |  |  | 	Point2 ime_selection; | 
					
						
							| 
									
										
										
										
											2016-03-09 00:00:52 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-08-07 17:09:46 -07:00
										 |  |  | 	bool selecting_enabled; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-09 15:46:29 -05:00
										 |  |  | 	bool context_menu_enabled; | 
					
						
							| 
									
										
										
										
											2016-05-16 20:25:17 -03:00
										 |  |  | 	PopupMenu *menu; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	int cursor_pos; | 
					
						
							|  |  |  | 	int window_pos; | 
					
						
							| 
									
										
										
										
											2019-09-08 22:46:57 -03:00
										 |  |  | 	int max_length; // 0 for no maximum.
 | 
					
						
							| 
									
										
										
										
											2015-08-15 07:47:22 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	int cached_width; | 
					
						
							| 
									
										
										
										
											2018-04-09 22:08:53 +02:00
										 |  |  | 	int cached_placeholder_width; | 
					
						
							| 
									
										
										
										
											2016-03-09 00:00:52 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-26 13:45:38 +02:00
										 |  |  | 	bool clear_button_enabled; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-08-07 17:09:46 -07:00
										 |  |  | 	bool shortcut_keys_enabled; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-06-11 15:43:37 -03:00
										 |  |  | 	Ref<Texture2D> right_icon; | 
					
						
							| 
									
										
										
										
											2018-08-11 12:04:19 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	struct Selection { | 
					
						
							|  |  |  | 		int begin; | 
					
						
							|  |  |  | 		int end; | 
					
						
							|  |  |  | 		int cursor_start; | 
					
						
							|  |  |  | 		bool enabled; | 
					
						
							|  |  |  | 		bool creating; | 
					
						
							|  |  |  | 		bool doubleclick; | 
					
						
							|  |  |  | 		bool drag_attempt; | 
					
						
							|  |  |  | 	} selection; | 
					
						
							| 
									
										
										
										
											2016-03-09 00:00:52 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-29 23:14:33 +00:00
										 |  |  | 	struct TextOperation { | 
					
						
							|  |  |  | 		int cursor_pos; | 
					
						
							| 
									
										
										
										
											2019-12-01 13:54:09 +00:00
										 |  |  | 		int window_pos; | 
					
						
							|  |  |  | 		int cached_width; | 
					
						
							| 
									
										
										
										
											2017-10-29 23:14:33 +00:00
										 |  |  | 		String text; | 
					
						
							|  |  |  | 	}; | 
					
						
							|  |  |  | 	List<TextOperation> undo_stack; | 
					
						
							|  |  |  | 	List<TextOperation>::Element *undo_stack_pos; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-26 13:45:38 +02:00
										 |  |  | 	struct ClearButtonStatus { | 
					
						
							|  |  |  | 		bool press_attempt; | 
					
						
							|  |  |  | 		bool pressing_inside; | 
					
						
							|  |  |  | 	} clear_button_status; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	bool _is_over_clear_button(const Point2 &p_pos) const; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-29 23:14:33 +00:00
										 |  |  | 	void _clear_undo_stack(); | 
					
						
							|  |  |  | 	void _clear_redo(); | 
					
						
							|  |  |  | 	void _create_undo_state(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-08-07 17:09:46 -07:00
										 |  |  | 	void _generate_context_menu(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-21 00:05:52 +01:00
										 |  |  | 	Timer *caret_blink_timer; | 
					
						
							| 
									
										
										
										
											2016-09-06 20:34:24 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	void _text_changed(); | 
					
						
							| 
									
										
										
										
											2017-10-29 23:14:33 +00:00
										 |  |  | 	void _emit_text_change(); | 
					
						
							| 
									
										
										
										
											2016-09-06 20:34:24 -03:00
										 |  |  | 	bool expand_to_text_length; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-01-29 14:46:49 -05:00
										 |  |  | 	void update_cached_width(); | 
					
						
							| 
									
										
										
										
											2019-06-22 14:42:36 +02:00
										 |  |  | 	void update_placeholder_width(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-21 00:05:52 +01:00
										 |  |  | 	bool caret_blink_enabled; | 
					
						
							|  |  |  | 	bool draw_caret; | 
					
						
							| 
									
										
										
										
											2016-06-21 00:16:18 +01:00
										 |  |  | 	bool window_has_focus; | 
					
						
							| 
									
										
										
										
											2016-06-21 00:05:52 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	void shift_selection_check_pre(bool); | 
					
						
							|  |  |  | 	void shift_selection_check_post(bool); | 
					
						
							| 
									
										
										
										
											2016-03-09 00:00:52 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	void selection_fill_at_cursor(); | 
					
						
							|  |  |  | 	void set_window_pos(int p_pos); | 
					
						
							| 
									
										
										
										
											2016-03-09 00:00:52 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	void set_cursor_at_pixel_pos(int p_x); | 
					
						
							| 
									
										
										
										
											2019-06-22 20:22:52 +02:00
										 |  |  | 	int get_cursor_pixel_pos(); | 
					
						
							| 
									
										
										
										
											2016-03-09 00:00:52 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-21 00:05:52 +01:00
										 |  |  | 	void _reset_caret_blink_timer(); | 
					
						
							|  |  |  | 	void _toggle_draw_caret(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	void clear_internal(); | 
					
						
							|  |  |  | 	void changed_internal(); | 
					
						
							| 
									
										
										
										
											2016-03-09 00:00:52 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-21 14:38:35 +01:00
										 |  |  | 	void _editor_settings_changed(); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-20 12:38:03 -03:00
										 |  |  | 	void _gui_input(Ref<InputEvent> p_event); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	void _notification(int p_what); | 
					
						
							| 
									
										
										
										
											2016-03-09 00:00:52 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | protected: | 
					
						
							|  |  |  | 	static void _bind_methods(); | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | public: | 
					
						
							| 
									
										
										
										
											2015-08-15 07:47:22 +01:00
										 |  |  | 	void set_align(Align p_align); | 
					
						
							|  |  |  | 	Align get_align() const; | 
					
						
							| 
									
										
										
										
											2016-03-09 00:00:52 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	virtual Variant get_drag_data(const Point2 &p_point); | 
					
						
							|  |  |  | 	virtual bool can_drop_data(const Point2 &p_point, const Variant &p_data) const; | 
					
						
							|  |  |  | 	virtual void drop_data(const Point2 &p_point, const Variant &p_data); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-26 13:45:38 +02:00
										 |  |  | 	virtual CursorShape get_cursor_shape(const Point2 &p_pos) const; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-16 20:25:17 -03:00
										 |  |  | 	void menu_option(int p_option); | 
					
						
							| 
									
										
										
										
											2017-11-09 15:46:29 -05:00
										 |  |  | 	void set_context_menu_enabled(bool p_enable); | 
					
						
							|  |  |  | 	bool is_context_menu_enabled(); | 
					
						
							| 
									
										
										
										
											2016-05-16 20:25:17 -03:00
										 |  |  | 	PopupMenu *get_menu() const; | 
					
						
							| 
									
										
										
										
											2016-03-09 00:00:52 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-17 15:40:44 -02:00
										 |  |  | 	void select(int p_from = 0, int p_to = -1); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	void select_all(); | 
					
						
							| 
									
										
										
										
											2018-01-21 01:12:25 -05:00
										 |  |  | 	void selection_delete(); | 
					
						
							| 
									
										
										
										
											2017-12-17 15:40:44 -02:00
										 |  |  | 	void deselect(); | 
					
						
							| 
									
										
										
										
											2016-03-09 00:00:52 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	void delete_char(); | 
					
						
							| 
									
										
										
										
											2016-06-18 16:15:26 +02:00
										 |  |  | 	void delete_text(int p_from_column, int p_to_column); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	void set_text(String p_text); | 
					
						
							|  |  |  | 	String get_text() const; | 
					
						
							| 
									
										
										
										
											2016-06-27 19:47:40 +08:00
										 |  |  | 	void set_placeholder(String p_text); | 
					
						
							|  |  |  | 	String get_placeholder() const; | 
					
						
							| 
									
										
										
										
											2016-06-28 11:45:17 +08:00
										 |  |  | 	void set_placeholder_alpha(float p_alpha); | 
					
						
							|  |  |  | 	float get_placeholder_alpha() const; | 
					
						
							| 
									
										
										
										
											2017-09-10 15:37:49 +02:00
										 |  |  | 	void set_cursor_position(int p_pos); | 
					
						
							|  |  |  | 	int get_cursor_position() const; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	void set_max_length(int p_max_length); | 
					
						
							|  |  |  | 	int get_max_length() const; | 
					
						
							|  |  |  | 	void append_at_cursor(String p_text); | 
					
						
							|  |  |  | 	void clear(); | 
					
						
							| 
									
										
										
										
											2016-03-09 00:00:52 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-21 00:05:52 +01:00
										 |  |  | 	bool cursor_get_blink_enabled() const; | 
					
						
							|  |  |  | 	void cursor_set_blink_enabled(const bool p_enabled); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	float cursor_get_blink_speed() const; | 
					
						
							|  |  |  | 	void cursor_set_blink_speed(const float p_speed); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-16 20:25:17 -03:00
										 |  |  | 	void copy_text(); | 
					
						
							|  |  |  | 	void cut_text(); | 
					
						
							|  |  |  | 	void paste_text(); | 
					
						
							|  |  |  | 	void undo(); | 
					
						
							| 
									
										
										
										
											2017-10-29 23:14:33 +00:00
										 |  |  | 	void redo(); | 
					
						
							| 
									
										
										
										
											2016-03-09 00:00:52 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	void set_editable(bool p_editable); | 
					
						
							|  |  |  | 	bool is_editable() const; | 
					
						
							| 
									
										
										
										
											2016-03-09 00:00:52 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	void set_secret(bool p_secret); | 
					
						
							|  |  |  | 	bool is_secret() const; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-28 20:24:48 +02:00
										 |  |  | 	void set_secret_character(const String &p_string); | 
					
						
							|  |  |  | 	String get_secret_character() const; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	virtual Size2 get_minimum_size() const; | 
					
						
							| 
									
										
										
										
											2015-10-17 10:29:54 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-08-11 15:10:05 -04:00
										 |  |  | 	void set_expand_to_text_length(bool p_enabled); | 
					
						
							| 
									
										
										
										
											2016-09-06 20:34:24 -03:00
										 |  |  | 	bool get_expand_to_text_length() const; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-26 13:45:38 +02:00
										 |  |  | 	void set_clear_button_enabled(bool p_enabled); | 
					
						
							|  |  |  | 	bool is_clear_button_enabled() const; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-08-07 17:09:46 -07:00
										 |  |  | 	void set_shortcut_keys_enabled(bool p_enabled); | 
					
						
							|  |  |  | 	bool is_shortcut_keys_enabled() const; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	void set_selecting_enabled(bool p_enabled); | 
					
						
							|  |  |  | 	bool is_selecting_enabled() const; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-06-11 15:43:37 -03:00
										 |  |  | 	void set_right_icon(const Ref<Texture2D> &p_icon); | 
					
						
							|  |  |  | 	Ref<Texture2D> get_right_icon(); | 
					
						
							| 
									
										
										
										
											2018-08-11 12:04:19 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-16 20:25:17 -03:00
										 |  |  | 	virtual bool is_text_field() const; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	LineEdit(); | 
					
						
							|  |  |  | 	~LineEdit(); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-15 07:47:22 +01:00
										 |  |  | VARIANT_ENUM_CAST(LineEdit::Align); | 
					
						
							| 
									
										
										
										
											2017-08-20 17:45:01 +02:00
										 |  |  | VARIANT_ENUM_CAST(LineEdit::MenuItems); | 
					
						
							| 
									
										
										
										
											2015-08-15 07:47:22 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | #endif
 |