diff --git a/src/pdf_file_widget.cpp b/src/pdf_file_widget.cpp index 443d21c..c4a0ded 100644 --- a/src/pdf_file_widget.cpp +++ b/src/pdf_file_widget.cpp @@ -1,6 +1,5 @@ #include #include - #include "pdf_file_widget.h" #include "pdf_page_widget.h" @@ -45,8 +44,9 @@ void PagesContainerWidget::dropEvent(QDropEvent* event) { event->acceptProposedAction(); } -PDFFileWidget::PDFFileWidget(QWidget* parent) { +PDFFileWidget::PDFFileWidget(QWidget* parent) :QFrame(parent) { setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); + setFrameStyle(QFrame::Box); topLayout = new QGridLayout(); @@ -68,11 +68,43 @@ PDFFileWidget::PDFFileWidget(QWidget* parent) { setLayout(topLayout); setCollapsed(false); + selected = false; connect(&tgen, SIGNAL(updateThumbnail(QImage,PDFPageWidget*)), this, SLOT(updateThumbnail(QImage,PDFPageWidget*))); } +void PDFFileWidget::setAncestor(QWidget* ancestor) { + this->ancestor = ancestor; + connect(this, SIGNAL(fileClicked(PDFFileWidget*, QMouseEvent*)), ancestor, + SLOT(fileClicked(PDFFileWidget*, QMouseEvent*))); +} + +void PDFFileWidget::setSelected(bool select) { + selected = select; + update(); +} + +void PDFFileWidget::mousePressEvent(QMouseEvent* event) { + emit fileClicked(this, event); +} + +void PDFFileWidget::paintEvent(QPaintEvent* event) { + QPalette palette = this->palette(); + QPalette labelPalette = fileNameLabel->palette(); + if(selected) { + palette.setColor(foregroundRole(), palette.color(QPalette::Highlight)); + labelPalette.setColor(foregroundRole(), palette.color(QPalette::Highlight)); + } else { + palette.setColor(foregroundRole(), palette.color(QPalette::Dark)); + labelPalette.setColor(foregroundRole(), palette.color(QPalette::Text)); + } + this->setPalette(palette); + fileNameLabel->setPalette(labelPalette); + + QFrame::paintEvent(event); +} + void PDFFileWidget::updateThumbnail(QImage img, PDFPageWidget* pw) { pw->setThumbnail(img); } @@ -92,10 +124,6 @@ void PDFFileWidget::collapsedButtonClick(void) { setCollapsed(!collapsed); } -void PDFFileWidget::pageClickedHandler(QMouseEvent*, QImage) { - -} - void PDFFileWidget::setDocument(Poppler::Document* document, QString fileName) { document->setRenderHint(Poppler::Document::TextAntialiasing); Poppler::Document* doc = Poppler::Document::load(fileName); diff --git a/src/pdf_file_widget.h b/src/pdf_file_widget.h index 3b1f2f7..63e2196 100644 --- a/src/pdf_file_widget.h +++ b/src/pdf_file_widget.h @@ -1,5 +1,6 @@ #pragma once #include +#include #include #include "pdf_page_widget.h" #include "thumbgen.h" @@ -16,8 +17,9 @@ class QPoint; class QDragEnterEvent; class QDropEvent; class QMouseEvent; -class PDFPageWidget; +class QPaintEvent; class ThumbGen; +class PDFPageWidget; class PagesContainerWidget : public QWidget { Q_OBJECT @@ -37,27 +39,29 @@ private: int getPagesCount() const; }; -class PDFFileWidget : public QWidget { +class PDFFileWidget : public QFrame { Q_OBJECT Q_PROPERTY(bool collapsed READ isCollapsed WRITE setCollapsed) public: PDFFileWidget(QWidget* parent = 0); - void setAncestor(QWidget* ancestor) { this->ancestor = ancestor; } + void setAncestor(QWidget* ancestor); void setDocument(Poppler::Document* document, QString fileName); int removeChild(PDFPageWidget* child); void insertChildAt(PDFPageWidget* child, int pos); + void setSelected(bool select); + bool isSelected(void) { return selected; } bool isCollapsed(void) { return collapsed; } void setCollapsed(bool collapsed); protected: - + void mousePressEvent(QMouseEvent* event); + void paintEvent(QPaintEvent* event); private slots: void collapsedButtonClick(); - void pageClickedHandler(QMouseEvent*, QImage); void updateThumbnail(QImage, PDFPageWidget*); private: @@ -70,10 +74,9 @@ private: QScrollArea* scrollArea; QWidget* ancestor; bool collapsed; + bool selected; signals: - void pageClicked(QMouseEvent*, QImage); - void pageClicked(QMouseEvent*, Poppler::Page*); - void previewUpdate(Poppler::Page*); + void fileClicked(PDFFileWidget*, QMouseEvent*); }; diff --git a/src/pdf_page_widget.h b/src/pdf_page_widget.h index 7eb0a8a..5a84fb6 100644 --- a/src/pdf_page_widget.h +++ b/src/pdf_page_widget.h @@ -15,12 +15,12 @@ class PDFPageWidget : public QFrame { Q_OBJECT public: PDFPageWidget(QWidget* parent = 0); + QSize sizeHint(void) const; + void setThumbnail(QImage pageImage); void setPopplerPage(Poppler::Page*); void setButton(QPushButton* btn); - QSize sizeHint() const; - /*void setButtonImage(QImage* pageImage);*/ void setAncestor(QWidget* ancestor); void setFather(QWidget* father); QWidget* getFather() { return father; } @@ -52,8 +52,8 @@ private: bool selected; signals: - void pageClicked(PDFPageWidget* sender, QMouseEvent* event, QString); - void pageDropped(PDFPageWidget* sender, QDropEvent* event, QString, QString); + void pageClicked(PDFPageWidget*, QMouseEvent*, QString); + void pageDropped(PDFPageWidget*, QDropEvent*, QString, QString); void previewUpdate(Poppler::Page*); }; diff --git a/src/pdf_table_widget.cpp b/src/pdf_table_widget.cpp index c347916..207f530 100644 --- a/src/pdf_table_widget.cpp +++ b/src/pdf_table_widget.cpp @@ -16,6 +16,7 @@ PDFTableWidget::PDFTableWidget(QWidget* parent) : QFrame(parent) { scrollArea = new QScrollArea(); scrollArea->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); scrollArea->setWidgetResizable(true); + scrollArea->setFrameStyle(QFrame::Plain); containerLayout = new QVBoxLayout(); containerWidget = new QWidget(); @@ -57,6 +58,31 @@ void PDFTableWidget::registerPage(PDFPageWidget* 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::pageClicked(PDFPageWidget* sender, QMouseEvent* event, QString path) { if(event->button() == Qt::LeftButton) { /* Handle selection. */ diff --git a/src/pdf_table_widget.h b/src/pdf_table_widget.h index c528ab2..9c10eaa 100644 --- a/src/pdf_table_widget.h +++ b/src/pdf_table_widget.h @@ -23,6 +23,7 @@ public: protected: PDFJam pdfJam; + private: QVBoxLayout* outerLayout; QScrollArea* scrollArea; @@ -40,10 +41,13 @@ signals: void previewUpdate(Poppler::Page*); private slots: - void pageClicked(PDFPageWidget* sender, QMouseEvent* event, QString path); - void pageDropped(PDFPageWidget* sender, QDropEvent* event, QString, QString); + void pageClicked(PDFPageWidget*, QMouseEvent*, QString); + void pageDropped(PDFPageWidget*, QDropEvent*, QString, QString); + + void fileClicked(PDFFileWidget*, QMouseEvent*); private: QVector selectedPages; + QVector selectedFiles; };