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
|
// Copyright (C) 2024 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "../luaengine.h"
#include <coreplugin/actionmanager/actionmanager.h>
using namespace Utils;
namespace Lua::Internal {
void addActionModule()
{
LuaEngine::registerProvider("Action", [](sol::state_view lua) -> sol::object {
sol::table result = lua.create_table();
result.new_enum("CommandAttribute",
"CA_Hide",
Core::Command::CA_Hide,
"CA_UpdateText",
Core::Command::CA_UpdateText,
"CA_UpdateIcon",
Core::Command::CA_UpdateIcon,
"CA_NonConfigurable",
Core::Command::CA_NonConfigurable);
result["create"] = [parent = std::make_unique<QObject>()](
const std::string &actionId, const sol::table &options) mutable {
Core::ActionBuilder b(parent.get(), Id::fromString(QString::fromStdString(actionId)));
for (const auto &[k, v] : options) {
QString key = k.as<QString>();
if (key == "context")
b.setContext(Id::fromString(v.as<QString>()));
else if (key == "onTrigger")
b.addOnTriggered([f = v.as<sol::function>()]() {
auto res = Lua::LuaEngine::void_safe_call(f);
QTC_CHECK_EXPECTED(res);
});
else if (key == "text")
b.setText(v.as<QString>());
else if (key == "iconText")
b.setIconText(v.as<QString>());
else if (key == "toolTip")
b.setToolTip(v.as<QString>());
else if (key == "commandAttributes")
b.setCommandAttribute((Core::Command::CommandAttribute) v.as<int>());
else if (key == "commandDescription")
b.setCommandDescription(v.as<QString>());
else if (key == "defaultKeySequence")
b.setDefaultKeySequence(QKeySequence(v.as<QString>()));
else if (key == "defaultKeySequences") {
sol::table t = v.as<sol::table>();
QList<QKeySequence> sequences;
sequences.reserve(t.size());
for (const auto &[_, v] : t)
sequences.push_back(QKeySequence(v.as<QString>()));
b.setDefaultKeySequences(sequences);
} else
throw std::runtime_error("Unknown key: " + key.toStdString());
}
};
return result;
});
}
} // namespace Lua::Internal
|