diff --git a/src/pdf_page_widget.cpp b/src/pdf_page_widget.cpp index 2b77448..1ce426c 100644 --- a/src/pdf_page_widget.cpp +++ b/src/pdf_page_widget.cpp @@ -12,7 +12,7 @@ PDFPageWidget::PDFPageWidget(QWidget* parent) : /* Resize widget. */ this->resize(150, 150); this->setMinimumSize(150, 150); - this->setMinimumSize(150, 150); + this->setMaximumSize(150, 150); this->setAutoFillBackground(true); this->setMouseTracking(true); @@ -44,25 +44,16 @@ PDFPageWidget::PDFPageWidget(QWidget* parent) : 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))); + + connect(this, SIGNAL(pageClicked(PDFPageWidget*, QMouseEvent*, QString)), + ancestor, SLOT(pageClicked(PDFPageWidget*, QMouseEvent*, QString))); + connect(this, SIGNAL(pageDropped(PDFPageWidget*, QDropEvent*, QString,QString)), + ancestor, SLOT(pageDropped(PDFPageWidget*, QDropEvent*, QString,QString))); } void PDFPageWidget::setFather(QWidget* father) { @@ -86,9 +77,14 @@ void PDFPageWidget::setThumbnail(QImage pageImage) { update(); } +void PDFPageWidget::setSelected(bool select) { + selected = select; + update(); +} + void PDFPageWidget::mousePressEvent(QMouseEvent* event) { if(pPage != NULL) { - emit pageClicked(event, path); + emit pageClicked(this, event, path); emit previewUpdate(pPage); selected = !selected; @@ -96,6 +92,15 @@ void PDFPageWidget::mousePressEvent(QMouseEvent* event) { } } +void PDFPageWidget::dragEnterEvent(QDragEnterEvent* event) { + event->acceptProposedAction(); +} + +void PDFPageWidget::dropEvent(QDropEvent* event) { + emit pageDropped(this, event, event->mimeData()->text(), path); + event->acceptProposedAction(); +} + void PDFPageWidget::leaveEvent(QEvent* event) { btn1->hide(); btn2->hide(); diff --git a/src/pdf_page_widget.h b/src/pdf_page_widget.h index e10027e..7eb0a8a 100644 --- a/src/pdf_page_widget.h +++ b/src/pdf_page_widget.h @@ -26,6 +26,9 @@ public: QWidget* getFather() { return father; } void registerName(QString name) { path = name; } + void setSelected(bool select); + bool isSelected(void) { return selected; } + protected: void paintEvent(QPaintEvent* event); void enterEvent(QEvent* event); @@ -49,8 +52,8 @@ private: bool selected; signals: - void pageClicked(QMouseEvent* event, QString path); + void pageClicked(PDFPageWidget* sender, QMouseEvent* event, QString); + void pageDropped(PDFPageWidget* sender, QDropEvent* event, QString, QString); void previewUpdate(Poppler::Page*); - void droppedPage(QString, QString); }; diff --git a/src/pdf_table_widget.cpp b/src/pdf_table_widget.cpp index d24abb9..dd2af89 100644 --- a/src/pdf_table_widget.cpp +++ b/src/pdf_table_widget.cpp @@ -57,9 +57,21 @@ void PDFTableWidget::registerPage(PDFPageWidget* child) { child->registerName(name); } -void PDFTableWidget::pageClicked(QMouseEvent* event, QString path) { +void PDFTableWidget::pageClicked(PDFPageWidget* sender, QMouseEvent* event, QString path) { if(event->button() == Qt::LeftButton) { - /* Left click to start dragging. */ + /* Handle selection. */ + for(int i = 0; i < selectedPages.size(); i++) { + selectedPages.at(i)->setSelected(false); + } + + selectedPages.clear(); + + if(!sender->isSelected()) { + sender->setSelected(true); + selectedPages.append(sender); + } + + /* Handle drag. */ QDrag* drag = new QDrag(this); QMimeData* mimeData = new QMimeData(); @@ -67,11 +79,12 @@ void PDFTableWidget::pageClicked(QMouseEvent* event, QString path) { drag->setMimeData(mimeData); drag->setPixmap(QPixmap(":/img/copy.png")); - Qt::DropAction dropAction = drag->exec(); + drag->exec(); } } -void PDFTableWidget::droppedPage(QString pathFrom, QString pathTo) { +void PDFTableWidget::pageDropped(PDFPageWidget* sender, QDropEvent* event, + QString pathFrom, QString pathTo) { /* * We have dragged the page and dropped it. * So we'll handle backend operations here. diff --git a/src/pdf_table_widget.h b/src/pdf_table_widget.h index 417f513..c528ab2 100644 --- a/src/pdf_table_widget.h +++ b/src/pdf_table_widget.h @@ -11,6 +11,7 @@ class QVBoxLayout; class QString; class QScrollArea; class QMouseEvent; +class QPoint; class PDFFileWidget; class PDFTableWidget : public QFrame { @@ -39,7 +40,10 @@ signals: void previewUpdate(Poppler::Page*); private slots: - void pageClicked(QMouseEvent*, QString path); - void droppedPage(QString pathFrom, QString pathTo); + void pageClicked(PDFPageWidget* sender, QMouseEvent* event, QString path); + void pageDropped(PDFPageWidget* sender, QDropEvent* event, QString, QString); + +private: + QVector selectedPages; };