[Add] Added Drag&Drop. Pages are identified by their path.
This commit is contained in:
parent
1ece30f562
commit
671e75bf52
@ -14,7 +14,7 @@
|
|||||||
|
|
||||||
PagesContainerWidget::PagesContainerWidget(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();
|
||||||
|
|
||||||
setLayout(mainLayout);
|
setLayout(mainLayout);
|
||||||
@ -35,17 +35,10 @@ void PagesContainerWidget::addPageWidget(PDFPageWidget* pageWidget) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void PagesContainerWidget::dragEnterEvent(QDragEnterEvent* event) {
|
void PagesContainerWidget::dragEnterEvent(QDragEnterEvent* event) {
|
||||||
if(event->mimeData()->hasFormat("text/plain"))
|
|
||||||
event->acceptProposedAction();
|
event->acceptProposedAction();
|
||||||
}
|
}
|
||||||
|
|
||||||
void PagesContainerWidget::dropEvent(QDropEvent* event) {
|
void PagesContainerWidget::dropEvent(QDropEvent* event) {
|
||||||
int from = event->mimeData()->text().toInt();
|
|
||||||
int to = findPageWidgetInLayout(pageWidgets[findPageContainingClickEvent(event->pos())]);
|
|
||||||
|
|
||||||
mainLayout->removeWidget(pageWidgets[from]);
|
|
||||||
mainLayout->insertWidget(to, pageWidgets[from]);
|
|
||||||
|
|
||||||
event->acceptProposedAction();
|
event->acceptProposedAction();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -142,14 +135,11 @@ void PDFFileWidget::setDocument(Poppler::Document* document, QString fileName) {
|
|||||||
|
|
||||||
PDFPageWidget* pageWidget = new PDFPageWidget();
|
PDFPageWidget* pageWidget = new PDFPageWidget();
|
||||||
|
|
||||||
|
pageWidget->setAncestor(ancestor);
|
||||||
|
pageWidget->setFather(this);
|
||||||
pageWidget->setPopplerPage(doc->page(i));
|
pageWidget->setPopplerPage(doc->page(i));
|
||||||
tgen.render(pageWidget, pdfPage);
|
tgen.render(pageWidget, pdfPage);
|
||||||
|
|
||||||
connect(pageWidget, SIGNAL(pageClicked(QMouseEvent*,QImage)), this,
|
|
||||||
SIGNAL(pageClicked(QMouseEvent*,QImage)));
|
|
||||||
connect(pageWidget, SIGNAL(previewUpdate(Poppler::Page*)), this,
|
|
||||||
SIGNAL(previewUpdate(Poppler::Page*)));
|
|
||||||
|
|
||||||
pagesContainerWidget->addPageWidget(pageWidget);
|
pagesContainerWidget->addPageWidget(pageWidget);
|
||||||
/* Process event. */
|
/* Process event. */
|
||||||
/*qApp->processEvents();*/
|
/*qApp->processEvents();*/
|
||||||
@ -158,3 +148,17 @@ void PDFFileWidget::setDocument(Poppler::Document* document, QString fileName) {
|
|||||||
fileNameLabel->setText(fileName);
|
fileNameLabel->setText(fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int PDFFileWidget::removeChild(PDFPageWidget* child) {
|
||||||
|
int pos = pagesContainerWidget->pageWidgets.indexOf(child);
|
||||||
|
pagesContainerWidget->pageWidgets.remove(pos);
|
||||||
|
pagesContainerWidget->mainLayout->removeItem(pagesContainerWidget->mainLayout->itemAt(pos));
|
||||||
|
|
||||||
|
return pos;
|
||||||
|
}
|
||||||
|
|
||||||
|
void PDFFileWidget::insertChildAt(PDFPageWidget* child, int pos) {
|
||||||
|
child->setFather(this);
|
||||||
|
pagesContainerWidget->mainLayout->insertWidget(pos, child);
|
||||||
|
pagesContainerWidget->pageWidgets.insert(pos, child);
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -24,6 +24,8 @@ class PagesContainerWidget : public QWidget {
|
|||||||
public:
|
public:
|
||||||
PagesContainerWidget(QWidget* parent = 0);
|
PagesContainerWidget(QWidget* parent = 0);
|
||||||
QSize sizeHint() const;
|
QSize sizeHint() const;
|
||||||
|
QVector<PDFPageWidget*> pageWidgets;
|
||||||
|
QHBoxLayout* mainLayout;
|
||||||
|
|
||||||
void addPageWidget(PDFPageWidget* image);
|
void addPageWidget(PDFPageWidget* image);
|
||||||
|
|
||||||
@ -31,10 +33,8 @@ 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:
|
|
||||||
QVector<PDFPageWidget*> pageWidgets;
|
|
||||||
QHBoxLayout* mainLayout;
|
|
||||||
|
|
||||||
|
private:
|
||||||
int findPageContainingClickEvent(QPoint pos);
|
int findPageContainingClickEvent(QPoint pos);
|
||||||
int findPageWidgetInLayout(PDFPageWidget* pageWidgets);
|
int findPageWidgetInLayout(PDFPageWidget* pageWidgets);
|
||||||
int getPagesCount() const;
|
int getPagesCount() const;
|
||||||
@ -49,6 +49,8 @@ public:
|
|||||||
|
|
||||||
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);
|
||||||
|
int removeChild(PDFPageWidget* child);
|
||||||
|
void insertChildAt(PDFPageWidget* child, int pos);
|
||||||
|
|
||||||
bool isCollapsed(void) { return collapsed; }
|
bool isCollapsed(void) { return collapsed; }
|
||||||
void setCollapsed(bool collapsed);
|
void setCollapsed(bool collapsed);
|
||||||
|
@ -1,15 +1,17 @@
|
|||||||
#include <QtGlobal>
|
#include <QtGlobal>
|
||||||
#include <QtWidgets>
|
#include <QtWidgets>
|
||||||
#include "pdf_page_widget.h"
|
#include "pdf_page_widget.h"
|
||||||
|
#include "pdf_table_widget.h"
|
||||||
|
|
||||||
PDFPageWidget::PDFPageWidget(QWidget* parent) :
|
PDFPageWidget::PDFPageWidget(QWidget* parent) :
|
||||||
QFrame(parent) {
|
QFrame(parent) {
|
||||||
|
|
||||||
|
setAcceptDrops(true);
|
||||||
|
|
||||||
/* Resize widget. */
|
/* Resize widget. */
|
||||||
this->resize(150, 150);
|
this->resize(150, 150);
|
||||||
this->setMinimumSize(150, 150);
|
this->setMinimumSize(150, 150);
|
||||||
this->setMinimumSize(150, 150);
|
this->setMinimumSize(150, 150);
|
||||||
this->setAutoFillBackground(true);
|
|
||||||
|
|
||||||
this->setMouseTracking(true);
|
this->setMouseTracking(true);
|
||||||
this->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
|
this->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
|
||||||
@ -40,6 +42,31 @@ PDFPageWidget::PDFPageWidget(QWidget* parent) :
|
|||||||
this->setLayout(vbox);
|
this->setLayout(vbox);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void PDFPageWidget::dragEnterEvent(QDragEnterEvent* event) {
|
||||||
|
event->acceptProposedAction();
|
||||||
|
}
|
||||||
|
|
||||||
|
void PDFPageWidget::dropEvent(QDropEvent* event) {
|
||||||
|
emit droppedPage(event->mimeData()->text(), path);
|
||||||
|
event->acceptProposedAction();
|
||||||
|
}
|
||||||
|
|
||||||
|
void PDFPageWidget::setAncestor(QWidget* ancestor) {
|
||||||
|
this->ancestor = ancestor;
|
||||||
|
((PDFTableWidget*)ancestor)->registerPage(this);
|
||||||
|
connect(this, SIGNAL(pageClicked(QMouseEvent*,QString)), ancestor,
|
||||||
|
SLOT(pageClicked(QMouseEvent*,QString)));
|
||||||
|
|
||||||
|
connect(this, SIGNAL(previewUpdate(Poppler::Page*)), ancestor,
|
||||||
|
SIGNAL(previewUpdate(Poppler::Page*)));
|
||||||
|
connect(this, SIGNAL(droppedPage(QString, QString)), ancestor,
|
||||||
|
SLOT(droppedPage(QString,QString)));
|
||||||
|
}
|
||||||
|
|
||||||
|
void PDFPageWidget::setFather(QWidget* father) {
|
||||||
|
this->father = father;
|
||||||
|
}
|
||||||
|
|
||||||
void PDFPageWidget::setButton(QPushButton* btn) {
|
void PDFPageWidget::setButton(QPushButton* btn) {
|
||||||
button = btn;
|
button = btn;
|
||||||
update();
|
update();
|
||||||
@ -52,44 +79,29 @@ void PDFPageWidget::setPopplerPage(Poppler::Page* pp) {
|
|||||||
void PDFPageWidget::setThumbnail(QImage pageImage) {
|
void PDFPageWidget::setThumbnail(QImage pageImage) {
|
||||||
image = pageImage;
|
image = pageImage;
|
||||||
pixmap = QPixmap::fromImage(image);
|
pixmap = QPixmap::fromImage(image);
|
||||||
pixmap = pixmap.scaled(size() - QSize(6, 6), Qt::KeepAspectRatio);
|
pixmap = pixmap.scaled(size(), Qt::KeepAspectRatio);
|
||||||
|
|
||||||
update();
|
update();
|
||||||
}
|
}
|
||||||
|
|
||||||
void PDFPageWidget::mousePressEvent(QMouseEvent* event) {
|
void PDFPageWidget::mousePressEvent(QMouseEvent* event) {
|
||||||
if(pPage != NULL) {
|
if(pPage != NULL) {
|
||||||
emit pageClicked(event, image);
|
emit pageClicked(event, path);
|
||||||
emit previewUpdate(pPage);
|
emit previewUpdate(pPage);
|
||||||
|
|
||||||
selected = !selected;
|
|
||||||
update();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void PDFPageWidget::leaveEvent(QEvent* event) {
|
void PDFPageWidget::leaveEvent(QEvent* event) {
|
||||||
btn1->hide();
|
btn1->hide();
|
||||||
btn2->hide();
|
btn2->hide();
|
||||||
|
|
||||||
this->setFrameStyle(QFrame::Plain);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void PDFPageWidget::enterEvent(QEvent* event) {
|
void PDFPageWidget::enterEvent(QEvent* event) {
|
||||||
btn1->show();
|
btn1->show();
|
||||||
btn2->show();
|
btn2->show();
|
||||||
|
|
||||||
this->setFrameStyle(QFrame::StyledPanel | QFrame::Raised);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void PDFPageWidget::paintEvent(QPaintEvent* event) {
|
void PDFPageWidget::paintEvent(QPaintEvent* event) {
|
||||||
QPalette palette = this->palette();
|
|
||||||
if(selected)
|
|
||||||
palette.setColor(backgroundRole(), palette.color(QPalette::Highlight));
|
|
||||||
else
|
|
||||||
palette.setColor(backgroundRole(), palette.color(QPalette::AlternateBase));
|
|
||||||
this->setPalette(palette);
|
|
||||||
|
|
||||||
QFrame::paintEvent(event);
|
|
||||||
QPainter painter(this);
|
QPainter painter(this);
|
||||||
painter.drawPixmap(QRect((size().width() - pixmap.width()) / 2,
|
painter.drawPixmap(QRect((size().width() - pixmap.width()) / 2,
|
||||||
(size().height() - pixmap.height()) / 2,
|
(size().height() - pixmap.height()) / 2,
|
||||||
|
@ -21,25 +21,34 @@ public:
|
|||||||
void setButton(QPushButton* btn);
|
void setButton(QPushButton* btn);
|
||||||
QSize sizeHint() const;
|
QSize sizeHint() const;
|
||||||
/*void setButtonImage(QImage* pageImage);*/
|
/*void setButtonImage(QImage* pageImage);*/
|
||||||
|
void setAncestor(QWidget* ancestor);
|
||||||
|
void setFather(QWidget* father);
|
||||||
|
QWidget* getFather() { return father; }
|
||||||
|
void registerName(QString name) { path = name; }
|
||||||
|
|
||||||
protected:
|
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);
|
void mousePressEvent(QMouseEvent* event);
|
||||||
|
void dragEnterEvent(QDragEnterEvent* event);
|
||||||
|
void dropEvent(QDropEvent* event);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/*QVector<QPushButton> buttons;*/
|
/*QVector<QPushButton> buttons;*/
|
||||||
|
QString path;
|
||||||
|
QWidget* ancestor;
|
||||||
|
QWidget* father;
|
||||||
|
|
||||||
QPushButton* button;
|
QPushButton* button;
|
||||||
QImage image;
|
QImage image;
|
||||||
Poppler::Page* pPage;
|
Poppler::Page* pPage;
|
||||||
QPixmap pixmap;
|
QPixmap pixmap;
|
||||||
QPushButton* btn1, *btn2;
|
QPushButton* btn1, *btn2;
|
||||||
|
|
||||||
bool selected = false;
|
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void pageClicked(QMouseEvent* event, QImage pageImage);
|
void pageClicked(QMouseEvent* event, QString path);
|
||||||
void previewUpdate(Poppler::Page*);
|
void previewUpdate(Poppler::Page*);
|
||||||
|
void droppedPage(QString, QString);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -39,10 +39,6 @@ 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)));
|
|
||||||
connect(fileWidget, SIGNAL(previewUpdate(Poppler::Page*)), this,
|
|
||||||
SIGNAL(previewUpdate(Poppler::Page*)));
|
|
||||||
|
|
||||||
fileWidgets.append(fileWidget);
|
fileWidgets.append(fileWidget);
|
||||||
|
|
||||||
@ -51,3 +47,46 @@ void PDFTableWidget::loadFile(QString fileName) {
|
|||||||
containerLayout->insertWidget(containerLayout->count()-1, fileWidget);
|
containerLayout->insertWidget(containerLayout->count()-1, fileWidget);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void PDFTableWidget::registerPage(PDFPageWidget* child) {
|
||||||
|
/* Need new name? */
|
||||||
|
QString name = QString("/home/pdfpage").append(QString::number(pageChilds.size()));
|
||||||
|
pageChilds[name] = child;
|
||||||
|
child->registerName(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
void PDFTableWidget::pageClicked(QMouseEvent* event, QString path) {
|
||||||
|
if(event->button() == Qt::LeftButton) {
|
||||||
|
/* Left click to start dragging. */
|
||||||
|
QDrag* drag = new QDrag(this);
|
||||||
|
QMimeData* mimeData = new QMimeData();
|
||||||
|
|
||||||
|
mimeData->setText(path);
|
||||||
|
drag->setMimeData(mimeData);
|
||||||
|
drag->setPixmap(QPixmap(":/img/copy.png"));
|
||||||
|
|
||||||
|
Qt::DropAction dropAction = drag->exec();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void PDFTableWidget::droppedPage(QString pathFrom, QString pathTo) {
|
||||||
|
/*
|
||||||
|
* We have dragged the page and dropped it.
|
||||||
|
* So we'll handle backend operations here.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Frontend operations here.. */
|
||||||
|
qDebug() << pathFrom;
|
||||||
|
qDebug() << pathTo;
|
||||||
|
PDFPageWidget* childFrom = pageChilds[pathFrom];
|
||||||
|
PDFPageWidget* childTo = pageChilds[pathTo];
|
||||||
|
|
||||||
|
PDFFileWidget* fileFrom = (PDFFileWidget*) childFrom->getFather();
|
||||||
|
PDFFileWidget* fileTo = (PDFFileWidget*) childTo->getFather();
|
||||||
|
|
||||||
|
int posFrom = fileFrom->removeChild(childFrom);
|
||||||
|
int posTo = fileTo->removeChild(childTo);
|
||||||
|
|
||||||
|
fileTo->insertChildAt(childFrom, posTo);
|
||||||
|
fileFrom->insertChildAt(childTo, posFrom);
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -1,7 +1,10 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
#include <QFrame>
|
#include <QFrame>
|
||||||
|
#include <QHash>
|
||||||
#include <poppler-qt5.h>
|
#include <poppler-qt5.h>
|
||||||
|
|
||||||
|
#include "pdf_page_widget.h"
|
||||||
|
|
||||||
class QImage;
|
class QImage;
|
||||||
class QVBoxLayout;
|
class QVBoxLayout;
|
||||||
class QString;
|
class QString;
|
||||||
@ -14,12 +17,12 @@ class PDFTableWidget : public QFrame {
|
|||||||
public:
|
public:
|
||||||
PDFTableWidget(QWidget* parent = 0);
|
PDFTableWidget(QWidget* parent = 0);
|
||||||
void loadFile(QString fileName);
|
void loadFile(QString fileName);
|
||||||
|
void registerPage(PDFPageWidget* child);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QVBoxLayout* outerLayout;
|
QVBoxLayout* outerLayout;
|
||||||
|
|
||||||
QScrollArea* scrollArea;
|
QScrollArea* scrollArea;
|
||||||
QWidget* containerWidget;
|
QWidget* containerWidget;
|
||||||
QVBoxLayout* containerLayout;
|
QVBoxLayout* containerLayout;
|
||||||
@ -28,8 +31,14 @@ private:
|
|||||||
QVector<QString> fileNames;
|
QVector<QString> fileNames;
|
||||||
QVector<PDFFileWidget*> fileWidgets;
|
QVector<PDFFileWidget*> fileWidgets;
|
||||||
|
|
||||||
|
QHash<QString, PDFPageWidget*> pageChilds;
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void pageClicked(QMouseEvent*, QImage);
|
void pageClicked(QMouseEvent*, QImage);
|
||||||
void previewUpdate(Poppler::Page*);
|
void previewUpdate(Poppler::Page*);
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
void pageClicked(QMouseEvent*, QString path);
|
||||||
|
void droppedPage(QString pathFrom, QString pathTo);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user