[Add] PDF Preview widget.

[Add] Window icon.
This commit is contained in:
Rtch90 2014-12-17 13:03:13 +00:00
parent 7f23b0ee2d
commit 27255eb6f4
12 changed files with 102 additions and 27 deletions

View File

@ -10,13 +10,16 @@ HEADERS += \
../src/pdf_factory.h \
../src/pdf_page_widget.h \
../src/pdf_table_widget.h \
../src/pdf_file_widget.h
../src/pdf_file_widget.h \
../src/pdf_preview_widget.h
SOURCES += \
../src/main.cpp \
../src/pdf_factory.cpp \
../src/pdf_page_widget.cpp \
../src/pdf_table_widget.cpp \
../src/pdf_file_widget.cpp
../src/pdf_file_widget.cpp \
../src/pdf_preview_widget.cpp
RESOURCES += hpdf.qrc

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.9 KiB

After

Width:  |  Height:  |  Size: 2.4 KiB

View File

@ -2,6 +2,7 @@
#include <QtGlobal>
#include "pdf_factory.h"
#include "pdf_table_widget.h"
#include "pdf_preview_widget.h"
#include "pdf_page_widget.h"
PDFFactory::PDFFactory(void) {
@ -34,10 +35,9 @@ void PDFFactory::createWidgets(void) {
/* Create main area (table). */
pdfTableView = new PDFTableWidget();
splitter = new QSplitter();
/* TODO: change pdfPreview widget. */
pdfPreview = new QWidget();
pdfPreview = new PDFPreviewWidget();
pdfPreview->setMinimumWidth(100);
splitter = new QSplitter();
splitter->setOrientation(Qt::Horizontal);
splitter->addWidget(pdfTableView);
splitter->addWidget(pdfPreview);
@ -48,6 +48,9 @@ void PDFFactory::createWidgets(void) {
splitter->setStretchFactor(1, 0.5);
layout->addWidget(splitter);
connect(pdfTableView, SIGNAL(pageClicked(QMouseEvent*,QImage)), pdfPreview,
SLOT(pageClicked(QMouseEvent*,QImage)));
setWindowIcon(QIcon(":/img/hpdf.png"));
setWindowTitle(tr("HPDF"));
setGeometry(0, 0, 1300, 650);

View File

@ -1,6 +1,5 @@
#pragma once
#include <QMainWindow>
#include "pdf_table_widget.h"
class QAction;
class QWidget;
@ -8,6 +7,8 @@ class QTabWidget;
class QScrollArea;
class QSplitter;
class QToolBar;
class PDFTableWidget;
class PDFPreviewWidget;
class PDFFactory : public QMainWindow {
Q_OBJECT
@ -39,11 +40,10 @@ private:
QWidget* centralWidget;
QTabWidget* ribbon;
QScrollArea* scrollArea;
PDFTableWidget* pdfTableView;
QSplitter* splitter;
QWidget* pdfPreview;
QTabWidget* ribbon;
QSplitter* splitter;
PDFTableWidget* pdfTableView;
PDFPreviewWidget* pdfPreview;
QToolBar* fileToolBar;
QToolBar* editToolBar;

View File

@ -10,7 +10,7 @@
#define CHILD_AREA_WIDTH 150
#define CHILD_AREA_HEIGHT 150
FilesContainerWidget::FilesContainerWidget(QWidget* parent) {
PagesContainerWidget::PagesContainerWidget(QWidget* parent) {
setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
setAcceptDrops(true);
mainLayout = new QHBoxLayout();
@ -18,26 +18,26 @@ FilesContainerWidget::FilesContainerWidget(QWidget* parent) {
setLayout(mainLayout);
}
int FilesContainerWidget::getPagesCount() const {
int PagesContainerWidget::getPagesCount() const {
return pageWidgets.size();
}
QSize FilesContainerWidget::sizeHint() const {
QSize PagesContainerWidget::sizeHint() const {
return QSize(CHILD_AREA_WIDTH*getPagesCount(), CHILD_AREA_HEIGHT + 20);
}
void FilesContainerWidget::addPageWidget(PDFPageWidget* pageWidget) {
void PagesContainerWidget::addPageWidget(PDFPageWidget* pageWidget) {
pageWidgets.append(pageWidget);
mainLayout->addWidget(pageWidget);
adjustSize();
}
void FilesContainerWidget::dragEnterEvent(QDragEnterEvent* event) {
void PagesContainerWidget::dragEnterEvent(QDragEnterEvent* event) {
if(event->mimeData()->hasFormat("text/plain"))
event->acceptProposedAction();
}
void FilesContainerWidget::dropEvent(QDropEvent* event) {
void PagesContainerWidget::dropEvent(QDropEvent* event) {
int from = event->mimeData()->text().toInt();
int to = findPageWidgetInLayout(pageWidgets[findPageContainingClickEvent(event->pos())]);
@ -47,7 +47,7 @@ void FilesContainerWidget::dropEvent(QDropEvent* event) {
event->acceptProposedAction();
}
void FilesContainerWidget::mousePressEvent(QMouseEvent* event) {
void PagesContainerWidget::mousePressEvent(QMouseEvent* event) {
if(event->button() == Qt::LeftButton) {
int draggedChild = (findPageContainingClickEvent(event->pos()));
@ -62,7 +62,7 @@ void FilesContainerWidget::mousePressEvent(QMouseEvent* event) {
}
}
int FilesContainerWidget::findPageContainingClickEvent(QPoint pos) {
int PagesContainerWidget::findPageContainingClickEvent(QPoint pos) {
for(int i = 0; i < getPagesCount(); i++)
if(pageWidgets[i]->geometry().contains(pos))
return i;
@ -70,7 +70,7 @@ int FilesContainerWidget::findPageContainingClickEvent(QPoint pos) {
return getPagesCount()-1;
}
int FilesContainerWidget::findPageWidgetInLayout(PDFPageWidget* pageWidget) {
int PagesContainerWidget::findPageWidgetInLayout(PDFPageWidget* pageWidget) {
for(int i = 0; i < getPagesCount(); i++)
if(mainLayout->itemAt(i)->widget() == pageWidget)
return i;
@ -93,9 +93,9 @@ PDFFileWidget::PDFFileWidget(QWidget* parent) {
fileNameLabel = new QLabel();
topLayout->addWidget(fileNameLabel, 0, 1);
filesContainerWidget = new FilesContainerWidget();
pagesContainerWidget = new PagesContainerWidget();
scrollArea = new QScrollArea();
scrollArea->setWidget(filesContainerWidget);
scrollArea->setWidget(pagesContainerWidget);
topLayout->addWidget(scrollArea, 1, 0, 1, 5);
setLayout(topLayout);
@ -127,8 +127,10 @@ void PDFFileWidget::setDocument(Poppler::Document* document, QString fileName) {
PDFPageWidget* pageWidget = new PDFPageWidget();
pageWidget->setThumbnail(pageImage);
connect(pageWidget, SIGNAL(pageClicked(QMouseEvent*,QImage)), this,
SIGNAL(pageClicked(QMouseEvent*,QImage)));
filesContainerWidget->addPageWidget(pageWidget);
pagesContainerWidget->addPageWidget(pageWidget);
}
fileNameLabel->setText(fileName);
}

View File

@ -17,10 +17,10 @@ class QDropEvent;
class QMouseEvent;
class PDFPageWidget;
class FilesContainerWidget : public QWidget {
class PagesContainerWidget : public QWidget {
Q_OBJECT
public:
FilesContainerWidget(QWidget* parent = 0);
PagesContainerWidget(QWidget* parent = 0);
QSize sizeHint() const;
void addPageWidget(PDFPageWidget* image);
@ -62,9 +62,12 @@ private:
QLabel* fileNameLabel;
QPushButton* collapseButton;
FilesContainerWidget* filesContainerWidget;
PagesContainerWidget* pagesContainerWidget;
QScrollArea* scrollArea;
QWidget* ancestor;
bool collapsed;
signals:
void pageClicked(QMouseEvent*, QImage);
};

View File

@ -52,6 +52,10 @@ void PDFPageWidget::setThumbnail(QImage pageImage) {
update();
}
void PDFPageWidget::mousePressEvent(QMouseEvent* event) {
emit pageClicked(event, image);
}
void PDFPageWidget::leaveEvent(QEvent* event) {
btn1->hide();
btn2->hide();

View File

@ -7,6 +7,7 @@ class QImage;
class QPixmap;
class QPaintEvent;
class QEvent;
class QMouseEvent;
class QSize;
class PDFPageWidget : public QFrame {
@ -22,6 +23,7 @@ protected:
void paintEvent(QPaintEvent* event);
void enterEvent(QEvent* event);
void leaveEvent(QEvent* event);
void mousePressEvent(QMouseEvent* event);
private:
/*QVector<QPushButton> buttons;*/
@ -29,5 +31,8 @@ private:
QImage image;
QPixmap pixmap;
QPushButton* btn1, *btn2;
signals:
void pageClicked(QMouseEvent* event, QImage pageImage);
};

View File

@ -0,0 +1,26 @@
#include <QtWidgets>
#include "pdf_preview_widget.h"
PDFPreviewWidget::PDFPreviewWidget(QWidget* parent) : QWidget(parent) {
}
void PDFPreviewWidget::setImage(QImage image) {
previewImage = image;
update();
}
void PDFPreviewWidget::pageClicked(QMouseEvent* mouseEvent, QImage image) {
setImage(image);
}
void PDFPreviewWidget::paintEvent(QPaintEvent* event) {
QPainter painter(this);
QPixmap pixmap = QPixmap::fromImage(previewImage);
pixmap = pixmap.scaled(size(), Qt::KeepAspectRatio);
painter.drawPixmap(QRect((size().width() - pixmap.width()) / 2,
(size().height() - pixmap.height()) / 2,
pixmap.width(), pixmap.height()), pixmap);
}

23
src/pdf_preview_widget.h Normal file
View File

@ -0,0 +1,23 @@
#pragma once
#include <QWidget>
class QImage;
class QPaintEvent;
class QMouseEvent;
class PDFPreviewWidget : public QWidget {
Q_OBJECT
public:
explicit PDFPreviewWidget(QWidget* parent = 0);
void setImage(QImage image);
public slots:
void pageClicked(QMouseEvent* mouseEvent, QImage image);
protected:
void paintEvent(QPaintEvent* event);
private:
QImage previewImage;
};

View File

@ -39,6 +39,8 @@ void PDFTableWidget::loadFile(QString fileName) {
PDFFileWidget* fileWidget = new PDFFileWidget();
fileWidget->setAncestor(this);
fileWidget->setDocument(doc, fileName);
connect(fileWidget, SIGNAL(pageClicked(QMouseEvent*,QImage)), this,
SIGNAL(pageClicked(QMouseEvent*,QImage)));
fileWidgets.append(fileWidget);

View File

@ -2,10 +2,11 @@
#include <QFrame>
#include <poppler-qt5.h>
class QImage;
class QVBoxLayout;
class QString;
class QScrollArea;
class QMouseEvent;
class PDFFileWidget;
class PDFTableWidget : public QFrame {
@ -26,5 +27,8 @@ private:
QVector<Poppler::Document*> files;
QVector<QString> fileNames;
QVector<PDFFileWidget*> fileWidgets;
signals:
void pageClicked(QMouseEvent*, QImage);
};