#include #include "pdf_table_widget.h" #include "pdf_page_widget.h" #include "pdf_file_widget.h" PDFTableWidget::PDFTableWidget(QWidget* parent) : QFrame(parent) { /* Frame (Expanding with VBox) - Scroll Area (Expanding) * Container (Expanding with VBox) - Children. */ setFrameStyle(QFrame::StyledPanel | QFrame::Plain); setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); outerLayout = new QVBoxLayout(); outerLayout->setContentsMargins(0, 0, 0, 0); scrollArea = new QScrollArea(); scrollArea->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); scrollArea->setWidgetResizable(true); scrollArea->setFrameStyle(QFrame::Plain); containerLayout = new QVBoxLayout(); containerLayout->setSpacing(10); containerWidget = new QWidget(); containerWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); QWidget* spacer = new QWidget(); spacer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); containerLayout->addWidget(spacer); containerWidget->setLayout(containerLayout); scrollArea->setWidget(containerWidget); outerLayout->addWidget(scrollArea); setLayout(outerLayout); } void PDFTableWidget::loadFile(QString fileName) { Poppler::Document* doc = Poppler::Document::load(fileName); files.append(doc); PDFFileWidget* fileWidget = new PDFFileWidget(); fileWidget->setAncestor(this); fileWidget->setDocument(doc, fileName); pdfJam.loadFile(fileName, files.size()-1, doc); fileWidgets.append(fileWidget); fileNames.append(fileName); containerLayout->insertWidget(containerLayout->count()-1, fileWidget); connect(fileWidget, SIGNAL(fileRemoveButtonClicked(PDFFileWidget*)), this, SLOT(fileRemoveButtonClicked(PDFFileWidget*))); } void PDFTableWidget::registerPage(PDFPageWidget* child) { /* Need new name? */ QString name = QString("/home/pdfpage").append(QString::number(pageChilds.size())); qDebug() << "Registering name:"; qDebug() << name; pageChilds[name] = child; child->registerName(name); } void PDFTableWidget::fileClicked(PDFFileWidget* sender, QMouseEvent* event) { if(event->button() == Qt::LeftButton) { if(event->modifiers() != Qt::LeftButton) { for(int i = 0; i < selectedFiles.size(); i++) { selectedFiles.at(i)->setSelected(false); } selectedFiles.clear(); if(!sender->isSelected()) { sender->setSelected(true); selectedFiles.append(sender); } } else { if(!sender->isSelected()) { sender->setSelected(true); selectedFiles.append(sender); } else { sender->setSelected(false); selectedFiles.remove(selectedFiles.indexOf(sender)); } } } } void PDFTableWidget::fileRemoveButtonClicked(PDFFileWidget* sender) { selectedFiles.remove(selectedFiles.indexOf(sender)); QVector pagesToRemove; for(int i = 0; i < selectedPages.size(); i++) { if(selectedPages.at(i)->getFather() == sender) { pagesToRemove.append(i); } } for(int i = 0; i < pagesToRemove.size(); i++) { selectedPages.remove(pagesToRemove.at(i)); } /* Handle remove file here. */ } void PDFTableWidget::pageClicked(PDFPageWidget* sender, QMouseEvent* event, QString path) { if(event->button() == Qt::LeftButton) { /* Handle selection. */ if(event->modifiers() != Qt::ControlModifier) { for(int i = 0; i < selectedPages.size(); i++) { selectedPages.at(i)->setSelected(false); } selectedPages.clear(); if(!sender->isSelected()) { sender->setSelected(true); selectedPages.append(sender); } } else { if(!sender->isSelected()) { sender->setSelected(true); selectedPages.append(sender); } else { sender->setSelected(false); selectedPages.remove(selectedPages.indexOf(sender)); } } /* Handle drag. */ QDrag* drag = new QDrag(this); QMimeData* mimeData = new QMimeData(); mimeData->setText(path); drag->setMimeData(mimeData); drag->setPixmap(QPixmap(":/img/copy.png")); drag->exec(); } } 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. */ /* Frontend operations here.. */ if(pathFrom == pathTo) return; 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); }