1 | /* |
2 | SPDX-FileCopyrightText: 2001-2003 Christoph Cullmann <cullmann@kde.org> |
3 | |
4 | SPDX-License-Identifier: LGPL-2.0-or-later |
5 | */ |
6 | |
7 | // BEGIN Includes |
8 | #include "katehighlightmenu.h" |
9 | |
10 | #include "katedocument.h" |
11 | #include "katesyntaxmanager.h" |
12 | |
13 | #include <KLocalizedString> |
14 | |
15 | #include <QActionGroup> |
16 | #include <QMenu> |
17 | // END Includes |
18 | |
19 | void KateHighlightingMenu::() |
20 | { |
21 | m_doc = nullptr; |
22 | |
23 | connect(sender: menu(), signal: &QMenu::aboutToShow, context: this, slot: &KateHighlightingMenu::slotAboutToShow); |
24 | m_actionGroup = new QActionGroup(menu()); |
25 | } |
26 | |
27 | void KateHighlightingMenu::(KTextEditor::DocumentPrivate *doc) |
28 | { |
29 | m_doc = doc; |
30 | } |
31 | |
32 | void KateHighlightingMenu::() |
33 | { |
34 | const auto modeList = KateHlManager::self()->modeList(); |
35 | for (const auto &hl : modeList) { |
36 | QString hlName = hl.translatedName(); |
37 | QString hlSection = hl.translatedSection(); |
38 | if (hlName == QLatin1String("None" )) { |
39 | hlName = i18n("None" ); |
40 | } |
41 | |
42 | if (!hl.isHidden() && !hlName.isEmpty()) { |
43 | const bool namesHaveHlName = std::find(first: names.begin(), last: names.end(), val: hlName) != names.end(); |
44 | |
45 | if (!hlSection.isEmpty() && !namesHaveHlName) { |
46 | auto it = std::find(first: subMenusName.begin(), last: subMenusName.end(), val: hlSection); |
47 | if (it == subMenusName.end()) { |
48 | subMenusName.push_back(x: hlSection); |
49 | // pass proper parent for cleanup + Wayland correctness |
50 | subMenus.emplace_back(args: new QMenu(QLatin1Char('&') + hlSection, menu())); |
51 | menu()->addMenu(menu: subMenus.back()); |
52 | |
53 | // last element is the one we just inserted |
54 | it = --subMenusName.end(); |
55 | } |
56 | |
57 | const auto m = std::distance(first: subMenusName.begin(), last: it); |
58 | names.push_back(x: hlName); |
59 | QAction *a = subMenus.at(n: m)->addAction(text: QLatin1Char('&') + hlName, receiver: this, SLOT(setHl())); |
60 | m_actionGroup->addAction(a); |
61 | a->setData(hl.name()); |
62 | a->setCheckable(true); |
63 | subActions.push_back(x: a); |
64 | } else if (!namesHaveHlName) { |
65 | names.push_back(x: hlName); |
66 | QAction *a = menu()->addAction(text: QLatin1Char('&') + hlName, receiver: this, SLOT(setHl())); |
67 | m_actionGroup->addAction(a); |
68 | a->setData(hl.name()); |
69 | a->setCheckable(true); |
70 | subActions.push_back(x: a); |
71 | } |
72 | } |
73 | } |
74 | |
75 | if (!m_doc) { |
76 | return; |
77 | } |
78 | const QString mode = m_doc->highlightingMode(); |
79 | for (auto subAction : subActions) { |
80 | subAction->setChecked(subAction->data().toString() == mode); |
81 | } |
82 | } |
83 | |
84 | void KateHighlightingMenu::() |
85 | { |
86 | if (!m_doc || !sender()) { |
87 | return; |
88 | } |
89 | QAction *action = qobject_cast<QAction *>(object: sender()); |
90 | if (!action) { |
91 | return; |
92 | } |
93 | QString mode = action->data().toString(); |
94 | m_doc->setHighlightingMode(mode); |
95 | |
96 | // use change, honor this |
97 | m_doc->setDontChangeHlOnSave(); |
98 | } |
99 | |
100 | #include "moc_katehighlightmenu.cpp" |
101 | |