[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. */
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();

View File

@ -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);
};

View File

@ -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.

View File

@ -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<PDFPageWidget*> selectedPages;
};