Issue #128: Create list of markup annotations

This commit is contained in:
Jakub Melka
2023-12-25 11:39:20 +01:00
parent 89ea815696
commit 5ba4cef2f7
5 changed files with 69 additions and 17 deletions

View File

@ -126,21 +126,34 @@ void PDFWidgetAnnotationManager::mousePressEvent(QWidget* widget, QMouseEvent* e
} }
} }
if (m_editableAnnotation.isValid()) QPoint menuPosition = pdfWidget->mapToGlobal(event->pos());
{ showAnnotationMenu(m_editableAnnotation, m_editableAnnotationPage, menuPosition);
QMenu menu(tr("Annotation"), pdfWidget); }
QAction* showPopupAction = menu.addAction(tr("Show Popup Window")); }
QAction* copyAction = menu.addAction(tr("Copy to Multiple Pages"));
QAction* editAction = menu.addAction(tr("Edit"));
QAction* deleteAction = menu.addAction(tr("Delete"));
connect(showPopupAction, &QAction::triggered, this, &PDFWidgetAnnotationManager::onShowPopupAnnotation);
connect(copyAction, &QAction::triggered, this, &PDFWidgetAnnotationManager::onCopyAnnotation);
connect(editAction, &QAction::triggered, this, &PDFWidgetAnnotationManager::onEditAnnotation);
connect(deleteAction, &QAction::triggered, this, &PDFWidgetAnnotationManager::onDeleteAnnotation);
m_editableAnnotationGlobalPosition = pdfWidget->mapToGlobal(event->pos()); void PDFWidgetAnnotationManager::showAnnotationMenu(PDFObjectReference annotationReference,
menu.exec(m_editableAnnotationGlobalPosition); PDFObjectReference pageReference,
} QPoint globalMenuPosition)
{
m_editableAnnotation = annotationReference;
m_editableAnnotationPage = pageReference;
if (m_editableAnnotation.isValid())
{
PDFWidget* pdfWidget = m_proxy->getWidget();
QMenu menu(tr("Annotation"), pdfWidget);
QAction* showPopupAction = menu.addAction(tr("Show Popup Window"));
QAction* copyAction = menu.addAction(tr("Copy to Multiple Pages"));
QAction* editAction = menu.addAction(tr("Edit"));
QAction* deleteAction = menu.addAction(tr("Delete"));
connect(showPopupAction, &QAction::triggered, this, &PDFWidgetAnnotationManager::onShowPopupAnnotation);
connect(copyAction, &QAction::triggered, this, &PDFWidgetAnnotationManager::onCopyAnnotation);
connect(editAction, &QAction::triggered, this, &PDFWidgetAnnotationManager::onEditAnnotation);
connect(deleteAction, &QAction::triggered, this, &PDFWidgetAnnotationManager::onDeleteAnnotation);
m_editableAnnotationGlobalPosition = globalMenuPosition;
menu.exec(m_editableAnnotationGlobalPosition);
} }
} }

View File

@ -65,6 +65,10 @@ public:
virtual int getInputPriority() const override { return AnnotationPriority; } virtual int getInputPriority() const override { return AnnotationPriority; }
void showAnnotationMenu(pdf::PDFObjectReference annotationReference,
pdf::PDFObjectReference pageReference,
QPoint globalMenuPosition);
signals: signals:
void actionTriggered(const PDFAction* action); void actionTriggered(const PDFAction* action);
void documentModified(PDFModifiedDocument document); void documentModified(PDFModifiedDocument document);

View File

