[Add] PDF Preview widget.
[Add] Window icon.
This commit is contained in:
parent
7f23b0ee2d
commit
27255eb6f4
@ -10,13 +10,16 @@ HEADERS += \
|
|||||||
../src/pdf_factory.h \
|
../src/pdf_factory.h \
|
||||||
../src/pdf_page_widget.h \
|
../src/pdf_page_widget.h \
|
||||||
../src/pdf_table_widget.h \
|
../src/pdf_table_widget.h \
|
||||||
../src/pdf_file_widget.h
|
../src/pdf_file_widget.h \
|
||||||
|
../src/pdf_preview_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/pdf_table_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
|
RESOURCES += hpdf.qrc
|
||||||
|
|
||||||
|
BIN
img/hpdf.png
BIN
img/hpdf.png
Binary file not shown.
Before Width: | Height: | Size: 3.9 KiB After Width: | Height: | Size: 2.4 KiB |
@ -2,6 +2,7 @@
|
|||||||
#include <QtGlobal>
|
#include <QtGlobal>
|
||||||
#include "pdf_factory.h"
|
#include "pdf_factory.h"
|
||||||
#include "pdf_table_widget.h"
|
#include "pdf_table_widget.h"
|
||||||
|
#include "pdf_preview_widget.h"
|
||||||
#include "pdf_page_widget.h"
|
#include "pdf_page_widget.h"
|
||||||
|
|
||||||
PDFFactory::PDFFactory(void) {
|
PDFFactory::PDFFactory(void) {
|
||||||
@ -34,10 +35,9 @@ void PDFFactory::createWidgets(void) {
|
|||||||
/* Create main area (table). */
|
/* Create main area (table). */
|
||||||
pdfTableView = new PDFTableWidget();
|
pdfTableView = new PDFTableWidget();
|
||||||
|
|
||||||
splitter = new QSplitter();
|
pdfPreview = new PDFPreviewWidget();
|
||||||
/* TODO: change pdfPreview widget. */
|
|
||||||
pdfPreview = new QWidget();
|
|
||||||
pdfPreview->setMinimumWidth(100);
|
pdfPreview->setMinimumWidth(100);
|
||||||
|
splitter = new QSplitter();
|
||||||
splitter->setOrientation(Qt::Horizontal);
|
splitter->setOrientation(Qt::Horizontal);
|
||||||
splitter->addWidget(pdfTableView);
|
splitter->addWidget(pdfTableView);
|
||||||
splitter->addWidget(pdfPreview);
|
splitter->addWidget(pdfPreview);
|
||||||
@ -48,6 +48,9 @@ void PDFFactory::createWidgets(void) {
|
|||||||
splitter->setStretchFactor(1, 0.5);
|
splitter->setStretchFactor(1, 0.5);
|
||||||
layout->addWidget(splitter);
|
layout->addWidget(splitter);
|
||||||
|
|
||||||
|
connect(pdfTableView, SIGNAL(pageClicked(QMouseEvent*,QImage)), pdfPreview,
|
||||||
|
SLOT(pageClicked(QMouseEvent*,QImage)));
|
||||||
|
|
||||||
setWindowIcon(QIcon(":/img/hpdf.png"));
|
setWindowIcon(QIcon(":/img/hpdf.png"));
|
||||||
setWindowTitle(tr("HPDF"));
|
setWindowTitle(tr("HPDF"));
|
||||||
setGeometry(0, 0, 1300, 650);
|
setGeometry(0, 0, 1300, 650);
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
#include <QMainWindow>
|
#include <QMainWindow>
|
||||||
#include "pdf_table_widget.h"
|
|
||||||
|
|
||||||
class QAction;
|
class QAction;
|
||||||
class QWidget;
|
class QWidget;
|
||||||
@ -8,6 +7,8 @@ class QTabWidget;
|
|||||||
class QScrollArea;
|
class QScrollArea;
|
||||||
class QSplitter;
|
class QSplitter;
|
||||||
class QToolBar;
|
class QToolBar;
|
||||||
|
class PDFTableWidget;
|
||||||
|
class PDFPreviewWidget;
|
||||||
|
|
||||||
class PDFFactory : public QMainWindow {
|
class PDFFactory : public QMainWindow {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
@ -39,11 +40,10 @@ private:
|
|||||||
|
|
||||||
QWidget* centralWidget;
|
QWidget* centralWidget;
|
||||||
|
|
||||||
QTabWidget* ribbon;
|
QTabWidget* ribbon;
|
||||||
QScrollArea* scrollArea;
|
QSplitter* splitter;
|
||||||
PDFTableWidget* pdfTableView;
|
PDFTableWidget* pdfTableView;
|
||||||
QSplitter* splitter;
|
PDFPreviewWidget* pdfPreview;
|
||||||
QWidget* pdfPreview;
|
|
||||||
|
|
||||||
QToolBar* fileToolBar;
|
QToolBar* fileToolBar;
|
||||||
QToolBar* editToolBar;
|
QToolBar* editToolBar;
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
#define CHILD_AREA_WIDTH 150
|
#define CHILD_AREA_WIDTH 150
|
||||||
#define CHILD_AREA_HEIGHT 150
|
#define CHILD_AREA_HEIGHT 150
|
||||||
|
|
||||||
FilesContainerWidget::FilesContainerWidget(QWidget* parent) {
|
PagesContainerWidget::PagesContainerWidget(QWidget* parent) {
|
||||||
setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
|
setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
|
||||||
setAcceptDrops(true);
|
setAcceptDrops(true);
|
||||||
mainLayout = new QHBoxLayout();
|
mainLayout = new QHBoxLayout();
|
||||||
@ -18,26 +18,26 @@ FilesContainerWidget::FilesContainerWidget(QWidget* parent) {
|
|||||||
setLayout(mainLayout);
|
setLayout(mainLayout);
|
||||||
}
|
}
|
||||||
|
|
||||||
int FilesContainerWidget::getPagesCount() const {
|
int PagesContainerWidget::getPagesCount() const {
|
||||||
return pageWidgets.size();
|
return pageWidgets.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
QSize FilesContainerWidget::sizeHint() const {
|
QSize PagesContainerWidget::sizeHint() const {
|
||||||
return QSize(CHILD_AREA_WIDTH*getPagesCount(), CHILD_AREA_HEIGHT + 20);
|
return QSize(CHILD_AREA_WIDTH*getPagesCount(), CHILD_AREA_HEIGHT + 20);
|
||||||
}
|
}
|
||||||
|
|
||||||
void FilesContainerWidget::addPageWidget(PDFPageWidget* pageWidget) {
|
void PagesContainerWidget::addPageWidget(PDFPageWidget* pageWidget) {
|
||||||
pageWidgets.append(pageWidget);
|
pageWidgets.append(pageWidget);
|
||||||
mainLayout->addWidget(pageWidget);
|
mainLayout->addWidget(pageWidget);
|
||||||
adjustSize();
|
adjustSize();
|
||||||
}
|
}
|
||||||
|
|
||||||
void FilesContainerWidget::dragEnterEvent(QDragEnterEvent* event) {
|
void PagesContainerWidget::dragEnterEvent(QDragEnterEvent* event) {
|
||||||
if(event->mimeData()->hasFormat("text/plain"))
|
if(event->mimeData()->hasFormat("text/plain"))
|
||||||
event->acceptProposedAction();
|
event->acceptProposedAction();
|
||||||
}
|
}
|
||||||
|
|
||||||
void FilesContainerWidget::dropEvent(QDropEvent* event) {
|
void PagesContainerWidget::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())]);
|
||||||
|
|
||||||
@ -47,7 +47,7 @@ void FilesContainerWidget::dropEvent(QDropEvent* event) {
|
|||||||
event->acceptProposedAction();
|
event->acceptProposedAction();
|
||||||
}
|
}
|
||||||
|
|
||||||
void FilesContainerWidget::mousePressEvent(QMouseEvent* event) {
|
void PagesContainerWidget::mousePressEvent(QMouseEvent* event) {
|
||||||
if(event->button() == Qt::LeftButton) {
|
if(event->button() == Qt::LeftButton) {
|
||||||
int draggedChild = (findPageContainingClickEvent(event->pos()));
|
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++)
|
for(int i = 0; i < getPagesCount(); i++)
|
||||||
if(pageWidgets[i]->geometry().contains(pos))
|
if(pageWidgets[i]->geometry().contains(pos))
|
||||||
return i;
|
return i;
|
||||||
@ -70,7 +70,7 @@ int FilesContainerWidget::findPageContainingClickEvent(QPoint pos) {
|
|||||||
return getPagesCount()-1;
|
return getPagesCount()-1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int FilesContainerWidget::findPageWidgetInLayout(PDFPageWidget* pageWidget) {
|
int PagesContainerWidget::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;
|
||||||
@ -93,9 +93,9 @@ PDFFileWidget::PDFFileWidget(QWidget* parent) {
|
|||||||
fileNameLabel = new QLabel();
|
fileNameLabel = new QLabel();
|
||||||
topLayout->addWidget(fileNameLabel, 0, 1);
|
topLayout->addWidget(fileNameLabel, 0, 1);
|
||||||
|
|
||||||
filesContainerWidget = new FilesContainerWidget();
|
pagesContainerWidget = new PagesContainerWidget();
|
||||||
scrollArea = new QScrollArea();
|
scrollArea = new QScrollArea();
|
||||||
scrollArea->setWidget(filesContainerWidget);
|
scrollArea->setWidget(pagesContainerWidget);
|
||||||
topLayout->addWidget(scrollArea, 1, 0, 1, 5);
|
topLayout->addWidget(scrollArea, 1, 0, 1, 5);
|
||||||
|
|
||||||
setLayout(topLayout);
|
setLayout(topLayout);
|
||||||
@ -127,8 +127,10 @@ void PDFFileWidget::setDocument(Poppler::Document* document, QString fileName) {
|
|||||||
|
|
||||||
PDFPageWidget* pageWidget = new PDFPageWidget();
|
PDFPageWidget* pageWidget = new PDFPageWidget();
|
||||||
pageWidget->setThumbnail(pageImage);
|
pageWidget->setThumbnail(pageImage);
|
||||||
|
connect(pageWidget, SIGNAL(pageClicked(QMouseEvent*,QImage)), this,
|
||||||
|
SIGNAL(pageClicked(QMouseEvent*,QImage)));
|
||||||
|
|
||||||
filesContainerWidget->addPageWidget(pageWidget);
|
pagesContainerWidget->addPageWidget(pageWidget);
|
||||||
}
|
}
|
||||||
fileNameLabel->setText(fileName);
|
fileNameLabel->setText(fileName);
|
||||||
}
|
}
|
||||||
|
@ -17,10 +17,10 @@ class QDropEvent;
|
|||||||
class QMouseEvent;
|
class QMouseEvent;
|
||||||
class PDFPageWidget;
|
class PDFPageWidget;
|
||||||
|
|
||||||
class FilesContainerWidget : public QWidget {
|
class PagesContainerWidget : public QWidget {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
FilesContainerWidget(QWidget* parent = 0);
|
PagesContainerWidget(QWidget* parent = 0);
|
||||||
QSize sizeHint() const;
|
QSize sizeHint() const;
|
||||||
|
|
||||||
void addPageWidget(PDFPageWidget* image);
|
void addPageWidget(PDFPageWidget* image);
|
||||||
@ -62,9 +62,12 @@ private:
|
|||||||
|
|
||||||
QLabel* fileNameLabel;
|
QLabel* fileNameLabel;
|
||||||
QPushButton* collapseButton;
|
QPushButton* collapseButton;
|
||||||
FilesContainerWidget* filesContainerWidget;
|
PagesContainerWidget* pagesContainerWidget;
|
||||||
QScrollArea* scrollArea;
|
QScrollArea* scrollArea;
|
||||||
QWidget* ancestor;
|
QWidget* ancestor;
|
||||||
bool collapsed;
|
bool collapsed;
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void pageClicked(QMouseEvent*, QImage);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -52,6 +52,10 @@ void PDFPageWidget::setThumbnail(QImage pageImage) {
|
|||||||
update();
|
update();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void PDFPageWidget::mousePressEvent(QMouseEvent* event) {
|
||||||
|
emit pageClicked(event, image);
|
||||||
|
}
|
||||||
|
|
||||||
void PDFPageWidget::leaveEvent(QEvent* event) {
|
void PDFPageWidget::leaveEvent(QEvent* event) {
|
||||||
btn1->hide();
|
btn1->hide();
|
||||||
btn2->hide();
|
btn2->hide();
|
||||||
|
@ -7,6 +7,7 @@ class QImage;
|
|||||||
class QPixmap;
|
class QPixmap;
|
||||||
class QPaintEvent;
|
class QPaintEvent;
|
||||||
class QEvent;
|
class QEvent;
|
||||||
|
class QMouseEvent;
|
||||||
class QSize;
|
class QSize;
|
||||||
|
|
||||||
class PDFPageWidget : public QFrame {
|
class PDFPageWidget : public QFrame {
|
||||||
@ -22,6 +23,7 @@ protected:
|
|||||||
void paintEvent(QPaintEvent* event);
|
void paintEvent(QPaintEvent* event);
|
||||||
void enterEvent(QEvent* event);
|
void enterEvent(QEvent* event);
|
||||||
void leaveEvent(QEvent* event);
|
void leaveEvent(QEvent* event);
|
||||||
|
void mousePressEvent(QMouseEvent* event);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/*QVector<QPushButton> buttons;*/
|
/*QVector<QPushButton> buttons;*/
|
||||||
@ -29,5 +31,8 @@ private:
|
|||||||
QImage image;
|
QImage image;
|
||||||
QPixmap pixmap;
|
QPixmap pixmap;
|
||||||
QPushButton* btn1, *btn2;
|
QPushButton* btn1, *btn2;
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void pageClicked(QMouseEvent* event, QImage pageImage);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
26
src/pdf_preview_widget.cpp
Normal file
26
src/pdf_preview_widget.cpp
Normal 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
23
src/pdf_preview_widget.h
Normal 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;
|
||||||
|
};
|
||||||
|
|
@ -39,6 +39,8 @@ void PDFTableWidget::loadFile(QString fileName) {
|
|||||||
PDFFileWidget* fileWidget = new PDFFileWidget();
|
PDFFileWidget* fileWidget = new PDFFileWidget();
|
||||||
fileWidget->setAncestor(this);
|
fileWidget->setAncestor(this);
|
||||||
fileWidget->setDocument(doc, fileName);
|
fileWidget->setDocument(doc, fileName);
|
||||||
|
connect(fileWidget, SIGNAL(pageClicked(QMouseEvent*,QImage)), this,
|
||||||
|
SIGNAL(pageClicked(QMouseEvent*,QImage)));
|
||||||
|
|
||||||
fileWidgets.append(fileWidget);
|
fileWidgets.append(fileWidget);
|
||||||
|
|
||||||
|
@ -2,10 +2,11 @@
|
|||||||
#include <QFrame>
|
#include <QFrame>
|
||||||
#include <poppler-qt5.h>
|
#include <poppler-qt5.h>
|
||||||
|
|
||||||
|
class QImage;
|
||||||
class QVBoxLayout;
|
class QVBoxLayout;
|
||||||
class QString;
|
class QString;
|
||||||
class QScrollArea;
|
class QScrollArea;
|
||||||
|
class QMouseEvent;
|
||||||
class PDFFileWidget;
|
class PDFFileWidget;
|
||||||
|
|
||||||
class PDFTableWidget : public QFrame {
|
class PDFTableWidget : public QFrame {
|
||||||
@ -26,5 +27,8 @@ private:
|
|||||||
QVector<Poppler::Document*> files;
|
QVector<Poppler::Document*> files;
|
||||||
QVector<QString> fileNames;
|
QVector<QString> fileNames;
|
||||||
QVector<PDFFileWidget*> fileWidgets;
|
QVector<PDFFileWidget*> fileWidgets;
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void pageClicked(QMouseEvent*, QImage);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user