mirror of
https://github.com/JakubMelka/PDF4QT.git
synced 2025-06-05 21:59:17 +02:00
GUI refactoring
This commit is contained in:
@@ -213,9 +213,12 @@ public:
|
||||
/// Returns the page
|
||||
const PDFPage* getPage(size_t index) const { return &m_pages.at(index); }
|
||||
|
||||
/// Return optional content properties
|
||||
/// Returns optional content properties
|
||||
const PDFOptionalContentProperties* getOptionalContentProperties() const { return &m_optionalContentProperties; }
|
||||
|
||||
/// Returns root pointer for outline items
|
||||
QSharedPointer<PDFOutlineItem> getOutlineRootPtr() const { return m_outlineRoot; }
|
||||
|
||||
/// Parses catalog from catalog dictionary. If object cannot be parsed, or error occurs,
|
||||
/// then exception is thrown.
|
||||
static PDFCatalog parse(const PDFObject& catalog, const PDFDocument* document);
|
||||
|
@@ -18,6 +18,9 @@
|
||||
#include "pdfitemmodels.h"
|
||||
#include "pdfdocument.h"
|
||||
|
||||
#include <QFont>
|
||||
#include <QApplication>
|
||||
|
||||
namespace pdf
|
||||
{
|
||||
|
||||
@@ -324,4 +327,92 @@ bool PDFOptionalContentTreeItemModel::setData(const QModelIndex& index, const QV
|
||||
return false;
|
||||
}
|
||||
|
||||
PDFOutlineTreeItem::PDFOutlineTreeItem(PDFOutlineTreeItem* parent, QSharedPointer<PDFOutlineItem> outlineItem) :
|
||||
PDFTreeItem(parent),
|
||||
m_outlineItem(qMove(outlineItem))
|
||||
{
|
||||
size_t childCount = m_outlineItem->getChildCount();
|
||||
for (size_t i = 0; i < childCount; ++i)
|
||||
{
|
||||
addCreatedChild(new PDFOutlineTreeItem(nullptr, m_outlineItem->getChildPtr(i)));
|
||||
}
|
||||
}
|
||||
|
||||
int PDFOutlineTreeItemModel::columnCount(const QModelIndex& parent) const
|
||||
{
|
||||
Q_UNUSED(parent);
|
||||
return 1;
|
||||
}
|
||||
|
||||
QVariant PDFOutlineTreeItemModel::data(const QModelIndex& index, int role) const
|
||||
{
|
||||
if (!index.isValid())
|
||||
{
|
||||
return QVariant();
|
||||
}
|
||||
|
||||
const PDFOutlineTreeItem* item = static_cast<const PDFOutlineTreeItem*>(index.internalPointer());
|
||||
const PDFOutlineItem* outlineItem = item->getOutlineItem();
|
||||
switch (role)
|
||||
{
|
||||
case Qt::DisplayRole:
|
||||
return outlineItem->getTitle();
|
||||
|
||||
case Qt::TextColorRole:
|
||||
return outlineItem->getTextColor();
|
||||
|
||||
case Qt::FontRole:
|
||||
{
|
||||
QFont font = QApplication::font();
|
||||
font.setBold(outlineItem->isFontBold());
|
||||
font.setItalic(outlineItem->isFontItalics());
|
||||
return font;
|
||||
}
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return QString();
|
||||
}
|
||||
|
||||
void PDFOutlineTreeItemModel::update()
|
||||
{
|
||||
beginResetModel();
|
||||
|
||||
QSharedPointer<PDFOutlineItem> outlineRoot;
|
||||
if (m_document)
|
||||
{
|
||||
outlineRoot = m_document->getCatalog()->getOutlineRootPtr();
|
||||
}
|
||||
if (outlineRoot)
|
||||
{
|
||||
m_rootItem.reset(new PDFOutlineTreeItem(nullptr, qMove(outlineRoot)));
|
||||
}
|
||||
else
|
||||
{
|
||||
m_rootItem.reset();
|
||||
}
|
||||
|
||||
endResetModel();
|
||||
}
|
||||
|
||||
Qt::ItemFlags PDFOutlineTreeItemModel::flags(const QModelIndex& index) const
|
||||
{
|
||||
Qt::ItemFlags flags = PDFTreeItemModel::flags(index);
|
||||
|
||||
if (!index.isValid())
|
||||
{
|
||||
return flags;
|
||||
}
|
||||
|
||||
const PDFOutlineTreeItem* item = static_cast<const PDFOutlineTreeItem*>(index.internalPointer());
|
||||
if (item->getChildCount() == 0)
|
||||
{
|
||||
flags = flags | Qt::ItemNeverHasChildren;
|
||||
}
|
||||
|
||||
return flags;
|
||||
}
|
||||
|
||||
} // namespace pdf
|
||||
|
@@ -26,6 +26,7 @@
|
||||
namespace pdf
|
||||
{
|
||||
class PDFDocument;
|
||||
class PDFOutlineItem;
|
||||
class PDFOptionalContentActivity;
|
||||
|
||||
/// Represents tree item in the GUI tree
|
||||
@@ -126,6 +127,28 @@ private:
|
||||
PDFOptionalContentActivity* m_activity;
|
||||
};
|
||||
|
||||
class PDFOutlineTreeItem : public PDFTreeItem
|
||||
{
|
||||
public:
|
||||
explicit PDFOutlineTreeItem(PDFOutlineTreeItem* parent, QSharedPointer<PDFOutlineItem> outlineItem);
|
||||
|
||||
const PDFOutlineItem* getOutlineItem() const { return m_outlineItem.data(); }
|
||||
|
||||
private:
|
||||
QSharedPointer<PDFOutlineItem> m_outlineItem;
|
||||
};
|
||||
|
||||
class PDFFORQTLIBSHARED_EXPORT PDFOutlineTreeItemModel : public PDFTreeItemModel
|
||||
{
|
||||
public:
|
||||
using PDFTreeItemModel::PDFTreeItemModel;
|
||||
|
||||
virtual int columnCount(const QModelIndex& parent) const override;
|
||||
virtual QVariant data(const QModelIndex& index, int role) const override;
|
||||
virtual void update() override;
|
||||
virtual Qt::ItemFlags flags(const QModelIndex& index) const override;
|
||||
};
|
||||
|
||||
} // namespace pdf
|
||||
|
||||
#endif // PDFITEMMODELS_H
|
||||
|
@@ -42,6 +42,7 @@ public:
|
||||
size_t getChildCount() const { return m_children.size(); }
|
||||
const PDFOutlineItem* getChild(size_t index) const { return m_children[index].get(); }
|
||||
void addChild(QSharedPointer<PDFOutlineItem> child) { m_children.emplace_back(qMove(child)); }
|
||||
QSharedPointer<PDFOutlineItem> getChildPtr(size_t index) const { return m_children[index]; }
|
||||
|
||||
static QSharedPointer<PDFOutlineItem> parse(const PDFDocument* document, const PDFObject& root);
|
||||
|
||||
|
Reference in New Issue
Block a user