Serenity Operating System
1/*
2 * Copyright (c) 2022, Dylan Katz <dykatz@uw.edu>
3 * Copyright (c) 2022, Tim Flynn <trflynn89@serenityos.org>
4 *
5 * SPDX-License-Identifier: BSD-2-Clause
6 */
7
8#pragma once
9
10#include <AK/LexicalPath.h>
11#include <AK/Vector.h>
12#include <LibGUI/Widget.h>
13#include <LibSQL/SQLClient.h>
14
15namespace SQLStudio {
16
17class ScriptEditor;
18
19class MainWidget : public GUI::Widget {
20 C_OBJECT(MainWidget)
21
22public:
23 virtual ~MainWidget() = default;
24
25 void initialize_menu(GUI::Window*);
26 void open_new_script();
27 void open_script_from_file(LexicalPath const&);
28
29 bool request_close();
30
31private:
32 MainWidget();
33
34 ScriptEditor* active_editor();
35
36 void update_title();
37 void on_editor_change();
38 void update_statusbar(ScriptEditor*);
39 void update_editor_actions(ScriptEditor*);
40
41 virtual void drag_enter_event(GUI::DragEvent&) override;
42 virtual void drop_event(GUI::DropEvent&) override;
43
44 RefPtr<GUI::Action> m_new_action;
45 RefPtr<GUI::Action> m_open_action;
46 RefPtr<GUI::Action> m_save_action;
47 RefPtr<GUI::Action> m_save_as_action;
48 RefPtr<GUI::Action> m_save_all_action;
49 RefPtr<GUI::Action> m_copy_action;
50 RefPtr<GUI::Action> m_cut_action;
51 RefPtr<GUI::Action> m_paste_action;
52 RefPtr<GUI::Action> m_undo_action;
53 RefPtr<GUI::Action> m_redo_action;
54 RefPtr<GUI::Action> m_connect_to_database_action;
55 RefPtr<GUI::Action> m_run_script_action;
56
57 int m_new_script_counter { 1 };
58 RefPtr<GUI::ComboBox> m_databases_combo_box;
59 RefPtr<GUI::TabWidget> m_tab_widget;
60 RefPtr<GUI::Statusbar> m_statusbar;
61 RefPtr<GUI::TabWidget> m_action_tab_widget;
62 RefPtr<GUI::Widget> m_query_results_widget;
63 RefPtr<GUI::TableView> m_query_results_table_view;
64
65 RefPtr<SQL::SQLClient> m_sql_client;
66 Optional<SQL::ConnectionID> m_connection_id;
67 Vector<DeprecatedString> m_result_column_names;
68 Vector<Vector<DeprecatedString>> m_results;
69
70 void read_next_sql_statement_of_editor();
71 Optional<DeprecatedString> read_next_line_of_editor();
72 size_t m_current_line_for_parsing { 0 };
73 int m_editor_line_level { 0 };
74};
75
76}
77
78using SQLStudio::MainWidget;