@ -158,6 +158,7 @@ PDFSidebarWidget::PDFSidebarWidget(pdf::PDFDrawWidgetProxy* proxy,
connect(ui->notesSearchLineEdit, &QLineEdit::editingFinished, this, &PDFSidebarWidget::onNotesSearchText); connect(ui->notesSearchLineEdit, &QLineEdit::editingFinished, this, &PDFSidebarWidget::onNotesSearchText);
connect(ui->notesSearchLineEdit, &QLineEdit::textChanged, this, &PDFSidebarWidget::onNotesSearchText); connect(ui->notesSearchLineEdit, &QLineEdit::textChanged, this, &PDFSidebarWidget::onNotesSearchText);
connect(ui->notesTreeView, &QTreeView::clicked, this, &PDFSidebarWidget::onNotesItemClicked); connect(ui->notesTreeView, &QTreeView::clicked, this, &PDFSidebarWidget::onNotesItemClicked);
connect(ui->notesTreeView, &QTreeView::customContextMenuRequested, this, &PDFSidebarWidget::onNotesTreeViewContextMenuRequested);
m_pageInfo[Invalid] = { nullptr, ui->emptyPage }; m_pageInfo[Invalid] = { nullptr, ui->emptyPage };
m_pageInfo[OptionalContent] = { ui->optionalContentButton, ui->optionalContentPage }; m_pageInfo[OptionalContent] = { ui->optionalContentButton, ui->optionalContentPage };
@ -1092,6 +1093,32 @@ void PDFSidebarWidget::onOutlineTreeViewContextMenuRequested(const QPoint& pos)
contextMenu.exec(ui->outlineTreeView->mapToGlobal(pos)); contextMenu.exec(ui->outlineTreeView->mapToGlobal(pos));
} }
void PDFSidebarWidget::onNotesTreeViewContextMenuRequested(const QPoint& pos)
{
QModelIndex index = ui->notesTreeView->indexAt(pos);
if (index.isValid())
{
QVariant userData = index.data(Qt::UserRole);
if (userData.isValid())
{
const int annotationIndex = userData.toInt();
if (annotationIndex >= 0 && annotationIndex < m_markupAnnotations.size())
{
const auto& annotationItem = m_markupAnnotations[annotationIndex];
QPoint globalPos = ui->notesTreeView->viewport()->mapToGlobal(pos);
pdf::PDFObjectReference annotationReference = annotationItem.first;
pdf::PDFObjectReference pageReference = m_document->getCatalog()->getPage(annotationItem.second)->getPageReference();
m_proxy->goToPage(annotationItem.second);
m_proxy->getAnnotationManager()->showAnnotationMenu(annotationReference, pageReference, globalPos);
}
}
}
}
void PDFSidebarWidget::onOutlineItemsChanged() void PDFSidebarWidget::onOutlineItemsChanged()
{ {
if (m_document) if (m_document)

View File

@ -120,8 +120,9 @@ private:
void onThumbnailsSizeChanged(int size); void onThumbnailsSizeChanged(int size);
void onAttachmentCustomContextMenuRequested(const QPoint& pos); void onAttachmentCustomContextMenuRequested(const QPoint& pos);
void onThumbnailClicked(const QModelIndex& index); void onThumbnailClicked(const QModelIndex& index);
void onSignatureCustomContextMenuRequested(const QPoint &pos); void onSignatureCustomContextMenuRequested(const QPoint& pos);
void onOutlineTreeViewContextMenuRequested(const QPoint &pos); void onOutlineTreeViewContextMenuRequested(const QPoint& pos);
void onNotesTreeViewContextMenuRequested(const QPoint& pos);
void onOutlineItemsChanged(); void onOutlineItemsChanged();
void onBookmarkActivated(int index, PDFBookmarkManager::Bookmark bookmark); void onBookmarkActivated(int index, PDFBookmarkManager::Bookmark bookmark);
void onBookmarsCurrentIndexChanged(const QModelIndex& current, const QModelIndex& previous); void onBookmarsCurrentIndexChanged(const QModelIndex& current, const QModelIndex& previous);

View File

@ -539,7 +539,14 @@
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QTreeView" name="notesTreeView"/> <widget class="QTreeView" name="notesTreeView">
<property name="contextMenuPolicy">
<enum>Qt::CustomContextMenu</enum>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item> </item>
</layout> </layout>
</widget> </widget>