1616#include < libraries/qmarkdowntextedit/markdownhighlighter.h>
1717
1818#include < QDebug>
19+ #include < QMenu>
1920#include < QRegularExpression>
2021#include < QTextBlock>
2122#include < QTextDocument>
@@ -29,6 +30,11 @@ NavigationWidget::NavigationWidget(QWidget *parent) : QTreeWidget(parent) {
2930 QObject::connect (this , &NavigationWidget::itemClicked, this , &NavigationWidget::onItemClicked);
3031 // We want to handle itemChanged to allow renaming headings
3132 QObject::connect (this , &NavigationWidget::itemChanged, this , &NavigationWidget::onItemChanged);
33+
34+ // Enable context menu
35+ setContextMenuPolicy (Qt::CustomContextMenu);
36+ connect (this , &QTreeWidget::customContextMenuRequested, this ,
37+ &NavigationWidget::showContextMenu);
3238}
3339
3440/* *
@@ -228,3 +234,31 @@ QTreeWidgetItem *NavigationWidget::findSuitableParentItem(int elementType) const
228234 ? findSuitableParentItem (elementType)
229235 : lastHigherItem;
230236}
237+
238+ /* *
239+ * Shows the context menu for the navigation widget
240+ */
241+ void NavigationWidget::showContextMenu (const QPoint &pos) {
242+ QTreeWidgetItem *item = itemAt (pos);
243+ if (item == nullptr ) {
244+ return ;
245+ }
246+
247+ QMenu menu (this );
248+
249+ // Add "Rename heading" action
250+ QAction *renameAction = menu.addAction (tr (" &Rename heading" ));
251+ connect (renameAction, &QAction::triggered, this , &NavigationWidget::renameHeadingTriggered);
252+
253+ menu.exec (mapToGlobal (pos));
254+ }
255+
256+ /* *
257+ * Triggers the rename action for the currently selected heading
258+ */
259+ void NavigationWidget::renameHeadingTriggered () {
260+ QTreeWidgetItem *item = currentItem ();
261+ if (item != nullptr ) {
262+ editItem (item, 0 );
263+ }
264+ }
0 commit comments