/* * Copyright (c) 2022, Dylan Katz * Copyright (c) 2022, Tim Flynn * * SPDX-License-Identifier: BSD-2-Clause */ #include #include #include #include #include #include #include "ScriptEditor.h" namespace SQLStudio { ScriptEditor::ScriptEditor() { set_syntax_highlighter(make()); set_ruler_visible(true); } void ScriptEditor::new_script_with_temp_name(DeprecatedString name) { set_name(name); } ErrorOr ScriptEditor::open_script_from_file(LexicalPath const& file_path) { auto file = TRY(Core::Stream::File::open(file_path.string(), Core::Stream::OpenMode::Read)); auto buffer = TRY(file->read_until_eof()); set_text({ buffer.bytes() }); m_path = file_path.string(); set_name(file_path.title()); return {}; } static ErrorOr save_text_to_file(StringView filename, DeprecatedString text) { auto file = TRY(Core::Stream::File::open(filename, Core::Stream::OpenMode::Write)); if (!text.is_empty()) TRY(file->write_entire_buffer(text.bytes())); return {}; } ErrorOr ScriptEditor::save() { if (m_path.is_empty()) return save_as(); TRY(save_text_to_file(m_path, text())); document().set_unmodified(); return true; } ErrorOr ScriptEditor::save_as() { auto maybe_save_path = GUI::FilePicker::get_save_filepath(window(), name(), "sql"); if (!maybe_save_path.has_value()) return false; auto save_path = maybe_save_path.release_value(); TRY(save_text_to_file(save_path, text())); m_path = save_path; auto lexical_path = LexicalPath(save_path); set_name(lexical_path.title()); auto parent = static_cast(parent_widget()); if (parent) parent->set_tab_title(*this, lexical_path.title()); document().set_unmodified(); return true; } ErrorOr ScriptEditor::attempt_to_close() { if (!document().is_modified()) return true; auto result = GUI::MessageBox::ask_about_unsaved_changes(window(), m_path.is_empty() ? name() : m_path, document().undo_stack().last_unmodified_timestamp()); switch (result) { case GUI::Dialog::ExecResult::Yes: return save(); case GUI::Dialog::ExecResult::No: return true; default: return false; } } }