mirror of
				https://github.com/godotengine/godot.git
				synced 2025-10-31 21:51:22 +00:00 
			
		
		
		
	Port existing _notification code to use switch statements (part 1/3)
This commit is contained in:
		
							parent
							
								
									f5b9cbaff6
								
							
						
					
					
						commit
						dcd2a92af3
					
				
					 39 changed files with 1836 additions and 1666 deletions
				
			
		|  | @ -240,112 +240,113 @@ void EditorDebuggerNode::_notification(int p_what) { | |||
| 				tabs->add_theme_style_override("panel", EditorNode::get_singleton()->get_gui_base()->get_theme_stylebox(SNAME("DebuggerPanel"), SNAME("EditorStyles"))); | ||||
| 			} | ||||
| 		} break; | ||||
| 
 | ||||
| 		case NOTIFICATION_READY: { | ||||
| 			_update_debug_options(); | ||||
| 		} break; | ||||
| 		default: | ||||
| 			break; | ||||
| 	} | ||||
| 
 | ||||
| 	if (p_what != NOTIFICATION_PROCESS || !server.is_valid()) { | ||||
| 		return; | ||||
| 	} | ||||
| 
 | ||||
| 	if (!server.is_valid() || !server->is_active()) { | ||||
| 		stop(); | ||||
| 		return; | ||||
| 	} | ||||
| 	server->poll(); | ||||
| 
 | ||||
| 	// Errors and warnings
 | ||||
| 	int error_count = 0; | ||||
| 	int warning_count = 0; | ||||
| 	_for_all(tabs, [&](ScriptEditorDebugger *dbg) { | ||||
| 		error_count += dbg->get_error_count(); | ||||
| 		warning_count += dbg->get_warning_count(); | ||||
| 	}); | ||||
| 
 | ||||
| 	if (error_count != last_error_count || warning_count != last_warning_count) { | ||||
| 		_for_all(tabs, [&](ScriptEditorDebugger *dbg) { | ||||
| 			dbg->update_tabs(); | ||||
| 		}); | ||||
| 
 | ||||
| 		if (error_count == 0 && warning_count == 0) { | ||||
| 			debugger_button->set_text(TTR("Debugger")); | ||||
| 			debugger_button->remove_theme_color_override("font_color"); | ||||
| 			debugger_button->set_icon(Ref<Texture2D>()); | ||||
| 		} else { | ||||
| 			debugger_button->set_text(TTR("Debugger") + " (" + itos(error_count + warning_count) + ")"); | ||||
| 			if (error_count >= 1 && warning_count >= 1) { | ||||
| 				debugger_button->set_icon(get_theme_icon(SNAME("ErrorWarning"), SNAME("EditorIcons"))); | ||||
| 				// Use error color to represent the highest level of severity reported.
 | ||||
| 				debugger_button->add_theme_color_override("font_color", get_theme_color(SNAME("error_color"), SNAME("Editor"))); | ||||
| 			} else if (error_count >= 1) { | ||||
| 				debugger_button->set_icon(get_theme_icon(SNAME("Error"), SNAME("EditorIcons"))); | ||||
| 				debugger_button->add_theme_color_override("font_color", get_theme_color(SNAME("error_color"), SNAME("Editor"))); | ||||
| 			} else { | ||||
| 				debugger_button->set_icon(get_theme_icon(SNAME("Warning"), SNAME("EditorIcons"))); | ||||
| 				debugger_button->add_theme_color_override("font_color", get_theme_color(SNAME("warning_color"), SNAME("Editor"))); | ||||
| 			} | ||||
| 		} | ||||
| 		last_error_count = error_count; | ||||
| 		last_warning_count = warning_count; | ||||
| 	} | ||||
| 
 | ||||
| 	// Remote scene tree update
 | ||||
