@tool extends EditorPlugin var editor_settings: EditorSettings var checkbutton: CheckButton var _preset_applier: PresetApplier var _settings_service: EditorSettingsService var _locator_service: RiderLocatorService var _plugin_cfg_path: String var _presets_json_path: String func _enter_tree() -> void: editor_settings = EditorInterface.get_editor_settings() var script_path := (get_script() as Script).resource_path var plugin_dir := script_path.get_base_dir() _plugin_cfg_path = plugin_dir + "/plugin.cfg" var cfg := ConfigFile.new() var err := cfg.load(_plugin_cfg_path) if err != OK: push_warning("Failed to load plugin.cfg: %s" % [err]) return var active_str := str(cfg.get_value("presets", "active", "on")) var is_active := active_str == "on" var presets_rel_path := str(cfg.get_value("presets", "presets", "presets.json")) _presets_json_path = plugin_dir + "/" + presets_rel_path # Build UI checkbutton = CheckButton.new() checkbutton.text = "Use Rider" checkbutton.tooltip_text = "Shortcut for setting recommended settings" checkbutton.button_pressed = is_active checkbutton.pressed.connect(_on_checkbutton_pressed) add_control_to_container(EditorPlugin.CONTAINER_TOOLBAR, checkbutton) # Initialize services and panel _settings_service = EditorSettingsService.new() _locator_service = RiderLocatorService.new() _preset_applier = PresetApplier.new(_presets_json_path) _locator_service.add_selector_in_editor_interface(_settings_service) # Ensure settings reflect current state on startup _preset_applier.apply_preset(editor_settings, is_active) func _on_checkbutton_pressed() -> void: var cfg := ConfigFile.new() if cfg.load(_plugin_cfg_path) != OK: push_warning("Failed to load plugin.cfg to update state") return var is_active := checkbutton.button_pressed var key := _preset_applier.get_preset_key(is_active) cfg.set_value("presets", "active", key) var save_err := cfg.save(_plugin_cfg_path) if save_err != OK: push_warning("Failed to save plugin.cfg: %s" % [save_err]) # Apply selected preset to editor settings _preset_applier.apply_preset(editor_settings, is_active) func _exit_tree() -> void: if checkbutton != null: remove_control_from_container(EditorPlugin.CONTAINER_TOOLBAR, checkbutton) checkbutton.queue_free() var args = OS.get_cmdline_args() if "--rider-addon-tests" in args: print("==== rider-addon-tests finished ====")