From 80441018d6f0a7c16ebbdfc85ce0ee75c1c3442a Mon Sep 17 00:00:00 2001 From: Rtch90 Date: Tue, 16 Dec 2014 12:26:00 +0000 Subject: [PATCH] [Add] File display widget. [Remove] Removed pdf_file* for the time being. --- bin/hpdf.pro | 10 +++-- src/file_frame_widget.cpp | 60 +++++++++++++++++++++++++ src/file_frame_widget.h | 34 ++++++++++++++ src/file_widget.cpp | 93 +++++++++++++++++++++++++++++++++++++++ src/file_widget.h | 28 ++++++++++++ src/table_view.cpp | 12 ++++- 6 files changed, 231 insertions(+), 6 deletions(-) create mode 100644 src/file_frame_widget.cpp create mode 100644 src/file_frame_widget.h create mode 100644 src/file_widget.cpp create mode 100644 src/file_widget.h diff --git a/bin/hpdf.pro b/bin/hpdf.pro index 1aaeb27..b5d5572 100644 --- a/bin/hpdf.pro +++ b/bin/hpdf.pro @@ -7,17 +7,19 @@ INCLUDEPATH += /usr/include/poppler/qt5 LIBS += -L/usr/lib -lpoppler-qt5 HEADERS += \ + ../src/file_widget.h \ ../src/pdf_factory.h \ - ../src/pdf_file.h \ ../src/pdf_page_widget.h \ - ../src/table_view.h + ../src/table_view.h \ + ../src/file_frame_widget.h SOURCES += \ ../src/main.cpp \ + ../src/file_widget.cpp \ ../src/pdf_factory.cpp \ - ../src/pdf_file.cpp \ ../src/pdf_page_widget.cpp \ - ../src/table_view.cpp + ../src/table_view.cpp \ + ../src/file_frame_widget.cpp RESOURCES += hpdf.qrc diff --git a/src/file_frame_widget.cpp b/src/file_frame_widget.cpp new file mode 100644 index 0000000..068fc93 --- /dev/null +++ b/src/file_frame_widget.cpp @@ -0,0 +1,60 @@ +#include +#include +#include "file_frame_widget.h" + +#define COLLAPSE_BUTTON_WIDTH 60 +#define COLLAPSE_BUTTON_HEIGHT 40 + +FileFrameWidget::FileFrameWidget(QWidget* parent) { + setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); + + topLayout = new QGridLayout(); + + scrollArea = new QScrollArea(); + mainChild = new FileWidget(); + + widgetName = new QLabel(); + widgetName->setText(tr("File 1")); + topLayout->addWidget(widgetName, 0, 1); + + collapseButton = new QPushButton(tr("X")); + collapseButton->setMinimumSize(QSize(COLLAPSE_BUTTON_WIDTH, COLLAPSE_BUTTON_HEIGHT)); + collapseButton->setMaximumSize(QSize(COLLAPSE_BUTTON_WIDTH, COLLAPSE_BUTTON_HEIGHT)); + connect(collapseButton, SIGNAL(released()), this, SLOT(collapsedButtonClick())); + topLayout->addWidget(collapseButton, 0, 0); + + topLayout->addWidget(scrollArea, 1, 0, 1, 5); + scrollArea->setWidget(mainChild); + + setLayout(topLayout); + + setCollapsed(false); + adjustSize(); +} + +QSize FileFrameWidget::sizeHint() const { + if(collapsed == true) + return QSize(mainChild->width(), collapseButton->height()); + else + return QSize(mainChild->width(), collapseButton->height() + mainChild->height() + 50); +} + +void FileFrameWidget::setCollapsed(bool state) { + if(state == true) { + collapsed = true; + scrollArea->hide(); + } else { + collapsed = false; + scrollArea->show(); + } + + adjustSize(); +} + +void FileFrameWidget::collapsedButtonClick(void) { + if(collapsed == true) + setCollapsed(false); + else + setCollapsed(true); +} + diff --git a/src/file_frame_widget.h b/src/file_frame_widget.h new file mode 100644 index 0000000..ea45d81 --- /dev/null +++ b/src/file_frame_widget.h @@ -0,0 +1,34 @@ +#include +#include +#include +#include +#include +#include + +#include "file_widget.h" + +class FileFrameWidget : public QWidget { + Q_OBJECT + Q_PROPERTY(bool collapsed READ isCollapsed WRITE setCollapsed) +public: + FileFrameWidget(QWidget* parent = 0); + QSize sizeHint(void) const; + + bool isCollapsed() { return collapsed; } + void setCollapsed(bool collapsed); + +protected: + +private slots: + void collapsedButtonClick(void); +private: + QGridLayout* topLayout; + + QLabel* widgetName; + QPushButton* collapseButton; + QScrollArea* scrollArea; + FileWidget* mainChild; + + bool collapsed; +}; + diff --git a/src/file_widget.cpp b/src/file_widget.cpp new file mode 100644 index 0000000..751ed1f --- /dev/null +++ b/src/file_widget.cpp @@ -0,0 +1,93 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "file_widget.h" + +#define CHILD_AREA_WIDTH 150 +#define CHILD_AREA_HEIGHT 180 + +FileWidget::FileWidget(QWidget* parent) { + setAcceptDrops(true); + mainLayout = new QHBoxLayout(); + + for(int i = 0; i < 4; i++) { + addChild(tr("Child number #") + QString::number(i)); + } + + setLayout(mainLayout); +} + +int FileWidget::getChildCount() const { + return child.size(); +} + +QSize FileWidget::sizeHint() const { + return QSize(CHILD_AREA_WIDTH*getChildCount(), CHILD_AREA_HEIGHT + 50); +} + +void FileWidget::addChild(QString name) { + QLabel* newchild; + newchild = new QLabel(); + newchild->setText(name); + newchild->setStyleSheet("QLabel { background-color : red; color : blue; }"); + + child.push_back(newchild); + + mainLayout->addWidget(newchild); +} + +void FileWidget::dragEnterEvent(QDragEnterEvent* event) { + if(event->mimeData()->hasFormat("text/plain")) + event->acceptProposedAction(); +} + +void FileWidget::dropEvent(QDropEvent* event) { + int from = event->mimeData()->text().toInt(); + int to = findChildPositionInLayout(child[findClickEventChild(event->pos())]); + + qDebug() << QString::number(from) + " " + QString::number(to); + + mainLayout->removeWidget(child[from]); + mainLayout->insertWidget(to, child[from]); + + event->acceptProposedAction(); +} + +void FileWidget::mousePressEvent(QMouseEvent* event) { + if(event->button() == Qt::LeftButton) { + int draggedChild = (findClickEventChild(event->pos())); + + QDrag* drag = new QDrag(this); + QMimeData* mimeData = new QMimeData; + + mimeData->setText(QString::number(draggedChild)); + drag->setMimeData(mimeData); + drag->setPixmap(QPixmap(":/img/copy.png")); + + Qt::DropAction dropAction = drag->exec(); + } +} + +int FileWidget::findClickEventChild(QPoint pos) { + for(int i = 0; i < getChildCount(); i++) + if(child[i]->geometry().contains(pos)) + return i; + + return getChildCount()-1; +} + +int FileWidget::findChildPositionInLayout(QLabel* child) { + for(int i = 0; i < getChildCount(); i++) + if(mainLayout->itemAt(i)->widget() == child) + return i; + + return getChildCount()-1; +} + diff --git a/src/file_widget.h b/src/file_widget.h new file mode 100644 index 0000000..66db516 --- /dev/null +++ b/src/file_widget.h @@ -0,0 +1,28 @@ +#include +#include +#include +#include +#include +#include +#include + +class FileWidget : public QWidget { + Q_OBJECT +public: + FileWidget(QWidget* parent = 0); + QSize sizeHint() const; +protected: + void dragEnterEvent(QDragEnterEvent* event); + void dropEvent(QDropEvent* event); + void mousePressEvent(QMouseEvent* event); +private: + std::vector child; + + QHBoxLayout* mainLayout; + + void addChild(QString name); + int findClickEventChild(QPoint pos); + int findChildPositionInLayout(QLabel* child); + int getChildCount() const; +}; + diff --git a/src/table_view.cpp b/src/table_view.cpp index a83c069..a9b8fb6 100644 --- a/src/table_view.cpp +++ b/src/table_view.cpp @@ -3,8 +3,9 @@ #include #include "table_view.h" #include "pdf_page_widget.h" +#include "file_frame_widget.h" -PDFPageWidget* test[10]; +FileFrameWidget* test[10]; TableView::TableView(QWidget* parent) : QWidget(parent) { outerLayout = new QVBoxLayout(); @@ -23,10 +24,17 @@ TableView::TableView(QWidget* parent) : QWidget(parent) { * To remove pagewidget and add filewidgets later, * use QVector files to store files. */ - for(i = 0; i < 10; i++) { + /*for(i = 0; i < 10; i++) { test[i] = new PDFPageWidget(); test[i]->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored); + layout->addWidget(test[i]); + }*/ + + for(i = 0; i < 10; i++) { + test[i] = new FileFrameWidget(); + /*test[i]->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Ignored);*/ + layout->addWidget(test[i]); } /* End TODO. */