| 	remote_scene_tree_timeout -= get_process_delta_time(); | ||||
| 	if (remote_scene_tree_timeout < 0) { | ||||
| 		remote_scene_tree_timeout = EditorSettings::get_singleton()->get("debugger/remote_scene_tree_refresh_interval"); | ||||
| 		if (remote_scene_tree->is_visible_in_tree()) { | ||||
| 			get_current_debugger()->request_remote_tree(); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	// Remote inspector update
 | ||||
| 	inspect_edited_object_timeout -= get_process_delta_time(); | ||||
| 	if (inspect_edited_object_timeout < 0) { | ||||
| 		inspect_edited_object_timeout = EditorSettings::get_singleton()->get("debugger/remote_inspect_refresh_interval"); | ||||
| 		if (EditorDebuggerRemoteObject *obj = get_inspected_remote_object()) { | ||||
| 			get_current_debugger()->request_remote_object(obj->remote_object_id); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	// Take connections.
 | ||||
| 	if (server->is_connection_available()) { | ||||
| 		ScriptEditorDebugger *debugger = nullptr; | ||||
| 		_for_all(tabs, [&](ScriptEditorDebugger *dbg) { | ||||
| 			if (debugger || dbg->is_session_active()) { | ||||
| 		case NOTIFICATION_PROCESS: { | ||||
| 			if (!server.is_valid()) { | ||||
| 				return; | ||||
| 			} | ||||
| 			debugger = dbg; | ||||
| 		}); | ||||
| 		if (debugger == nullptr) { | ||||
| 			if (tabs->get_tab_count() <= 4) { // Max 4 debugging sessions active.
 | ||||
| 				debugger = _add_debugger(); | ||||
| 			} else { | ||||
| 				// We already have too many sessions, disconnecting new clients to prevent them from hanging.
 | ||||
| 				server->take_connection()->close(); | ||||
| 				return; // Can't add, stop here.
 | ||||
| 
 | ||||
| 			if (!server->is_active()) { | ||||
| 				stop(); | ||||
| 				return; | ||||
| 			} | ||||
| 		} | ||||
| 			server->poll(); | ||||
| 
 | ||||
| 		EditorNode::get_singleton()->get_pause_button()->set_disabled(false); | ||||
| 		// Switch to remote tree view if so desired.
 | ||||
| 		auto_switch_remote_scene_tree = (bool)EditorSettings::get_singleton()->get("debugger/auto_switch_to_remote_scene_tree"); | ||||
| 		if (auto_switch_remote_scene_tree) { | ||||
| 			SceneTreeDock::get_singleton()->show_remote_tree(); | ||||
| 		} | ||||
| 		// Good to go.
 | ||||
| 		SceneTreeDock::get_singleton()->show_tab_buttons(); | ||||
| 		debugger->set_editor_remote_tree(remote_scene_tree); | ||||
| 		debugger->start(server->take_connection()); | ||||
| 		// Send breakpoints.
 | ||||
| 		for (const KeyValue<Breakpoint, bool> &E : breakpoints) { | ||||
| 			const Breakpoint &bp = E.key; | ||||
| 			debugger->set_breakpoint(bp.source, bp.line, E.value); | ||||
| 		} // Will arrive too late, how does the regular run work?
 | ||||
| 			// Errors and warnings
 | ||||
| 			int error_count = 0; | ||||
| 			int warning_count = 0; | ||||
| 			_for_all(tabs, [&](ScriptEditorDebugger *dbg) { | ||||
| 				error_count += dbg->get_error_count(); | ||||
| 				warning_count += dbg->get_warning_count(); | ||||
| 			}); | ||||
| 
 | ||||
| 		debugger->update_live_edit_root(); | ||||
| 			if (error_count != last_error_count || warning_count != last_warning_count) { | ||||
| 				_for_all(tabs, [&](ScriptEditorDebugger *dbg) { | ||||
| 					dbg->update_tabs(); | ||||
| 				}); | ||||
| 
 | ||||
| 				if (error_count == 0 && warning_count == 0) { | ||||
| 					debugger_button->set_text(TTR("Debugger")); | ||||
| 					debugger_button->remove_theme_color_override("font_color"); | ||||
| 					debugger_button->set_icon(Ref<Texture2D>()); | ||||
| 				} else { | ||||
| 					debugger_button->set_text(TTR("Debugger") + " (" + itos(error_count + warning_count) + ")"); | ||||
| 					if (error_count >= 1 && warning_count >= 1) { | ||||
| 						debugger_button->set_icon(get_theme_icon(SNAME("ErrorWarning"), SNAME("EditorIcons"))); | ||||
| 						// Use error color to represent the highest level of severity reported.
 | ||||
| 						debugger_button->add_theme_color_override("font_color", get_theme_color(SNAME("error_color"), SNAME("Editor"))); | ||||
| 					} else if (error_count >= 1) { | ||||
| 						debugger_button->set_icon(get_theme_icon(SNAME("Error"), SNAME("EditorIcons"))); | ||||
| 						debugger_button->add_theme_color_override("font_color", get_theme_color(SNAME("error_color"), SNAME("Editor"))); | ||||
| 					} else { | ||||
| 						debugger_button->set_icon(get_theme_icon(SNAME("Warning"), SNAME("EditorIcons"))); | ||||
| 						debugger_button->add_theme_color_override("font_color", get_theme_color(SNAME("warning_color"), SNAME("Editor"))); | ||||
| 					} | ||||
| 				} | ||||
| 				last_error_count = error_count; | ||||
| 				last_warning_count = warning_count; | ||||
| 			} | ||||
| 
 | ||||
| 			// Remote scene tree update
 | ||||
| 			remote_scene_tree_timeout -= get_process_delta_time(); | ||||
| 			if (remote_scene_tree_timeout < 0) { | ||||
| 				remote_scene_tree_timeout = EditorSettings::get_singleton()->get("debugger/remote_scene_tree_refresh_interval"); | ||||
| 				if (remote_scene_tree->is_visible_in_tree()) { | ||||
| 					get_current_debugger()->request_remote_tree(); | ||||
| 				} | ||||
| 			} | ||||
| 
 | ||||
| 			// Remote inspector update
 | ||||
| 			inspect_edited_object_timeout -= get_process_delta_time(); | ||||
| 			if (inspect_edited_object_timeout < 0) { | ||||
| 				inspect_edited_object_timeout = EditorSettings::get_singleton()->get("debugger/remote_inspect_refresh_interval"); | ||||
| 				if (EditorDebuggerRemoteObject *obj = get_inspected_remote_object()) { | ||||
| 					get_current_debugger()->request_remote_object(obj->remote_object_id); | ||||
| 				} | ||||
| 			} | ||||
| 
 | ||||
| 			// Take connections.
 | ||||
| 			if (server->is_connection_available()) { | ||||
| 				ScriptEditorDebugger *debugger = nullptr; | ||||
| 				_for_all(tabs, [&](ScriptEditorDebugger *dbg) { | ||||
| 					if (debugger || dbg->is_session_active()) { | ||||
| 						return; | ||||
| 					} | ||||
| 					debugger = dbg; | ||||
| 				}); | ||||
| 				if (debugger == nullptr) { | ||||
| 					if (tabs->get_tab_count() <= 4) { // Max 4 debugging sessions active.
 | ||||
| 						debugger = _add_debugger(); | ||||
| 					} else { | ||||
| 						// We already have too many sessions, disconnecting new clients to prevent them from hanging.
 | ||||
| 						server->take_connection()->close(); | ||||
| 						return; // Can't add, stop here.
 | ||||
| 					} | ||||
| 				} | ||||
| 
 | ||||
| 				EditorNode::get_singleton()->get_pause_button()->set_disabled(false); | ||||
| 				// Switch to remote tree view if so desired.
 | ||||
| 				auto_switch_remote_scene_tree = (bool)EditorSettings::get_singleton()->get("debugger/auto_switch_to_remote_scene_tree"); | ||||
| 				if (auto_switch_remote_scene_tree) { | ||||
| 					SceneTreeDock::get_singleton()->show_remote_tree(); | ||||
| 				} | ||||
| 				// Good to go.
 | ||||
| 				SceneTreeDock::get_singleton()->show_tab_buttons(); | ||||
| 				debugger->set_editor_remote_tree(remote_scene_tree); | ||||
| 				debugger->start(server->take_connection()); | ||||
| 				// Send breakpoints.
 | ||||
| 				for (const KeyValue<Breakpoint, bool> &E : breakpoints) { | ||||
| 					const Breakpoint &bp = E.key; | ||||
| 					debugger->set_breakpoint(bp.source, bp.line, E.value); | ||||
| 				} // Will arrive too late, how does the regular run work?
 | ||||
| 
 | ||||
| 				debugger->update_live_edit_root(); | ||||
| 			} | ||||
| 		} break; | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 jmb462
						jmb462