1
/***************************************************************************
2
* Copyright © 2011 Jonathan Thomas <echidnaman@kubuntu.org> *
4
* This program is free software; you can redistribute it and/or *
5
* modify it under the terms of the GNU General Public License as *
6
* published by the Free Software Foundation; either version 2 of *
7
* the License or (at your option) version 3 or any later version *
8
* accepted by the membership of KDE e.V. (or its successor approved *
9
* by the membership of KDE e.V.), which shall act as a proxy *
10
* defined in Section 14 of version 3 of the license. *
12
* This program is distributed in the hope that it will be useful, *
13
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
14
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
15
* GNU General Public License for more details. *
17
* You should have received a copy of the GNU General Public License *
18
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
19
***************************************************************************/
21
#include "ReviewsWidget.h"
23
#include <QtCore/QStringBuilder>
24
#include <QtGui/QLabel>
25
#include <QtGui/QPushButton>
26
#include <QtGui/QHBoxLayout>
27
#include <QtGui/QToolButton>
32
#include <ReviewsBackend/Review.h>
34
#include "ReviewWidget.h"
36
bool reviewsGreaterThan(Review *lhs, Review *rhs)
41
ReviewsWidget::ReviewsWidget(QWidget *parent)
45
QWidget *headerWidget = new QWidget(this);
46
QHBoxLayout *headerLayout = new QHBoxLayout(headerWidget);
47
headerLayout->setMargin(0);
48
headerWidget->setLayout(headerLayout);
50
m_expandButton = new QToolButton(headerWidget);
51
m_expandButton->setAutoRaise(true);
52
m_expandButton->setArrowType(Qt::DownArrow);
53
connect(m_expandButton, SIGNAL(clicked()), this, SLOT(expandButtonClicked()));
55
QLabel *titleLabel = new QLabel(headerWidget);
56
titleLabel->setText(QLatin1Literal("<h3>") %
57
i18nc("@title", "Reviews") % QLatin1Literal("</h3>"));
59
QWidget *headerSpacer = new QWidget(headerWidget);
60
headerSpacer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum);
62
headerLayout->addWidget(m_expandButton);
63
headerLayout->addWidget(titleLabel);
64
headerLayout->addWidget(headerSpacer);
66
m_reviewContainer = new QWidget(this);
67
m_reviewLayout = new QVBoxLayout(m_reviewContainer);
68
m_reviewLayout->setSpacing(2*KDialog::spacingHint());
69
m_reviewContainer->setLayout(m_reviewLayout);
71
m_statusLabel = new QLabel(m_reviewContainer);
72
m_statusLabel->setAlignment(Qt::AlignHCenter);
73
m_statusLabel->setText(i18nc("@info:status", "Loading reviews"));
75
m_reviewLayout->addWidget(m_statusLabel);
77
m_moreButton = new QPushButton(this);
79
m_moreButton->setText(i18nc("@action", "Check for more reviews"));
80
connect(m_moreButton, SIGNAL(clicked()), this, SLOT(emitFetchPage()));
83
ReviewsWidget::~ReviewsWidget()
87
void ReviewsWidget::expandButtonClicked()
89
if (m_reviewContainer->isHidden()) {
90
m_expandButton->setArrowType(Qt::DownArrow);
91
m_reviewContainer->show();
93
m_reviewContainer->hide();
94
m_expandButton->setArrowType(Qt::RightArrow);
98
void ReviewsWidget::addReviews(QList<Review *> reviews)
100
if (reviews.isEmpty()) {
101
m_moreButton->hide();
102
if (!m_pagesFetched) {
103
m_statusLabel->setText(i18nc("@info:status", "No reviews available"));
109
m_statusLabel->hide();
110
m_moreButton->show();
111
m_moreButton->setEnabled(true);
113
qSort(reviews.begin(), reviews.end(), reviewsGreaterThan);
115
foreach (Review *review, reviews) {
116
if (!review->shouldShow()) {
119
ReviewWidget *reviewWidget = new ReviewWidget(m_reviewContainer);
120
reviewWidget->setReview(review);
122
m_reviewLayout->addWidget(reviewWidget);
126
void ReviewsWidget::emitFetchPage()
128
emit fetchPage(m_pagesFetched + 1);
129
m_moreButton->setEnabled(false);
132
#include "ReviewsWidget.moc"