aboutsummaryrefslogtreecommitdiff
path: root/src/webview.cpp
blob: 8e61f2e5cca19634b4b92ad882b1dc7bf643b9c5 (plain) (blame)
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
#include "webview.h"

#include <QContextMenuEvent>
#include <QMenu>
#include <QWebEngineProfile>
#include <QWebEngineContextMenuData>

WebView::WebView(QWidget *parent, QStringList dictionaries)
    : QWebEngineView(parent)
{
    m_dictionaries = dictionaries;
}

void WebView::contextMenuEvent(QContextMenuEvent *event)
{
    const QWebEngineContextMenuData &data = page()->contextMenuData();
    Q_ASSERT(data.isValid());

    if (!data.isContentEditable()) {
        QWebEngineView::contextMenuEvent(event);
        return;
    }

    QWebEngineProfile *profile = page()->profile();
    const QStringList &languages = profile->spellCheckLanguages();
    QMenu *menu = page()->createStandardContextMenu();
    menu->addSeparator();

    QAction *spellcheckAction = new QAction(tr("Check Spelling"), nullptr);
    spellcheckAction->setCheckable(true);
    spellcheckAction->setChecked(profile->isSpellCheckEnabled());
    connect(spellcheckAction, &QAction::toggled, this, [profile](bool toogled) {
        profile->setSpellCheckEnabled(toogled);
    });
    menu->addAction(spellcheckAction);

    if (profile->isSpellCheckEnabled()) {
        QMenu *subMenu = menu->addMenu(tr("Select Language"));
        for (const QString &dict : m_dictionaries) {
            QAction *action = subMenu->addAction(dict);
            action->setCheckable(true);
            action->setChecked(languages.contains(dict));
            connect(action, &QAction::triggered, this, [profile, dict,this](){
                profile->setSpellCheckLanguages(QStringList()<<dict);
                settings.setValue("sc_dict",dict);
            });
        }
    }
    connect(menu, &QMenu::aboutToHide, menu, &QObject::deleteLater);
    menu->popup(event->globalPos());
}