| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | /*************************************************************************/ | 
					
						
							|  |  |  | /*  code_editor.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
										 |  |  | /*************************************************************************/ | 
					
						
							| 
									
										
										
										
											2017-01-01 22:01:57 +01:00
										 |  |  | /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur.                 */ | 
					
						
							| 
									
										
										
										
											2017-04-08 00:11:42 +02:00
										 |  |  | /* Copyright (c) 2014-2017 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.                */ | 
					
						
							|  |  |  | /*************************************************************************/ | 
					
						
							|  |  |  | #ifndef CODE_EDITOR_H
 | 
					
						
							|  |  |  | #define CODE_EDITOR_H
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 14:21:25 +01:00
										 |  |  | #include "editor/editor_plugin.h"
 | 
					
						
							| 
									
										
										
										
											2016-05-28 18:25:45 +02:00
										 |  |  | #include "scene/gui/check_box.h"
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | #include "scene/gui/check_button.h"
 | 
					
						
							|  |  |  | #include "scene/gui/dialogs.h"
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | #include "scene/gui/line_edit.h"
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | #include "scene/gui/text_edit.h"
 | 
					
						
							|  |  |  | #include "scene/gui/tool_button.h"
 | 
					
						
							|  |  |  | #include "scene/main/timer.h"
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | class GotoLineDialog : public ConfirmationDialog { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	GDCLASS(GotoLineDialog, ConfirmationDialog); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	Label *line_label; | 
					
						
							|  |  |  | 	LineEdit *line; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	TextEdit *text_editor; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	virtual void ok_pressed(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | public: | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	void popup_find_line(TextEdit *p_edit); | 
					
						
							|  |  |  | 	int get_line() const; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	void set_text_editor(TextEdit *p_text_editor); | 
					
						
							| 
									
										
										
										
											2016-03-09 00:00:52 +01:00
										 |  |  | 	GotoLineDialog(); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-28 18:25:45 +02:00
										 |  |  | class FindReplaceBar : public HBoxContainer { | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	GDCLASS(FindReplaceBar, HBoxContainer); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-28 18:25:45 +02:00
										 |  |  | 	LineEdit *search_text; | 
					
						
							|  |  |  | 	ToolButton *find_prev; | 
					
						
							|  |  |  | 	ToolButton *find_next; | 
					
						
							|  |  |  | 	CheckBox *case_sensitive; | 
					
						
							|  |  |  | 	CheckBox *whole_words; | 
					
						
							|  |  |  | 	Label *error_label; | 
					
						
							|  |  |  | 	TextureButton *hide_button; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	LineEdit *replace_text; | 
					
						
							| 
									
										
										
										
											2016-09-11 10:01:52 -03:00
										 |  |  | 	Button *replace; | 
					
						
							|  |  |  | 	Button *replace_all; | 
					
						
							| 
									
										
										
										
											2016-05-28 18:25:45 +02:00
										 |  |  | 	CheckBox *selection_only; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	VBoxContainer *text_vbc; | 
					
						
							|  |  |  | 	HBoxContainer *replace_hbc; | 
					
						
							|  |  |  | 	HBoxContainer *replace_options_hbc; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	TextEdit *text_edit; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-30 18:15:41 +02:00
										 |  |  | 	int result_line; | 
					
						
							|  |  |  | 	int result_col; | 
					
						
							| 
									
										
										
										
											2016-05-28 18:25:45 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	bool replace_all_mode; | 
					
						
							| 
									
										
										
										
											2016-05-30 18:15:41 +02:00
										 |  |  | 	bool preserve_cursor; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	void _get_search_from(int &r_line, int &r_col); | 
					
						
							| 
									
										
										
										
											2016-05-28 18:25:45 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	void _show_search(); | 
					
						
							|  |  |  | 	void _hide_bar(); | 
					
						
							| 
									
										
										
										
											2016-05-30 18:15:41 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	void _editor_text_changed(); | 
					
						
							| 
									
										
										
										
											2016-05-28 18:25:45 +02:00
										 |  |  | 	void _search_options_changed(bool p_pressed); | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	void _search_text_changed(const String &p_text); | 
					
						
							|  |  |  | 	void _search_text_entered(const String &p_text); | 
					
						
							|  |  |  | 	void _replace_text_entered(const String &p_text); | 
					
						
							| 
									
										
										
										
											2016-05-28 18:25:45 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | protected: | 
					
						
							|  |  |  | 	void _notification(int p_what); | 
					
						
							| 
									
										
										
										
											2017-05-20 12:38:03 -03:00
										 |  |  | 	void _unhandled_input(const Ref<InputEvent> &p_event); | 
					
						
							| 
									
										
										
										
											2016-05-28 18:25:45 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-30 18:15:41 +02:00
										 |  |  | 	bool _search(uint32_t p_flags, int p_from_line, int p_from_col); | 
					
						
							| 
									
										
										
										
											2016-05-28 18:25:45 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	void _replace(); | 
					
						
							|  |  |  | 	void _replace_all(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	static void _bind_methods(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | public: | 
					
						
							|  |  |  | 	String get_search_text() const; | 
					
						
							|  |  |  | 	String get_replace_text() const; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	bool is_case_sensitive() const; | 
					
						
							|  |  |  | 	bool is_whole_words() const; | 
					
						
							|  |  |  | 	bool is_selection_only() const; | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	void set_error(const String &p_label); | 
					
						
							| 
									
										
										
										
											2016-05-28 18:25:45 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	void set_text_edit(TextEdit *p_text_edit); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	void popup_search(); | 
					
						
							|  |  |  | 	void popup_replace(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-30 18:15:41 +02:00
										 |  |  | 	bool search_current(); | 
					
						
							|  |  |  | 	bool search_prev(); | 
					
						
							|  |  |  | 	bool search_next(); | 
					
						
							| 
									
										
										
										
											2016-05-28 18:25:45 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	FindReplaceBar(); | 
					
						
							|  |  |  | }; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | class FindReplaceDialog : public ConfirmationDialog { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	GDCLASS(FindReplaceDialog, ConfirmationDialog); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	LineEdit *search_text; | 
					
						
							|  |  |  | 	LineEdit *replace_text; | 
					
						
							|  |  |  | 	CheckButton *whole_words; | 
					
						
							|  |  |  | 	CheckButton *case_sensitive; | 
					
						
							|  |  |  | 	CheckButton *backwards; | 
					
						
							|  |  |  | 	CheckButton *prompt; | 
					
						
							|  |  |  | 	CheckButton *selection_only; | 
					
						
							|  |  |  | 	Button *skip; | 
					
						
							|  |  |  | 	Label *error_label; | 
					
						
							|  |  |  | 	MarginContainer *replace_mc; | 
					
						
							|  |  |  | 	Label *replace_label; | 
					
						
							|  |  |  | 	VBoxContainer *replace_vb; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	void _search_text_entered(const String &p_text); | 
					
						
							|  |  |  | 	void _replace_text_entered(const String &p_text); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	void _prompt_changed(); | 
					
						
							|  |  |  | 	void _skip_pressed(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	TextEdit *text_edit; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | protected: | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	void _search_callback(); | 
					
						
							|  |  |  | 	void _replace_skip_callback(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	bool _search(); | 
					
						
							|  |  |  | 	void _replace(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	virtual void ok_pressed(); | 
					
						
							|  |  |  | 	static void _bind_methods(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | public: | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	String get_search_text() const; | 
					
						
							|  |  |  | 	String get_replace_text() const; | 
					
						
							|  |  |  | 	bool is_whole_words() const; | 
					
						
							|  |  |  | 	bool is_case_sensitive() const; | 
					
						
							|  |  |  | 	bool is_backwards() const; | 
					
						
							|  |  |  | 	bool is_replace_mode() const; | 
					
						
							|  |  |  | 	bool is_replace_all_mode() const; | 
					
						
							|  |  |  | 	bool is_replace_selection_only() const; | 
					
						
							|  |  |  | 	void set_replace_selection_only(bool p_enable); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	void set_error(const String &p_error); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	void popup_search(); | 
					
						
							|  |  |  | 	void popup_replace(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	void set_text_edit(TextEdit *p_text_edit); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	void search_next(); | 
					
						
							|  |  |  | 	FindReplaceDialog(); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-08-24 00:06:56 -03:00
										 |  |  | typedef void (*CodeTextEditorCodeCompleteFunc)(void *p_ud, const String &p_code, List<String> *r_options, bool &r_forced); | 
					
						
							| 
									
										
										
										
											2016-08-02 19:11:05 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-28 18:25:45 +02:00
										 |  |  | class CodeTextEditor : public VBoxContainer { | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	GDCLASS(CodeTextEditor, VBoxContainer); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	TextEdit *text_editor; | 
					
						
							| 
									
										
										
										
											2016-05-28 18:25:45 +02:00
										 |  |  | 	FindReplaceBar *find_replace_bar; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-07-24 17:11:32 +02:00
										 |  |  | 	Label *line_nb; | 
					
						
							|  |  |  | 	Label *col_nb; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	Label *info; | 
					
						
							|  |  |  | 	Timer *idle; | 
					
						
							| 
									
										
										
										
											2014-05-04 11:22:49 +08:00
										 |  |  | 	Timer *code_complete_timer; | 
					
						
							| 
									
										
										
										
											2014-05-22 00:01:11 +02:00
										 |  |  | 	bool enable_complete_timer; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-17 21:58:50 +02:00
										 |  |  | 	Timer *font_resize_timer; | 
					
						
							|  |  |  | 	int font_resize_val; | 
					
						
							| 
									
										
										
										
											2017-11-01 21:49:39 +01:00
										 |  |  | 	real_t font_size; | 
					
						
							| 
									
										
										
										
											2016-06-17 21:58:50 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	Label *error; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-04-30 20:21:58 +04:00
										 |  |  | 	void _on_settings_change(); | 
					
						
							| 
									
										
										
										
											2014-04-05 12:39:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-29 11:37:26 -03:00
										 |  |  | 	void _update_font(); | 
					
						
							| 
									
										
										
										
											2014-12-16 22:31:57 -03:00
										 |  |  | 	void _complete_request(); | 
					
						
							| 
									
										
										
										
											2016-06-17 21:58:50 +02:00
										 |  |  | 	void _font_resize_timeout(); | 
					
						
							| 
									
										
										
										
											2017-11-01 21:49:39 +01:00
										 |  |  | 	bool _add_font_size(int p_delta); | 
					
						
							| 
									
										
										
										
											2016-06-17 21:58:50 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-20 12:38:03 -03:00
										 |  |  | 	void _text_editor_gui_input(const Ref<InputEvent> &p_event); | 
					
						
							| 
									
										
										
										
											2016-07-14 20:03:40 +01:00
										 |  |  | 	void _zoom_in(); | 
					
						
							|  |  |  | 	void _zoom_out(); | 
					
						
							| 
									
										
										
										
											2017-11-01 21:49:39 +01:00
										 |  |  | 	void _zoom_changed(); | 
					
						
							| 
									
										
										
										
											2016-07-14 20:03:40 +01:00
										 |  |  | 	void _reset_zoom(); | 
					
						
							| 
									
										
										
										
											2016-06-17 21:58:50 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-02 19:11:05 -03:00
										 |  |  | 	CodeTextEditorCodeCompleteFunc code_complete_func; | 
					
						
							|  |  |  | 	void *code_complete_ud; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | protected: | 
					
						
							|  |  |  | 	virtual void _load_theme_settings() {} | 
					
						
							| 
									
										
										
										
											2016-08-02 19:11:05 -03:00
										 |  |  | 	virtual void _validate_script() {} | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	virtual void _code_complete_script(const String &p_code, List<String> *r_options) {} | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	void _text_changed_idle_timeout(); | 
					
						
							| 
									
										
										
										
											2014-05-04 11:22:49 +08:00
										 |  |  | 	void _code_complete_timer_timeout(); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	void _text_changed(); | 
					
						
							|  |  |  | 	void _line_col_changed(); | 
					
						
							|  |  |  | 	void _notification(int); | 
					
						
							|  |  |  | 	static void _bind_methods(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | public: | 
					
						
							| 
									
										
										
										
											2016-10-10 10:38:12 +02:00
										 |  |  | 	void update_editor_settings(); | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	void set_error(const String &p_error); | 
					
						
							| 
									
										
										
										
											2016-08-02 19:11:05 -03:00
										 |  |  | 	void update_line_and_column() { _line_col_changed(); } | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	TextEdit *get_text_edit() { return text_editor; } | 
					
						
							| 
									
										
										
										
											2016-05-28 18:25:45 +02:00
										 |  |  | 	FindReplaceBar *get_find_replace_bar() { return find_replace_bar; } | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	virtual void apply_code() {} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	void set_code_complete_func(CodeTextEditorCodeCompleteFunc p_code_complete_func, void *p_ud); | 
					
						
							| 
									
										
										
										
											2016-08-02 19:11:05 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	CodeTextEditor(); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #endif // CODE_EDITOR_H
 |