summaryrefslogtreecommitdiff
path: root/Userland/Applications/TextEditor/MainWidget.h
blob: bc26b57fe7a546c3f66af0ddf1d8ce0f6fd58397 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
/*
 * Copyright (c) 2018-2021, Andreas Kling <kling@serenityos.org>
 *
 * SPDX-License-Identifier: BSD-2-Clause
 */

#pragma once

#include <AK/Function.h>
#include <AK/LexicalPath.h>
#include <LibGUI/ActionGroup.h>
#include <LibGUI/Application.h>
#include <LibGUI/Icon.h>
#include <LibGUI/TextEditor.h>
#include <LibGUI/Widget.h>
#include <LibGUI/Window.h>
#include <LibWeb/Forward.h>

namespace TextEditor {

class MainWidget final : public GUI::Widget {
    C_OBJECT(MainWidget);

public:
    virtual ~MainWidget() override;
    bool open_file(const String& path);
    bool request_close();

    GUI::TextEditor& editor() { return *m_editor; }

    enum class PreviewMode {
        None,
        Markdown,
        HTML,
    };

    void set_preview_mode(PreviewMode);
    void set_auto_detect_preview_mode(bool value) { m_auto_detect_preview_mode = value; }

    void update_title();
    void initialize_menubar(GUI::Menubar&);

private:
    MainWidget();
    void set_path(const LexicalPath& file);
    void update_preview();
    void update_markdown_preview();
    void update_html_preview();
    void update_statusbar();

    Web::OutOfProcessWebView& ensure_web_view();
    void set_web_view_visible(bool);

    virtual void drop_event(GUI::DropEvent&) override;

    RefPtr<GUI::TextEditor> m_editor;
    String m_path;
    String m_name;
    String m_extension;
    RefPtr<GUI::Action> m_new_action;
    RefPtr<GUI::Action> m_open_action;
    RefPtr<GUI::Action> m_save_action;
    RefPtr<GUI::Action> m_save_as_action;
    RefPtr<GUI::Action> m_find_replace_action;
    RefPtr<GUI::Action> m_vim_emulation_setting_action;

    RefPtr<GUI::Action> m_find_next_action;
    RefPtr<GUI::Action> m_find_previous_action;
    RefPtr<GUI::Action> m_replace_action;
    RefPtr<GUI::Action> m_replace_all_action;

    RefPtr<GUI::Action> m_layout_toolbar_action;
    RefPtr<GUI::Action> m_layout_statusbar_action;
    RefPtr<GUI::Action> m_layout_ruler_action;

    GUI::ActionGroup m_preview_actions;
    RefPtr<GUI::Action> m_no_preview_action;
    RefPtr<GUI::Action> m_markdown_preview_action;
    RefPtr<GUI::Action> m_html_preview_action;

    RefPtr<GUI::Toolbar> m_toolbar;
    RefPtr<GUI::ToolbarContainer> m_toolbar_container;
    RefPtr<GUI::Statusbar> m_statusbar;

    RefPtr<GUI::TextBox> m_find_textbox;
    RefPtr<GUI::TextBox> m_replace_textbox;
    RefPtr<GUI::Button> m_find_previous_button;
    RefPtr<GUI::Button> m_find_next_button;
    RefPtr<GUI::Button> m_replace_button;
    RefPtr<GUI::Button> m_replace_all_button;
    RefPtr<GUI::Widget> m_find_replace_widget;
    RefPtr<GUI::Widget> m_find_widget;
    RefPtr<GUI::Widget> m_replace_widget;
    RefPtr<GUI::CheckBox> m_regex_checkbox;
    RefPtr<GUI::CheckBox> m_match_case_checkbox;
    RefPtr<GUI::CheckBox> m_wrap_around_checkbox;

    GUI::ActionGroup m_wrapping_mode_actions;
    RefPtr<GUI::Action> m_no_wrapping_action;
    RefPtr<GUI::Action> m_wrap_anywhere_action;
    RefPtr<GUI::Action> m_wrap_at_words_action;

    RefPtr<GUI::Action> m_visualize_trailing_whitespace_action;
    RefPtr<GUI::Action> m_visualize_leading_whitespace_action;

    GUI::ActionGroup m_soft_tab_width_actions;
    RefPtr<GUI::Action> m_soft_tab_1_width_action;
    RefPtr<GUI::Action> m_soft_tab_2_width_action;
    RefPtr<GUI::Action> m_soft_tab_4_width_action;
    RefPtr<GUI::Action> m_soft_tab_8_width_action;
    RefPtr<GUI::Action> m_soft_tab_16_width_action;

    GUI::ActionGroup syntax_actions;
    RefPtr<GUI::Action> m_plain_text_highlight;
    RefPtr<GUI::Action> m_cpp_highlight;
    RefPtr<GUI::Action> m_js_highlight;
    RefPtr<GUI::Action> m_html_highlight;
    RefPtr<GUI::Action> m_gml_highlight;
    RefPtr<GUI::Action> m_ini_highlight;
    RefPtr<GUI::Action> m_shell_highlight;
    RefPtr<GUI::Action> m_sql_highlight;

    RefPtr<Web::OutOfProcessWebView> m_page_view;
    RefPtr<Core::ConfigFile> m_config;

    bool m_auto_detect_preview_mode { false };
    bool m_use_regex { false };
    bool m_match_case { true };
    bool m_should_wrap { true };

    PreviewMode m_preview_mode { PreviewMode::None };
};

}