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

List:       kde-commits
Subject:    playground/base/plasma
From:       Sebastian Kügler <sebas () kde ! org>
Date:       2009-02-17 1:31:22
Message-ID: 1234834282.912420.32109.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 927212 by sebas:

Move logic to manage collections to MailExtender

This is a bit of refactoring that makes it much easier to handle
multiple collections nicely in Lion Mail.

 M  +1 -0      applets/lionmail/emailmessage/emailwidget.cpp  
 M  +10 -62    applets/lionmail/lionmail.cpp  
 M  +1 -6      applets/lionmail/lionmail.h  
 M  +75 -1     applets/lionmail/mailextender.cpp  
 M  +16 -3     applets/lionmail/mailextender.h  
 M  +1 -1      dataengines/akonadi/akonadiengine.cpp  


--- trunk/playground/base/plasma/applets/lionmail/emailmessage/emailwidget.cpp \
#927211:927212 @@ -181,6 +181,7 @@
     m_subjectLabel->nativeWidget()->setWordWrap(false);
     m_subjectLabel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
     //m_subjectLabel->setMaximumWidth(240);
+    m_subjectLabel->setMinimumWidth(100);
     m_layout->addItem(m_subjectLabel, 0, 1, 1, 1, Qt::AlignTop);
     setSubject("Re: sell me a beer, mon");
 
--- trunk/playground/base/plasma/applets/lionmail/lionmail.cpp #927211:927212
@@ -47,7 +47,6 @@
     m_fontFrom = Plasma::Theme::defaultTheme()->font(Plasma::Theme::DefaultFont);
     m_fontSubject = Plasma::Theme::defaultTheme()->font(Plasma::Theme::DefaultFont);
     setPopupIcon("akonadi");
-    m_maxEmails = 6;
 }
 
 LionMail::~LionMail()
@@ -64,36 +63,16 @@
     }
     kDebug() << "Active Collection" << m_activeCollection;
 
-    engine = dataEngine("akonadi");
-    engine->connectAllSources(this);
-    connectCollection(m_activeCollection);
-    setBusy(true);
-    connect(engine, SIGNAL(sourceAdded(QString)), SLOT(newSource(QString)));
     setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
-    //resize(300, 400); // move to constraintsevent
+    resize(300, 400);
     extender()->setEmptyExtenderMessage(i18n("empty..."));
 
-    initMailExtender();
+    initMailExtender(m_activeCollection);
 
     updateToolTip("", 0);
-    m_collections = dataEngine("akonadi")->query("EmailCollections");
 }
 
-void LionMail::connectCollection(QString cid)
-{
-    if (cid.isEmpty()) {
-        return;
-    }
-    kDebug() << "connectSource" << m_activeCollection;
-    engine->connectSource(cid, this); // pass collection ID as string
-}
 
-void LionMail::disconnectCollection(QString cid)
-{
-    kDebug() << "disconnectSource" << cid;
-    engine->disconnectSource(cid, this); // pass collection ID as string
-}
-
 void LionMail::createConfigurationInterface(KConfigDialog *parent)
 {
     Q_UNUSED(parent);
@@ -102,6 +81,7 @@
     ui.setupUi(widget);
     parent->addPage(widget, i18n("Collections"), Applet::icon());
 
+    m_collections = dataEngine("akonadi")->query("EmailCollections");
     foreach ( QString c, m_collections.keys() ) {
         ui.collectionCombo->addItem(m_collections[c].toString(), c);
     }
@@ -116,29 +96,23 @@
 
     if (m_activeCollection != cid) {
         QString name = ui.collectionCombo->currentText();
-        //engine = dataEngine("akonadi");
-        m_extenders[0]->setTitle(name);
 
-        disconnectCollection(m_activeCollection);
+        // FIXME: hardcoded to first extender, needs UI change to support more than \
one extender +        m_extenders[0]->setCollection(cid);
 
+
         m_activeCollection = cid;
         setConfigurationRequired(false);
 
-        connectCollection(m_activeCollection);
-
         cg.writeEntry("activeCollection", m_activeCollection);
         kDebug() << "Active Collections changed:" << m_activeCollection;
         emit configNeedsSaving();
     }
 }
 
