[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 += \
../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

View File

@ -1,7 +1,7 @@
#include <QtWidgets>
#include <QtGlobal>
#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<int> 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"));

View File

@ -1,6 +1,6 @@
#pragma once
#include <QMainWindow>
#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;

View File

@ -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);
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
#include <QWidget>
#include <vector>
#include <poppler-qt5.h>
#include "pdf_page_widget.h"
@ -18,21 +17,20 @@ 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<PDFPageWidget*> pageWidgets;
QVector<PDFPageWidget*> pageWidgets;
QHBoxLayout* mainLayout;
int findPageContainingClickEvent(QPoint pos);
@ -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);
@ -65,8 +62,8 @@ private:
QLabel* fileNameLabel;
QPushButton* collapseButton;
FilesContainerWidget* filesContainerWidget;
QScrollArea* scrollArea;
FileWidget* fileWidget;
QWidget* ancestor;
bool collapsed;
};

View File

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

View File

@ -1,14 +1,15 @@
#pragma once
#include <QWidget>
#include <QFrame>
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);

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;
};