[Change] Refactored a bunch of stuff.

This commit is contained in:
Rtch90 2014-12-17 10:48:17 +00:00
parent 97f0f9dee9
commit 9576e17f40
11 changed files with 119 additions and 160 deletions

View File

@ -9,13 +9,13 @@ LIBS += -L/usr/lib -lpoppler-qt5
HEADERS += \ HEADERS += \
../src/pdf_factory.h \ ../src/pdf_factory.h \
../src/pdf_page_widget.h \ ../src/pdf_page_widget.h \
../src/table_view.h \ ../src/pdf_table_view.h \
../src/pdf_file_widget.h ../src/pdf_file_widget.h
SOURCES += \ SOURCES += \
../src/main.cpp \ ../src/main.cpp \
../src/pdf_factory.cpp \ ../src/pdf_factory.cpp \
../src/pdf_page_widget.cpp \ ../src/pdf_page_widget.cpp \
../src/table_view.cpp \ ../src/pdf_table_view.cpp \
../src/pdf_file_widget.cpp ../src/pdf_file_widget.cpp
RESOURCES += hpdf.qrc RESOURCES += hpdf.qrc

View File

@ -1,7 +1,7 @@
#include <QtWidgets> #include <QtWidgets>
#include <QtGlobal> #include <QtGlobal>
#include "pdf_factory.h" #include "pdf_factory.h"
#include "table_view.h" #include "pdf_table_view.h"
#include "pdf_page_widget.h" #include "pdf_page_widget.h"
PDFFactory::PDFFactory(void) { PDFFactory::PDFFactory(void) {
@ -32,7 +32,7 @@ void PDFFactory::createWidgets(void) {
layout->addWidget(ribbon); layout->addWidget(ribbon);
/* Create main area (table). */ /* Create main area (table). */
pdfTableView = new TableView(); pdfTableView = new PDFTableView();
pdfTableView->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); pdfTableView->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
splitter = new QSplitter(); splitter = new QSplitter();
@ -43,8 +43,10 @@ void PDFFactory::createWidgets(void) {
splitter->addWidget(pdfTableView); splitter->addWidget(pdfTableView);
splitter->addWidget(pdfPreview); splitter->addWidget(pdfPreview);
QList<int> splitterWidgetSizes; QList<int> splitterWidgetSizes;
splitterWidgetSizes << 700 << 300; splitterWidgetSizes << 600 << 400;
splitter->setSizes(splitterWidgetSizes); splitter->setSizes(splitterWidgetSizes);
splitter->setStretchFactor(0, 1);
splitter->setStretchFactor(1, 0.5);
layout->addWidget(splitter); layout->addWidget(splitter);
setWindowIcon(QIcon(":/img/hpdf.png")); setWindowIcon(QIcon(":/img/hpdf.png"));

View File

@ -1,6 +1,6 @@
#pragma once #pragma once
#include <QMainWindow> #include <QMainWindow>
#include "table_view.h" #include "pdf_table_view.h"
class QAction; class QAction;
class QWidget; class QWidget;
@ -41,7 +41,7 @@ private:
QTabWidget* ribbon; QTabWidget* ribbon;
QScrollArea* scrollArea; QScrollArea* scrollArea;
TableView* pdfTableView; PDFTableView* pdfTableView;
QSplitter* splitter; QSplitter* splitter;
QWidget* pdfPreview; QWidget* pdfPreview;

View File

@ -10,7 +10,7 @@
#define CHILD_AREA_WIDTH 150 #define CHILD_AREA_WIDTH 150
#define CHILD_AREA_HEIGHT 150 #define CHILD_AREA_HEIGHT 150
FileWidget::FileWidget(QWidget* parent) { FilesContainerWidget::FilesContainerWidget(QWidget* parent) {
setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
setAcceptDrops(true); setAcceptDrops(true);
mainLayout = new QHBoxLayout(); mainLayout = new QHBoxLayout();
@ -18,31 +18,26 @@ FileWidget::FileWidget(QWidget* parent) {
setLayout(mainLayout); setLayout(mainLayout);
} }
int FileWidget::getPagesCount() const { int FilesContainerWidget::getPagesCount() const {
return pageWidgets.size(); return pageWidgets.size();
} }
QSize FileWidget::sizeHint() const { QSize FilesContainerWidget::sizeHint() const {
return QSize(CHILD_AREA_WIDTH*getPagesCount(), CHILD_AREA_HEIGHT + 20); return QSize(CHILD_AREA_WIDTH*getPagesCount(), CHILD_AREA_HEIGHT + 20);
} }
void FileWidget::addPageWidget(QImage* image) { void FilesContainerWidget::addPageWidget(PDFPageWidget* pageWidget) {
PDFPageWidget* newPageWidget; pageWidgets.append(pageWidget);
newPageWidget = new PDFPageWidget(); mainLayout->addWidget(pageWidget);
newPageWidget->setThumbnail(image);
pageWidgets.push_back(newPageWidget);
mainLayout->addWidget(newPageWidget);
adjustSize(); adjustSize();
} }
void FileWidget::dragEnterEvent(QDragEnterEvent* event) { void FilesContainerWidget::dragEnterEvent(QDragEnterEvent* event) {
if(event->mimeData()->hasFormat("text/plain")) if(event->mimeData()->hasFormat("text/plain"))
event->acceptProposedAction(); event->acceptProposedAction();
} }
void FileWidget::dropEvent(QDropEvent* event) { void FilesContainerWidget::dropEvent(QDropEvent* event) {
int from = event->mimeData()->text().toInt(); int from = event->mimeData()->text().toInt();
int to = findPageWidgetInLayout(pageWidgets[findPageContainingClickEvent(event->pos())]); int to = findPageWidgetInLayout(pageWidgets[findPageContainingClickEvent(event->pos())]);
@ -52,7 +47,7 @@ void FileWidget::dropEvent(QDropEvent* event) {
event->acceptProposedAction(); event->acceptProposedAction();
} }
void FileWidget::mousePressEvent(QMouseEvent* event) { void FilesContainerWidget::mousePressEvent(QMouseEvent* event) {
if(event->button() == Qt::LeftButton) { if(event->button() == Qt::LeftButton) {
int draggedChild = (findPageContainingClickEvent(event->pos())); 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++) for(int i = 0; i < getPagesCount(); i++)
if(pageWidgets[i]->geometry().contains(pos)) if(pageWidgets[i]->geometry().contains(pos))
return i; return i;
@ -75,7 +70,7 @@ int FileWidget::findPageContainingClickEvent(QPoint pos) {
return getPagesCount()-1; return getPagesCount()-1;
} }
int FileWidget::findPageWidgetInLayout(PDFPageWidget* pageWidget) { int FilesContainerWidget::findPageWidgetInLayout(PDFPageWidget* pageWidget) {
for(int i = 0; i < getPagesCount(); i++) for(int i = 0; i < getPagesCount(); i++)
if(mainLayout->itemAt(i)->widget() == pageWidget) if(mainLayout->itemAt(i)->widget() == pageWidget)
return i; return i;
@ -88,66 +83,52 @@ PDFFileWidget::PDFFileWidget(QWidget* parent) {
topLayout = new QGridLayout(); 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 = new QPushButton(tr("X"));
collapseButton->setMinimumSize(QSize(COLLAPSE_BUTTON_WIDTH, COLLAPSE_BUTTON_HEIGHT)); collapseButton->setMinimumSize(QSize(COLLAPSE_BUTTON_WIDTH, COLLAPSE_BUTTON_HEIGHT));
collapseButton->setMaximumSize(QSize(COLLAPSE_BUTTON_WIDTH, COLLAPSE_BUTTON_HEIGHT)); collapseButton->setMaximumSize(QSize(COLLAPSE_BUTTON_WIDTH, COLLAPSE_BUTTON_HEIGHT));
connect(collapseButton, SIGNAL(released()), this, SLOT(collapsedButtonClick())); connect(collapseButton, SIGNAL(released()), this, SLOT(collapsedButtonClick()));
topLayout->addWidget(collapseButton, 0, 0); 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); topLayout->addWidget(scrollArea, 1, 0, 1, 5);
setLayout(topLayout); setLayout(topLayout);
setCollapsed(false); 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) { void PDFFileWidget::setCollapsed(bool state) {
collapsed = state;
if(state == true) { if(state == true) {
collapsed = true;
setFixedHeight(collapseButton->height() + 80);
scrollArea->hide(); scrollArea->hide();
} else { } else {
collapsed = false;
setFixedHeight(collapseButton->height() + fileWidget->height() + 50);
scrollArea->show(); scrollArea->show();
} }
adjustSize();
} }
void PDFFileWidget::collapsedButtonClick(void) { void PDFFileWidget::collapsedButtonClick(void) {
if(collapsed == true) setCollapsed(!collapsed);
setCollapsed(false);
else
setCollapsed(true);
} }
void PDFFileWidget::setDocument(Poppler::Document* document, QString fileName) { void PDFFileWidget::setDocument(Poppler::Document* document, QString fileName) {
int numPages = document->numPages(); int numPages = document->numPages();
for(int i; i < numPages; i++) { for(int i = 0; i < numPages; i++) {
Poppler::Page* pdfPage = document->page(i); Poppler::Page* pdfPage = document->page(i);
QImage* image = new QImage();
*image = pdfPage->renderToImage(144, 144);
fileWidget->addPageWidget(image); QImage* pageImage = new QImage();
*pageImage = pdfPage->renderToImage(144, 144);
PDFPageWidget* pageWidget = new PDFPageWidget();
pageWidget->setThumbnail(pageImage);
filesContainerWidget->addPageWidget(pageWidget);
} }
} }

View File

@ -1,6 +1,5 @@
#pragma once #pragma once
#include <QWidget> #include <QWidget>
#include <vector>
#include <poppler-qt5.h> #include <poppler-qt5.h>
#include "pdf_page_widget.h" #include "pdf_page_widget.h"
@ -18,21 +17,20 @@ class QDropEvent;
class QMouseEvent; class QMouseEvent;
class PDFPageWidget; class PDFPageWidget;
class FileWidget : public QWidget { class FilesContainerWidget : public QWidget {
Q_OBJECT Q_OBJECT
public: public:
FileWidget(QWidget* parent = 0); FilesContainerWidget(QWidget* parent = 0);
QSize sizeHint() const; QSize sizeHint() const;
void addPageWidget(QImage* image); void addPageWidget(PDFPageWidget* image);
protected: protected:
void dragEnterEvent(QDragEnterEvent* event); void dragEnterEvent(QDragEnterEvent* event);
void dropEvent(QDropEvent* event); void dropEvent(QDropEvent* event);
void mousePressEvent(QMouseEvent* event); void mousePressEvent(QMouseEvent* event);
private: private:
std::vector<PDFPageWidget*> pageWidgets; QVector<PDFPageWidget*> pageWidgets;
QHBoxLayout* mainLayout; QHBoxLayout* mainLayout;
int findPageContainingClickEvent(QPoint pos); int findPageContainingClickEvent(QPoint pos);
@ -46,7 +44,6 @@ class PDFFileWidget : public QWidget {
public: public:
PDFFileWidget(QWidget* parent = 0); PDFFileWidget(QWidget* parent = 0);
/*QSize sizeHint() const;*/
void setAncestor(QWidget* ancestor) { this->ancestor = ancestor; } void setAncestor(QWidget* ancestor) { this->ancestor = ancestor; }
void setDocument(Poppler::Document* document, QString fileName); void setDocument(Poppler::Document* document, QString fileName);
@ -65,8 +62,8 @@ private:
QLabel* fileNameLabel; QLabel* fileNameLabel;
QPushButton* collapseButton; QPushButton* collapseButton;
FilesContainerWidget* filesContainerWidget;
QScrollArea* scrollArea; QScrollArea* scrollArea;
FileWidget* fileWidget;
QWidget* ancestor; QWidget* ancestor;
bool collapsed; bool collapsed;
}; };

View File

@ -3,7 +3,7 @@
#include "pdf_page_widget.h" #include "pdf_page_widget.h"
PDFPageWidget::PDFPageWidget(QWidget* parent) : PDFPageWidget::PDFPageWidget(QWidget* parent) :
QWidget(parent) { QFrame(parent) {
/* Resize widget. */ /* Resize widget. */
this->resize(150, 150); this->resize(150, 150);
@ -13,7 +13,6 @@ PDFPageWidget::PDFPageWidget(QWidget* parent) :
this->setMouseTracking(true); this->setMouseTracking(true);
this->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); this->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
QVBoxLayout* vbox = new QVBoxLayout(this);
QHBoxLayout* hbox = new QHBoxLayout(); QHBoxLayout* hbox = new QHBoxLayout();
btn1 = new QPushButton("", this); btn1 = new QPushButton("", this);
@ -33,11 +32,13 @@ PDFPageWidget::PDFPageWidget(QWidget* parent) :
hbox->addWidget(btn1, 1, Qt::AlignRight); hbox->addWidget(btn1, 1, Qt::AlignRight);
hbox->addWidget(btn2, 0, Qt::AlignLeft); hbox->addWidget(btn2, 0, Qt::AlignLeft);
QVBoxLayout* vbox = new QVBoxLayout();
vbox->addStretch(1); vbox->addStretch(1);
vbox->addLayout(hbox); vbox->addLayout(hbox);
this->setLayout(vbox); this->setLayout(vbox);
vbox->setContentsMargins(0, 0, 0, 0);
this->setThumbnail(new QImage("../img/img.jpg")); this->setThumbnail(new QImage("../img/img.jpg"));
} }

View File

@ -1,14 +1,15 @@
#pragma once #pragma once
#include <QWidget> #include <QFrame>
class QWidget;
class QPushButton; class QPushButton;
class QImage; class QImage;
class QPixmap; class QPixmap;
class QPaintEvent; class QPaintEvent;
class QSize;
class QEvent; class QEvent;
class QSize;
class PDFPageWidget : public QWidget { class PDFPageWidget : public QFrame {
Q_OBJECT Q_OBJECT
public: public:
PDFPageWidget(QWidget* parent = 0); PDFPageWidget(QWidget* parent = 0);

36
src/pdf_table_view.cpp Normal file
View File

@ -0,0 +1,36 @@
#include <QtWidgets>
#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);
}

26
src/pdf_table_view.h Normal file
View File

@ -0,0 +1,26 @@
#pragma once
#include <QFrame>
#include <poppler-qt5.h>
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<Poppler::Document*> files;
QVector<QString> fileNames;
QVector<PDFFileWidget*> fileWidgets;
};

View File

@ -1,48 +0,0 @@
#include <QtWidgets>
#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());
}

View File

@ -1,37 +0,0 @@
#pragma once
#include <QWidget>
#include <poppler-qt5.h>
#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<Poppler::Document*> files;
QVector<QString> fileNames;
QVector<PDFFileWidget*> fileWidgets;
};