-rw-r--r-- | noncore/net/mail/viewmail.cpp | 49 | ||||
-rw-r--r-- | noncore/net/mail/viewmail.h | 9 |
2 files changed, 54 insertions, 4 deletions
diff --git a/noncore/net/mail/viewmail.cpp b/noncore/net/mail/viewmail.cpp index d2e5e29..5e7ffeb 100644 --- a/noncore/net/mail/viewmail.cpp +++ b/noncore/net/mail/viewmail.cpp @@ -6,4 +6,5 @@ #include <qfile.h> #include <qapplication.h> +#include <qvaluelist.h> #include <qpe/config.h> @@ -19,7 +20,8 @@ AttachItem::AttachItem(QListView * parent,QListViewItem *after, const QString&mime,const QString&desc,const QString&file, - const QString&fsize,int num) + const QString&fsize,int num,const QValueList<int>&path) : QListViewItem(parent,after),_partNum(num) { + _path=path; setText(0, mime); setText(1, desc); @@ -28,4 +30,37 @@ AttachItem::AttachItem(QListView * parent,QListViewItem *after, const QString&mi } +AttachItem::AttachItem(QListViewItem * parent,QListViewItem *after, const QString&mime,const QString&desc,const QString&file, + const QString&fsize,int num,const QValueList<int>&path) + : QListViewItem(parent,after),_partNum(num) +{ + _path=path; + setText(0, mime); + setText(1, desc); + setText(2, file); + setText(3, fsize); +} + +bool AttachItem::isParentof(const QValueList<int>&path) +{ + /* if not set, then no parent */ + if (path.count()==0||_path.count()==0) return false; + /* the parent must have one digit less then a child */ + if (path.count()!=_path.count()+1) return false; + for (unsigned int i=0; i < _path.count();++i) { + if (_path[i]!=path[i]) return false; + } + return true; +} + +AttachItem* ViewMail::searchParent(const QValueList<int>&path) +{ + QListViewItemIterator it( attachments ); + for ( ; it.current(); ++it ) { + AttachItem*ati = (AttachItem*)it.current(); + if (ati->isParentof(path)) return ati; + } + return 0; +} + void ViewMail::setBody( RecBody body ) { @@ -38,4 +73,5 @@ if (body.Parts().count()==0) { } AttachItem * curItem=0; +AttachItem * parentItem = 0; QString type=body.Description().Type()+"/"+body.Description().Subtype(); QString desc,fsize; @@ -74,6 +110,7 @@ default: } -curItem=new AttachItem(attachments,curItem,type,"Mailbody","",fsize,-1); +curItem=new AttachItem(attachments,curItem,type,"Mailbody","",fsize,-1,body.Description().Positionlist()); QString filename = ""; + for (unsigned int i = 0; i < body.Parts().count();++i) { type = body.Parts()[i].Type()+"/"+body.Parts()[i].Subtype(); @@ -108,5 +145,11 @@ for (unsigned int i = 0; i < body.Parts().count();++i) { o << s << " " << q << "Byte"; desc = body.Parts()[i].Description(); - curItem=new AttachItem(attachments,curItem,type,desc,filename,fsize,i); + parentItem = searchParent(body.Parts()[i].Positionlist()); + if (parentItem) { + curItem=new AttachItem(parentItem,curItem,type,desc,filename,fsize,i,body.Parts()[i].Positionlist()); + attachments->setRootIsDecorated(true); + } else { + curItem=new AttachItem(attachments,curItem,type,desc,filename,fsize,i,body.Parts()[i].Positionlist()); + } } } diff --git a/noncore/net/mail/viewmail.h b/noncore/net/mail/viewmail.h index bf7a4dd..b3d3b4e 100644 --- a/noncore/net/mail/viewmail.h +++ b/noncore/net/mail/viewmail.h @@ -5,4 +5,5 @@ #include <qmap.h> #include <qstringlist.h> +#include <qvaluelist.h> #include "viewmailbase.h" @@ -13,9 +14,14 @@ class AttachItem : public QListViewItem public: AttachItem(QListView * parent,QListViewItem *after, const QString&mime,const QString&desc,const QString&file, - const QString&fsize,int num); + const QString&fsize,int num,const QValueList<int>&path); + AttachItem(QListViewItem * parent,QListViewItem *after, const QString&mime,const QString&desc,const QString&file, + const QString&fsize,int num,const QValueList<int>&path); int Partnumber() { return _partNum; } + bool isParentof(const QValueList<int>&path); private: int _partNum; + /* needed for a better display of attachments */ + QValueList<int> _path; }; @@ -36,4 +42,5 @@ public: protected: QString deHtml(const QString &string); + AttachItem* searchParent(const QValueList<int>&path); protected slots: |