-rw-r--r-- | noncore/net/mail/accountview.cpp | 1 | ||||
-rw-r--r-- | noncore/net/mail/mail.pro | 3 | ||||
-rw-r--r-- | noncore/net/mail/mainwindow.cpp | 16 | ||||
-rw-r--r-- | noncore/net/mail/mainwindow.h | 2 | ||||
-rw-r--r-- | noncore/net/mail/opiemail.cpp | 12 | ||||
-rw-r--r-- | noncore/net/mail/statuswidget.cpp | 33 | ||||
-rw-r--r-- | noncore/net/mail/statuswidget.h | 24 | ||||
-rw-r--r-- | noncore/net/mail/statuswidgetui.ui | 71 | ||||
-rw-r--r-- | noncore/net/mail/viewmail.cpp | 37 | ||||
-rw-r--r-- | noncore/net/mail/viewmail.h | 4 |
10 files changed, 44 insertions, 159 deletions
diff --git a/noncore/net/mail/accountview.cpp b/noncore/net/mail/accountview.cpp index 0fe8475..c747a8b 100644 --- a/noncore/net/mail/accountview.cpp +++ b/noncore/net/mail/accountview.cpp @@ -50,25 +50,24 @@ void AccountView::slotHold(int button, QListViewItem * item,const QPoint&,int) connect(m,SIGNAL(activated(int)),this,SLOT(slotContextMenu(int))); m->setFocus(); m->exec( QPoint( QCursor::pos().x(), QCursor::pos().y()) ); delete m; } void AccountView::populate( QList<Account> list ) { clear(); imapAccounts.clear(); mhAccounts.clear(); - mhAccounts.append(new MHviewItem(AbstractMail::defaultLocalfolder(),this)); Account *it; for ( it = list.first(); it; it = list.next() ) { if ( it->getType() == MAILLIB::A_IMAP ) { IMAPaccount *imap = static_cast<IMAPaccount *>(it); odebug << "added IMAP " + imap->getAccountName() << oendl; imapAccounts.append(new IMAPviewItem( imap, this )); } else if ( it->getType() == MAILLIB::A_POP3 ) { POP3account *pop3 = static_cast<POP3account *>(it); odebug << "added POP3 " + pop3->getAccountName() << oendl; /* must not be hold 'cause it isn't required */ diff --git a/noncore/net/mail/mail.pro b/noncore/net/mail/mail.pro index e394bbf..a1de8b5 100644 --- a/noncore/net/mail/mail.pro +++ b/noncore/net/mail/mail.pro @@ -2,60 +2,57 @@ CONFIG += qt warn_on quick-app HEADERS = defines.h \ editaccounts.h \ composemail.h \ accountview.h \ accountitem.h \ mainwindow.h \ viewmail.h \ viewmailbase.h \ opiemail.h \ mailistviewitem.h \ settingsdialog.h \ - statuswidget.h \ newmaildir.h \ selectstore.h \ selectsmtp.h \ nntpgroups.h \ nntpgroupsdlg.h SOURCES = main.cpp \ opiemail.cpp \ mainwindow.cpp \ accountview.cpp \ accountitem.cpp \ composemail.cpp \ addresspicker.cpp \ editaccounts.cpp \ viewmail.cpp \ viewmailbase.cpp \ mailistviewitem.cpp \ settingsdialog.cpp \ - statuswidget.cpp \ newmaildir.cpp \ selectstore.cpp \ selectsmtp.cpp \ nntpgroups.cpp \ nntpgroupsdlg.cpp INTERFACES = editaccountsui.ui \ selectmailtypeui.ui \ imapconfigui.ui \ pop3configui.ui \ nntpconfigui.ui \ smtpconfigui.ui \ addresspickerui.ui \ composemailui.ui \ settingsdialogui.ui \ - statuswidgetui.ui \ newmaildirui.ui \ selectstoreui.ui \ nntpgroupsui.ui INCLUDEPATH += $(OPIEDIR)/include /usr/local/include CONFTEST = $$system( echo $CONFIG_TARGET_MACOSX ) contains( CONFTEST, y ){ LIBS += -lqpe -lopieui2 -lopiecore2 -lopiepim2 -lmailwrapper -liconv -lopiemm2 }else{ LIBS += -lqpe -lopieui2 -lopiecore2 -lopiepim2 -lmailwrapper -lopiemm2 diff --git a/noncore/net/mail/mainwindow.cpp b/noncore/net/mail/mainwindow.cpp index 93d80d9..0a45445 100644 --- a/noncore/net/mail/mainwindow.cpp +++ b/noncore/net/mail/mainwindow.cpp @@ -72,84 +72,82 @@ MainWindow::MainWindow( QWidget *parent, const char *name, WFlags flags ) connect( deleteMails, SIGNAL( activated() ), SLOT( slotDeleteMail() ) ); editSettings = new QAction( tr( "Edit settings" ), QIconSet( Resource::loadPixmap("SettingsIcon") ) , 0, 0, this ); editSettings->addTo( settingsMenu ); connect( editSettings, SIGNAL( activated() ), SLOT( slotEditSettings() ) ); editAccounts = new QAction( tr( "Configure accounts" ), QIconSet( Resource::loadPixmap("mail/editaccounts") ) , 0, 0, this ); editAccounts->addTo( settingsMenu ); - //setCentralWidget( view ); - QVBox* wrapperBox = new QVBox( this ); - setCentralWidget( wrapperBox ); - - QWidget *view = new QWidget( wrapperBox ); + QWidget *view = new QWidget( this ); + setCentralWidget( view ); layout = new QBoxLayout ( view, QBoxLayout::LeftToRight ); folderView = new AccountView( view ); folderView->header()->hide(); folderView->setRootIsDecorated( true ); folderView->addColumn( tr( "Mailbox" ) ); layout->addWidget( folderView ); mailView = new QListView( view ); mailView->addColumn( "" ); mailView->addColumn( tr( "Subject" ),QListView::Manual ); mailView->addColumn( tr( "Sender" ),QListView::Manual ); mailView->addColumn( tr( "Size" ),QListView::Manual); mailView->addColumn( tr( "Date" )); mailView->setAllColumnsShowFocus(true); mailView->setShowSortIndicator(true); mailView->setSorting(4,false); - statusWidget = new StatusWidget( wrapperBox ); - statusWidget->hide(); - layout->addWidget( mailView ); layout->setStretchFactor( folderView, 1 ); layout->setStretchFactor( mailView, 2 ); m_Rotate = (QApplication::desktop()->width() > QApplication::desktop()->height()?0:90); slotAdjustLayout(); QPEApplication::setStylusOperation( mailView->viewport(),QPEApplication::RightOnHold); QPEApplication::setStylusOperation( folderView->viewport(),QPEApplication::RightOnHold); connect( mailView, SIGNAL( mouseButtonClicked(int,QListViewItem*,const QPoint&,int) ),this, SLOT( mailLeftClicked(int,QListViewItem*,const QPoint&,int) ) ); connect( mailView, SIGNAL( mouseButtonPressed(int,QListViewItem*,const QPoint&,int) ),this, SLOT( mailHold(int,QListViewItem*,const QPoint&,int) ) ); + connect(folderView, SIGNAL(refreshMailview(const QValueList<RecMailP>&)), this,SLOT(refreshMailView(const QValueList<RecMailP>&))); + connect( composeMail, SIGNAL( activated() ), SLOT( slotComposeMail() ) ); connect( sendQueued, SIGNAL( activated() ), SLOT( slotSendQueued() ) ); + // connect( searchMails, SIGNAL( activated() ), SLOT( slotSearchMails() ) ); connect( editAccounts, SIGNAL( activated() ), SLOT( slotEditAccounts() ) ); // Added by Stefan Eilers to allow starting by addressbook.. // copied from old mail2 + #if !defined(QT_NO_COP) connect( qApp, SIGNAL( appMessage(const QCString&,const QByteArray&) ), this, SLOT( appMessage(const QCString&,const QByteArray&) ) ); m_sysChannel = new QCopChannel( "QPE/System", this ); connect( m_sysChannel, SIGNAL( received(const QCString&,const QByteArray&) ), this, SLOT( systemMessage(const QCString&,const QByteArray&) ) ); #endif - QTimer::singleShot( 1000, this, SLOT( slotAdjustColumns() ) ); + QTimer::singleShot( 10, this, SLOT( slotAdjustColumns() ) ); } MainWindow::~MainWindow() { } void MainWindow::systemMessage( const QCString& msg, const QByteArray& data ) { int _newrotation; QDataStream stream( data, IO_ReadOnly ); if ( msg == "setCurrentRotation(int)" ) { diff --git a/noncore/net/mail/mainwindow.h b/noncore/net/mail/mainwindow.h index 8cec888..ad71a54 100644 --- a/noncore/net/mail/mainwindow.h +++ b/noncore/net/mail/mainwindow.h @@ -1,24 +1,23 @@ #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <qmainwindow.h> #include <qlistview.h> #include <qaction.h> #include <qtoolbar.h> #include <qmenubar.h> #include "accountview.h" -#include "statuswidget.h" #include <libmailwrapper/mailtypes.h> #include <opie2/osmartpointer.h> class RecMail; class QCopChannel; class MainWindow : public QMainWindow { Q_OBJECT public: @@ -36,25 +35,24 @@ protected slots: virtual void slotEditAccounts(); virtual void slotShowFolders( bool show ); virtual void refreshMailView(const QValueList<RecMailP>&); virtual void displayMail(); virtual void slotDeleteMail(); virtual void mailHold(int, QListViewItem *,const QPoint&,int); virtual void slotAdjustLayout(); virtual void slotEditSettings(); virtual void mailLeftClicked( int, QListViewItem *,const QPoint&,int ); protected: QToolBar *toolBar; - StatusWidget *statusWidget; QMenuBar *menuBar; QPopupMenu *mailMenu, *settingsMenu; QAction *composeMail, *sendQueued, *showFolders, *searchMails, *deleteMails, *editSettings, *editAccounts, *syncFolders; AccountView *folderView; QListView *mailView; QBoxLayout *layout; int m_Rotate; QCopChannel* m_sysChannel; }; #endif diff --git a/noncore/net/mail/opiemail.cpp b/noncore/net/mail/opiemail.cpp index 2bbc8f1..9eba23e 100644 --- a/noncore/net/mail/opiemail.cpp +++ b/noncore/net/mail/opiemail.cpp @@ -98,32 +98,25 @@ void ValueExplode::splitit() m_LastParsed.append(tkeyvalues(iLine.mid(startpos),"")); } else { m_LastParsed.append(tkeyvalues(iLine.mid(startpos,pos2-startpos),iLine.mid(pos2+1))); } } } OpieMail::OpieMail( QWidget *parent, const char *name, WFlags ) : MainWindow( parent, name, WStyle_ContextHelp ) { setup_signalblocking(); settings = new Settings(); - folderView->populate( settings->getAccounts() ); -#if 0 - tvaluelist s = ValueExplode("a=1&b=holladiewaldfee&c=3&d=&e=3450"); - for (int i = 0; i < s.count();++i) { - odebug<<"Key: " << s[i].key << " Value: " << s[i].data << oendl; - } -#endif } OpieMail::~OpieMail() { if (settings) delete settings; } void OpieMail::setup_signalblocking() { /* for networking we must block SIGPIPE and Co. */ struct sigaction blocking_action,temp_action; blocking_action.sa_handler = SIG_IGN; @@ -239,28 +232,29 @@ void OpieMail::slotSearchMails() void OpieMail::slotEditSettings() { SettingsDialog settingsDialog( this, 0, true, WStyle_ContextHelp ); QPEApplication::execDialog( &settingsDialog ); } void OpieMail::slotEditAccounts() { odebug << "Edit Accounts" << oendl; EditAccounts eaDialog( settings, this, 0, true, WStyle_ContextHelp ); eaDialog.slotAdjustColumns(); - QPEApplication::execDialog( &eaDialog ); + if (QPEApplication::execDialog( &eaDialog )==QDialog::Rejected);// return; + if ( settings ) delete settings; settings = new Settings(); - + mailView->clear(); folderView->populate( settings->getAccounts() ); } void OpieMail::displayMail() { QListViewItem*item = mailView->currentItem(); if (!item) return; RecMailP mail = ((MailListViewItem*)item)->data(); RecBodyP body = folderView->fetchBody(mail); ViewMail readMail( this,"", Qt::WType_Modal | WStyle_ContextHelp ); readMail.setBody( body ); readMail.setMail( mail ); diff --git a/noncore/net/mail/statuswidget.cpp b/noncore/net/mail/statuswidget.cpp deleted file mode 100644 index 19cf635..0000000 --- a/noncore/net/mail/statuswidget.cpp +++ b/dev/null @@ -1,33 +0,0 @@ -#include <qtimer.h> -#include <qprogressbar.h> -#include <qlabel.h> - -#include "statuswidget.h" - -// the current problem I see is "locking": used exclusive by one sender - - -StatusWidget::StatusWidget( QWidget* parent, const char* name,WFlags fl ) - : StatusWidgetUI( parent, name, fl ) { - - setMaximumHeight( 15 ); - // hide for now since nothing reports decent progress data yet. - statusProgress->hide(); - } - -StatusWidget::~StatusWidget() { -} - -void StatusWidget::setText( const QString& text ) { - show(); - statusText->setText( text ); - QTimer::singleShot( 5000, this, SLOT( hide() ) ); -} - -void StatusWidget::setProgress( int progress ) { - show(); - statusProgress->setProgress( progress ); - if ( progress == 100 ) { - hide(); - } -} diff --git a/noncore/net/mail/statuswidget.h b/noncore/net/mail/statuswidget.h deleted file mode 100644 index 73f0d75..0000000 --- a/noncore/net/mail/statuswidget.h +++ b/dev/null @@ -1,24 +0,0 @@ -#ifndef STATUS_WIDGET_H -#define STATUS_WIDGET_H - -#include <qwidget.h> -#include "statuswidgetui.h" - -class StatusWidget : public StatusWidgetUI { - -Q_OBJECT - -public: - StatusWidget( QWidget* parent = 0, const char* name = 0,WFlags fl = 0 ); - ~StatusWidget(); - - -public slots: - - void setText( const QString& text ); - void setProgress( int progress ); -}; - - -#endif - diff --git a/noncore/net/mail/statuswidgetui.ui b/noncore/net/mail/statuswidgetui.ui deleted file mode 100644 index ffe3528..0000000 --- a/noncore/net/mail/statuswidgetui.ui +++ b/dev/null @@ -1,71 +0,0 @@ -<!DOCTYPE UI><UI> -<class>StatusWidgetUI</class> -<widget> - <class>QWidget</class> - <property stdset="1"> - <name>name</name> - <cstring>StatusWidgetUI</cstring> - </property> - <property stdset="1"> - <name>geometry</name> - <rect> - <x>0</x> - <y>0</y> - <width>596</width> - <height>480</height> - </rect> - </property> - <property stdset="1"> - <name>caption</name> - <string>Form1</string> - </property> - <property> - <name>layoutMargin</name> - </property> - <property> - <name>layoutSpacing</name> - </property> - <hbox> - <property stdset="1"> - <name>margin</name> - <number>3</number> - </property> - <property stdset="1"> - <name>spacing</name> - <number>3</number> - </property> - <widget> - <class>QProgressBar</class> - <property stdset="1"> - <name>name</name> - <cstring>statusProgress</cstring> - </property> - <property stdset="1"> - <name>sizePolicy</name> - <sizepolicy> - <hsizetype>5</hsizetype> - <vsizetype>0</vsizetype> - </sizepolicy> - </property> - </widget> - <widget> - <class>QLabel</class> - <property stdset="1"> - <name>name</name> - <cstring>statusText</cstring> - </property> - <property stdset="1"> - <name>sizePolicy</name> - <sizepolicy> - <hsizetype>5</hsizetype> - <vsizetype>1</vsizetype> - </sizepolicy> - </property> - <property stdset="1"> - <name>text</name> - <string>TextLabel1</string> - </property> - </widget> - </hbox> -</widget> -</UI> diff --git a/noncore/net/mail/viewmail.cpp b/noncore/net/mail/viewmail.cpp index a64a168..5206220 100644 --- a/noncore/net/mail/viewmail.cpp +++ b/noncore/net/mail/viewmail.cpp @@ -187,35 +187,35 @@ void ViewMail::setBody(const RecBodyP&body ) } else { curItem=new AttachItem(attachments,curItem,type,desc,filename,fsize,i,body->Parts()[i]->Positionlist()); } } } void ViewMail::slotShowHtml( bool state ) { m_showHtml = state; - setText(); + setMainText(); } void ViewMail::slotItemClicked( QListViewItem * item , const QPoint & point, int ) { if (!item ) return; if ( ( ( AttachItem* )item )->Partnumber() == -1 ) { - setText(); + setMainText(); 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); } @@ -241,24 +241,33 @@ void ViewMail::slotItemClicked( QListViewItem * item , const QPoint & point, int QFile output(str); output.open(IO_WriteOnly); output.writeBlock(content->Content(),content->Length()); output.close(); delete content; } } } break ; case 2: { + if (m_lastimagepart== (( AttachItem* )item )->Partnumber()) { + if (m_lastdlg) { + setUpdatesEnabled(false); + browser->hide(); + m_lastdlg->show(); + setUpdatesEnabled(true); + return; + } + } QString tmpfile = QString("/tmp/opiemail-image-%1").arg(_icounter++); encodedString*content = m_recMail->Wrapper()->fetchDecodedPart( m_recMail, m_body->Parts()[ ( ( AttachItem* )item )->Partnumber() ] ); if (content && content->Length()) { QFile output(tmpfile); output.open(IO_WriteOnly); output.writeBlock(content->Content(),content->Length()); output.close(); delete content; if (!m_PicsInline) { MailImageDlg iview(""); iview.setName(tmpfile); QPEApplication::execDialog(&iview); @@ -267,120 +276,136 @@ void ViewMail::slotItemClicked( QListViewItem * item , const QPoint & point, int m_lastdlg=new Opie::MM::OImageScrollView("",browser->parentWidget(),false); m_lastdlg->setAutoScale(true); } //m_lastdlg->setImage(""); m_lastdlg->setImage(tmpfile); browser->hide(); m_lastdlg->show(); } output.remove(); } else { QMessageBox::critical(this, tr("Reading attachment"), tr("Could not read content of attachment")); } + m_lastimagepart=(( AttachItem* )item )->Partnumber(); } break; case 1: if ( ( ( AttachItem* )item )->Partnumber() == -1 ) { - setText(); + setMainText(); } 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() ] ) ); + if (m_lastdlg) { + m_lastdlg->hide(); + browser->show(); + } + if (m_lasttextpart == ( ( AttachItem* )item )->Partnumber() ) return; + m_lasttextpart = ( ( AttachItem* )item )->Partnumber(); + QString s = m_recMail->Wrapper()->fetchTextPart( m_recMail, m_body->Parts()[ ( ( AttachItem* )item )->Partnumber() ] );; + if (item->text(0).right(4)!="html") { + s = QString("<html><body>\n<font face=fixed>%1</font></body></html>").arg(QStyleSheet::convertFromPlainText(s)); + } + browser->setText(s); } } 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(); + setMainText(); } 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) ) ); connect( showPicsInline, SIGNAL( toggled(bool) ), SLOT( slotImageInline(bool) ) ); attachments->setEnabled(m_gotBody); connect( attachments, SIGNAL( clicked(QListViewItem*,const QPoint&, int) ), SLOT( slotItemClicked(QListViewItem*,const QPoint&, int) ) ); m_lastdlg = 0; _icounter = 0; + m_lastimagepart = -1; + m_lasttextpart = -2; readConfig(); attachments->setSorting(-1); } void ViewMail::slotImageInline(bool how) { Config cfg( "mail" ); cfg.writeEntry( "showPicsInline", how); m_PicsInline = how; if (m_lastdlg&&!how) { browser->show(); m_lastdlg->hide(); m_lastdlg->reparent(0,QPoint(0,0),false); delete m_lastdlg; m_lastdlg = 0; + m_lastimagepart = -1; } } void ViewMail::readConfig() { Config cfg( "mail" ); cfg.setGroup( "Settings" ); m_showHtml = cfg.readBoolEntry( "showHtml", false ); m_PicsInline = cfg.readBoolEntry( "showPicsInline", true ); showPicsInline->setOn(m_PicsInline); showHtml->setOn( m_showHtml ); } -void ViewMail::setText() +void ViewMail::setMainText() { QString toString; QString ccString; QString bccString; QString mailHtml; if (m_lastdlg) { m_lastdlg->hide(); } browser->show(); + if (m_lasttextpart == -1) return; + m_lasttextpart = -1; 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); } diff --git a/noncore/net/mail/viewmail.h b/noncore/net/mail/viewmail.h index f5033f0..18b1796 100644 --- a/noncore/net/mail/viewmail.h +++ b/noncore/net/mail/viewmail.h @@ -46,41 +46,43 @@ public: bool deleted; protected: QString deHtml(const QString &string); AttachItem* searchParent(const QValueList<int>&path); AttachItem* lastChild(AttachItem*parent); Opie::MM::OImageScrollView*m_lastdlg; protected slots: void slotReply(); void slotForward(); - void setText(); + void setMainText(); void slotItemClicked( QListViewItem * item , const QPoint & point, int c ); void slotDeleteMail( ); void slotShowHtml( bool ); void slotImageInline(bool); private: void readConfig(); bool _inLoop; QString m_mailHtml; bool m_gotBody; RecBodyP m_body; RecMailP m_recMail; bool m_showHtml:1; bool m_PicsInline:1; unsigned int _icounter; + int m_lastimagepart; + int m_lasttextpart; // 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); |