3D PDF: Open media viewer on double click

This commit is contained in:
Jakub Melka
2022-07-08 18:54:50 +02:00
parent 3d3b8edec8
commit f1824da326
8 changed files with 112 additions and 3 deletions

View File

@@ -18,6 +18,9 @@
#include "pdfmediaviewerdialog.h"
#include "ui_pdfmediaviewerdialog.h"
#include "pdfwidgetutils.h"
#include "pdfdocument.h"
#include "pdfannotation.h"
#include "pdf3d_u3d.h"
#include "pdfdbgheap.h"
#include <QColor>
@@ -161,4 +164,48 @@ void PDFMediaViewerDialog::initDemo()
lightEntity->addComponent(lightTransform);
}
void PDFMediaViewerDialog::initFromAnnotation(const pdf::PDFDocument* document,
const pdf::PDFAnnotation* annotation)
{
Q_ASSERT(document);
Q_ASSERT(annotation);
switch (annotation->getType())
{
case pdf::AnnotationType::_3D:
{
const pdf::PDF3DAnnotation* typedAnnotation = dynamic_cast<const pdf::PDF3DAnnotation*>(annotation);
initFrom3DAnnotation(document, typedAnnotation);
break;
}
default:
break;
}
}
void PDFMediaViewerDialog::initFrom3DAnnotation(const pdf::PDFDocument* document,
const pdf::PDF3DAnnotation* annotation)
{
const pdf::PDF3DStream& stream = annotation->getStream();
pdf::PDFObject object = document->getObject(stream.getStream());
if (object.isStream())
{
QByteArray data = document->getDecodedStream(object.getStream());
switch (stream.getType())
{
case pdf::PDF3DStream::Type::U3D:
break;
case pdf::PDF3DStream::Type::PRC:
break;
default:
break;
}
}
}
} // namespace pdfviewer

View File

@@ -18,6 +18,8 @@
#ifndef PDFMEDIAVIEWERDIALOG_H
#define PDFMEDIAVIEWERDIALOG_H
#include "pdfglobal.h"
#include <QDialog>
namespace Qt3DCore
@@ -35,6 +37,13 @@ namespace Ui
class PDFMediaViewerDialog;
}
namespace pdf
{
class PDFDocument;
class PDFAnnotation;
class PDF3DAnnotation;
}
namespace pdfviewer
{
@@ -47,8 +56,11 @@ public:
virtual ~PDFMediaViewerDialog() override;
void initDemo();
void initFromAnnotation(const pdf::PDFDocument* document, const pdf::PDFAnnotation* annotation);
private:
void initFrom3DAnnotation(const pdf::PDFDocument* document, const pdf::PDF3DAnnotation* annotation);
Ui::PDFMediaViewerDialog* ui;
Qt3DExtras::Qt3DWindow* m_3dWindow = nullptr;
Qt3DCore::QEntity* m_rootEntity = nullptr;

View File

@@ -352,6 +352,7 @@ void PDFProgramController::initializeAnnotationManager()
{
m_annotationManager = new pdf::PDFWidgetAnnotationManager(m_pdfWidget->getDrawWidgetProxy(), this);
connect(m_annotationManager, &pdf::PDFWidgetAnnotationManager::actionTriggered, this, &PDFProgramController::onActionTriggered);
connect(m_annotationManager, &pdf::PDFWidgetAnnotationManager::multimediaTriggered, this, &PDFProgramController::onMultimediaTriggered);
connect(m_annotationManager, &pdf::PDFWidgetAnnotationManager::documentModified, this, &PDFProgramController::onDocumentModified);
m_pdfWidget->setAnnotationManager(m_annotationManager);
}
@@ -961,6 +962,13 @@ void PDFProgramController::onActionTriggered(const pdf::PDFAction* action)
}
}
void PDFProgramController::onMultimediaTriggered(const pdf::PDFAnnotation* annotation)
{
PDFMediaViewerDialog* dialog = new PDFMediaViewerDialog(getMainWindow());
dialog->initFromAnnotation(getDocument(), annotation);
dialog->open();
}
void PDFProgramController::initializeToolManager()
{
// Initialize tools

View File

@@ -43,6 +43,7 @@ class PDFWidget;
class PDFCMSManager;
class PDFToolManager;
class PDFFormManager;
class PDFAnnotation;
class PDFWidgetAnnotationManager;
}
@@ -289,6 +290,7 @@ public:
void onActionTriggered(const pdf::PDFAction* action);
void onDocumentModified(pdf::PDFModifiedDocument document);
void onMultimediaTriggered(const pdf::PDFAnnotation* annotation);
void updateActionsAvailability();
bool getIsBusy() const;