Browse Source

Several fixed to editor doc.
Improved style
Fixed editor help issues
Added editor help index

Daniel J. Ramirez 8 years ago
parent
commit
d21f20eb5f

+ 135 - 146
editor/editor_help.cpp

@@ -607,7 +607,9 @@ void EditorHelp::_add_type(const String &p_type, const String &p_enum) {
 			t = p_enum.get_slice(".", 0);
 		}
 	}
-	class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/highlighting/base_type_color"));
+	const Color text_color = get_color("default_color", "RichTextLabel");
+	const Color type_color = get_color("accent_color", "Editor").linear_interpolate(text_color, 0.5);
+	class_desc->push_color(type_color);
 	if (can_ref) {
 		if (p_enum == "") {
 			class_desc->push_meta("#" + t); //class
@@ -642,24 +644,32 @@ Error EditorHelp::_goto_desc(const String &p_class, int p_vscr) {
 
 	class_desc->clear();
 	method_line.clear();
+	section_line.clear();
 	edited_class = p_class;
 	//edited_class->show();
 
-	DocData::ClassDoc cd = doc->class_list[p_class]; //make a copy, so we can sort without worrying
+	// Colors
+	const Color title_color = get_color("accent_color", "Editor");
+	const Color text_color = get_color("font_color", "RichTextLabel");
+	const Color highlight_color = get_color("highlight_color", "RichTextLabel");
+	const Color base_type_color = title_color.linear_interpolate(text_color, 0.5);
+	const Color comment_color = Color(text_color.r, text_color.g, text_color.b, 0.6);
+	const Color symbol_color = comment_color;
+	const Color value_color = Color(text_color.r, text_color.g, text_color.b, 0.4);
+	const Color qualifier_color = Color(text_color.r, text_color.g, text_color.b, 0.8);
 
-	Color h_color;
+	DocData::ClassDoc cd = doc->class_list[p_class]; //make a copy, so we can sort without worrying
 
 	Ref<Font> doc_font = get_font("doc", "EditorFonts");
 	Ref<Font> doc_title_font = get_font("doc_title", "EditorFonts");
 	Ref<Font> doc_code_font = get_font("doc_source", "EditorFonts");
-	String link_color_text = Color(EditorSettings::get_singleton()->get("text_editor/highlighting/keyword_color")).to_html(false);
-
-	h_color = Color(1, 1, 1, 1);
+	String link_color_text = title_color.to_html(false);
 
+	section_line.push_back(Pair<String, int>(TTR("Top"), 0));
 	class_desc->push_font(doc_title_font);
-	class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/highlighting/keyword_color"));
+	class_desc->push_color(title_color);
 	class_desc->add_text(TTR("Class:") + " ");
-	class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/highlighting/base_type_color"));
+	class_desc->push_color(highlight_color);
 	_add_text(p_class);
 	class_desc->pop();
 	class_desc->pop();
@@ -668,7 +678,7 @@ Error EditorHelp::_goto_desc(const String &p_class, int p_vscr) {
 
 	if (cd.inherits != "") {
 
-		class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/highlighting/keyword_color"));
+		class_desc->push_color(title_color);
 		class_desc->push_font(doc_title_font);
 		class_desc->add_text(TTR("Inherits:") + " ");
 		class_desc->pop();
@@ -702,7 +712,7 @@ Error EditorHelp::_goto_desc(const String &p_class, int p_vscr) {
 			if (E->get().inherits == cd.name) {
 
 				if (!found) {
-					class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/highlighting/keyword_color"));
+					class_desc->push_color(title_color);
 					class_desc->push_font(doc_title_font);
 					class_desc->add_text(TTR("Inherited by:") + " ");
 					class_desc->pop();
@@ -729,11 +739,12 @@ Error EditorHelp::_goto_desc(const String &p_class, int p_vscr) {
 		class_desc->add_newline();
 	}
 
+	class_desc->add_newline();
 	class_desc->add_newline();
 
 	if (cd.brief_description != "") {
 
-		class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/highlighting/keyword_color"));
+		class_desc->push_color(title_color);
 		class_desc->push_font(doc_title_font);
 		class_desc->add_text(TTR("Brief Description:"));
 		class_desc->pop();
@@ -741,7 +752,7 @@ Error EditorHelp::_goto_desc(const String &p_class, int p_vscr) {
 
 		//class_desc->add_newline();
 		class_desc->add_newline();
-		class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/highlighting/text_color"));
+		class_desc->push_color(text_color);
 		class_desc->push_font(doc_font);
 		class_desc->push_indent(1);
 		_add_text(cd.brief_description);
@@ -750,6 +761,7 @@ Error EditorHelp::_goto_desc(const String &p_class, int p_vscr) {
 		class_desc->pop();
 		class_desc->add_newline();
 		class_desc->add_newline();
+		class_desc->add_newline();
 	}
 
 	Set<String> skip_methods;
@@ -757,7 +769,8 @@ Error EditorHelp::_goto_desc(const String &p_class, int p_vscr) {
 
 	if (cd.properties.size()) {
 
-		class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/highlighting/keyword_color"));
+		section_line.push_back(Pair<String, int>(TTR("Members"), class_desc->get_line_count() - 2));
+		class_desc->push_color(title_color);
 		class_desc->push_font(doc_title_font);
 		class_desc->add_text(TTR("Members:"));
 		class_desc->pop();
@@ -775,7 +788,6 @@ Error EditorHelp::_goto_desc(const String &p_class, int p_vscr) {
 			class_desc->push_align(RichTextLabel::ALIGN_RIGHT);
 			class_desc->push_font(doc_code_font);
 			_add_type(cd.properties[i].type, cd.properties[i].enumeration);
-			class_desc->add_text(" ");
 			class_desc->pop();
 			class_desc->pop();
 			class_desc->pop();
@@ -800,7 +812,7 @@ Error EditorHelp::_goto_desc(const String &p_class, int p_vscr) {
 			}
 
 			class_desc->push_font(doc_code_font);
-			class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/highlighting/text_color"));
+			class_desc->push_color(highlight_color);
 			_add_text(cd.properties[i].name);
 
 			if (describe) {
@@ -835,7 +847,8 @@ Error EditorHelp::_goto_desc(const String &p_class, int p_vscr) {
 		if (sort_methods)
 			methods.sort();
 
-		class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/highlighting/keyword_color"));
+		section_line.push_back(Pair<String, int>(TTR("Public Methods"), class_desc->get_line_count() - 2));
+		class_desc->push_color(title_color);
 		class_desc->push_font(doc_title_font);
 		class_desc->add_text(TTR("Public Methods:"));
 		class_desc->pop();
@@ -852,9 +865,9 @@ Error EditorHelp::_goto_desc(const String &p_class, int p_vscr) {
 
 			bool is_vararg = methods[i].qualifiers.find("vararg") != -1;
 
-			class_desc->push_cell();
-
 			method_line[methods[i].name] = class_desc->get_line_count() - 2; //gets overridden if description
+
+			class_desc->push_cell();
 			class_desc->push_align(RichTextLabel::ALIGN_RIGHT);
 			class_desc->push_font(doc_code_font);
 			_add_type(methods[i].return_type, methods[i].return_enum);
@@ -862,23 +875,24 @@ Error EditorHelp::_goto_desc(const String &p_class, int p_vscr) {
 			class_desc->pop(); //align
 			class_desc->pop(); //font
 			class_desc->pop(); //cell
+
 			class_desc->push_cell();
 			class_desc->push_font(doc_code_font);
 
-			if (true || methods[i].description != "") { //always describe method
+			if (methods[i].description != "") {
 				method_descr = true;
 				class_desc->push_meta("@" + methods[i].name);
 			}
-			class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/highlighting/text_color"));
+			class_desc->push_color(highlight_color);
 			_add_text(methods[i].name);
 			class_desc->pop();
 			if (methods[i].description != "")
-				class_desc->pop();
-			class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/highlighting/symbol_color"));
+				class_desc->pop(); // pop meta
+			class_desc->push_color(symbol_color);
 			class_desc->add_text(methods[i].arguments.size() || is_vararg ? "( " : "(");
 			class_desc->pop();
 			for (int j = 0; j < methods[i].arguments.size(); j++) {
-				class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/highlighting/text_color"));
+				class_desc->push_color(text_color);
 				if (j > 0)
 					class_desc->add_text(", ");
 				_add_type(methods[i].arguments[j].type, methods[i].arguments[j].enumeration);
@@ -886,7 +900,7 @@ Error EditorHelp::_goto_desc(const String &p_class, int p_vscr) {
 				_add_text(methods[i].arguments[j].name);
 				if (methods[i].arguments[j].default_value != "") {
 
-					class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/highlighting/symbol_color"));
+					class_desc->push_color(symbol_color);
 					class_desc->add_text("=");
 					class_desc->pop();
 					_add_text(methods[i].arguments[j].default_value);
@@ -896,21 +910,21 @@ Error EditorHelp::_goto_desc(const String &p_class, int p_vscr) {
 			}
 
 			if (is_vararg) {
-				class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/highlighting/text_color"));
+				class_desc->push_color(text_color);
 				if (methods[i].arguments.size())
 					class_desc->add_text(", ");
-				class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/highlighting/symbol_color"));
+				class_desc->push_color(symbol_color);
 				class_desc->add_text("...");
 				class_desc->pop();
 				class_desc->pop();
 			}
 
-			class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/highlighting/symbol_color"));
+			class_desc->push_color(symbol_color);
 			class_desc->add_text(methods[i].arguments.size() || is_vararg ? " )" : ")");
 			class_desc->pop();
 			if (methods[i].qualifiers != "") {
 
-				class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/highlighting/keyword_color"));
+				class_desc->push_color(qualifier_color);
 				class_desc->add_text(" ");
 				_add_text(methods[i].qualifiers);
 				class_desc->pop();
@@ -927,42 +941,54 @@ Error EditorHelp::_goto_desc(const String &p_class, int p_vscr) {
 
 	if (cd.theme_properties.size()) {
 
-		class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/highlighting/keyword_color"));
+		section_line.push_back(Pair<String, int>(TTR("GUI Theme Items"), class_desc->get_line_count() - 2));
+		class_desc->push_color(title_color);
 		class_desc->push_font(doc_title_font);
 		class_desc->add_text(TTR("GUI Theme Items:"));
 		class_desc->pop();
 		class_desc->pop();
-		class_desc->add_newline();
+		// class_desc->add_newline();
 
 		class_desc->push_indent(1);
+		class_desc->push_table(2);
+		class_desc->set_table_column_expand(1, 1);
 
 		//class_desc->add_newline();
 
 		for (int i = 0; i < cd.theme_properties.size(); i++) {
 
 			theme_property_line[cd.theme_properties[i].name] = class_desc->get_line_count() - 2; //gets overridden if description
+
+			class_desc->push_cell();
+			class_desc->push_align(RichTextLabel::ALIGN_RIGHT);
 			class_desc->push_font(doc_code_font);
 			_add_type(cd.theme_properties[i].type);
-			class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/highlighting/text_color"));
-			class_desc->add_text(" ");
+			class_desc->pop();
+			class_desc->pop();
+			class_desc->pop();
+
+			class_desc->push_cell();
+			class_desc->push_font(doc_code_font);
+			class_desc->push_color(highlight_color);
 			_add_text(cd.theme_properties[i].name);
 			class_desc->pop();
 			class_desc->pop();
 
-			if (true || cd.theme_properties[i].description != "") { //always describe properties
+			if (cd.theme_properties[i].description != "") {
 				class_desc->push_font(doc_font);
 				class_desc->add_text("  ");
-				class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/highlighting/comment_color"));
+				class_desc->push_color(comment_color);
 				_add_text(cd.theme_properties[i].description);
 				class_desc->pop();
 				class_desc->pop();
 			}
-
-			class_desc->add_newline();
+			class_desc->pop(); // cell
 		}
 
+		class_desc->pop(); // table
 		class_desc->pop();
 		class_desc->add_newline();
+		class_desc->add_newline();
 	}
 
 	if (cd.signals.size()) {
@@ -970,7 +996,9 @@ Error EditorHelp::_goto_desc(const String &p_class, int p_vscr) {
 		if (sort_methods) {
 			cd.signals.sort();
 		}
-		class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/highlighting/keyword_color"));
+
+		section_line.push_back(Pair<String, int>(TTR("Signals"), class_desc->get_line_count() - 2));
+		class_desc->push_color(title_color);
 		class_desc->push_font(doc_title_font);
 		class_desc->add_text(TTR("Signals:"));
 		class_desc->pop();
@@ -987,14 +1015,14 @@ Error EditorHelp::_goto_desc(const String &p_class, int p_vscr) {
 			class_desc->push_font(doc_code_font); // monofont
 			//_add_type("void");
 			//class_desc->add_text(" ");
-			class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/highlighting/text_color"));
+			class_desc->push_color(highlight_color);
 			_add_text(cd.signals[i].name);
 			class_desc->pop();
-			class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/highlighting/symbol_color"));
+			class_desc->push_color(symbol_color);
 			class_desc->add_text(cd.signals[i].arguments.size() ? "( " : "(");
 			class_desc->pop();
 			for (int j = 0; j < cd.signals[i].arguments.size(); j++) {
-				class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/highlighting/text_color"));
+				class_desc->push_color(text_color);
 				if (j > 0)
 					class_desc->add_text(", ");
 				_add_type(cd.signals[i].arguments[j].type);
@@ -1002,7 +1030,7 @@ Error EditorHelp::_goto_desc(const String &p_class, int p_vscr) {
 				_add_text(cd.signals[i].arguments[j].name);
 				if (cd.signals[i].arguments[j].default_value != "") {
 
-					class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/highlighting/symbol_color"));
+					class_desc->push_color(symbol_color);
 					class_desc->add_text("=");
 					class_desc->pop();
 					_add_text(cd.signals[i].arguments[j].default_value);
@@ -1011,13 +1039,13 @@ Error EditorHelp::_goto_desc(const String &p_class, int p_vscr) {
 				class_desc->pop();
 			}
 
-			class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/highlighting/symbol_color"));
+			class_desc->push_color(symbol_color);
 			class_desc->add_text(cd.signals[i].arguments.size() ? " )" : ")");
 			class_desc->pop();
 			class_desc->pop(); // end monofont
 			if (cd.signals[i].description != "") {
 
-				class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/highlighting/comment_color"));
+				class_desc->push_color(comment_color);
 				class_desc->add_text(" ");
 				_add_text(cd.signals[i].description);
 				class_desc->pop();
@@ -1050,7 +1078,8 @@ Error EditorHelp::_goto_desc(const String &p_class, int p_vscr) {
 
 		if (enums.size()) {
 
-			class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/highlighting/keyword_color"));
+			section_line.push_back(Pair<String, int>(TTR("Enumerations"), class_desc->get_line_count() - 2));
+			class_desc->push_color(title_color);
 			class_desc->push_font(doc_title_font);
 			class_desc->add_text(TTR("Enumerations:"));
 			class_desc->pop();
@@ -1064,7 +1093,7 @@ Error EditorHelp::_goto_desc(const String &p_class, int p_vscr) {
 
 				enum_line[E->key()] = class_desc->get_line_count() - 2;
 
-				class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/highlighting/keyword_color"));
+				class_desc->push_color(title_color);
 				class_desc->add_text(TTR("enum  "));
 				class_desc->pop();
 				class_desc->push_font(doc_code_font);
@@ -1073,9 +1102,11 @@ Error EditorHelp::_goto_desc(const String &p_class, int p_vscr) {
 					e = e.get_slice(".", 1);
 				}
 
+				class_desc->push_color(highlight_color);
 				class_desc->add_text(e);
 				class_desc->pop();
-				class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/highlighting/keyword_color"));
+				class_desc->pop();
+				class_desc->push_color(symbol_color);
 				class_desc->add_text(":");
 				class_desc->pop();
 				class_desc->add_newline();
@@ -1086,20 +1117,20 @@ Error EditorHelp::_goto_desc(const String &p_class, int p_vscr) {
 				for (int i = 0; i < enum_list.size(); i++) {
 
 					class_desc->push_font(doc_code_font);
-					class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/highlighting/base_type_color"));
+					class_desc->push_color(highlight_color);
 					_add_text(enum_list[i].name);
 					class_desc->pop();
-					class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/highlighting/symbol_color"));
+					class_desc->push_color(symbol_color);
 					class_desc->add_text(" = ");
 					class_desc->pop();
-					class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/highlighting/keyword_color"));
+					class_desc->push_color(value_color);
 					_add_text(enum_list[i].value);
 					class_desc->pop();
 					class_desc->pop();
 					if (enum_list[i].description != "") {
 						class_desc->push_font(doc_font);
 						class_desc->add_text("  ");
-						class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/highlighting/comment_color"));
+						class_desc->push_color(comment_color);
 						_add_text(enum_list[i].description);
 						class_desc->pop();
 						class_desc->pop();
@@ -1119,7 +1150,8 @@ Error EditorHelp::_goto_desc(const String &p_class, int p_vscr) {
 
 		if (constants.size()) {
 
-			class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/highlighting/keyword_color"));
+			section_line.push_back(Pair<String, int>(TTR("Constants"), class_desc->get_line_count() - 2));
+			class_desc->push_color(title_color);
 			class_desc->push_font(doc_title_font);
 			class_desc->add_text(TTR("Constants:"));
 			class_desc->pop();
@@ -1133,20 +1165,20 @@ Error EditorHelp::_goto_desc(const String &p_class, int p_vscr) {
 
 				constant_line[constants[i].name] = class_desc->get_line_count() - 2;
 				class_desc->push_font(doc_code_font);
-				class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/highlighting/base_type_color"));
+				class_desc->push_color(highlight_color);
 				_add_text(constants[i].name);
 				class_desc->pop();
-				class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/highlighting/symbol_color"));
+				class_desc->push_color(symbol_color);
 				class_desc->add_text(" = ");
 				class_desc->pop();
-				class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/highlighting/keyword_color"));
+				class_desc->push_color(value_color);
 				_add_text(constants[i].value);
 				class_desc->pop();
 				class_desc->pop();
 				if (constants[i].description != "") {
 					class_desc->push_font(doc_font);
 					class_desc->add_text("  ");
-					class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/highlighting/comment_color"));
+					class_desc->push_color(comment_color);
 					_add_text(constants[i].description);
 					class_desc->pop();
 					class_desc->pop();
@@ -1162,16 +1194,16 @@ Error EditorHelp::_goto_desc(const String &p_class, int p_vscr) {
 
 	if (cd.description != "") {
 
+		section_line.push_back(Pair<String, int>(TTR("Description"), class_desc->get_line_count() - 2));
 		description_line = class_desc->get_line_count() - 2;
-		class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/highlighting/keyword_color"));
+		class_desc->push_color(title_color);
 		class_desc->push_font(doc_title_font);
 		class_desc->add_text(TTR("Description:"));
 		class_desc->pop();
 		class_desc->pop();
 
 		class_desc->add_newline();
-		class_desc->add_newline();
-		class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/highlighting/text_color"));
+		class_desc->push_color(text_color);
 		class_desc->push_font(doc_font);
 		class_desc->push_indent(1);
 		_add_text(cd.description);
@@ -1180,11 +1212,13 @@ Error EditorHelp::_goto_desc(const String &p_class, int p_vscr) {
 		class_desc->pop();
 		class_desc->add_newline();
 		class_desc->add_newline();
+		class_desc->add_newline();
 	}
 
 	if (property_descr) {
 
-		class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/highlighting/keyword_color"));
+		section_line.push_back(Pair<String, int>(TTR("Properties"), class_desc->get_line_count() - 2));
+		class_desc->push_color(title_color);
 		class_desc->push_font(doc_title_font);
 		class_desc->add_text(TTR("Property Description:"));
 		class_desc->pop();
@@ -1201,7 +1235,7 @@ Error EditorHelp::_goto_desc(const String &p_class, int p_vscr) {
 			_add_type(cd.properties[i].type, cd.properties[i].enumeration);
 
 			class_desc->add_text(" ");
-			class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/highlighting/text_color"));
+			class_desc->push_color(highlight_color);
 			_add_text(cd.properties[i].name);
 			class_desc->pop(); //color
 
@@ -1214,11 +1248,11 @@ Error EditorHelp::_goto_desc(const String &p_class, int p_vscr) {
 				class_desc->push_font(doc_font);
 
 				class_desc->push_indent(2);
-				class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/highlighting/keyword_color"));
+				class_desc->push_color(comment_color);
 				class_desc->add_text("Setter: ");
 				class_desc->pop();
 
-				class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/highlighting/text_color"));
+				class_desc->push_color(text_color);
 				class_desc->add_text(cd.properties[i].setter + "(value)");
 				class_desc->pop(); //color
 
@@ -1232,11 +1266,11 @@ Error EditorHelp::_goto_desc(const String &p_class, int p_vscr) {
 				class_desc->push_font(doc_font);
 
 				class_desc->push_indent(2);
-				class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/highlighting/keyword_color"));
+				class_desc->push_color(comment_color);
 				class_desc->add_text("Getter: ");
 				class_desc->pop();
 
-				class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/highlighting/text_color"));
+				class_desc->push_color(text_color);
 				class_desc->add_text(cd.properties[i].getter + "()");
 				class_desc->pop(); //color
 
@@ -1247,7 +1281,7 @@ Error EditorHelp::_goto_desc(const String &p_class, int p_vscr) {
 
 			class_desc->add_newline();
 
-			class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/highlighting/text_color"));
+			class_desc->push_color(text_color);
 			class_desc->push_font(doc_font);
 			class_desc->push_indent(1);
 			if (cd.properties[i].description.strip_edges() != String()) {
@@ -1255,7 +1289,7 @@ Error EditorHelp::_goto_desc(const String &p_class, int p_vscr) {
 			} else {
 				class_desc->add_image(get_icon("Error", "EditorIcons"));
 				class_desc->add_text(" ");
-				class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/highlighting/comment_color"));
+				class_desc->push_color(comment_color);
 				class_desc->append_bbcode(TTR("There is currently no description for this property. Please help us by [color=$color][url=$url]contributing one[/url][/color]!").replace("$url", CONTRIBUTE_URL).replace("$color", link_color_text));
 				class_desc->pop();
 			}
@@ -1270,7 +1304,8 @@ Error EditorHelp::_goto_desc(const String &p_class, int p_vscr) {
 
 	if (method_descr) {
 
-		class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/highlighting/keyword_color"));
+		section_line.push_back(Pair<String, int>(TTR("Methods"), class_desc->get_line_count() - 2));
+		class_desc->push_color(title_color);
 		class_desc->push_font(doc_title_font);
 		class_desc->add_text(TTR("Method Description:"));
 		class_desc->pop();
@@ -1289,14 +1324,14 @@ Error EditorHelp::_goto_desc(const String &p_class, int p_vscr) {
 			_add_type(methods[i].return_type, methods[i].return_enum);
 
 			class_desc->add_text(" ");
-			class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/highlighting/text_color"));
+			class_desc->push_color(highlight_color);
 			_add_text(methods[i].name);
 			class_desc->pop();
-			class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/highlighting/symbol_color"));
+			class_desc->push_color(symbol_color);
 			class_desc->add_text(methods[i].arguments.size() || is_vararg ? "( " : "(");
 			class_desc->pop();
 			for (int j = 0; j < methods[i].arguments.size(); j++) {
-				class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/highlighting/text_color"));
+				class_desc->push_color(text_color);
 				if (j > 0)
 					class_desc->add_text(", ");
 				_add_type(methods[i].arguments[j].type, methods[i].arguments[j].enumeration);
@@ -1304,7 +1339,7 @@ Error EditorHelp::_goto_desc(const String &p_class, int p_vscr) {
 				_add_text(methods[i].arguments[j].name);
 				if (methods[i].arguments[j].default_value != "") {
 
-					class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/highlighting/symbol_color"));
+					class_desc->push_color(symbol_color);
 					class_desc->add_text("=");
 					class_desc->pop();
 					_add_text(methods[i].arguments[j].default_value);
@@ -1314,21 +1349,21 @@ Error EditorHelp::_goto_desc(const String &p_class, int p_vscr) {
 			}
 
 			if (is_vararg) {
-				class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/highlighting/text_color"));
+				class_desc->push_color(text_color);
 				if (methods[i].arguments.size())
 					class_desc->add_text(", ");
-				class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/highlighting/symbol_color"));
+				class_desc->push_color(symbol_color);
 				class_desc->add_text("...");
 				class_desc->pop();
 				class_desc->pop();
 			}
 
-			class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/highlighting/symbol_color"));
+			class_desc->push_color(symbol_color);
 			class_desc->add_text(methods[i].arguments.size() || is_vararg ? " )" : ")");
 			class_desc->pop();
 			if (methods[i].qualifiers != "") {
 
-				class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/highlighting/keyword_color"));
+				class_desc->push_color(qualifier_color);
 				class_desc->add_text(" ");
 				_add_text(methods[i].qualifiers);
 				class_desc->pop();
@@ -1337,7 +1372,7 @@ Error EditorHelp::_goto_desc(const String &p_class, int p_vscr) {
 			class_desc->pop();
 
 			class_desc->add_newline();
-			class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/highlighting/text_color"));
+			class_desc->push_color(text_color);
 			class_desc->push_font(doc_font);
 			class_desc->push_indent(1);
 			if (methods[i].description.strip_edges() != String()) {
@@ -1345,7 +1380,7 @@ Error EditorHelp::_goto_desc(const String &p_class, int p_vscr) {
 			} else {
 				class_desc->add_image(get_icon("Error", "EditorIcons"));
 				class_desc->add_text(" ");
-				class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/highlighting/comment_color"));
+				class_desc->push_color(comment_color);
 				class_desc->append_bbcode(TTR("There is currently no description for this method. Please help us by [color=$color][url=$url]contributing one[/url][/color]!").replace("$url", CONTRIBUTE_URL).replace("$color", link_color_text));
 				class_desc->pop();
 			}
@@ -1419,70 +1454,16 @@ static void _add_text_to_rt(const String &p_bbcode, RichTextLabel *p_rt) {
 	DocData *doc = EditorHelp::get_doc_data();
 	String base_path;
 
-	/*p_rt->push_color(EditorSettings::get_singleton()->get("text_editor/highlighting/text_color"));
-	p_rt->push_font( get_font("normal","Fonts") );
-	p_rt->push_indent(1);*/
-	int pos = 0;
-
 	Ref<Font> doc_font = p_rt->get_font("doc", "EditorFonts");
 	Ref<Font> doc_code_font = p_rt->get_font("doc_source", "EditorFonts");
+	Color font_color_hl = p_rt->get_color("highlight_color", "RichTextLabel");
+	Color link_color = p_rt->get_color("accent_color", "Editor").linear_interpolate(font_color_hl, 0.8);
 
 	String bbcode = p_bbcode.replace("\t", " ").replace("\r", " ").strip_edges();
 
-	//change newlines for double newlines
-	for (int i = 0; i < bbcode.length(); i++) {
-
-		//find valid newlines (double)
-		if (bbcode[i] == '\n') {
-			bool dnl = false;
-			int j = i + 1;
-			for (; j < p_bbcode.length(); j++) {
-				if (bbcode[j] == ' ')
-					continue;
-				if (bbcode[j] == '\n') {
-					dnl = true;
-					break;
-				}
-				break;
-			}
-
-			if (dnl) {
-				bbcode[i] = 0xFFFF;
-				//keep
-				i = j;
-			} else {
-				bbcode = bbcode.insert(i, "\n");
-				i++;
-				//bbcode[i]=' ';
-				//i=j-1;
-			}
-		}
-	}
-
-	//remove double spaces or spaces after newlines
-	for (int i = 0; i < bbcode.length(); i++) {
-
-		if (bbcode[i] == ' ' || bbcode[i] == '\n' || bbcode[i] == 0xFFFF) {
-
-			for (int j = i + 1; j < p_bbcode.length(); j++) {
-				if (bbcode[j] == ' ') {
-					bbcode.remove(j);
-					j--;
-					continue;
-				} else {
-					break;
-				}
-			}
-		}
-	}
-
-	//change newlines to double newlines
-
-	CharType dnls[2] = { 0xFFFF, 0 };
-	bbcode = bbcode.replace(dnls, "\n");
-
 	List<String> tag_stack;
 
+	int pos = 0;
 	while (pos < bbcode.length()) {
 
 		int brk_pos = bbcode.find("[", pos);
@@ -1500,7 +1481,6 @@ static void _add_text_to_rt(const String &p_bbcode, RichTextLabel *p_rt) {
 		int brk_end = bbcode.find("]", brk_pos + 1);
 
 		if (brk_end == -1) {
-			//no close, add the rest
 			p_rt->add_text(bbcode.substr(brk_pos, bbcode.length() - brk_pos));
 
 			break;
@@ -1512,6 +1492,7 @@ static void _add_text_to_rt(const String &p_bbcode, RichTextLabel *p_rt) {
 			bool tag_ok = tag_stack.size() && tag_stack.front()->get() == tag.substr(1, tag.length());
 			if (tag_stack.size()) {
 			}
+
 			if (!tag_ok) {
 
 				p_rt->add_text("[");
@@ -1527,7 +1508,7 @@ static void _add_text_to_rt(const String &p_bbcode, RichTextLabel *p_rt) {
 		} else if (tag.begins_with("method ")) {
 
 			String m = tag.substr(7, tag.length());
-			p_rt->push_color(EditorSettings::get_singleton()->get("text_editor/highlighting/keyword_color"));
+			p_rt->push_color(link_color);
 			p_rt->push_meta("@" + m);
 			p_rt->add_text(m + "()");
 			p_rt->pop();
@@ -1536,7 +1517,7 @@ static void _add_text_to_rt(const String &p_bbcode, RichTextLabel *p_rt) {
 
 		} else if (doc->class_list.has(tag)) {
 
-			p_rt->push_color(EditorSettings::get_singleton()->get("text_editor/highlighting/keyword_color"));
+			p_rt->push_color(link_color);
 			p_rt->push_meta("#" + tag);
 			p_rt->add_text(tag);
 			p_rt->pop();
@@ -1552,13 +1533,7 @@ static void _add_text_to_rt(const String &p_bbcode, RichTextLabel *p_rt) {
 		} else if (tag == "i") {
 
 			//use italics font
-			Color text_color = EditorSettings::get_singleton()->get("text_editor/highlighting/text_color");
-			//no italics so emphasize with color
-			text_color.r *= 1.1;
-			text_color.g *= 1.1;
-			text_color.b *= 1.1;
-			p_rt->push_color(text_color);
-			//p_rt->push_font(get_font("italic","Fonts"));
+			p_rt->push_color(font_color_hl);
 			pos = brk_end + 1;
 			tag_stack.push_front(tag);
 		} else if (tag == "code" || tag == "codeblock") {
@@ -1728,6 +1703,7 @@ void EditorHelp::_notification(int p_what) {
 		case EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED: {
 
 			class_desc->add_color_override("selection_color", EDITOR_DEF("text_editor/highlighting/selection_color", Color(0.2, 0.2, 1)));
+
 		} break;
 
 		default: break;
@@ -1744,9 +1720,23 @@ void EditorHelp::go_to_class(const String &p_class, int p_scroll) {
 	_goto_desc(p_class, p_scroll);
 }
 
+Vector<Pair<String, int> > EditorHelp::get_sections() {
+	Vector<Pair<String, int> > sections;
+
+	for (int i = 0; i < section_line.size(); i++) {
+		sections.push_back(Pair<String, int>(section_line[i].first, i));
+	}
+	return sections;
+}
+
+void EditorHelp::scroll_to_section(int p_section_index) {
+	int line = section_line[p_section_index].second;
+	class_desc->scroll_to_line(line);
+}
+
 void EditorHelp::popup_search() {
 
-	search_dialog->popup_centered(Size2(250, 80));
+	search_dialog->popup_centered(Size2(250, 80) * EDSCALE);
 	search->grab_focus();
 }
 
@@ -1825,7 +1815,6 @@ EditorHelp::EditorHelp() {
 	search_dialog->get_ok()->set_text(TTR("Find"));
 	search_dialog->connect("confirmed", this, "_search_cbk");
 	search_dialog->set_hide_on_ok(false);
-	search_dialog->set_self_modulate(Color(1, 1, 1, 0.8));
 
 	/*class_search = memnew( EditorHelpSearch(editor) );
 	editor->get_gui_base()->add_child(class_search);

+ 4 - 0
editor/editor_help.h

@@ -118,6 +118,7 @@ class EditorHelp : public VBoxContainer {
 
 	String edited_class;
 
+	Vector<Pair<String, int> > section_line;
 	Map<String, int> method_line;
 	Map<String, int> signal_line;
 	Map<String, int> property_line;
@@ -168,6 +169,9 @@ public:
 	void go_to_help(const String &p_help);
 	void go_to_class(const String &p_class, int p_scroll = 0);
 
+	Vector<Pair<String, int> > get_sections();
+	void scroll_to_section(int p_section_index);
+
 	void popup_search();
 	void search_again();
 

+ 1 - 0
editor/editor_settings.cpp

@@ -739,6 +739,7 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) {
 	set("docks/property_editor/texture_preview_width", 48);
 	set("docks/property_editor/auto_refresh_interval", 0.3);
 	set("text_editor/help/doc_path", "");
+	set("text_editor/help/show_help_index", true);
 
 	set("filesystem/import/ask_save_before_reimport", false);
 

+ 5 - 1
editor/editor_themes.cpp

@@ -704,7 +704,8 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) {
 
 	//RichTextLabel
 	Color rtl_combined_bg_color = dark_color_1.linear_interpolate(script_bg_color, script_bg_color.a);
-	Color rtl_font_color = (rtl_combined_bg_color.r + rtl_combined_bg_color.g + rtl_combined_bg_color.b > 0.5 * 3) ? Color(0, 0, 0) : Color(1, 1, 1);
+	Color rtl_mono_color = (rtl_combined_bg_color.r + rtl_combined_bg_color.g + rtl_combined_bg_color.b > 1.5) ? Color(0, 0, 0) : Color(1, 1, 1);
+	Color rtl_font_color = rtl_mono_color.linear_interpolate(rtl_combined_bg_color, 0.25);
 	theme->set_color("default_color", "RichTextLabel", rtl_font_color);
 	theme->set_stylebox("focus", "RichTextLabel", make_empty_stylebox());
 	theme->set_stylebox("normal", "RichTextLabel", style_tree_bg);
@@ -715,6 +716,9 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) {
 	style_code_focus->set_bg_color(rtl_combined_bg_color);
 	theme->set_stylebox("code_focus", "RichTextLabel", style_code_focus);
 
+	theme->set_color("font_color", "RichTextLabel", rtl_font_color);
+	theme->set_color("highlight_color", "RichTextLabel", rtl_mono_color);
+
 	// Panel
 	theme->set_stylebox("panel", "Panel", make_flat_stylebox(dark_color_1, 6, 4, 6, 4));
 

+ 67 - 0
editor/plugins/script_editor_plugin.cpp

@@ -421,8 +421,10 @@ void ScriptEditor::_go_to_tab(int p_idx) {
 	_update_history_arrows();
 	_update_script_colors();
 	_update_members_overview();
+	_update_help_overview();
 	_update_selected_editor_menu();
 	_update_members_overview_visibility();
+	_update_help_overview_visibility();
 }
 
 void ScriptEditor::_add_recent_script(String p_path) {
@@ -555,6 +557,7 @@ void ScriptEditor::_close_tab(int p_idx, bool p_save) {
 
 	_update_script_names();
 	_update_members_overview_visibility();
+	_update_help_overview_visibility();
 	_save_layout();
 }
 
@@ -1110,6 +1113,7 @@ void ScriptEditor::_notification(int p_what) {
 			editor->connect("resource_saved", this, "_res_saved_callback");
 			script_list->connect("item_selected", this, "_script_selected");
 			members_overview->connect("item_selected", this, "_members_overview_selected");
+			help_overview->connect("item_selected", this, "_help_overview_selected");
 			script_split->connect("dragged", this, "_script_split_dragged");
 			autosave_timer->connect("timeout", this, "_autosave_scripts");
 			{
@@ -1278,6 +1282,15 @@ void ScriptEditor::_members_overview_selected(int p_idx) {
 	se->ensure_focus();
 }
 
+void ScriptEditor::_help_overview_selected(int p_idx) {
+	Node *current = tab_container->get_child(tab_container->get_current_tab());
+	EditorHelp *se = Object::cast_to<EditorHelp>(current);
+	if (!se) {
+		return;
+	}
+	se->scroll_to_section(help_overview->get_item_metadata(p_idx));
+}
+
 void ScriptEditor::_script_selected(int p_idx) {
 
 	grab_focus_block = !Input::get_singleton()->is_mouse_button_pressed(1); //amazing hack, simply amazing
@@ -1387,6 +1400,50 @@ void ScriptEditor::_update_members_overview() {
 	}
 }
 
+void ScriptEditor::_update_help_overview_visibility() {
+
+	int selected = tab_container->get_current_tab();
+	if (selected < 0 || selected >= tab_container->get_child_count())
+		return;
+
+	Node *current = tab_container->get_child(tab_container->get_current_tab());
+	EditorHelp *se = Object::cast_to<EditorHelp>(current);
+	if (!se) {
+		help_overview->set_visible(false);
+		return;
+	}
+
+	if (help_overview_enabled) {
+		help_overview->set_visible(true);
+	} else {
+		help_overview->set_visible(false);
+	}
+}
+
+void ScriptEditor::_update_help_overview() {
+
+	int selected = tab_container->get_current_tab();
+	if (selected < 0 || selected >= tab_container->get_child_count())
+		return;
+
+	Node *current = tab_container->get_child(tab_container->get_current_tab());
+	EditorHelp *se = Object::cast_to<EditorHelp>(current);
+	if (!se) {
+		return;
+	}
+
+	help_overview->clear();
+
+	Vector<Pair<String, int> > sections = se->get_sections();
+	for (int i = 0; i < sections.size(); i++) {
+		help_overview->add_item(sections[i].first);
+		help_overview->set_item_metadata(i, sections[i].second);
+	}
+}
+
+void _help_overview_selected(int p_idx) {
+}
+
 void ScriptEditor::_update_script_colors() {
 
 	bool script_temperature_enabled = EditorSettings::get_singleton()->get("text_editor/open_scripts/script_temperature_enabled");
@@ -1531,6 +1588,7 @@ void ScriptEditor::_update_script_names() {
 	}
 
 	_update_members_overview();
+	_update_help_overview();
 	_update_script_colors();
 }
 
@@ -1785,7 +1843,9 @@ void ScriptEditor::_editor_settings_changed() {
 	use_space_indentation = EditorSettings::get_singleton()->get("text_editor/indent/type");
 
 	members_overview_enabled = EditorSettings::get_singleton()->get("text_editor/open_scripts/show_members_overview");
+	help_overview_enabled = EditorSettings::get_singleton()->get("text_editor/help/show_help_index");
 	_update_members_overview_visibility();
+	_update_help_overview_visibility();
 
 	float autosave_time = EditorSettings::get_singleton()->get("text_editor/files/autosave_interval_secs");
 	if (autosave_time > 0) {
@@ -2164,6 +2224,7 @@ void ScriptEditor::_bind_methods() {
 	ClassDB::bind_method("_update_script_names", &ScriptEditor::_update_script_names);
 	ClassDB::bind_method("_tree_changed", &ScriptEditor::_tree_changed);
 	ClassDB::bind_method("_members_overview_selected", &ScriptEditor::_members_overview_selected);
+	ClassDB::bind_method("_help_overview_selected", &ScriptEditor::_help_overview_selected);
 	ClassDB::bind_method("_script_selected", &ScriptEditor::_script_selected);
 	ClassDB::bind_method("_script_created", &ScriptEditor::_script_created);
 	ClassDB::bind_method("_script_split_dragged", &ScriptEditor::_script_split_dragged);
@@ -2193,6 +2254,7 @@ ScriptEditor::ScriptEditor(EditorNode *p_editor) {
 	pending_auto_reload = false;
 	auto_reload_running_scripts = false;
 	members_overview_enabled = true;
+	help_overview_enabled = true;
 	editor = p_editor;
 
 	VBoxContainer *main_container = memnew(VBoxContainer);
@@ -2221,6 +2283,11 @@ ScriptEditor::ScriptEditor(EditorNode *p_editor) {
 	members_overview->set_custom_minimum_size(Size2(0, 100)); //need to give a bit of limit to avoid it from disappearing
 	members_overview->set_v_size_flags(SIZE_EXPAND_FILL);
 
+	help_overview = memnew(ItemList);
+	list_split->add_child(help_overview);
+	help_overview->set_custom_minimum_size(Size2(0, 100)); //need to give a bit of limit to avoid it from disappearing
+	help_overview->set_v_size_flags(SIZE_EXPAND_FILL);
+
 	tab_container = memnew(TabContainer);
 	tab_container->set_tabs_visible(false);
 	script_split->add_child(tab_container);

+ 6 - 0
editor/plugins/script_editor_plugin.h

@@ -187,6 +187,8 @@ class ScriptEditor : public PanelContainer {
 	HSplitContainer *script_split;
 	ItemList *members_overview;
 	bool members_overview_enabled;
+	ItemList *help_overview;
+	bool help_overview_enabled;
 	VSplitContainer *list_split;
 	TabContainer *tab_container;
 	EditorFileDialog *file_dialog;
@@ -294,6 +296,10 @@ class ScriptEditor : public PanelContainer {
 	void _members_overview_selected(int p_idx);
 	void _script_selected(int p_idx);
 
+	void _update_help_overview_visibility();
+	void _update_help_overview();
+	void _help_overview_selected(int p_idx);
+
 	void _find_scripts(Node *p_base, Node *p_current, Set<Ref<Script> > &used);
 
 	void _tree_changed();