From ec660fc3ec8ee261cc35d51dbceaec430cef2af6 Mon Sep 17 00:00:00 2001 From: Rtch90 Date: Tue, 16 Dec 2014 16:32:24 +0000 Subject: [PATCH] [Add] Load PDF files. --- src/pdf_file_widget.cpp | 40 +++++++++++++++++++++++++++++++++------- src/pdf_file_widget.h | 10 +++++++--- src/pdf_page_widget.cpp | 1 + src/table_view.cpp | 41 +++++++++++++++++------------------------ src/table_view.h | 5 ++++- 5 files changed, 62 insertions(+), 35 deletions(-) diff --git a/src/pdf_file_widget.cpp b/src/pdf_file_widget.cpp index 50d0349..d4c425e 100644 --- a/src/pdf_file_widget.cpp +++ b/src/pdf_file_widget.cpp @@ -23,10 +23,6 @@ FileWidget::FileWidget(QWidget* parent) { setAcceptDrops(true); mainLayout = new QHBoxLayout(); - for(int i = 0; i < 4; i++) { - addChild(tr("Child number #") + QString::number(i)); - } - setLayout(mainLayout); } @@ -35,6 +31,7 @@ int FileWidget::getChildCount() const { } QSize FileWidget::sizeHint() const { + qDebug() << size(); return QSize(CHILD_AREA_WIDTH*getChildCount(), CHILD_AREA_HEIGHT + 20); } @@ -43,12 +40,22 @@ void FileWidget::addChild(QString name) { newchild = new PDFPageWidget(); newchild->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); newchild->resize(CHILD_AREA_WIDTH, CHILD_AREA_HEIGHT); - /*newchild->setText(name);*/ - /*newchild->setStyleSheet("QLabel { background-color : red; color : blue }");*/ child.push_back(newchild); mainLayout->addWidget(newchild); + adjustSize(); +} + +void FileWidget::addChild(QImage* image) { + PDFPageWidget* newchild; + newchild = new PDFPageWidget(); + newchild->setThumbnail(image); + + child.push_back(newchild); + + mainLayout->addWidget(newchild); + adjustSize(); } void FileWidget::dragEnterEvent(QDragEnterEvent* event) { @@ -60,7 +67,11 @@ void FileWidget::dropEvent(QDropEvent* event) { int from = event->mimeData()->text().toInt(); int to = findChildPositionInLayout(child[findClickEventChild(event->pos())]); - qDebug() << QString::number(from) + " " + QString::number(to); + qDebug() << "Moving " + QString::number(from) + " " + QString::number(to); + + for(int i = 0; i < child.size(); i++) { + qDebug() << child[i]->size(); + } mainLayout->removeWidget(child[from]); mainLayout->insertWidget(to, child[from]); @@ -126,19 +137,23 @@ PDFFileWidget::PDFFileWidget(QWidget* parent) { adjustSize(); } +#if 0 QSize PDFFileWidget::sizeHint() const { if(collapsed == true) return QSize(mainChild->width(), collapseButton->height()); else return QSize(mainChild->width(), collapseButton->height() + mainChild->height() + 50); } +#endif void PDFFileWidget::setCollapsed(bool state) { if(state == true) { collapsed = true; + setFixedHeight(collapseButton->height() + 80); scrollArea->hide(); } else { collapsed = false; + setFixedHeight(collapseButton->height() + mainChild->height() + 50); scrollArea->show(); } @@ -152,3 +167,14 @@ void PDFFileWidget::collapsedButtonClick(void) { setCollapsed(true); } +void PDFFileWidget::setDocument(Poppler::Document* document, QString filename) { + int numPages = document->numPages(); + for(int i; i < numPages; i++) { + Poppler::Page* pdfPage = document->page(i); + QImage* image = new QImage(); + *image = pdfPage->renderToImage(); + + mainChild->addChild(image); + } +} + diff --git a/src/pdf_file_widget.h b/src/pdf_file_widget.h index d55024e..eb85bbe 100644 --- a/src/pdf_file_widget.h +++ b/src/pdf_file_widget.h @@ -1,3 +1,4 @@ +#pragma once #include #include #include @@ -16,6 +17,10 @@ class FileWidget : public QWidget { public: FileWidget(QWidget* parent = 0); QSize sizeHint() const; + + void addChild(QString name); + void addChild(QImage* image); + protected: void dragEnterEvent(QDragEnterEvent* event); void dropEvent(QDropEvent* event); @@ -25,7 +30,6 @@ private: QHBoxLayout* mainLayout; - void addChild(QString name); int findClickEventChild(QPoint pos); int findChildPositionInLayout(PDFPageWidget* child); int getChildCount() const; @@ -37,10 +41,10 @@ class PDFFileWidget : public QWidget { public: PDFFileWidget(QWidget* parent = 0); - QSize sizeHint() const; + /*QSize sizeHint() const;*/ void setAncestor(QWidget* ancestor) { this->ancestor = ancestor; } - void setDocument(Poppler::Document* document, QString filename) {}; + void setDocument(Poppler::Document* document, QString filename); bool isCollapsed(void) { return collapsed; } void setCollapsed(bool collapsed); diff --git a/src/pdf_page_widget.cpp b/src/pdf_page_widget.cpp index 00cba3f..8b9c987 100644 --- a/src/pdf_page_widget.cpp +++ b/src/pdf_page_widget.cpp @@ -8,6 +8,7 @@ PDFPageWidget::PDFPageWidget(QWidget* parent) : /* Resize widget. */ this->resize(150, 150); this->setMinimumHeight(150); + this->setMinimumWidth(150); this->setMouseTracking(true); this->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); diff --git a/src/table_view.cpp b/src/table_view.cpp index d063db1..e8d0b16 100644 --- a/src/table_view.cpp +++ b/src/table_view.cpp @@ -18,36 +18,29 @@ TableView::TableView(QWidget* parent) : QWidget(parent) { scrollArea->setWidget(frame); frame->setLayout(layout); frame->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored); - int i = 0; - - /* TODO: Page widget is placed for testing only. - * To remove pagewidget and add filewidgets later, - * use QVector files to store files. - */ - /*for(i = 0; i < 10; i++) { - test[i] = new PDFPageWidget(); - test[i]->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored); - - layout->addWidget(test[i]); - }*/ - - for(i = 0; i < 10; i++) { - test[i] = new PDFFileWidget(); - /*test[i]->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Ignored);*/ - - test[i]->setAncestor(this); - layout->addWidget(test[i]); - } - /* End TODO. */ frame->adjustSize(); + loadFile("/home/allanis/docs/loa.pdf"); + loadFile("/home/allanis/docs/loa.pdf"); +} + +void TableView::loadFile(QString fileName) { + filenames.append(fileName); + Poppler::Document* doc = Poppler::Document::load(fileName); + files.append(doc); + PDFFileWidget* pfw = new PDFFileWidget(); + pfw->setAncestor(this); + pfw->setDocument(doc, fileName); + + fileWidgets.append(pfw); + layout->addWidget(pfw); } void TableView::paintEvent(QPaintEvent* event) { frame->adjustSize(); int newWidth = width() - 50; - - for(int i = 0; i < 10; i++) { - test[i]->resize(newWidth, test[i]->height()); + + for(int i = 0; i < fileWidgets.size(); i++) { + fileWidgets.at(i)->resize(newWidth, fileWidgets.at(i)->height()); } frame->resize(newWidth, frame->height()); diff --git a/src/table_view.h b/src/table_view.h index 6945263..fb725ec 100644 --- a/src/table_view.h +++ b/src/table_view.h @@ -7,6 +7,7 @@ #include #include #include "pdf_page_widget.h" +#include "pdf_file_widget.h" class QPushButton; class QWidget; @@ -26,8 +27,10 @@ private: QVBoxLayout* outerLayout; void paintEvent(QPaintEvent* event); - + void loadFile(QString fileName); + QVector files; QVector filenames; + QVector fileWidgets; };