Files
VRyHungry1/addons/yaml/editor/status_bar.gd
T
2026-07-19 10:47:28 +02:00

65 lines
2.0 KiB
GDScript

@tool
class_name YAMLEditorStatusBar extends HBoxContainer
@export var editor: YAMLCodeEditor
@export var status_label: Label
@export var zoom_button: Button
@export var line_column_label: Label
var zoom_popup_menu: PopupMenu
func _ready() -> void:
# Zoom popup menu
zoom_popup_menu = PopupMenu.new()
add_child(zoom_popup_menu)
zoom_popup_menu.add_item("25 %", 0)
zoom_popup_menu.add_item("50 %", 1)
zoom_popup_menu.add_item("75 %", 2)
zoom_popup_menu.add_item("100 %", 3)
zoom_popup_menu.add_item("150 %", 4)
zoom_popup_menu.add_item("200 %", 5)
zoom_popup_menu.add_item("300 %", 6)
zoom_popup_menu.id_pressed.connect(_on_zoom_popup_menu_id_pressed)
zoom_button.pressed.connect(
func():
var global_rect := Rect2(get_global_mouse_position(), Vector2.ZERO)
zoom_popup_menu.popup_on_parent(global_rect)
)
status_label.set("theme_override_constants/use_pixel_snap", true)
func _on_zoom_popup_menu_id_pressed(idx: int) -> void:
match idx:
0: editor.set_zoom(0.25)
1: editor.set_zoom(0.5)
2: editor.set_zoom(0.75)
3: editor.set_zoom(1.0)
4: editor.set_zoom(1.5)
5: editor.set_zoom(2.0)
6: editor.set_zoom(3.0)
zoom_popup_menu.hide()
func set_status(text: String, color := Color.WHITE) -> void:
status_label.text = text
status_label.modulate = color
func set_line_column(line_column: Array[int]) -> void:
var line := line_column[0]
var col := line_column[1]
line_column_label.text = "%d : %d" % [line, col]
func set_zoom_level(level: float) -> void:
zoom_button.text = str(int(level * 100)) + " %"
func set_validation_result(result: YAMLResult) -> void:
if !result.has_error():
return set_status("")
var error := result.get_error_message()
var line := result.get_error_line()
var col := result.get_error_column()
var error_text := "Error at (%d, %d): %s" % [line, col, error] if line >= 0 else "Error: %s" % error
var error_color: Color = EditorInterface.get_editor_settings().get_setting("text_editor/theme/highlighting/brace_mismatch_color")
set_status(error_text, error_color)