-void LionMail::initMailExtender()
+void LionMail::initMailExtender(const QString id)
 {
-    MailExtender* mailView = new MailExtender(this, extender());
-    mailView->setName("foobar"); // also make sure we don't recreate this one ...
-    mailView->setDescription("Private Emails"); // FIXME: sample text
-    mailView->setInfo("2 unread");
-
+    MailExtender* mailView = new MailExtender(this, id, extender());
     m_extenders << mailView;
 }
 
@@ -160,40 +134,14 @@
         m_collections = data;
         return;
     }
-    EmailMessage* email = 0;
-    if (emails.count() < m_maxEmails && !emails.contains(source)) {
-        kDebug() << "new ...";
-        email = static_cast<EmailMessage*>(Plasma::Applet::load("emailmessage"));
-        if (m_extenders.count()) {
-            m_extenders[0]->addEmail(email); // FIXME: hardcoded, we need to find a \
                way to select the right extender
-            emails[source] = email;
-        }
-    }
-    if (emails.contains(source)) {
-        email = emails[source];
-    }
-
-    if (email == 0) {
-        return;
-    }
-    // Only set email-specific properties here, layouttweaks and the like should go \
                into MailExtender
-    email->m_emailWidget->id = data["Id"].toLongLong();
-    email->m_emailWidget->setSubject(data["Subject"].toString());
-    email->m_emailWidget->setFrom(data["From"].toString());
-    email->m_emailWidget->setTo(data["To"].toStringList());
-    email->m_emailWidget->setCc(data["Cc"].toStringList());
-    email->m_emailWidget->setBcc(data["Bcc"].toStringList());
-
-    m_fromList[0] = data["From"].toString();
-    m_subjectList[0] = data["Subject"].toString();
-
+    m_extenders[0]->dataUpdated(source, data);
     update();
 }
 
 void LionMail::newSource(const QString & source)
 {
     //kDebug() << "------------- New:" << source;
-    engine->connectSource(source, this);
+    dataEngine("akonadi")->connectSource(source, this);
     // We could create MailExtenders here ...
 }
 
--- trunk/playground/base/plasma/applets/lionmail/lionmail.h #927211:927212
@@ -60,18 +60,13 @@
         void newSource( const QString &source );
 
     private:
-        void initMailExtender();
-        void connectCollection(QString cid);
-        void disconnectCollection(QString cid);
+        void initMailExtender(const QString);
 
 
         QHash<QString, QVariant> m_collections;
         QString m_activeCollection;
-        QHash<QString, EmailMessage*> emails;
-        int m_maxEmails;
         QList<MailExtender*> m_extenders;
         Plasma::Svg* m_theme;
-        Plasma::DataEngine *engine;
         Plasma::ToolTipContent m_toolTip;
 
         Ui::lionmailConfig ui;
--- trunk/playground/base/plasma/applets/lionmail/mailextender.cpp #927211:927212
@@ -38,8 +38,9 @@
 #include "emailmessage/emailmessage.h"
 
 
-MailExtender::MailExtender(LionMail * applet, Plasma::Extender *ext)
+MailExtender::MailExtender(LionMail * applet, const QString collectionId, \
Plasma::Extender *ext)  : Plasma::ExtenderItem(ext),
+      m_id(collectionId),
       m_info(0),
       m_icon(0),
       m_widget(0),
@@ -50,13 +51,86 @@
     setTitle("Lion Mail");
     setName("Lion Mail ExenderItem");
     setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
+    setDescription("Some description");
+    m_maxEmails = 6;
+
     (void)graphicsWidget();
+    engine = m_applet->dataEngine("akonadi");
+    connectCollection(m_id);
+    setCollection(m_id);
 }
 
+void MailExtender::setCollection(const QString id)
+{
+    disconnectCollection(m_id);
+    m_id = id;
+    connectCollection(m_id);
+    connect(engine, SIGNAL(sourceAdded(QString)), this, SLOT(newSource(QString)));
+}
+
 MailExtender::~MailExtender()
 {
 }
 
+void MailExtender::setName(const QString name)
+{
+    m_collection = name;
+}
+
+void MailExtender::connectCollection(QString cid)
+{
+    if (cid.isEmpty()) {
+        return;
+    }
+    kDebug() << "connectSource" << cid;
+    engine->connectSource(cid, this); // pass collection ID as string
+}
+
+void MailExtender::disconnectCollection(QString cid)
+{
+    kDebug() << "disconnectSource" << cid;
+    engine->disconnectSource(cid, this); // pass collection ID as string
+}
+
+void MailExtender::newSource(const QString & source)
+{
+    kDebug() << "------------- New:" << source;
+    engine->connectSource(source, this);
+    // We could create MailExtenders here ...
+}
+
+
+void MailExtender::dataUpdated(const QString &source, const Plasma::DataEngine::Data \
&data) +{
+    kDebug() << source;
+    if (source == "Collections") {
+        return;
+    }
+    EmailMessage* email = 0;
+    if (emails.count() < m_maxEmails && !emails.contains(source)) {
+        kDebug() << "new ...";
+        email = static_cast<EmailMessage*>(Plasma::Applet::load("emailmessage"));
+        addEmail(email);
+        emails[source] = email;
+    }
+    if (emails.contains(source)) {
+        email = emails[source];
+    }
+
+    if (email == 0) {
+        return;
+    }
+    // Only set email-specific properties here, layouttweaks and the like should go \
into MailExtender +    email->m_emailWidget->id = data["Id"].toLongLong();
+    email->m_emailWidget->setSubject(data["Subject"].toString());
+    email->m_emailWidget->setFrom(data["From"].toString());
+    email->m_emailWidget->setTo(data["To"].toStringList());
+    email->m_emailWidget->setCc(data["Cc"].toStringList());
+    email->m_emailWidget->setBcc(data["Bcc"].toStringList());
+
+    update();
+}
+
 QGraphicsWidget* MailExtender::graphicsWidget()
 {
     /*
--- trunk/playground/base/plasma/applets/lionmail/mailextender.h #927211:927212
@@ -38,9 +38,10 @@
     Q_OBJECT
 
     public:
-        MailExtender(LionMail * applet, Plasma::Extender *ext = 0);
+        MailExtender(LionMail * applet, const QString collectionId, Plasma::Extender \
*ext = 0);  virtual ~MailExtender();
 
+        void setCollection(const QString id);
         QGraphicsWidget* graphicsWidget();
         void setIcon(const QString& icon);
 
@@ -49,18 +50,30 @@
         QString icon();
 
         void addEmail(EmailMessage* email);
+        void setName(const QString name);
 
-    private slots:
+    public Q_SLOTS:
+        void dataUpdated(const QString &source, const Plasma::DataEngine::Data \
&data); +
+    private Q_SLOTS:
         void updateColors();
+        void newSource( const QString &source );
 
     private:
         void buildDialog();
 
+        void connectCollection(QString cid);
+        void disconnectCollection(QString cid);
+
+        QString m_id;
+        QString m_collection;
         QString m_description;
         QString m_info;
+        QHash<QString, EmailMessage*> emails;
+        int m_maxEmails;
 
         LionMail* m_applet;
-
+        Plasma::DataEngine* engine;
         QGraphicsLinearLayout* m_messageLayout;
         QGraphicsGridLayout* m_layout;
         Plasma::IconWidget* m_icon;
--- trunk/playground/base/plasma/dataengines/akonadi/akonadiengine.cpp #927211:927212
@@ -137,7 +137,7 @@
     if (msg) {
         QString source = QString::number( item.id() );
         source = "Email-" + source;
-        kDebug() << "SOURCE:" << source;
+        kDebug() << "SOURCE:" << source << msg->subject()->asUnicodeString();
 
         setData( source, "Id", item.id() );
         setData( source, "Subject", msg->subject()->asUnicodeString() );


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

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