diff --git a/bin/hpdf.pro b/bin/hpdf.pro index c2429fa..8832acf 100644 --- a/bin/hpdf.pro +++ b/bin/hpdf.pro @@ -9,13 +9,13 @@ LIBS += -L/usr/lib -lpoppler-qt5 HEADERS += \ ../src/pdf_factory.h \ ../src/pdf_page_widget.h \ - ../src/table_view.h \ + ../src/pdf_table_view.h \ ../src/pdf_file_widget.h SOURCES += \ ../src/main.cpp \ ../src/pdf_factory.cpp \ ../src/pdf_page_widget.cpp \ - ../src/table_view.cpp \ + ../src/pdf_table_view.cpp \ ../src/pdf_file_widget.cpp RESOURCES += hpdf.qrc diff --git a/src/pdf_factory.cpp b/src/pdf_factory.cpp index 99e98eb..bd21f65 100644 --- a/src/pdf_factory.cpp +++ b/src/pdf_factory.cpp @@ -1,7 +1,7 @@ #include #include #include "pdf_factory.h" -#include "table_view.h" +#include "pdf_table_view.h" #include "pdf_page_widget.h" PDFFactory::PDFFactory(void) { @@ -32,7 +32,7 @@ void PDFFactory::createWidgets(void) { layout->addWidget(ribbon); /* Create main area (table). */ - pdfTableView = new TableView(); + pdfTableView = new PDFTableView(); pdfTableView->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); splitter = new QSplitter(); @@ -43,8 +43,10 @@ void PDFFactory::createWidgets(void) { splitter->addWidget(pdfTableView); splitter->addWidget(pdfPreview); QList splitterWidgetSizes; - splitterWidgetSizes << 700 << 300; + splitterWidgetSizes << 600 << 400; splitter->setSizes(splitterWidgetSizes); + splitter->setStretchFactor(0, 1); + splitter->setStretchFactor(1, 0.5); layout->addWidget(splitter); setWindowIcon(QIcon(":/img/hpdf.png")); diff --git a/src/pdf_factory.h b/src/pdf_factory.h index 6927878..4752a78 100644 --- a/src/pdf_factory.h +++ b/src/pdf_factory.h @@ -1,6 +1,6 @@ #pragma once #include -#include "table_view.h" +#include "pdf_table_view.h" class QAction; class QWidget; @@ -41,7 +41,7 @@ private: QTabWidget* ribbon; QScrollArea* scrollArea; - TableView* pdfTableView; + PDFTableView* pdfTableView; QSplitter* splitter; QWidget* pdfPreview; diff --git a/src/pdf_file_widget.cpp b/src/pdf_file_widget.cpp index 513420f..8c7979b 100644 --- a/src/pdf_file_widget.cpp +++ b/src/pdf_file_widget.cpp @@ -10,7 +10,7 @@ #define CHILD_AREA_WIDTH 150 #define CHILD_AREA_HEIGHT 150 -FileWidget::FileWidget(QWidget* parent) { +FilesContainerWidget::FilesContainerWidget(QWidget* parent) { setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); setAcceptDrops(true); mainLayout = new QHBoxLayout(); @@ -18,31 +18,26 @@ FileWidget::FileWidget(QWidget* parent) { setLayout(mainLayout); } -int FileWidget::getPagesCount() const { +int FilesContainerWidget::getPagesCount() const { return pageWidgets.size(); } -QSize FileWidget::sizeHint() const { +QSize FilesContainerWidget::sizeHint() const { return QSize(CHILD_AREA_WIDTH*getPagesCount(), CHILD_AREA_HEIGHT + 20); } -void FileWidget::addPageWidget(QImage* image) { - PDFPageWidget* newPageWidget; - newPageWidget = new PDFPageWidget(); - newPageWidget->setThumbnail(image); - - pageWidgets.push_back(newPageWidget); - - mainLayout->addWidget(newPageWidget); +void FilesContainerWidget::addPageWidget(PDFPageWidget* pageWidget) { + pageWidgets.append(pageWidget); + mainLayout->addWidget(pageWidget); adjustSize(); } -void FileWidget::dragEnterEvent(QDragEnterEvent* event) { +void FilesContainerWidget::dragEnterEvent(QDragEnterEvent* event) { if(event->mimeData()->hasFormat("text/plain")) event->acceptProposedAction(); } -void FileWidget::dropEvent(QDropEvent* event) { +void FilesContainerWidget::dropEvent(QDropEvent* event) { int from = event->mimeData()->text().toInt(); int to = findPageWidgetInLayout(pageWidgets[findPageContainingClickEvent(event->pos())]); @@ -52,7 +47,7 @@ void FileWidget::dropEvent(QDropEvent* event) { event->acceptProposedAction(); } -void FileWidget::mousePressEvent(QMouseEvent* event) { +void FilesContainerWidget::mousePressEvent(QMouseEvent* event) { if(event->button() == Qt::LeftButton) { int draggedChild = (findPageContainingClickEvent(event->pos())); @@ -67,7 +62,7 @@ void FileWidget::mousePressEvent(QMouseEvent* event) { } } -int FileWidget::findPageContainingClickEvent(QPoint pos) { +int FilesContainerWidget::findPageContainingClickEvent(QPoint pos) { for(int i = 0; i < getPagesCount(); i++) if(pageWidgets[i]->geometry().contains(pos)) return i; @@ -75,7 +70,7 @@ int FileWidget::findPageContainingClickEvent(QPoint pos) { return getPagesCount()-1; } -int FileWidget::findPageWidgetInLayout(PDFPageWidget* pageWidget) { +int FilesContainerWidget::findPageWidgetInLayout(PDFPageWidget* pageWidget) { for(int i = 0; i < getPagesCount(); i++) if(mainLayout->itemAt(i)->widget() == pageWidget) return i; @@ -88,66 +83,52 @@ PDFFileWidget::PDFFileWidget(QWidget* parent) { topLayout = new QGridLayout(); - scrollArea = new QScrollArea(); - fileWidget = new FileWidget(); - scrollArea->setWidget(fileWidget); - - fileNameLabel = new QLabel(); - fileNameLabel->setText(tr("File 1")); - - topLayout->addWidget(fileNameLabel, 0, 1); - collapseButton = new QPushButton(tr("X")); collapseButton->setMinimumSize(QSize(COLLAPSE_BUTTON_WIDTH, COLLAPSE_BUTTON_HEIGHT)); collapseButton->setMaximumSize(QSize(COLLAPSE_BUTTON_WIDTH, COLLAPSE_BUTTON_HEIGHT)); connect(collapseButton, SIGNAL(released()), this, SLOT(collapsedButtonClick())); topLayout->addWidget(collapseButton, 0, 0); + fileNameLabel = new QLabel(); + fileNameLabel->setText(tr("File 1")); + + topLayout->addWidget(fileNameLabel, 0, 1); + + filesContainerWidget = new FilesContainerWidget(); + scrollArea = new QScrollArea(); + scrollArea->setWidget(filesContainerWidget); topLayout->addWidget(scrollArea, 1, 0, 1, 5); + setLayout(topLayout); setCollapsed(false); - 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) { + collapsed = state; if(state == true) { - collapsed = true; - setFixedHeight(collapseButton->height() + 80); scrollArea->hide(); } else { - collapsed = false; - setFixedHeight(collapseButton->height() + fileWidget->height() + 50); scrollArea->show(); } - - adjustSize(); } void PDFFileWidget::collapsedButtonClick(void) { - if(collapsed == true) - setCollapsed(false); - else - setCollapsed(true); + setCollapsed(!collapsed); } void PDFFileWidget::setDocument(Poppler::Document* document, QString fileName) { int numPages = document->numPages(); - for(int i; i < numPages; i++) { + for(int i = 0; i < numPages; i++) { Poppler::Page* pdfPage = document->page(i); - QImage* image = new QImage(); - *image = pdfPage->renderToImage(144, 144); + + QImage* pageImage = new QImage(); + *pageImage = pdfPage->renderToImage(144, 144); - fileWidget->addPageWidget(image); + PDFPageWidget* pageWidget = new PDFPageWidget(); + pageWidget->setThumbnail(pageImage); + + filesContainerWidget->addPageWidget(pageWidget); } } diff --git a/src/pdf_file_widget.h b/src/pdf_file_widget.h index 1d183af..4faeba2 100644 --- a/src/pdf_file_widget.h +++ b/src/pdf_file_widget.h @@ -1,6 +1,5 @@ #pragma once #include -#include #include #include "pdf_page_widget.h" @@ -18,22 +17,21 @@ class QDropEvent; class QMouseEvent; class PDFPageWidget; -class FileWidget : public QWidget { +class FilesContainerWidget : public QWidget { Q_OBJECT public: - FileWidget(QWidget* parent = 0); + FilesContainerWidget(QWidget* parent = 0); QSize sizeHint() const; - void addPageWidget(QImage* image); + void addPageWidget(PDFPageWidget* image); protected: void dragEnterEvent(QDragEnterEvent* event); void dropEvent(QDropEvent* event); void mousePressEvent(QMouseEvent* event); private: - std::vector pageWidgets; - - QHBoxLayout* mainLayout; + QVector pageWidgets; + QHBoxLayout* mainLayout; int findPageContainingClickEvent(QPoint pos); int findPageWidgetInLayout(PDFPageWidget* pageWidgets); @@ -46,7 +44,6 @@ class PDFFileWidget : public QWidget { public: PDFFileWidget(QWidget* parent = 0); - /*QSize sizeHint() const;*/ void setAncestor(QWidget* ancestor) { this->ancestor = ancestor; } void setDocument(Poppler::Document* document, QString fileName); @@ -63,11 +60,11 @@ private slots: private: QGridLayout* topLayout; - QLabel* fileNameLabel; - QPushButton* collapseButton; - QScrollArea* scrollArea; - FileWidget* fileWidget; - QWidget* ancestor; - bool collapsed; + QLabel* fileNameLabel; + QPushButton* collapseButton; + FilesContainerWidget* filesContainerWidget; + QScrollArea* scrollArea; + QWidget* ancestor; + bool collapsed; }; diff --git a/src/pdf_page_widget.cpp b/src/pdf_page_widget.cpp index a0f7d54..f6bec0a 100644 --- a/src/pdf_page_widget.cpp +++ b/src/pdf_page_widget.cpp @@ -3,7 +3,7 @@ #include "pdf_page_widget.h" PDFPageWidget::PDFPageWidget(QWidget* parent) : - QWidget(parent) { + QFrame(parent) { /* Resize widget. */ this->resize(150, 150); @@ -13,7 +13,6 @@ PDFPageWidget::PDFPageWidget(QWidget* parent) : this->setMouseTracking(true); this->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); - QVBoxLayout* vbox = new QVBoxLayout(this); QHBoxLayout* hbox = new QHBoxLayout(); btn1 = new QPushButton("", this); @@ -33,11 +32,13 @@ PDFPageWidget::PDFPageWidget(QWidget* parent) : hbox->addWidget(btn1, 1, Qt::AlignRight); hbox->addWidget(btn2, 0, Qt::AlignLeft); + QVBoxLayout* vbox = new QVBoxLayout(); vbox->addStretch(1); vbox->addLayout(hbox); this->setLayout(vbox); + vbox->setContentsMargins(0, 0, 0, 0); this->setThumbnail(new QImage("../img/img.jpg")); } diff --git a/src/pdf_page_widget.h b/src/pdf_page_widget.h index 4795154..67e4acf 100644 --- a/src/pdf_page_widget.h +++ b/src/pdf_page_widget.h @@ -1,14 +1,15 @@ #pragma once -#include +#include +class QWidget; class QPushButton; class QImage; class QPixmap; class QPaintEvent; -class QSize; class QEvent; +class QSize; -class PDFPageWidget : public QWidget { +class PDFPageWidget : public QFrame { Q_OBJECT public: PDFPageWidget(QWidget* parent = 0); diff --git a/src/pdf_table_view.cpp b/src/pdf_table_view.cpp new file mode 100644 index 0000000..952f7ec --- /dev/null +++ b/src/pdf_table_view.cpp @@ -0,0 +1,36 @@ +#include +#include "pdf_table_view.h" +#include "pdf_page_widget.h" +#include "pdf_file_widget.h" + +PDFTableView::PDFTableView(QWidget* parent) : QFrame(parent) { + setFrameStyle(QFrame::StyledPanel | QFrame::Plain); + setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + + outerLayout = new QVBoxLayout(); + outerLayout->setContentsMargins(0, 0, 0, 0); + + /* Spacer item. */ + QWidget* spacer = new QWidget(); + spacer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + outerLayout->addWidget(spacer); + + setLayout(outerLayout); + + loadFile("/home/allanis/docs/loa.pdf"); +} + +void PDFTableView::loadFile(QString fileName) { + fileNames.append(fileName); + + Poppler::Document* doc = Poppler::Document::load(fileName); + files.append(doc); + + PDFFileWidget* fileWidget = new PDFFileWidget(); + fileWidget->setAncestor(this); + fileWidget->setDocument(doc, fileName); + + fileWidgets.append(fileWidget); + outerLayout->insertWidget(outerLayout->count()-1, fileWidget); +} + diff --git a/src/pdf_table_view.h b/src/pdf_table_view.h new file mode 100644 index 0000000..3e97e80 --- /dev/null +++ b/src/pdf_table_view.h @@ -0,0 +1,26 @@ +#pragma once +#include +#include + +class QVBoxLayout; +class QString; + +class PDFFileWidget; + +class PDFTableView : public QFrame { + Q_OBJECT +public: + PDFTableView(QWidget* parent = 0); + +protected: + +private: + QVBoxLayout* outerLayout; + + void loadFile(QString fileName); + + QVector files; + QVector fileNames; + QVector fileWidgets; +}; + diff --git a/src/table_view.cpp b/src/table_view.cpp deleted file mode 100644 index 4d1638b..0000000 --- a/src/table_view.cpp +++ /dev/null @@ -1,48 +0,0 @@ -#include -#include "table_view.h" -#include "pdf_page_widget.h" -#include "pdf_file_widget.h" - -TableView::TableView(QWidget* parent) : QWidget(parent) { - layout = new QVBoxLayout(); - - frame->setLayout(layout); - frame = new QFrame(); - frame->setLayout(layout); - frame->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored); - frame->adjustSize(); - - scrollArea = new QScrollArea(); - scrollArea->setWidget(frame); - - outerLayout = new QVBoxLayout(); - setLayout(outerLayout); - outerLayout->addWidget(scrollArea); - - 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 < 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 deleted file mode 100644 index aaa4a52..0000000 --- a/src/table_view.h +++ /dev/null @@ -1,37 +0,0 @@ -#pragma once -#include -#include -#include "pdf_page_widget.h" -#include "pdf_file_widget.h" - -class QPushButton; -class QScrollArea; -class QVBoxLayout; -class QSplitter; -class QFrame; -class QPaintEvent; -class QString; - -class PDFFileWidget; - -class TableView : public QWidget { - Q_OBJECT -public: - TableView(QWidget* parent = 0); - -protected: - -private: - QScrollArea* scrollArea; - QVBoxLayout* layout; - QFrame* frame; - QVBoxLayout* outerLayout; - - void paintEvent(QPaintEvent* event); - void loadFile(QString fileName); - - QVector files; - QVector fileNames; - QVector fileWidgets; -}; -