-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 @@ -4,8 +4,9 @@ #include <qaction.h> #include <qpopupmenu.h> #include <qfile.h> #include <qapplication.h> +#include <qvaluelist.h> #include <qpe/config.h> #include <opie/ofiledialog.h> @@ -17,17 +18,51 @@ #include "accountview.h" #include "mailtypes.h" 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); setText(2, file); setText(3, fsize); } +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 ) { m_body = body; m_mail[2] = body.Bodytext(); @@ -36,8 +71,9 @@ attachments->setEnabled(body.Parts().count()>0); if (body.Parts().count()==0) { return; } AttachItem * curItem=0; +AttachItem * parentItem = 0; QString type=body.Description().Type()+"/"+body.Description().Subtype(); QString desc,fsize; double s = body.Description().Size(); int w; @@ -72,10 +108,11 @@ default: o.setf(QTextStream::fixed); o << s << " " << q << "Byte"; } -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(); part_plist_t::ConstIterator it = body.Parts()[i].Parameters().begin(); for (;it!=body.Parts()[i].Parameters().end();++it) { @@ -106,9 +143,15 @@ for (unsigned int i = 0; i < body.Parts().count();++i) { if (w>0) o.precision(2); else o.precision(0); o.setf(QTextStream::fixed); 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 @@ -3,21 +3,27 @@ #include <qlistview.h> #include <qmap.h> #include <qstringlist.h> +#include <qvaluelist.h> #include "viewmailbase.h" #include "mailtypes.h" 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; }; class ViewMail : public ViewMailBase { @@ -34,8 +40,9 @@ public: bool deleted; protected: QString deHtml(const QString &string); + AttachItem* searchParent(const QValueList<int>&path); protected slots: void slotReply(); void slotForward(); |