author | alwin <alwin> | 2004-10-28 02:12:12 (UTC) |
---|---|---|
committer | alwin <alwin> | 2004-10-28 02:12:12 (UTC) |
commit | 6205e982ec6d9ab1893919cd9c943c95b4baae33 (patch) (side-by-side diff) | |
tree | 7f5eeab32ad333e441956ce3bccf313609a54b83 | |
parent | beaee4a305e89b27f0482047daf06919fdd9d732 (diff) | |
download | opie-6205e982ec6d9ab1893919cd9c943c95b4baae33.zip opie-6205e982ec6d9ab1893919cd9c943c95b4baae33.tar.gz opie-6205e982ec6d9ab1893919cd9c943c95b4baae33.tar.bz2 |
fixed some problems when displaying mails
but it should reworked cause sometimes there are problems with html
mails.
-rw-r--r-- | noncore/net/mail/viewmail.cpp | 30 | ||||
-rw-r--r-- | noncore/net/mail/viewmail.h | 1 | ||||
-rw-r--r-- | noncore/net/mail/viewmailbase.cpp | 81 | ||||
-rw-r--r-- | noncore/net/mail/viewmailbase.h | 20 |
4 files changed, 65 insertions, 67 deletions
diff --git a/noncore/net/mail/viewmail.cpp b/noncore/net/mail/viewmail.cpp index d5f9b7f..d2f1584 100644 --- a/noncore/net/mail/viewmail.cpp +++ b/noncore/net/mail/viewmail.cpp @@ -1,118 +1,119 @@ #include "composemail.h" #include "viewmail.h" #include <libmailwrapper/settings.h> #include <libmailwrapper/abstractmail.h> #include <libmailwrapper/mailtypes.h> /* OPIE */ #include <opie2/odebug.h> #include <opie2/ofiledialog.h> #include <opie2/oimagescrollview.h> #include <qpe/config.h> #include <qpe/qpeapplication.h> /* QT */ #include <qtextbrowser.h> #include <qmessagebox.h> #include <qtextstream.h> #include <qaction.h> #include <qpopupmenu.h> #include <qfile.h> #include <qlayout.h> +#include <qstylesheet.h> using namespace Opie::Ui; using namespace Opie::Core; AttachItem::AttachItem(QListView * 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); } 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; } AttachItem* ViewMail::lastChild(AttachItem*parent) { if (!parent) return 0; AttachItem* item = (AttachItem*)parent->firstChild(); if (!item) return item; AttachItem*temp=0; while( (temp=(AttachItem*)item->nextSibling())) { item = temp; } return item; } void ViewMail::setBody(const RecBodyP&body ) { m_body = body; m_mail[2] = body->Bodytext(); attachbutton->setEnabled(body->Parts().count()>0); 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; w=0; while (s>1024) { s/=1024; ++w; if (w>=2) break; } QString q=""; switch(w) { case 1: q="k"; break; case 2: @@ -203,302 +204,297 @@ void ViewMail::slotItemClicked( QListViewItem * item , const QPoint & point, int if (!item ) return; if ( ( ( AttachItem* )item )->Partnumber() == -1 ) { setText(); return; } QPopupMenu *menu = new QPopupMenu(); int ret=0; if ( item->text( 0 ).left( 5 ) == "text/" || item->text(0)=="message/rfc822" ) { menu->insertItem( tr( "Show Text" ), 1 ); } if (item->text(0).left(6)=="image/") { menu->insertItem(tr("Display image preview"),2); } menu->insertItem( tr( "Save Attachment" ), 0 ); menu->insertSeparator(1); ret = menu->exec( point, 0 ); switch(ret) { case 0: { MimeTypes types; types.insert( "all", "*" ); QString str = OFileDialog::getSaveFileName( 1, "/", item->text( 2 ) , types, 0 ); if( !str.isEmpty() ) { encodedString*content = m_recMail->Wrapper()->fetchDecodedPart( m_recMail, m_body->Parts()[ ( ( AttachItem* )item )->Partnumber() ] ); if (content) { QFile output(str); output.open(IO_WriteOnly); output.writeBlock(content->Content(),content->Length()); output.close(); delete content; } } } break ; case 2: { QString tmpfile = "/tmp/opiemail-image"; encodedString*content = m_recMail->Wrapper()->fetchDecodedPart( m_recMail, m_body->Parts()[ ( ( AttachItem* )item )->Partnumber() ] ); if (content) { QFile output(tmpfile); output.open(IO_WriteOnly); output.writeBlock(content->Content(),content->Length()); output.close(); delete content; MailImageDlg iview(""); iview.setName(tmpfile); QPEApplication::execDialog(&iview); output.remove(); } } break; case 1: if ( ( ( AttachItem* )item )->Partnumber() == -1 ) { setText(); } else { if ( m_recMail->Wrapper() != 0l ) { // make sure that there is a wrapper , even after delete or simular actions browser->setText( m_recMail->Wrapper()->fetchTextPart( m_recMail, m_body->Parts()[ ( ( AttachItem* )item )->Partnumber() ] ) ); } } break; } delete menu; } void ViewMail::setMail(const RecMailP&mail ) { m_recMail = mail; m_mail[0] = mail->getFrom(); m_mail[1] = mail->getSubject(); m_mail[3] = mail->getStringDate(); m_mail[4] = mail->Msgid(); m_mail2[0] = mail->To(); m_mail2[1] = mail->CC(); m_mail2[2] = mail->Bcc(); + setCaption(tr("E-Mail by %1").arg( m_mail[0] ) ); setText(); } ViewMail::ViewMail( QWidget *parent, const char *name, WFlags fl) : ViewMailBase(parent, name, fl), _inLoop(false) { m_gotBody = false; deleted = false; connect( reply, SIGNAL(activated()), SLOT(slotReply())); connect( forward, SIGNAL(activated()), SLOT(slotForward())); connect( deleteMail, SIGNAL( activated() ), SLOT( slotDeleteMail() ) ); connect( showHtml, SIGNAL( toggled(bool) ), SLOT( slotShowHtml(bool) ) ); attachments->setEnabled(m_gotBody); connect( attachments, SIGNAL( clicked(QListViewItem*,const QPoint&, int) ), SLOT( slotItemClicked(QListViewItem*,const QPoint&, int) ) ); readConfig(); attachments->setSorting(-1); } void ViewMail::readConfig() { Config cfg( "mail" ); cfg.setGroup( "Settings" ); m_showHtml = cfg.readBoolEntry( "showHtml", false ); showHtml->setOn( m_showHtml ); } void ViewMail::setText() { - QString toString; QString ccString; QString bccString; + QString mailHtml; for ( QStringList::Iterator it = ( m_mail2[0] ).begin(); it != ( m_mail2[0] ).end(); ++it ) { toString += (*it); } for ( QStringList::Iterator it = ( m_mail2[1] ).begin(); it != ( m_mail2[1] ).end(); ++it ) { ccString += (*it); } for ( QStringList::Iterator it = ( m_mail2[2] ).begin(); it != ( m_mail2[2] ).end(); ++it ) { bccString += (*it); } - - setCaption( caption().arg( m_mail[0] ) ); - - m_mailHtml = "<html><body>" + browser->setTextFormat(Qt::RichText); + mailHtml = "<html><body>" "<table width=\"100%\" border=\"0\"><tr bgcolor=\"#FFDD76\"><td>" - "<div align=left><b>" + deHtml( m_mail[1] ) + "</b></div>" + "<div align=left><b>" + deHtml(m_mail[1]) + "</b></div>" "</td></tr><tr bgcolor=\"#EEEEE6\"><td>" "<b>" + tr( "From" ) + ": </b><font color=#6C86C0>" + deHtml( m_mail[0] ) + "</font><br>" "<b>" + tr( "To" ) + ": </b><font color=#6C86C0>" + deHtml( toString ) + "</font><br><b>" + tr( "Cc" ) + ": </b>" + deHtml( ccString ) + "<br>" "<b>" + tr( "Date" ) + ": </b> " + m_mail[3] + - "</td></tr></table><font face=fixed>"; - - if ( !m_showHtml ) - { - browser->setText( QString( m_mailHtml) + deHtml( m_mail[2] ) + "</font></html>" ); - } - else - { - browser->setText( QString( m_mailHtml) + m_mail[2] + "</font></html>" ); + "</td></tr></table>"; + if ( !m_showHtml ) { + browser->setText( mailHtml+"<font face=fixed>" + QStyleSheet::convertFromPlainText(m_mail[2]) + "</font></body></html>" ); + } else { + browser->setText(mailHtml+m_mail[2].simplifyWhiteSpace()+"</html>"); } // remove later in favor of a real handling m_gotBody = true; } ViewMail::~ViewMail() { m_recMail->Wrapper()->cleanMimeCache(); hide(); } void ViewMail::hide() { QWidget::hide(); if (_inLoop) { _inLoop = false; qApp->exit_loop(); } } void ViewMail::exec() { show(); if (!_inLoop) { _inLoop = true; qApp->enter_loop(); } } -QString ViewMail::deHtml(const QString &string) +QString ViewMail::deHtml(const QString &aString) { - QString string_ = string; + QString string_ = aString; string_.replace(QRegExp("&"), "&"); string_.replace(QRegExp("<"), "<"); string_.replace(QRegExp(">"), ">"); string_.replace(QRegExp("\\n"), "<br>"); return string_; } void ViewMail::slotReply() { if (!m_gotBody) { QMessageBox::information(this, tr("Error"), tr("<p>The mail body is not yet downloaded, so you cannot reply yet."), tr("Ok")); return; } QString rtext; rtext += QString("* %1 wrote on %2:\n") // no i18n on purpose .arg( m_mail[0] ) .arg( m_mail[3] ); QString text = m_mail[2]; QStringList lines = QStringList::split(QRegExp("\\n"), text); QStringList::Iterator it; for (it = lines.begin(); it != lines.end(); it++) { rtext += "> " + *it + "\n"; } rtext += "\n"; QString prefix; if ( m_mail[1].find(QRegExp("^Re: .*$")) != -1) prefix = ""; else prefix = "Re: "; // no i18n on purpose Settings *settings = new Settings(); ComposeMail composer( settings ,this, 0, true); if (m_recMail->Replyto().isEmpty()) { composer.setTo( m_recMail->getFrom()); } else { composer.setTo( m_recMail->Replyto()); } composer.setSubject( prefix + m_mail[1] ); composer.setMessage( rtext ); composer.setInReplyTo(m_recMail->Msgid()); if ( QDialog::Accepted == QPEApplication::execDialog( &composer ) ) { m_recMail->Wrapper()->answeredMail(m_recMail); } } void ViewMail::slotForward() { if (!m_gotBody) { QMessageBox::information(this, tr("Error"), tr("<p>The mail body is not yet downloaded, so you cannot forward yet."), tr("Ok")); return; } QString ftext; ftext += QString("\n----- Forwarded message from %1 -----\n\n") .arg( m_mail[0] ); if (!m_mail[3].isNull()) ftext += QString("Date: %1\n") .arg( m_mail[3] ); if (!m_mail[0].isNull()) ftext += QString("From: %1\n") .arg( m_mail[0] ); if (!m_mail[1].isNull()) ftext += QString("Subject: %1\n") .arg( m_mail[1] ); ftext += QString("\n%1\n") .arg( m_mail[2]); ftext += QString("----- End forwarded message -----\n"); Settings *settings = new Settings(); ComposeMail composer( settings ,this, 0, true); composer.setSubject( "Fwd: " + m_mail[1] ); composer.setMessage( ftext ); if ( QDialog::Accepted == QPEApplication::execDialog( &composer )) { } } void ViewMail::slotDeleteMail( ) { if ( QMessageBox::warning(this, tr("Delete Mail"), QString( tr("<p>Do you really want to delete this mail? <br><br>" ) + m_mail[0] + " - " + m_mail[1] ) , QMessageBox::Yes, QMessageBox::No ) == QMessageBox::Yes ) { m_recMail->Wrapper()->deleteMail( m_recMail ); hide(); deleted = true; } } MailImageDlg::MailImageDlg(const QString&fname,QWidget *parent, const char *name, bool modal, WFlags f) diff --git a/noncore/net/mail/viewmail.h b/noncore/net/mail/viewmail.h index 297836b..560453a 100644 --- a/noncore/net/mail/viewmail.h +++ b/noncore/net/mail/viewmail.h @@ -1,86 +1,87 @@ #ifndef VIEWMAIL_H #define VIEWMAIL_H #include "viewmailbase.h" #include <libmailwrapper/mailtypes.h> #include <opie2/odialog.h> #include <qlistview.h> #include <qmap.h> #include <qstringlist.h> #include <qvaluelist.h> namespace Opie { namespace MM { class OImageScrollView; } } 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 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 { Q_OBJECT public: ViewMail( QWidget *parent = 0, const char *name = 0, WFlags fl = 0); ~ViewMail(); void hide(); void exec(); void setMail(const RecMailP&mail ); void setBody(const RecBodyP&body); bool deleted; protected: QString deHtml(const QString &string); AttachItem* searchParent(const QValueList<int>&path); AttachItem* lastChild(AttachItem*parent); protected slots: void slotReply(); void slotForward(); void setText(); + void setHeader(); void slotItemClicked( QListViewItem * item , const QPoint & point, int c ); void slotDeleteMail( ); void slotShowHtml( bool ); private: void readConfig(); bool _inLoop; QString m_mailHtml; bool m_gotBody; RecBodyP m_body; RecMailP m_recMail; bool m_showHtml; // 0 from 1 subject 2 bodytext 3 date QMap <int,QString> m_mail; // 0 to 1 cc 2 bcc QMap <int,QStringList> m_mail2; }; class MailImageDlg:public Opie::Ui::ODialog { Q_OBJECT public: MailImageDlg(const QString&,QWidget *parent = 0, const char *name = 0, bool modal = true, WFlags f = 0); ~MailImageDlg(); void setName(const QString&); protected: Opie::MM::OImageScrollView*m_imageview; }; #endif diff --git a/noncore/net/mail/viewmailbase.cpp b/noncore/net/mail/viewmailbase.cpp index cbb98cc..49a0e6a 100644 --- a/noncore/net/mail/viewmailbase.cpp +++ b/noncore/net/mail/viewmailbase.cpp @@ -1,89 +1,90 @@ #include <qtextbrowser.h> #include <qlistview.h> #include <qaction.h> #include <qlabel.h> #include <qvbox.h> #include <qtoolbar.h> #include <qmenubar.h> #include <qpe/resource.h> #include "viewmailbase.h" //#include "opendiag.h" ViewMailBase::ViewMailBase(QWidget *parent, const char *name, WFlags fl) - : QMainWindow(parent, name, fl) + : QMainWindow(parent, name, fl) { - setCaption(tr("E-Mail by %1")); - setToolBarsMovable(false); + setCaption(tr("E-Mail view")); + setToolBarsMovable(false); - toolbar = new QToolBar(this); - menubar = new QMenuBar( toolbar ); - mailmenu = new QPopupMenu( menubar ); - menubar->insertItem( tr( "Mail" ), mailmenu ); + toolbar = new QToolBar(this); + menubar = new QMenuBar( toolbar ); + mailmenu = new QPopupMenu( menubar ); + menubar->insertItem( tr( "Mail" ), mailmenu ); - toolbar->setHorizontalStretchable(true); - addToolBar(toolbar); + toolbar->setHorizontalStretchable(true); + addToolBar(toolbar); - QLabel *spacer = new QLabel(toolbar); - spacer->setBackgroundMode(QWidget::PaletteButton); - toolbar->setStretchableWidget(spacer); + QLabel *spacer = new QLabel(toolbar); + spacer->setBackgroundMode(QWidget::PaletteButton); + toolbar->setStretchableWidget(spacer); - reply = new QAction(tr("Reply"), QIconSet(Resource::loadPixmap("mail/reply")), 0, 0, this); - reply->addTo(toolbar); - reply->addTo(mailmenu); + reply = new QAction(tr("Reply"), QIconSet(Resource::loadPixmap("mail/reply")), 0, 0, this); + reply->addTo(toolbar); + reply->addTo(mailmenu); - forward = new QAction(tr("Forward"), QIconSet(Resource::loadPixmap("mail/forward")), 0, 0, this); - forward->addTo(toolbar); - forward->addTo(mailmenu); + forward = new QAction(tr("Forward"), QIconSet(Resource::loadPixmap("mail/forward")), 0, 0, this); + forward->addTo(toolbar); + forward->addTo(mailmenu); - attachbutton = new QAction(tr("Attachments"), QIconSet(Resource::loadPixmap("mail/attach")), 0, 0, this, 0, true); - attachbutton->addTo(toolbar); - attachbutton->addTo(mailmenu); - connect(attachbutton, SIGNAL(toggled(bool)), SLOT(slotChangeAttachview(bool))); + attachbutton = new QAction(tr("Attachments"), QIconSet(Resource::loadPixmap("mail/attach")), 0, 0, this, 0, true); + attachbutton->addTo(toolbar); + attachbutton->addTo(mailmenu); + connect(attachbutton, SIGNAL(toggled(bool)), SLOT(slotChangeAttachview(bool))); showHtml = new QAction( tr( "Show Html" ), QIconSet( Resource::loadPixmap( "mail/html" ) ), 0, 0, this, 0, true ); showHtml->addTo( toolbar ); showHtml->addTo( mailmenu ); - deleteMail = new QAction(tr("Delete Mail"), QIconSet(Resource::loadPixmap("trash")), 0, 0, this); - deleteMail->addTo(toolbar); - deleteMail->addTo(mailmenu); + deleteMail = new QAction(tr("Delete Mail"), QIconSet(Resource::loadPixmap("trash")), 0, 0, this); + deleteMail->addTo(toolbar); + deleteMail->addTo(mailmenu); - QVBox *view = new QVBox(this); - setCentralWidget(view); + QVBox *view = new QVBox(this); + setCentralWidget(view); - attachments = new QListView(view); - attachments->setMinimumHeight(90); - attachments->setMaximumHeight(90); - attachments->setAllColumnsShowFocus(true); - attachments->addColumn("Mime Type", 60); - attachments->addColumn(tr("Description"), 100); - attachments->addColumn(tr("Filename"), 80); + attachments = new QListView(view); + attachments->setMinimumHeight(90); + attachments->setMaximumHeight(90); + attachments->setAllColumnsShowFocus(true); + attachments->addColumn("Mime Type", 60); + attachments->addColumn(tr("Description"), 100); + attachments->addColumn(tr("Filename"), 80); attachments->addColumn(tr("Size"), 80); attachments->setSorting(-1); - attachments->hide(); + attachments->hide(); - browser = new QTextBrowser(view); + //header = new QTextBrowser(view); + browser = new QTextBrowser(view); -// openDiag = new OpenDiag(view); -// openDiag->hide(); +// openDiag = new OpenDiag(view); +// openDiag->hide(); } void ViewMailBase::slotChangeAttachview(bool state) { - if (state) attachments->show(); - else attachments->hide(); + if (state) attachments->show(); + else attachments->hide(); } void ViewMailBase::keyPressEvent ( QKeyEvent * e ) { if( e->key()==Qt::Key_Escape ) { close(); e->accept(); return; } QWidget::keyPressEvent(e); } diff --git a/noncore/net/mail/viewmailbase.h b/noncore/net/mail/viewmailbase.h index fdaad2a..583b1f6 100644 --- a/noncore/net/mail/viewmailbase.h +++ b/noncore/net/mail/viewmailbase.h @@ -1,38 +1,38 @@ #ifndef VIEWMAILBASE_H #define VIEWMAILBASE_H #include <qmainwindow.h> class QAction; class OpenDiag; class QListView; class QToolBar; class QTextBrowser; class QMenuBar; class QPopupMenu; class ViewMailBase : public QMainWindow { - Q_OBJECT + Q_OBJECT public: - ViewMailBase(QWidget *parent = 0, const char *name = 0, WFlags fl = 0); + ViewMailBase(QWidget *parent = 0, const char *name = 0, WFlags fl = 0); protected: - QAction *reply, *forward, *attachbutton, *deleteMail, *showHtml; - QListView *attachments; - QToolBar *toolbar; - QTextBrowser *browser; - OpenDiag *openDiag; - QMenuBar *menubar; - QPopupMenu *mailmenu; + QAction *reply, *forward, *attachbutton, *deleteMail, *showHtml; + QListView *attachments; + QToolBar *toolbar; + QTextBrowser *browser;//,*header; + OpenDiag *openDiag; + QMenuBar *menubar; + QPopupMenu *mailmenu; protected slots: - void slotChangeAttachview(bool state); + void slotChangeAttachview(bool state); virtual void keyPressEvent ( QKeyEvent * e ); }; #endif |