diff --git a/src/model/danboorupostdelegate.cpp b/src/model/danboorupostdelegate.cpp index 0a7466c..7c65f3b 100644 --- a/src/model/danboorupostdelegate.cpp +++ b/src/model/danboorupostdelegate.cpp @@ -36,6 +36,7 @@ #include + namespace Danbooru { const int DanbooruPostDelegate::MARGIN = 5; @@ -73,6 +74,13 @@ namespace Danbooru { m_downloadButton->resize(m_buttonSize, m_buttonSize); m_viewButton->resize(m_buttonSize, m_buttonSize); + // Signal-slot connections + + connect(m_viewButton, SIGNAL(clicked()), this, + SLOT(viewButtonClicked())); + connect(m_downloadButton, SIGNAL(clicked()), this, + SLOT(downloadButtonClicked())); + } void DanbooruPostDelegate::paint(QPainter* painter, @@ -154,4 +162,41 @@ namespace Danbooru { return m_itemView->indexAt(pos); } + void DanbooruPostDelegate::downloadButtonClicked() + { + QModelIndex index = hoveredIndex(); + + if (!index.isValid()) { + return; + } + + QVariant data = index.data(Qt::DisplayRole); + const DanbooruPost* post = data.value(); + + if (post) { + KUrl url = post->fileUrl(); + Q_EMIT(postViewRequested(url)); + } + + + } + + void DanbooruPostDelegate::viewButtonClicked() + { + + QModelIndex index = hoveredIndex(); + + if (!index.isValid()) { + return; + } + + QVariant data = index.data(Qt::DisplayRole); + const DanbooruPost* post = data.value(); + if (post) { + KUrl url = post->fileUrl(); + Q_EMIT(postViewRequested(url)); + } + } + + } // namespace Danbooru diff --git a/src/model/danboorupostdelegate.h b/src/model/danboorupostdelegate.h index 06cb982..2f88178 100644 --- a/src/model/danboorupostdelegate.h +++ b/src/model/danboorupostdelegate.h @@ -31,22 +31,27 @@ #include +#include + class QListView; class QPainter; class KPushButton; + namespace Danbooru { /** * @brief Specific delegate for Danbooru items. * */ + + class DanbooruPost; + class DanbooruPostDelegate : public QStyledItemDelegate { Q_OBJECT - public: DanbooruPostDelegate(QListView* itemView); @@ -57,7 +62,6 @@ namespace Danbooru { QModelIndex hoveredIndex() const; - private: QListView* m_itemView; @@ -70,6 +74,32 @@ namespace Danbooru { static const int MARGIN; + Q_SIGNALS: + + /** + * @brief Emitted when the view button is clicked. + * + * @param postUrl the URL to the full picture. + * + */ + void postViewRequested(KUrl postUrl); + + + /** + * @brief Emitted when the download button is clicked. + * + * @param postUrl the URL to the full picture. + * + */ + void postDownloadRequested(KUrl postUrl); + + + private Q_SLOTS: + void viewButtonClicked(); + void downloadButtonClicked(); + + + }; } // namespace Danbooru