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

List:       kde-commits
Subject:    branches/kdepim/enterprise/kdepim/libkdepim
From:       Allen Winter <winter () kde ! org>
Date:       2010-10-14 21:31:23
Message-ID: 20101014213123.89E1FAC895 () svn ! kde ! org
[Download RAW message or body]

SVN commit 1186005 by winterz:

support suggested filenames from the mail subject
part of the fix for kolab/issue3689

MERGE: trunk (but the implementation will be totally different, so block this)


 M  +30 -43    maillistdrag.cpp  
 M  +4 -5      maillistdrag.h  


--- branches/kdepim/enterprise/kdepim/libkdepim/maillistdrag.cpp #1186004:1186005
@@ -78,8 +78,8 @@
     mDate = date;
 }
 
-MailListDrag::MailListDrag( MailList mailList, QWidget * parent, MailTextSource *src \
                )
-    : QStoredDrag( MailListDrag::format(), parent ), _src(src)
+MailListDrag::MailListDrag( const MailList& mailList, QWidget * parent, \
MailTextSource *src ) +    : QDragObject( parent ), _src(src)
 {
     setMailList( mailList );
 }
@@ -127,9 +127,9 @@
     return s;
 }
 
-QDataStream& operator<< ( QDataStream &s, MailList &mailList )
+QDataStream& operator<< ( QDataStream &s, const MailList &mailList )
 {
-    MailList::iterator it;
+    MailList::const_iterator it;
     for (it = mailList.begin(); it != mailList.end(); ++it) {
 	MailSummary mailDrag = *it;
 	s << mailDrag;
@@ -188,72 +188,59 @@
     return FALSE;
 }
 
-void MailListDrag::setMailList( MailList mailList )
+void MailListDrag::setMailList( const MailList& mailList )
 {
-    QByteArray array;
-    QBuffer buffer( array );
-    buffer.open( IO_WriteOnly);
-    QDataStream stream( array, IO_WriteOnly );
-    stream << mailList;
-    buffer.close();
-    setEncodedData( array );
+    _mailList = mailList;
 }
 
 const char *MailListDrag::format(int i) const
 {
-    if (_src) {
         if (i == 0) {
             return "message/rfc822";
+  } else if (i == 1) {
+    return format();
+  } else if (i == 2) {
+    return "application/x-kde-suggestedfilename"; // issue3689
         } else {
-            return QStoredDrag::format(i - 1);
+    return 0;
         }
     }
 
-    return QStoredDrag::format(i);
-}
-
-bool MailListDrag::provides(const char *mimeType) const
-{
-    if (_src && QCString(mimeType) == "message/rfc822") {
-        return true;
-    }
-
-    return QStoredDrag::provides(mimeType);
-}
-
 QByteArray MailListDrag::encodedData(const char *mimeType) const
 {
-    if (QCString(mimeType) != "message/rfc822") {
-        return QStoredDrag::encodedData(mimeType);
-    }
+  QByteArray array;
 
-    QByteArray rc; 
-    if (_src) {
-        MailList ml;
-        QByteArray enc = QStoredDrag::encodedData(format());
-        decode(enc, ml);
-
+  if (!qstricmp(mimeType, format())) {
+    QBuffer buffer( array );
+    buffer.open( IO_WriteOnly);
+    QDataStream stream( array, IO_WriteOnly );
+    stream << _mailList;
+    buffer.close();
+  } else if (!qstricmp(mimeType, "application/x-kde-suggestedfilename")) {
+    if (!_mailList.isEmpty()) {
+      MailSummary firstMail = _mailList.first();
+      array = firstMail.subject().utf8();
+    }
+  } else if (!qstricmp(mimeType, "message/rfc822")) {
         KProgressDialog *dlg = new KProgressDialog(0, 0, QString::null, \
i18n("Retrieving and storing messages..."), true);  dlg->setAllowCancel(true);
-        dlg->progressBar()->setTotalSteps(ml.count());
+    dlg->progressBar()->setTotalSteps(_mailList.count());
         int i = 0;
         dlg->progressBar()->setValue(i);
         dlg->show();
 
-        QTextStream *ts = new QTextStream(rc, IO_WriteOnly);
-        for (MailList::ConstIterator it = ml.begin(); it != ml.end(); ++it) {
+    QTextStream ts(array, IO_WriteOnly);
+    for (MailList::ConstIterator it = _mailList.begin(); it != _mailList.end(); \
++it) {  MailSummary mailDrag = *it;
-            *ts << _src->text(mailDrag.serialNumber());
+      ts << _src->text(mailDrag.serialNumber());
             if (dlg->wasCancelled()) {
                 break;
             }
             dlg->progressBar()->setValue(++i);
-            kapp->eventLoop()->processEvents(QEventLoop::ExcludeSocketNotifiers);
+      qApp->eventLoop()->processEvents(QEventLoop::ExcludeSocketNotifiers);
         }
 
         delete dlg;
-        delete ts;
     }
-    return rc;
+  return array;
 }
-
--- branches/kdepim/enterprise/kdepim/libkdepim/maillistdrag.h #1186004:1186005
@@ -92,21 +92,19 @@
 };
 
 // Drag and drop object for mails
-class KDE_EXPORT MailListDrag : public QStoredDrag
+class KDE_EXPORT MailListDrag : public QDragObject
 {
 public:
     // Takes ownership of "src" and deletes it when done
-    MailListDrag( MailList, QWidget * parent = 0, MailTextSource *src = 0 );
+    MailListDrag( const MailList& mails, QWidget * parent, MailTextSource *src );
     ~MailListDrag();
 
     const char *format(int i) const;
 
-    bool provides(const char *mimeType) const;
-
     QByteArray encodedData(const char *) const;
 
     /* Reset the list of mail summaries */
-    void setMailList( MailList );
+    void setMailList( const MailList& mails );
 
     /* The format for this drag - "x-kmail-drag/message-list" */
     static const char* format();
@@ -129,6 +127,7 @@
 
 private:
     MailTextSource *_src;
+    MailList _mailList;
 };
 
 }


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

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