From kde-commits Sat Mar 05 16:57:05 2016 From: =?utf-8?q?Thomas_L=C3=BCbking?= Date: Sat, 05 Mar 2016 16:57:05 +0000 To: kde-commits Subject: [trojita] src/Gui: redesign EnvelopeView Message-Id: X-MARC-Message: https://marc.info/?l=kde-commits&m=145719703900721 Git commit 722c242e99f7d9278674266e7171f00009f0aebb by Thomas L=C3=BCbking. Committed on 28/02/2016 at 12:07. Pushed by gerrit into branch 'master'. redesign EnvelopeView - date on top-right - move subject to top, stress font (bigger, bold) - inline from, sender and reply-to - inline to, cc and bcc (human terms for cc / bcc) - move "Mailing List" to bottom - use formlayout Change-Id: I05e255015d6eea1688c6ff5b610766235240cef4 M +89 -24 src/Gui/EnvelopeView.cpp http://commits.kde.org/trojita/722c242e99f7d9278674266e7171f00009f0aebb diff --git a/src/Gui/EnvelopeView.cpp b/src/Gui/EnvelopeView.cpp index dd4d7b0..05066f8 100644 --- a/src/Gui/EnvelopeView.cpp +++ b/src/Gui/EnvelopeView.cpp @@ -24,6 +24,8 @@ #include #include #include +#include +#include #include #include "Gui/AddressRowWidget.h" #include "Gui/MessageView.h" @@ -45,7 +47,6 @@ EnvelopeView::EnvelopeView(QWidget *parent, MessageView *= messageView): QWidget(p setForegroundRole(helpingHeader.foregroundRole()); = QVBoxLayout *lay =3D new QVBoxLayout(this); - lay->setSpacing(0); lay->setContentsMargins(0, 0, 0, 0); setLayout(lay); = @@ -58,9 +59,26 @@ EnvelopeView::EnvelopeView(QWidget *parent, MessageView = *messageView): QWidget(p LBL->setTextInteractionFlags(Qt::TextSelectableByMouse | Qt::LinksAcce= ssibleByMouse); \ } = +#define ADD_ROW(LBL, WDG) \ +{ \ + QLabel *l =3D new QLabel(LBL, this); \ + l->setAlignment(Qt::AlignRight); \ + form->addWidget(l, form->rowCount(), 0, Qt::AlignTop); \ + form->addWidget(WDG, form->rowCount()-1, 1, Qt::AlignTop); \ +} + /** @short */ void EnvelopeView::setMessage(const QModelIndex &index) { + while (QLayoutItem *item =3D layout()->takeAt(0)) { + if (item->widget()) { + item->widget()->deleteLater(); + } else if (item->layout()) { + item->layout()->deleteLater(); + } else { + delete item; + } + } Q_FOREACH(QWidget *w, findChildren()) { w->deleteLater(); } @@ -71,15 +89,75 @@ void EnvelopeView::setMessage(const QModelIndex &index) = const Imap::Message::Envelope e =3D index.data(Imap::Mailbox::RoleMess= ageEnvelope).value(); = + // Subject & date + QString subDate; + // Date + if (e.date.isValid()) { + subDate =3D QStringLiteral("
%1
").arg(e.date.toLocalTime().toString(Qt::SystemLoca= leLongDate)); + } + subDate +=3D QStringLiteral("%1").arg(e.subject.toHtmlEscaped()); + auto lbl =3D new QLabel(subDate, this); + SET_LABEL_OPTIONS(lbl) + layout()->addWidget(lbl); + + QGridLayout *form =3D new QGridLayout(); + form->setSpacing(0); + form->setContentsMargins(0, 0, 0, 0); + static_cast(layout())->addLayout(form); + + // Sender + AddressRowWidget *senderWidget =3D 0; + QString senderLabel; if (!e.from.isEmpty()) { - layout()->addWidget(new AddressRowWidget(this, tr("From"), e.from,= m_messageView)); + senderLabel =3D tr("From"); + senderWidget =3D new AddressRowWidget(this, QString(), e.from, m_m= essageView); } if (!e.sender.isEmpty() && e.sender !=3D e.from) { - layout()->addWidget(new AddressRowWidget(this, tr("Sender"), e.sen= der, m_messageView)); + if (senderWidget) { + senderWidget->addAddresses(QStringLiteral(" %1").arg(tr("sent = via")), e.sender, m_messageView); + } else { + senderLabel =3D tr("Sender"); + senderWidget =3D new AddressRowWidget(this, QString(), e.sende= r, m_messageView); + } } if (!e.replyTo.isEmpty() && e.replyTo !=3D e.from) { - layout()->addWidget(new AddressRowWidget(this, tr("Reply-To"), e.r= eplyTo, m_messageView)); + if (senderWidget) { + senderWidget->addAddresses(QStringLiteral(", %1").arg(tr("repl= ies to")), e.replyTo, m_messageView); + } else { + senderLabel =3D tr("Reply-To"); + senderWidget =3D new AddressRowWidget(this, QString(), e.reply= To, m_messageView); + } } + if (senderWidget) + ADD_ROW(senderLabel, senderWidget) + + // Receiver + AddressRowWidget *receiverWidget =3D 0; + QString receiverLabel; + if (!e.to.isEmpty()) { + receiverLabel =3D tr("To"); + receiverWidget =3D new AddressRowWidget(this, QString(), e.to, m_m= essageView); + } + if (!e.cc.isEmpty()) { + if (receiverWidget) { + receiverWidget->addAddresses(QStringLiteral(" %1").arg(tr("CC'= d to")), e.cc, m_messageView); + } else { + receiverLabel =3D tr("Cc"); + receiverWidget =3D new AddressRowWidget(this, QString(), e.cc,= m_messageView); + } + } + if (!e.bcc.isEmpty()) { + if (receiverWidget) { + receiverWidget->addAddresses(QStringLiteral(" %1").arg(tr("Bcc= 'd to")), e.bcc, m_messageView); + } else { + receiverLabel =3D tr("Bcc"); + receiverWidget =3D new AddressRowWidget(this, QString(), e.bcc= , m_messageView); + } + } + if (receiverWidget) + ADD_ROW(receiverLabel, receiverWidget) + + // Mailing list QVariantList headerListPost =3D index.data(Imap::Mailbox::RoleMessageH= eaderListPost).toList(); if (!headerListPost.isEmpty()) { QStringList buf; @@ -93,28 +171,15 @@ void EnvelopeView::setMessage(const QModelIndex &index) buf << item.toUrl().toString().toHtmlEscaped(); } } - auto lbl =3D new QLabel(tr("Mailing List: %1").arg(buf= .join(tr(", ")))); + auto lbl =3D new QLabel(QString(QLatin1String(" %1")).arg(buf.join(tr(", ")))); SET_LABEL_OPTIONS(lbl) - layout()->addWidget(lbl); - } - if (!e.to.isEmpty()) { - layout()->addWidget(new AddressRowWidget(this, tr("To"), e.to, m_m= essageView)); - } - if (!e.cc.isEmpty()) { - layout()->addWidget(new AddressRowWidget(this, tr("Cc"), e.cc, m_m= essageView)); - } - if (!e.bcc.isEmpty()) { - layout()->addWidget(new AddressRowWidget(this, tr("Bcc"), e.bcc, m= _messageView)); - } - auto lbl =3D new QLabel(tr("Subject: %1").arg(e.subject.to= HtmlEscaped()), this); - SET_LABEL_OPTIONS(lbl) - layout()->addWidget(lbl); - if (e.date.isValid()) { - const QString &date =3D e.date.toLocalTime().toString(Qt::SystemLo= caleLongDate); - auto lbl =3D new QLabel(tr("Date: %1").arg(date.toHtml= Escaped()), this); - SET_LABEL_OPTIONS(lbl) - layout()->addWidget(lbl); + ADD_ROW(tr("Mailing List"), lbl) } + + // separating the message + QFrame *line =3D new QFrame(this); + line->setFrameStyle(QFrame::HLine|QFrame::Plain); + layout()->addWidget(line); } = }