[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [trojita] src/Gui: redesign EnvelopeView
From:       Thomas_Lübking <thomas.luebking () gmail ! com>
Date:       2016-03-05 16:57:05
Message-ID: E1acFVp-0000Mk-U7 () scm ! kde ! org
[Download RAW message or body]

Git commit 722c242e99f7d9278674266e7171f00009f0aebb by Thomas Lübking.
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 <QFontMetrics>
 #include <QLabel>
 #include <QUrlQuery>
+#include <QGridLayout>
+#include <QLayoutItem>
 #include <QVBoxLayout>
 #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 = 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::LinksAccessibleByMouse); \  }
 
+#define ADD_ROW(LBL, WDG) \
+{ \
+    QLabel *l = 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 = layout()->takeAt(0)) {
+        if (item->widget()) {
+            item->widget()->deleteLater();
+        } else if (item->layout()) {
+            item->layout()->deleteLater();
+        } else {
+            delete item;
+        }
+    }
     Q_FOREACH(QWidget *w, findChildren<QWidget*>()) {
         w->deleteLater();
     }
@@ -71,15 +89,75 @@ void EnvelopeView::setMessage(const QModelIndex &index)
 
     const Imap::Message::Envelope e = \
index.data(Imap::Mailbox::RoleMessageEnvelope).value<Imap::Message::Envelope>();  
+    // Subject & date
+    QString subDate;
+    // Date
+    if (e.date.isValid()) {
+        subDate = QStringLiteral("<table style=\"margin:0px; margin-left:4em; \
float:right;\"><tr style=\"margin:0px;\"><td \
style=\"margin:0px;\">%1</td></tr></table>").arg(e.date.toLocalTime().toString(Qt::SystemLocaleLongDate));
 +    }
+    subDate += QStringLiteral("<span style=\"font:bold \
large;\">%1</span>").arg(e.subject.toHtmlEscaped()); +    auto lbl = new \
QLabel(subDate, this); +    SET_LABEL_OPTIONS(lbl)
+    layout()->addWidget(lbl);
+
+    QGridLayout *form = new QGridLayout();
+    form->setSpacing(0);
+    form->setContentsMargins(0, 0, 0, 0);
+    static_cast<QBoxLayout*>(layout())->addLayout(form);
+
+    // Sender
+    AddressRowWidget *senderWidget = 0;
+    QString senderLabel;
     if (!e.from.isEmpty()) {
-        layout()->addWidget(new AddressRowWidget(this, tr("From"), e.from, \
m_messageView)); +        senderLabel = tr("From");
+        senderWidget = new AddressRowWidget(this, QString(), e.from, m_messageView);
     }
     if (!e.sender.isEmpty() && e.sender != e.from) {
-        layout()->addWidget(new AddressRowWidget(this, tr("Sender"), e.sender, \
m_messageView)); +        if (senderWidget) {
+            senderWidget->addAddresses(QStringLiteral(" %1").arg(tr("sent via")), \
e.sender, m_messageView); +        } else {
+            senderLabel = tr("Sender");
+            senderWidget = new AddressRowWidget(this, QString(), e.sender, \
m_messageView); +        }
     }
     if (!e.replyTo.isEmpty() && e.replyTo != e.from) {
-        layout()->addWidget(new AddressRowWidget(this, tr("Reply-To"), e.replyTo, \
m_messageView)); +        if (senderWidget) {
+            senderWidget->addAddresses(QStringLiteral(", %1").arg(tr("replies to")), \
e.replyTo, m_messageView); +        } else {
+            senderLabel = tr("Reply-To");
+            senderWidget = new AddressRowWidget(this, QString(), e.replyTo, \
m_messageView); +        }
     }
+    if (senderWidget)
+        ADD_ROW(senderLabel, senderWidget)
+
+    // Receiver
+    AddressRowWidget *receiverWidget = 0;
+    QString receiverLabel;
+    if (!e.to.isEmpty()) {
+        receiverLabel = tr("To");
+        receiverWidget = new AddressRowWidget(this, QString(), e.to, m_messageView);
+    }
+    if (!e.cc.isEmpty()) {
+        if (receiverWidget) {
+            receiverWidget->addAddresses(QStringLiteral(" %1").arg(tr("CC'd to")), \
e.cc, m_messageView); +        } else {
+            receiverLabel = tr("Cc");
+            receiverWidget = 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 = tr("Bcc");
+            receiverWidget = new AddressRowWidget(this, QString(), e.bcc, \
m_messageView); +        }
+    }
+    if (receiverWidget)
+        ADD_ROW(receiverLabel, receiverWidget)
+
+    // Mailing list
     QVariantList headerListPost = \
index.data(Imap::Mailbox::RoleMessageHeaderListPost).toList();  if \
(!headerListPost.isEmpty()) {  QStringList buf;
@@ -93,28 +171,15 @@ void EnvelopeView::setMessage(const QModelIndex &index)
                 buf << item.toUrl().toString().toHtmlEscaped();
             }
         }
-        auto lbl = new QLabel(tr("<b>Mailing List:</b>&nbsp;%1").arg(buf.join(tr(", \
")))); +        auto lbl = new \
QLabel(QString(QLatin1String("<html>&nbsp;%1</html>")).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_messageView));
-    }
-    if (!e.cc.isEmpty()) {
-        layout()->addWidget(new AddressRowWidget(this, tr("Cc"), e.cc, \
                m_messageView));
-    }
-    if (!e.bcc.isEmpty()) {
-        layout()->addWidget(new AddressRowWidget(this, tr("Bcc"), e.bcc, \
                m_messageView));
-    }
-    auto lbl = new QLabel(tr("<b>Subject:</b>&nbsp;%1").arg(e.subject.toHtmlEscaped()), \
                this);
-    SET_LABEL_OPTIONS(lbl)
-    layout()->addWidget(lbl);
-    if (e.date.isValid()) {
-        const QString &date = \
                e.date.toLocalTime().toString(Qt::SystemLocaleLongDate);
-        auto lbl = new QLabel(tr("<b>Date:</b>&nbsp;%1").arg(date.toHtmlEscaped()), \
                this);
-        SET_LABEL_OPTIONS(lbl)
-        layout()->addWidget(lbl);
+        ADD_ROW(tr("Mailing List"), lbl)
     }
+
+    // separating the message
+    QFrame *line = new QFrame(this);
+    line->setFrameStyle(QFrame::HLine|QFrame::Plain);
+    layout()->addWidget(line);
 }
 
 }


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic