diff --git a/src/model/danboorupostdelegate.cpp b/src/model/danboorupostdelegate.cpp deleted file mode 100644 index 42f05bc..0000000 --- a/src/model/danboorupostdelegate.cpp +++ /dev/null @@ -1,258 +0,0 @@ -/* - * - * Copyright 2013 Luca Beltrame - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of - * the License or (at your option) version 3 or any later version - * accepted by the membership of KDE e.V. (or its successor approved - * by the membership of KDE e.V.), which shall act as a proxy - * defined in Section 14 of version 3 of the license. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - */ - -// Own - -#include "danboorupostdelegate.h" -#include "libdanbooru/danboorupost.h" - -// Qt - -#include -#include -#include - -// KDE - -#include -#include -#include -#include - -namespace Danbooru -{ - -const int DanbooruPostDelegate::MARGIN = 5; - -DanbooruPostDelegate::DanbooruPostDelegate(QListView *itemView): QStyledItemDelegate(itemView), - m_itemView(itemView) -{ - - // Get the sizes for the buttons - - const int iconSize = KIconLoader::global()->currentSize( - KIconLoader::Toolbar - ); - - const QSize sz = itemView->style()->sizeFromContents( - QStyle::CT_ToolButton, 0, - QSize(iconSize, iconSize)); - - m_buttonSize = qMax(sz.width(), sz.height()); - - m_downloadButton = new QPushButton(QIcon::fromTheme("download"), - QString(), itemView); - m_viewButton = new QPushButton(QIcon::fromTheme("view-preview"), QString(), - itemView); - - m_downloadButton->hide(); - m_viewButton->hide(); - - m_downloadButton->resize(m_buttonSize, m_buttonSize); - m_viewButton->resize(m_buttonSize, m_buttonSize); - m_downloadButton->setToolTip(i18n("Download image")); - m_viewButton->setToolTip(i18n("View image")); - - // Signal-slot connections - - connect(m_viewButton, &QPushButton::clicked, this, &DanbooruPostDelegate::viewButtonClicked); - connect(m_downloadButton, &QPushButton::clicked, this, &DanbooruPostDelegate::downloadButtonClicked); - -} - -void DanbooruPostDelegate::paint(QPainter *painter, - const QStyleOptionViewItem &option, - const QModelIndex &index) const -{ - - if (!index.isValid()) { - return; - } - - QStyleOptionViewItemV4 opt(option); - - // Pixmap - - QStyle *style = QApplication::style(); - - style->drawPrimitive(QStyle::PE_PanelItemViewItem, &opt, painter, 0); - painter->setRenderHint(QPainter::Antialiasing); - - QPixmap pixmap = index.data(Qt::DecorationRole).value(); - - if (pixmap.isNull()) { - return; - } - - QRect rect = opt.rect; - QFontMetrics metrics = opt.fontMetrics; - QRect textRect(rect.left() + MARGIN, rect.bottom() - 3 * metrics.height(), - rect.width(), 3 * metrics.height()); - - // Scaling is unavoidable to keep things in the right dimension - - QPixmap scaled; - - // Reserve enough space for the pixmap + the 3 lines of text: - // this prevents issues with images that have height > width - // (like in yande.re which keeps a lot of scans) - - int maxHeight = rect.height() - 3 * metrics.height() - 2 * MARGIN; - - scaled = pixmap.scaled(rect.width() - 2 * MARGIN, - maxHeight, - Qt::KeepAspectRatio, - Qt::SmoothTransformation); - - QRect pixRect = scaled.rect(); - pixRect.moveCenter(rect.center()); - - // move the pixmap up to accomodate some lines of text - - pixRect.moveTo(pixRect.left(), - pixRect.top() - textRect.height() / 2); - pixRect.moveBottom(textRect.top() - MARGIN); - - painter->drawPixmap(pixRect, scaled); - - painter->save(); - - // Show buttons on mouseover - - if (option.state & QStyle::State_MouseOver) { - - // Get the bottom coordinate for the buttons - // TODO: Perhaps add some transition? - - m_downloadButton->move(pixRect.topLeft()); - m_viewButton->move(pixRect.bottomLeft() - QPoint( - 0, m_viewButton->height() - 1.5 * MARGIN)); - - m_downloadButton->show(); - m_viewButton->show(); - - } else if (!hoveredIndex().isValid()) { - m_downloadButton->hide(); - m_viewButton->hide(); - } - - painter->restore(); - - // Text - - DanbooruPost *post = index.data().value(); - - painter->save(); - - int imageHeight = post->height(); - int imageWidth = post->width(); - - KFormat format; - - QString imageText = i18n( - "File size: %1", - format.formatByteSize(post->size())); - - KLocalizedString sizestr = ki18np("1 pixel", "%1 pixels"); - - imageText += "\n"; - imageText += i18n("Resolution: %1 x %2", - sizestr.subs(imageWidth).toString(), - sizestr.subs(imageHeight).toString()); - imageText += "\n"; - - QString ratingString; - - switch (post->rating()) { - case DanbooruPost::Safe: - ratingString = i18n("Safe"); - break; - case DanbooruPost::Questionable: - ratingString = i18n("Questionable"); - break; - case DanbooruPost::Explicit: - ratingString = i18n("Explicit"); - break; - default: - ratingString = i18nc("Unknown post rating", "Unknown"); - } - - imageText += i18n("Rating: %1", ratingString); - - painter->drawText(textRect, imageText); - painter->restore(); - -} - -QSize DanbooruPostDelegate::sizeHint(const QStyleOptionViewItem &option, - const QModelIndex &index) const -{ - - Q_UNUSED(option) - - if (!index.isValid()) { - return QSize(); - } - - return m_itemView->gridSize(); - -} - -QModelIndex DanbooruPostDelegate::hoveredIndex() const -{ - const QPoint pos = m_itemView->viewport()->mapFromGlobal(QCursor::pos()); - 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) { - Q_EMIT(postDownloadRequested(post->fileUrl())); - } -} - -void DanbooruPostDelegate::viewButtonClicked() -{ - - QModelIndex index = hoveredIndex(); - - if (!index.isValid()) { - return; - } - - QVariant data = index.data(Qt::DisplayRole); - const DanbooruPost *post = data.value(); - if (post) { - Q_EMIT(postViewRequested(post->fileUrl())); - } -} - -} // namespace Danbooru diff --git a/src/model/danboorupostdelegate.h b/src/model/danboorupostdelegate.h deleted file mode 100644 index d6de702..0000000 --- a/src/model/danboorupostdelegate.h +++ /dev/null @@ -1,100 +0,0 @@ -/* - * This file is part of Danbooru Client. - * Copyright 2013 Luca Beltrame - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of - * the License or (at your option) version 3 or any later version - * accepted by the membership of KDE e.V. (or its successor approved - * by the membership of KDE e.V.), which shall act as a proxy - * defined in Section 14 of version 3 of the license. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - */ - -#ifndef DANBOORUPOSTDELEGATE_H -#define DANBOORUPOSTDELEGATE_H - -/** - * @brief This file includes custom delegates to represent DanbooruItems. - * @file danboorupostdelegate.h - * - **/ - -#include - -#include - -class QListView; -class QPainter; -class QPushButton; - -namespace Danbooru -{ - -/** - * @brief Specific delegate for Danbooru items. - * - */ - -class DanbooruPost; - -class DanbooruPostDelegate : public QStyledItemDelegate -{ - - Q_OBJECT - -public: - DanbooruPostDelegate(QListView *itemView); - - void paint(QPainter *painter, const QStyleOptionViewItem &option, - const QModelIndex &index) const; - QSize sizeHint(const QStyleOptionViewItem &option, - const QModelIndex &index) const; - - QModelIndex hoveredIndex() const; - -private: - - QListView *m_itemView; - QPushButton *m_downloadButton; - QPushButton *m_viewButton; - - int m_buttonSize; - static const int MARGIN; - -Q_SIGNALS: - - /** - * @brief Emitted when the view button is clicked. - * - * @param postUrl the URL to the full picture. - * - */ - void postViewRequested(QUrl postUrl); - - /** - * @brief Emitted when the download button is clicked. - * - * @param postUrl the URL to the full picture. - * - */ - void postDownloadRequested(QUrl postUrl); - -private Q_SLOTS: - void viewButtonClicked(); - void downloadButtonClicked(); - -}; - -} // namespace Danbooru - -#endif // DANBOORUPOSTDELEGATE_H