1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 19:07:35 +00:00

SQLStudio: Convert MainWidget to a failable constructor

This commit is contained in:
Cameron Youell 2023-04-17 16:01:00 +10:00 committed by Andreas Kling
parent e9ad7b8eed
commit ba38984a60
3 changed files with 23 additions and 10 deletions

View file

@ -1,6 +1,7 @@
/* /*
* Copyright (c) 2022, Dylan Katz <dykatz@uw.edu> * Copyright (c) 2022, Dylan Katz <dykatz@uw.edu>
* Copyright (c) 2022, Tim Flynn <trflynn89@serenityos.org> * Copyright (c) 2022, Tim Flynn <trflynn89@serenityos.org>
* Copyright (c) 2023, Cameron Youell <cameronyouell@gmail.com>
* *
* SPDX-License-Identifier: BSD-2-Clause * SPDX-License-Identifier: BSD-2-Clause
*/ */
@ -59,11 +60,19 @@ static Vector<DeprecatedString> lookup_database_names()
return database_names; return database_names;
} }
MainWidget::MainWidget() ErrorOr<NonnullRefPtr<MainWidget>> MainWidget::create()
{ {
load_from_gml(sql_studio_gml).release_value_but_fixme_should_propagate_errors(); auto widget = TRY(try_make_ref_counted<MainWidget>());
m_new_action = GUI::Action::create("&New", { Mod_Ctrl, Key_N }, Gfx::Bitmap::load_from_file("/res/icons/16x16/new.png"sv).release_value_but_fixme_should_propagate_errors(), [this](auto&) { TRY(widget->load_from_gml(sql_studio_gml));
TRY(widget->setup());
return widget;
}
ErrorOr<void> MainWidget::setup()
{
m_new_action = GUI::Action::create("&New", { Mod_Ctrl, Key_N }, TRY(Gfx::Bitmap::load_from_file("/res/icons/16x16/new.png"sv)), [this](auto&) {
open_new_script(); open_new_script();
}); });
@ -149,7 +158,7 @@ MainWidget::MainWidget()
update_editor_actions(editor); update_editor_actions(editor);
}); });
m_connect_to_database_action = GUI::Action::create("Connect to Database"sv, { Mod_Alt, Key_C }, Gfx::Bitmap::load_from_file("/res/icons/16x16/go-forward.png"sv).release_value_but_fixme_should_propagate_errors(), [this](auto&) { m_connect_to_database_action = GUI::Action::create("Connect to Database"sv, { Mod_Alt, Key_C }, TRY(Gfx::Bitmap::load_from_file("/res/icons/16x16/go-forward.png"sv)), [this](auto&) {
auto database_name = m_databases_combo_box->text().trim_whitespace(); auto database_name = m_databases_combo_box->text().trim_whitespace();
if (database_name.is_empty()) if (database_name.is_empty())
return; return;
@ -171,7 +180,7 @@ MainWidget::MainWidget()
} }
}); });
m_run_script_action = GUI::Action::create("Run script", { Mod_Alt, Key_F9 }, Gfx::Bitmap::load_from_file("/res/icons/16x16/play.png"sv).release_value_but_fixme_should_propagate_errors(), [&](auto&) { m_run_script_action = GUI::Action::create("Run script", { Mod_Alt, Key_F9 }, TRY(Gfx::Bitmap::load_from_file("/res/icons/16x16/play.png"sv)), [&](auto&) {
m_results.clear(); m_results.clear();
m_current_line_for_parsing = 0; m_current_line_for_parsing = 0;
read_next_sql_statement_of_editor(); read_next_sql_statement_of_editor();
@ -251,7 +260,7 @@ MainWidget::MainWidget()
m_statusbar->set_override_text({}); m_statusbar->set_override_text({});
}; };
m_sql_client = SQL::SQLClient::try_create().release_value_but_fixme_should_propagate_errors(); m_sql_client = TRY(SQL::SQLClient::try_create());
m_sql_client->on_execution_success = [this](auto result) { m_sql_client->on_execution_success = [this](auto result) {
m_result_column_names = move(result.column_names); m_result_column_names = move(result.column_names);
read_next_sql_statement_of_editor(); read_next_sql_statement_of_editor();
@ -285,10 +294,12 @@ MainWidget::MainWidget()
Vector<JsonValue> individual_result_as_json; Vector<JsonValue> individual_result_as_json;
for (auto& result_row_column : result_row) for (auto& result_row_column : result_row)
individual_result_as_json.append(result_row_column); individual_result_as_json.append(result_row_column);
query_results_model->add(move(individual_result_as_json)); MUST(query_results_model->add(move(individual_result_as_json)));
} }
m_action_tab_widget->set_visible(true); m_action_tab_widget->set_visible(true);
}; };
return {};
} }
ErrorOr<void> MainWidget::initialize_menu(GUI::Window* window) ErrorOr<void> MainWidget::initialize_menu(GUI::Window* window)

View file

@ -17,10 +17,11 @@ namespace SQLStudio {
class ScriptEditor; class ScriptEditor;
class MainWidget : public GUI::Widget { class MainWidget : public GUI::Widget {
C_OBJECT(MainWidget) C_OBJECT_ABSTRACT(MainWidget)
public: public:
virtual ~MainWidget() = default; virtual ~MainWidget() = default;
static ErrorOr<NonnullRefPtr<MainWidget>> create();
ErrorOr<void> initialize_menu(GUI::Window*); ErrorOr<void> initialize_menu(GUI::Window*);
void open_new_script(); void open_new_script();
@ -29,7 +30,7 @@ public:
bool request_close(); bool request_close();
private: private:
MainWidget(); ErrorOr<void> setup();
ScriptEditor* active_editor(); ScriptEditor* active_editor();

View file

@ -30,7 +30,8 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
window->set_icon(app_icon.bitmap_for_size(16)); window->set_icon(app_icon.bitmap_for_size(16));
window->set_title("SQL Studio"); window->set_title("SQL Studio");
auto main_widget = TRY(window->set_main_widget<MainWidget>()); auto main_widget = TRY(MainWidget::create());
window->set_main_widget(main_widget);
TRY(main_widget->initialize_menu(window)); TRY(main_widget->initialize_menu(window));
window->on_close_request = [&] { window->on_close_request = [&] {