Files
galaxy/app/src/code_review/editor_state.rs
T

59 lines
1.9 KiB
Rust

use galaxyui::elements::MouseStateHandle;
use galaxyui::{AppContext, ViewHandle};
use crate::code::local_code_editor::LocalCodeEditorView;
pub struct CodeReviewEditorState {
pub editor: ViewHandle<LocalCodeEditorView>,
unsaved_changes_mouse_state: MouseStateHandle,
pub(super) editor_mouse_state: MouseStateHandle,
/// Whether the buffer content has been loaded from disk (for global buffer mode).
/// This is set to true when LocalCodeEditorEvent::DelayedRenderingFlushed or FailedToLoad fires.
is_loaded: bool,
}
impl CodeReviewEditorState {
#[cfg(not(target_family = "wasm"))]
pub fn new(editor: ViewHandle<LocalCodeEditorView>) -> Self {
Self {
editor,
unsaved_changes_mouse_state: MouseStateHandle::default(),
editor_mouse_state: MouseStateHandle::default(),
is_loaded: false,
}
}
/// Creates a new editor state that is already marked as loaded.
/// Used for non-global buffer mode where content is loaded synchronously.
pub fn new_loaded(editor: ViewHandle<LocalCodeEditorView>) -> Self {
Self {
editor,
unsaved_changes_mouse_state: MouseStateHandle::default(),
editor_mouse_state: MouseStateHandle::default(),
is_loaded: true,
}
}
/// Returns whether the buffer content has been loaded.
pub fn is_loaded(&self) -> bool {
self.is_loaded
}
/// Marks the editor as loaded.
pub fn set_loaded(&mut self) {
self.is_loaded = true;
}
pub fn editor(&self) -> &ViewHandle<LocalCodeEditorView> {
&self.editor
}
pub fn unsaved_changes_mouse_state(&self) -> MouseStateHandle {
self.unsaved_changes_mouse_state.clone()
}
pub fn has_unsaved_changes(&self, ctx: &AppContext) -> bool {
self.editor.as_ref(ctx).has_unsaved_changes(ctx)
}
}