mirror of https://github.com/JakubMelka/PDF4QT.git
DocPage Organizer: Insert image
This commit is contained in:
parent
c075c15f2f
commit
b644ea48e3
|
@ -30,6 +30,7 @@
|
||||||
#include <QClipboard>
|
#include <QClipboard>
|
||||||
#include <QToolBar>
|
#include <QToolBar>
|
||||||
#include <QDesktopServices>
|
#include <QDesktopServices>
|
||||||
|
#include <QImageReader>
|
||||||
|
|
||||||
namespace pdfdocpage
|
namespace pdfdocpage
|
||||||
{
|
{
|
||||||
|
@ -473,10 +474,6 @@ void MainWindow::performOperation(Operation operation)
|
||||||
m_model->rotateRight(ui->documentItemsView->selectionModel()->selection().indexes());
|
m_model->rotateRight(ui->documentItemsView->selectionModel()->selection().indexes());
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Operation::ReplaceSelection:
|
|
||||||
Q_ASSERT(false);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case Operation::GetSource:
|
case Operation::GetSource:
|
||||||
QDesktopServices::openUrl(QUrl("https://github.com/JakubMelka/PdfForQt"));
|
QDesktopServices::openUrl(QUrl("https://github.com/JakubMelka/PdfForQt"));
|
||||||
break;
|
break;
|
||||||
|
@ -492,7 +489,28 @@ void MainWindow::performOperation(Operation operation)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case Operation::ReplaceSelection:
|
||||||
|
Q_ASSERT(false);
|
||||||
|
break;
|
||||||
|
|
||||||
case Operation::InsertImage:
|
case Operation::InsertImage:
|
||||||
|
{
|
||||||
|
QStringList filters;
|
||||||
|
for (const QByteArray& imageFormat : QImageReader::supportedImageFormats())
|
||||||
|
{
|
||||||
|
filters << QString::fromLatin1(imageFormat).toLower();
|
||||||
|
}
|
||||||
|
QString filter = tr("Images (*.%1)").arg(filters.join(" *."));
|
||||||
|
QString fileName = QFileDialog::getOpenFileName(this, tr("Select Image"), m_settings.directory, filter, nullptr);
|
||||||
|
|
||||||
|
if (!fileName.isEmpty())
|
||||||
|
{
|
||||||
|
QModelIndexList indexes = ui->documentItemsView->selectionModel()->selection().indexes();
|
||||||
|
m_model->insertImage(fileName, !indexes.isEmpty() ? indexes.front() : QModelIndex());
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case Operation::InsertPDF:
|
case Operation::InsertPDF:
|
||||||
|
|
||||||
case Operation::Unite:
|
case Operation::Unite:
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
#include "pageitemmodel.h"
|
#include "pageitemmodel.h"
|
||||||
|
|
||||||
#include <QFileInfo>
|
#include <QFileInfo>
|
||||||
|
#include <QImageReader>
|
||||||
|
|
||||||
#include <iterator>
|
#include <iterator>
|
||||||
|
|
||||||
|
@ -114,6 +115,56 @@ int PageItemModel::addDocument(QString fileName, pdf::PDFDocument document)
|
||||||
return newIndex;
|
return newIndex;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int PageItemModel::insertImage(QString fileName, const QModelIndex& index)
|
||||||
|
{
|
||||||
|
QFile file(fileName);
|
||||||
|
|
||||||
|
if (file.open(QFile::ReadOnly))
|
||||||
|
{
|
||||||
|
ImageItem item;
|
||||||
|
item.imageData = file.readAll();
|
||||||
|
|
||||||
|
QImageReader reader(fileName);
|
||||||
|
item.image = reader.read();
|
||||||
|
|
||||||
|
file.close();
|
||||||
|
|
||||||
|
if (!item.image.isNull())
|
||||||
|
{
|
||||||
|
int newIndex = 1;
|
||||||
|
|
||||||
|
if (!m_images.empty())
|
||||||
|
{
|
||||||
|
newIndex = (m_images.rbegin()->first) + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_images[newIndex] = qMove(item);
|
||||||
|
|
||||||
|
// Insert image item
|
||||||
|
PageGroupItem newItem;
|
||||||
|
|
||||||
|
newItem.groups.reserve(1);
|
||||||
|
|
||||||
|
PageGroupItem::GroupItem groupItem;
|
||||||
|
groupItem.imageIndex = newIndex;
|
||||||
|
groupItem.rotatedPageDimensionsMM = m_images[newIndex].image.size() * 0.1;
|
||||||
|
groupItem.pageType = PT_Image;
|
||||||
|
newItem.groups.push_back(qMove(groupItem));
|
||||||
|
|
||||||
|
updateItemCaptionAndTags(newItem);
|
||||||
|
int insertRow = index.isValid() ? index.row() + 1 : int(m_pageGroupItems.size());
|
||||||
|
|
||||||
|
beginInsertRows(QModelIndex(), insertRow, insertRow);
|
||||||
|
m_pageGroupItems.insert(std::next(m_pageGroupItems.begin(), insertRow), qMove(newItem));
|
||||||
|
endInsertRows();
|
||||||
|
|
||||||
|
return newIndex;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
const PageGroupItem* PageItemModel::getItem(const QModelIndex& index) const
|
const PageGroupItem* PageItemModel::getItem(const QModelIndex& index) const
|
||||||
{
|
{
|
||||||
if (index.isValid())
|
if (index.isValid())
|
||||||
|
|
|
@ -21,6 +21,7 @@
|
||||||
#include "pdfdocument.h"
|
#include "pdfdocument.h"
|
||||||
#include "pdfutils.h"
|
#include "pdfutils.h"
|
||||||
|
|
||||||
|
#include <QImage>
|
||||||
#include <QAbstractItemModel>
|
#include <QAbstractItemModel>
|
||||||
|
|
||||||
namespace pdfdocpage
|
namespace pdfdocpage
|
||||||
|
@ -69,6 +70,12 @@ struct DocumentItem
|
||||||
pdf::PDFDocument document;
|
pdf::PDFDocument document;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct ImageItem
|
||||||
|
{
|
||||||
|
QImage image;
|
||||||
|
QByteArray imageData;
|
||||||
|
};
|
||||||
|
|
||||||
class PageItemModel : public QAbstractItemModel
|
class PageItemModel : public QAbstractItemModel
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
@ -104,6 +111,14 @@ public:
|
||||||
/// \returns Identifier of the document (internal index)
|
/// \returns Identifier of the document (internal index)
|
||||||
int addDocument(QString fileName, pdf::PDFDocument document);
|
int addDocument(QString fileName, pdf::PDFDocument document);
|
||||||
|
|
||||||
|
/// Adds image to the model, inserts one single page containing
|
||||||
|
/// the image. Returns index of a newly added image. If image
|
||||||
|
/// cannot be read from the file, -1 is returned.
|
||||||
|
/// \param fileName Image file
|
||||||
|
/// \param index Index, where image is inserted
|
||||||
|
/// \returns Identifier of the image (internal index)
|
||||||
|
int insertImage(QString fileName, const QModelIndex& index);
|
||||||
|
|
||||||
/// Returns item at a given index. If item doesn't exist,
|
/// Returns item at a given index. If item doesn't exist,
|
||||||
/// then nullptr is returned.
|
/// then nullptr is returned.
|
||||||
/// \param index Index
|
/// \param index Index
|
||||||
|
@ -148,6 +163,7 @@ private:
|
||||||
|
|
||||||
std::vector<PageGroupItem> m_pageGroupItems;
|
std::vector<PageGroupItem> m_pageGroupItems;
|
||||||
std::map<int, DocumentItem> m_documents;
|
std::map<int, DocumentItem> m_documents;
|
||||||
|
std::map<int, ImageItem> m_images;
|
||||||
std::vector<PageGroupItem> m_trashBin;
|
std::vector<PageGroupItem> m_trashBin;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue