Pin/unpin functionality

This commit is contained in:
Jakub Melka 2021-06-16 18:45:47 +02:00
parent 47baae321e
commit 7264a45e30
5 changed files with 71 additions and 1 deletions

View File

@ -103,6 +103,8 @@ ObjectInspectorDialog::ObjectInspectorDialog(const pdf::PDFCMS* cms, const pdf::
ui->splitter->setSizes(QList<int>() << pdf::PDFWidgetUtils::scaleDPI_x(this, 300) << pdf::PDFWidgetUtils::scaleDPI_x(this, 200));
connect(ui->objectTreeView->selectionModel(), &QItemSelectionModel::currentChanged, this, &ObjectInspectorDialog::onCurrentIndexChanged);
connect(ui->currentObjectWidget, &ObjectViewerWidget::pinRequest, this, &ObjectInspectorDialog::onPinRequest);
connect(ui->currentObjectWidget, &ObjectViewerWidget::unpinRequest, this, &ObjectInspectorDialog::onUnpinRequest);
ui->objectTreeView->setMinimumWidth(pdf::PDFWidgetUtils::scaleDPI_x(this, 200));
setMinimumSize(pdf::PDFWidgetUtils::scaleDPI(this, QSize(800, 600)));
@ -119,6 +121,34 @@ void ObjectInspectorDialog::onModeChanged()
m_model->setMode(mode);
}
void ObjectInspectorDialog::onPinRequest()
{
ObjectViewerWidget* source = qobject_cast<ObjectViewerWidget*>(sender());
if (!source || source != ui->currentObjectWidget)
{
return;
}
ObjectViewerWidget* cloned = ui->currentObjectWidget->clone(true, this);
connect(cloned, &ObjectViewerWidget::pinRequest, this, &ObjectInspectorDialog::onPinRequest);
connect(cloned, &ObjectViewerWidget::unpinRequest, this, &ObjectInspectorDialog::onUnpinRequest);
ui->tabWidget->addTab(cloned, cloned->getTitleText());
}
void ObjectInspectorDialog::onUnpinRequest()
{
ObjectViewerWidget* source = qobject_cast<ObjectViewerWidget*>(sender());
if (!source || source == ui->currentObjectWidget)
{
return;
}
ui->tabWidget->removeTab(ui->tabWidget->indexOf(source));
source->deleteLater();
}
void ObjectInspectorDialog::onCurrentIndexChanged(const QModelIndex& current, const QModelIndex& previous)
{
Q_UNUSED(previous);

View File

@ -43,6 +43,8 @@ public:
private:
void onModeChanged();
void onPinRequest();
void onUnpinRequest();
void onCurrentIndexChanged(const QModelIndex& current, const QModelIndex& previous);
Ui::ObjectInspectorDialog* ui;

View File

@ -40,6 +40,9 @@
<property name="currentIndex">
<number>0</number>
</property>
<property name="movable">
<bool>true</bool>
</property>
<widget class="QWidget" name="currentObjectTab">
<attribute name="title">
<string>Current Object</string>

View File

@ -46,7 +46,7 @@ ObjectViewerWidget::ObjectViewerWidget(bool isPinned, QWidget* parent) :
m_printableCharacters.push_back('\n');
connect(ui->pinButton, &QPushButton::clicked, this, &ObjectViewerWidget::pinRequest);
connect(ui->unpinButton, &QPushButton::clicked, this, &ObjectViewerWidget::pinRequest);
connect(ui->unpinButton, &QPushButton::clicked, this, &ObjectViewerWidget::unpinRequest);
updateUi();
updatePinnedUi();
@ -57,6 +57,18 @@ ObjectViewerWidget::~ObjectViewerWidget()
delete ui;
}
ObjectViewerWidget* ObjectViewerWidget::clone(bool isPinned, QWidget* parent)
{
ObjectViewerWidget* cloned = new ObjectViewerWidget(isPinned, parent);
cloned->setDocument(m_document);
cloned->setCms(m_cms);
cloned->setData(m_currentReference, m_currentObject, m_isRootObject);
return cloned;
}
void ObjectViewerWidget::setPinned(bool isPinned)
{
if (m_isPinned != isPinned)
@ -271,6 +283,25 @@ void ObjectViewerWidget::setCms(const pdf::PDFCMS* cms)
m_cms = cms;
}
QString ObjectViewerWidget::getTitleText() const
{
if (!m_currentReference.isValid())
{
return tr("[Unknown]");
}
QString referenceString = tr("%1 %2 R").arg(m_currentReference.objectNumber).arg(m_currentReference.generation);
if (m_isRootObject)
{
return referenceString;
}
else
{
return tr("%1 (part)").arg(referenceString);
}
}
const pdf::PDFDocument* ObjectViewerWidget::getDocument() const
{
return m_document;

View File

@ -40,6 +40,8 @@ public:
explicit ObjectViewerWidget(bool isPinned, QWidget* parent);
virtual ~ObjectViewerWidget() override;
ObjectViewerWidget* clone(bool isPinned, QWidget* parent);
void setPinned(bool isPinned);
void setData(pdf::PDFObjectReference currentReference, pdf::PDFObject currentObject, bool isRootObject);
@ -49,6 +51,8 @@ public:
const pdf::PDFCMS* getCms() const;
void setCms(const pdf::PDFCMS* cms);
QString getTitleText() const;
signals:
void pinRequest();
void unpinRequest();