1 /*************************************************************************/
2 /*  editor_log.h                                                         */
3 /*************************************************************************/
4 /*                       This file is part of:                           */
5 /*                           GODOT ENGINE                                */
6 /*                      https://godotengine.org                          */
7 /*************************************************************************/
8 /* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur.                 */
9 /* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md).   */
10 /*                                                                       */
11 /* Permission is hereby granted, free of charge, to any person obtaining */
12 /* a copy of this software and associated documentation files (the       */
13 /* "Software"), to deal in the Software without restriction, including   */
14 /* without limitation the rights to use, copy, modify, merge, publish,   */
15 /* distribute, sublicense, and/or sell copies of the Software, and to    */
16 /* permit persons to whom the Software is furnished to do so, subject to */
17 /* the following conditions:                                             */
18 /*                                                                       */
19 /* The above copyright notice and this permission notice shall be        */
20 /* included in all copies or substantial portions of the Software.       */
21 /*                                                                       */
22 /* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,       */
23 /* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF    */
24 /* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
25 /* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY  */
26 /* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,  */
27 /* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE     */
28 /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.                */
29 /*************************************************************************/
30 
31 #ifndef EDITOR_LOG_H
32 #define EDITOR_LOG_H
33 
34 #include "scene/gui/control.h"
35 #include "scene/gui/label.h"
36 #include "scene/gui/rich_text_label.h"
37 #include "scene/gui/texture_button.h"
38 //#include "scene/gui/empty_control.h"
39 #include "core/os/thread.h"
40 #include "pane_drag.h"
41 #include "scene/gui/box_container.h"
42 #include "scene/gui/panel_container.h"
43 #include "scene/gui/texture_rect.h"
44 #include "scene/gui/tool_button.h"
45 
46 class EditorLog : public VBoxContainer {
47 
48 	GDCLASS(EditorLog, VBoxContainer);
49 
50 	Button *clearbutton;
51 	Button *copybutton;
52 	Label *title;
53 	RichTextLabel *log;
54 	HBoxContainer *title_hb;
55 	//PaneDrag *pd;
56 	ToolButton *tool_button;
57 
58 	static void _error_handler(void *p_self, const char *p_func, const char *p_file, int p_line, const char *p_error, const char *p_errorexp, ErrorHandlerType p_type);
59 
60 	ErrorHandlerList eh;
61 
62 	Thread::ID current;
63 
64 	//void _dragged(const Point2& p_ofs);
65 	void _clear_request();
66 	void _copy_request();
67 	static void _undo_redo_cbk(void *p_self, const String &p_name);
68 
69 protected:
70 	static void _bind_methods();
71 	void _notification(int p_what);
72 
73 public:
74 	enum MessageType {
75 		MSG_TYPE_STD,
76 		MSG_TYPE_ERROR,
77 		MSG_TYPE_WARNING,
78 		MSG_TYPE_EDITOR
79 	};
80 
81 	void add_message(const String &p_msg, MessageType p_type = MSG_TYPE_STD);
82 	void set_tool_button(ToolButton *p_tool_button);
83 	void deinit();
84 
85 	void clear();
86 	void copy();
87 	EditorLog();
88 	~EditorLog();
89 };
90 
91 #endif // EDITOR_LOG_H
92