[Fix] Fixed singular selection.

This commit is contained in:
Rtch90 2014-12-18 13:50:37 +00:00
parent cf26c34e91
commit 26852c5771
4 changed files with 49 additions and 24 deletions

View File

@ -12,7 +12,7 @@ PDFPageWidget::PDFPageWidget(QWidget* parent) :
/* 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->setMaximumSize(150, 150);
this->setAutoFillBackground(true); this->setAutoFillBackground(true);
this->setMouseTracking(true); this->setMouseTracking(true);
@ -44,25 +44,16 @@ 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) { void PDFPageWidget::setAncestor(QWidget* ancestor) {
this->ancestor = ancestor; this->ancestor = ancestor;
((PDFTableWidget*)ancestor)->registerPage(this); ((PDFTableWidget*)ancestor)->registerPage(this);
connect(this, SIGNAL(pageClicked(QMouseEvent*,QString)), ancestor,
SLOT(pageClicked(QMouseEvent*,QString)));
connect(this, SIGNAL(previewUpdate(Poppler::Page*)), ancestor, connect(this, SIGNAL(previewUpdate(Poppler::Page*)), ancestor,
SIGNAL(previewUpdate(Poppler::Page*))); 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) { void PDFPageWidget::setFather(QWidget* father) {
@ -86,9 +77,14 @@ void PDFPageWidget::setThumbnail(QImage pageImage) {
update(); update();
} }
void PDFPageWidget::setSelected(bool select) {
selected = select;
update();
}
void PDFPageWidget::mousePressEvent(QMouseEvent* event) { void PDFPageWidget::mousePressEvent(QMouseEvent* event) {
if(pPage != NULL) { if(pPage != NULL) {
emit pageClicked(event, path); emit pageClicked(this, event, path);
emit previewUpdate(pPage); emit previewUpdate(pPage);
selected = !selected; 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) { void PDFPageWidget::leaveEvent(QEvent* event) {
btn1->hide(); btn1->hide();
btn2->hide(); btn2->hide();

View File

@ -26,6 +26,9 @@ public:
QWidget* getFather() { return father; } QWidget* getFather() { return father; }
void registerName(QString name) { path = name; } void registerName(QString name) { path = name; }
void setSelected(bool select);
bool isSelected(void) { return selected; }
protected: protected:
void paintEvent(QPaintEvent* event); void paintEvent(QPaintEvent* event);
void enterEvent(QEvent* event); void enterEvent(QEvent* event);
@ -49,8 +52,8 @@ private:
bool selected; bool selected;
signals: 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 previewUpdate(Poppler::Page*);
void droppedPage(QString, QString);
}; };

View File

@ -57,9 +57,21 @@ void PDFTableWidget::registerPage(PDFPageWidget* child) {
child->registerName(name); child->registerName(name);
} }
void PDFTableWidget::pageClicked(QMouseEvent* event, QString path) { void PDFTableWidget::pageClicked(PDFPageWidget* sender, QMouseEvent* event, QString path) {
if(event->button() == Qt::LeftButton) { 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); QDrag* drag = new QDrag(this);
QMimeData* mimeData = new QMimeData(); QMimeData* mimeData = new QMimeData();
@ -67,11 +79,12 @@ void PDFTableWidget::pageClicked(QMouseEvent* event, QString path) {
drag->setMimeData(mimeData); drag->setMimeData(mimeData);
drag->setPixmap(QPixmap(":/img/copy.png")); 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. * We have dragged the page and dropped it.
* So we'll handle backend operations here. * So we'll handle backend operations here.

View File

@ -11,6 +11,7 @@ class QVBoxLayout;
class QString; class QString;
class QScrollArea; class QScrollArea;
class QMouseEvent; class QMouseEvent;
class QPoint;
class PDFFileWidget; class PDFFileWidget;
class PDFTableWidget : public QFrame { class PDFTableWidget : public QFrame {
@ -39,7 +40,10 @@ signals:
void previewUpdate(Poppler::Page*); void previewUpdate(Poppler::Page*);
private slots: private slots:
void pageClicked(QMouseEvent*, QString path); void pageClicked(PDFPageWidget* sender, QMouseEvent* event, QString path);
void droppedPage(QString pathFrom, QString pathTo); void pageDropped(PDFPageWidget* sender, QDropEvent* event, QString, QString);
private:
QVector<PDFPageWidget*> selectedPages;
}; };