GUI refactoring

This commit is contained in:
Jakub Melka
2019-11-28 18:20:32 +01:00
parent a857e061b8
commit 754b922ae2
10 changed files with 1909 additions and 24 deletions

View File

@@ -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);

View File

@@ -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

View File

@@ -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

View File

@@ -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);