summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/unsupported/mail2/composer.cpp28
-rw-r--r--noncore/unsupported/mail2/composer.h5
-rw-r--r--noncore/unsupported/mail2/mainwindow.cpp26
-rw-r--r--noncore/unsupported/mail2/searchdiag.cpp6
-rw-r--r--noncore/unsupported/mail2/viewmail.cpp44
-rw-r--r--noncore/unsupported/mail2/viewmail.h5
6 files changed, 88 insertions, 26 deletions
diff --git a/noncore/unsupported/mail2/composer.cpp b/noncore/unsupported/mail2/composer.cpp
index 82ed117..7f65dba 100644
--- a/noncore/unsupported/mail2/composer.cpp
+++ b/noncore/unsupported/mail2/composer.cpp
@@ -1,93 +1,119 @@
1#include <qmultilineedit.h> 1#include <qmultilineedit.h>
2#include <qmessagebox.h> 2#include <qmessagebox.h>
3#include <qpopupmenu.h> 3#include <qpopupmenu.h>
4#include <qcombobox.h> 4#include <qcombobox.h>
5#include <qlineedit.h> 5#include <qlineedit.h>
6#include <qaction.h> 6#include <qaction.h>
7#include <qtimer.h> 7#include <qtimer.h>
8#include <qlabel.h> 8#include <qlabel.h>
9#include <qapplication.h>
9 10
10#include <qpe/resource.h> 11#include <qpe/resource.h>
11 12
12#include "addresspicker.h" 13#include "addresspicker.h"
13#include "listviewplus.h" 14#include "listviewplus.h"
14#include "smtphandler.h" 15#include "smtphandler.h"
15#include "attachdiag.h" 16#include "attachdiag.h"
16#include "composer.h" 17#include "composer.h"
17#include "rename.h" 18#include "rename.h"
18 19
19AttachViewItem::AttachViewItem(QListView *parent, Attachment &attachment) 20AttachViewItem::AttachViewItem(QListView *parent, Attachment &attachment)
20 : QListViewItem(parent), _attachment(attachment) 21 : QListViewItem(parent), _attachment(attachment)
21{ 22{
22 setPixmap(0, _attachment.docLnk()->pixmap().isNull() ? Resource::loadPixmap("UnknownDocument-14") : _attachment.docLnk()->pixmap()); 23 setPixmap(0, _attachment.docLnk()->pixmap().isNull() ? Resource::loadPixmap("UnknownDocument-14") : _attachment.docLnk()->pixmap());
23 setText(0, _attachment.newName().isEmpty() ? _attachment.fileName() : _attachment.newName()); 24 setText(0, _attachment.newName().isEmpty() ? _attachment.fileName() : _attachment.newName());
24 setText(1, _attachment.description()); 25 setText(1, _attachment.description());
25} 26}
26 27
27Composer::Composer(QWidget *parent, const char *name, WFlags fl) 28Composer::Composer(QWidget *parent, const char *name, WFlags fl)
28 : ComposerBase(parent, name, fl) 29 : ComposerBase(parent, name, fl), _inLoop(false)
29{ 30{
30 abort->setEnabled(false); 31 abort->setEnabled(false);
31 to->setFocus(); 32 to->setFocus();
32 33
33 connect(sendmail, SIGNAL(activated()), SLOT(slotSendMail())); 34 connect(sendmail, SIGNAL(activated()), SLOT(slotSendMail()));
34 connect(addressbook, SIGNAL(activated()), SLOT(slotOpenAddressPicker())); 35 connect(addressbook, SIGNAL(activated()), SLOT(slotOpenAddressPicker()));
35 connect(addattach, SIGNAL(activated()), SLOT(slotAddAttach())); 36 connect(addattach, SIGNAL(activated()), SLOT(slotAddAttach()));
36 connect(delattach, SIGNAL(activated()), SLOT(slotDelAttach())); 37 connect(delattach, SIGNAL(activated()), SLOT(slotDelAttach()));
37 38
38 connect(from, SIGNAL(activated(int)), SLOT(slotFromChanged(int))); 39 connect(from, SIGNAL(activated(int)), SLOT(slotFromChanged(int)));
39 40
40 connect(attachPopup, SIGNAL(activated(int)), SLOT(slotPopupHandler(int))); 41 connect(attachPopup, SIGNAL(activated(int)), SLOT(slotPopupHandler(int)));
41 42
42 QTimer::singleShot(0, this, SLOT(slotFillStuff())); 43 QTimer::singleShot(0, this, SLOT(slotFillStuff()));
43 QTimer::singleShot(0, this, SLOT(slotResizing())); 44 QTimer::singleShot(0, this, SLOT(slotResizing()));
44} 45}
45 46
47Composer::~Composer()
48{
49 hide();
50}
51
52void Composer::hide()
53{
54 QWidget::hide();
55
56 if (_inLoop) {
57 _inLoop = false;
58 qApp->exit_loop();
59 }
60}
61
62void Composer::exec()
63{
64 show();
65
66 if (!_inLoop) {
67 _inLoop = true;
68 qApp->enter_loop();
69 }
70}
71
46void Composer::setSendMail(SendMail &sendMail) 72void Composer::setSendMail(SendMail &sendMail)
47{ 73{
48 to->setText(sendMail.to()); 74 to->setText(sendMail.to());
49 cc->setText(sendMail.cc()); 75 cc->setText(sendMail.cc());
50 bcc->setText(sendMail.bcc()); 76 bcc->setText(sendMail.bcc());
51 subject->setText(sendMail.subject()); 77 subject->setText(sendMail.subject());
52 message->setText(sendMail.message()); 78 message->setText(sendMail.message());
53 _inReplyTo = sendMail.inReplyTo(); 79 _inReplyTo = sendMail.inReplyTo();
54 80
55 QValueList<Attachment> attachments = sendMail.attachments(); 81 QValueList<Attachment> attachments = sendMail.attachments();
56 QValueList<Attachment>::Iterator it; 82 QValueList<Attachment>::Iterator it;
57 for (it = attachments.begin(); it != attachments.end(); it++) { 83 for (it = attachments.begin(); it != attachments.end(); it++) {
58 (void) new AttachViewItem(attachView, *it); 84 (void) new AttachViewItem(attachView, *it);
59 if (attachView->isHidden()) attachView->show(); 85 if (attachView->isHidden()) attachView->show();
60 } 86 }
61} 87}
62 88
63void Composer::slotResizing() 89void Composer::slotResizing()
64{ 90{
65 from->setMaximumWidth(width() - fromBox->width()); 91 from->setMaximumWidth(width() - fromBox->width());
66 from->resize(width() - fromBox->width(), y()); 92 from->resize(width() - fromBox->width(), y());
67} 93}
68 94
69void Composer::slotPopupHandler(int itemid) 95void Composer::slotPopupHandler(int itemid)
70{ 96{
71 if (attachView->currentItem() == NULL) { 97 if (attachView->currentItem() == NULL) {
72 QMessageBox::information(this, tr("Error"), tr("Please select an entry first."), tr("Ok")); 98 QMessageBox::information(this, tr("Error"), tr("Please select an entry first."), tr("Ok"));
73 return; 99 return;
74 } 100 }
75 101
76 if (itemid == POPUP_ATTACH_RENAME) { 102 if (itemid == POPUP_ATTACH_RENAME) {
77 QString tmp = Rename::rename(attachView->currentItem()->text(0), this); 103 QString tmp = Rename::rename(attachView->currentItem()->text(0), this);
78 if (tmp != QString(0)) attachView->currentItem()->setText(0, tmp); 104 if (tmp != QString(0)) attachView->currentItem()->setText(0, tmp);
79 } else if (itemid == POPUP_ATTACH_DESC) { 105 } else if (itemid == POPUP_ATTACH_DESC) {
80 QString tmp = Rename::getText(tr("Set Description"), tr("<div align=center>Description"), this); 106 QString tmp = Rename::getText(tr("Set Description"), tr("<div align=center>Description"), this);
81 if (tmp != QString(0)) attachView->currentItem()->setText(1, tmp); 107 if (tmp != QString(0)) attachView->currentItem()->setText(1, tmp);
82 } else if (itemid == POPUP_ATTACH_REMOVE) { 108 } else if (itemid == POPUP_ATTACH_REMOVE) {
83 attachView->takeItem(attachView->currentItem()); 109 attachView->takeItem(attachView->currentItem());
84 } 110 }
85} 111}
86 112
87void Composer::slotSendMail() 113void Composer::slotSendMail()
88{ 114{
89 if (to->text().find(QRegExp(".*\\@.*\\..*")) == -1) { 115 if (to->text().find(QRegExp(".*\\@.*\\..*")) == -1) {
90 QMessageBox::information(this, tr("Error"), tr("<p>You have to specify a recipient.<br>(eg: foo@bar.org)</p>"), tr("Ok")); 116 QMessageBox::information(this, tr("Error"), tr("<p>You have to specify a recipient.<br>(eg: foo@bar.org)</p>"), tr("Ok"));
91 return; 117 return;
92 } 118 }
93 119
diff --git a/noncore/unsupported/mail2/composer.h b/noncore/unsupported/mail2/composer.h
index a1af121..2640d7e 100644
--- a/noncore/unsupported/mail2/composer.h
+++ b/noncore/unsupported/mail2/composer.h
@@ -1,52 +1,57 @@
1#ifndef COMPOSER_H 1#ifndef COMPOSER_H
2#define COMPOSER_H 2#define COMPOSER_H
3 3
4#include <qlistview.h> 4#include <qlistview.h>
5#include <qpe/applnk.h> 5#include <qpe/applnk.h>
6 6
7#include "mailfactory.h" 7#include "mailfactory.h"
8#include "composerbase.h" 8#include "composerbase.h"
9#include "configfile.h" 9#include "configfile.h"
10 10
11class AttachViewItem : public QListViewItem 11class AttachViewItem : public QListViewItem
12{ 12{
13public: 13public:
14 AttachViewItem(QListView *parent, Attachment &attachment); 14 AttachViewItem(QListView *parent, Attachment &attachment);
15 15
16 Attachment attachment() { return _attachment; } 16 Attachment attachment() { return _attachment; }
17 17
18private: 18private:
19 Attachment _attachment; 19 Attachment _attachment;
20 20
21}; 21};
22 22
23class Composer : public ComposerBase 23class Composer : public ComposerBase
24{ 24{
25 Q_OBJECT 25 Q_OBJECT
26 26
27public: 27public:
28 Composer(QWidget *parent = 0, const char *name = 0, WFlags fl = Qt::WType_Modal); 28 Composer(QWidget *parent = 0, const char *name = 0, WFlags fl = Qt::WType_Modal);
29 ~Composer();
30
31 void hide();
32 void exec();
29 33
30 void setSendMail(SendMail &sendMail); 34 void setSendMail(SendMail &sendMail);
31 35
32protected slots: 36protected slots:
33 void slotPopupHandler(int itemid); 37 void slotPopupHandler(int itemid);
34 void slotSendMail(); 38 void slotSendMail();
35 void slotSendError(const QString &); 39 void slotSendError(const QString &);
36 void slotSendFinished(); 40 void slotSendFinished();
37 void slotResizing(); 41 void slotResizing();
38 void slotFillStuff(); 42 void slotFillStuff();
39 void slotFromChanged(int id); 43 void slotFromChanged(int id);
40 void slotOpenAddressPicker(); 44 void slotOpenAddressPicker();
41 void slotAddAttach(); 45 void slotAddAttach();
42 void slotDelAttach(); 46 void slotDelAttach();
43 47
44protected: 48protected:
45 QValueList<Account> accountsLoaded; 49 QValueList<Account> accountsLoaded;
46 50
47private: 51private:
52 bool _inLoop;
48 QString _inReplyTo; 53 QString _inReplyTo;
49 54
50}; 55};
51 56
52#endif 57#endif
diff --git a/noncore/unsupported/mail2/mainwindow.cpp b/noncore/unsupported/mail2/mainwindow.cpp
index 4d15e23..2230dc0 100644
--- a/noncore/unsupported/mail2/mainwindow.cpp
+++ b/noncore/unsupported/mail2/mainwindow.cpp
@@ -1,65 +1,65 @@
1#include <qprogressbar.h> 1#include <qprogressbar.h>
2#include <qmessagebox.h> 2#include <qmessagebox.h>
3#include <qaction.h> 3#include <qaction.h>
4#include <qlabel.h> 4#include <qlabel.h>
5 5
6#include "folderwidget.h" 6#include "folderwidget.h"
7#include "mainwindow.h" 7#include "mainwindow.h"
8#include "configdiag.h" 8#include "configdiag.h"
9#include "configfile.h" 9#include "configfile.h"
10#include "searchdiag.h" 10#include "searchdiag.h"
11#include "mailtable.h" 11#include "mailtable.h"
12#include "composer.h" 12#include "composer.h"
13#include "viewmail.h" 13#include "viewmail.h"
14 14
15MainWindow::MainWindow(QWidget *parent, const char *name, WFlags fl) 15MainWindow::MainWindow(QWidget *parent, const char *name, WFlags fl)
16 : MainWindowBase(parent, name, fl) 16 : MainWindowBase(parent, name, fl)
17{ 17{
18 stop->setEnabled(false); 18 stop->setEnabled(false);
19 19
20 connect(folderView, SIGNAL(status(const QString &)), statusLabel, SLOT(setText(const QString &))); 20 connect(folderView, SIGNAL(status(const QString &)), statusLabel, SLOT(setText(const QString &)));
21 connect(folderView, SIGNAL(folderSelected(Folder)), mailView, SLOT(setFolder(Folder))); 21 connect(folderView, SIGNAL(folderSelected(Folder)), mailView, SLOT(setFolder(Folder)));
22 22
23 connect(mailView, SIGNAL(mailClicked(IMAPResponseFETCH, IMAPHandler *)), SLOT(mailClicked(IMAPResponseFETCH, IMAPHandler *))); 23 connect(mailView, SIGNAL(mailClicked(IMAPResponseFETCH, IMAPHandler *)), SLOT(mailClicked(IMAPResponseFETCH, IMAPHandler *)));
24 connect(mailView, SIGNAL(status(const QString &)), statusLabel, SLOT(setText(const QString &))); 24 connect(mailView, SIGNAL(status(const QString &)), statusLabel, SLOT(setText(const QString &)));
25 connect(mailView, SIGNAL(totalSteps(int)), statusProgress, SLOT(setTotalSteps(int))); 25 connect(mailView, SIGNAL(totalSteps(int)), statusProgress, SLOT(setTotalSteps(int)));
26 connect(mailView, SIGNAL(progress(int)), statusProgress, SLOT(setProgress(int))); 26 connect(mailView, SIGNAL(progress(int)), statusProgress, SLOT(setProgress(int)));
27 connect(mailView, SIGNAL(resetProgress()), statusProgress, SLOT(reset())); 27 connect(mailView, SIGNAL(resetProgress()), statusProgress, SLOT(reset()));
28 connect(mailView, SIGNAL(stopEnabled(bool)), stop, SLOT(setEnabled(bool))); 28 connect(mailView, SIGNAL(stopEnabled(bool)), stop, SLOT(setEnabled(bool)));
29 29
30 connect(stop, SIGNAL(activated()), mailView, SLOT(stop())); 30 connect(stop, SIGNAL(activated()), mailView, SLOT(stop()));
31 31
32 connect(compose, SIGNAL(activated()), SLOT(slotCompose())); 32 connect(compose, SIGNAL(activated()), SLOT(slotCompose()));
33 connect(findmails, SIGNAL(activated()), SLOT(slotSearch())); 33 connect(findmails, SIGNAL(activated()), SLOT(slotSearch()));
34 connect(configure, SIGNAL(activated()), SLOT(slotConfigure())); 34 connect(configure, SIGNAL(activated()), SLOT(slotConfigure()));
35} 35}
36 36
37void MainWindow::slotCompose() 37void MainWindow::slotCompose()
38{ 38{
39 Composer *composer = new Composer(); 39 Composer composer(this, 0, true);
40 composer->showMaximized(); 40 composer.showMaximized();
41 composer->show(); 41 composer.exec();
42} 42}
43 43
44void MainWindow::slotSearch() 44void MainWindow::slotSearch()
45{ 45{
46 SearchDiag *searchDiag = new SearchDiag(this, 0, true); 46 SearchDiag searchDiag(this, 0, true);
47 searchDiag->showMaximized(); 47 searchDiag.showMaximized();
48 searchDiag->show(); 48 searchDiag.exec();
49} 49}
50 50
51void MainWindow::slotConfigure() 51void MainWindow::slotConfigure()
52{ 52{
53 ConfigDiag *configDiag = new ConfigDiag(this, 0, true); 53 ConfigDiag configDiag(this, 0, true);
54 configDiag->showMaximized(); 54 configDiag.showMaximized();
55 configDiag->show(); 55 configDiag.exec();
56 56
57 connect(configDiag, SIGNAL(changed()), folderView, SLOT(update())); 57 connect(&configDiag, SIGNAL(changed()), folderView, SLOT(update()));
58} 58}
59 59
60void MainWindow::mailClicked(IMAPResponseFETCH mail, IMAPHandler *handler) 60void MainWindow::mailClicked(IMAPResponseFETCH mail, IMAPHandler *handler)
61{ 61{
62 ViewMail *viewMail = new ViewMail(mail, handler); 62 ViewMail viewMail(mail, handler, this, 0, true);
63 viewMail->showMaximized(); 63 viewMail.showMaximized();
64 viewMail->show(); 64 viewMail.exec();
65} 65}
diff --git a/noncore/unsupported/mail2/searchdiag.cpp b/noncore/unsupported/mail2/searchdiag.cpp
index 33b8afb..907f6ff 100644
--- a/noncore/unsupported/mail2/searchdiag.cpp
+++ b/noncore/unsupported/mail2/searchdiag.cpp
@@ -67,62 +67,62 @@ void SearchDiag::slotIMAPSelect(IMAPResponse &response)
67 response.imapHandler()->iSearch("BODY \"" + searchFor->text() + "\""); 67 response.imapHandler()->iSearch("BODY \"" + searchFor->text() + "\"");
68 } else if (in->currentItem() == INMENU_HEADERF) { 68 } else if (in->currentItem() == INMENU_HEADERF) {
69 response.imapHandler()->iSearch("HEADER \""+ other->currentText() + "\" \"" + searchFor->text() + "\""); 69 response.imapHandler()->iSearch("HEADER \""+ other->currentText() + "\" \"" + searchFor->text() + "\"");
70 } else if (in->currentItem() == INMENU_SUBJECT) { 70 } else if (in->currentItem() == INMENU_SUBJECT) {
71 response.imapHandler()->iSearch("SUBJECT \"" + searchFor->text() + "\""); 71 response.imapHandler()->iSearch("SUBJECT \"" + searchFor->text() + "\"");
72 } else if (in->currentItem() == INMENU_FROM) { 72 } else if (in->currentItem() == INMENU_FROM) {
73 response.imapHandler()->iSearch("FROM \"" + searchFor->text() + "\""); 73 response.imapHandler()->iSearch("FROM \"" + searchFor->text() + "\"");
74 } else if (in->currentItem() == INMENU_TO) { 74 } else if (in->currentItem() == INMENU_TO) {
75 response.imapHandler()->iSearch("TO \"" + searchFor->text() + "\""); 75 response.imapHandler()->iSearch("TO \"" + searchFor->text() + "\"");
76 } else return; 76 } else return;
77 77
78 connect(response.imapHandler(), SIGNAL(gotResponse(IMAPResponse &)), SLOT(slotIMAPSearch(IMAPResponse &))); 78 connect(response.imapHandler(), SIGNAL(gotResponse(IMAPResponse &)), SLOT(slotIMAPSearch(IMAPResponse &)));
79 } else { 79 } else {
80 QMessageBox::warning(this, tr("Error"), tr("<p>Could not select the folder. Aborting. (Server said: %1)").arg(response.statusResponse().comment()), tr("Ok")); 80 QMessageBox::warning(this, tr("Error"), tr("<p>Could not select the folder. Aborting. (Server said: %1)").arg(response.statusResponse().comment()), tr("Ok"));
81 } 81 }
82} 82}
83 83
84void SearchDiag::slotIMAPSearch(IMAPResponse &response) 84void SearchDiag::slotIMAPSearch(IMAPResponse &response)
85{ 85{
86 disconnect(response.imapHandler(), SIGNAL(gotResponse(IMAPResponse &)), this, SLOT(slotIMAPSearch(IMAPResponse &))); 86 disconnect(response.imapHandler(), SIGNAL(gotResponse(IMAPResponse &)), this, SLOT(slotIMAPSearch(IMAPResponse &)));
87 87
88 if (response.statusResponse().status() == IMAPResponseEnums::OK) { 88 if (response.statusResponse().status() == IMAPResponseEnums::OK) {
89 IMAPResponseSEARCH results = response.SEARCH()[0]; 89 IMAPResponseSEARCH results = response.SEARCH()[0];
90 if (results.mails().count() == 0) { 90 if (results.mails().count() == 0) {
91 QMessageBox::information(this, tr("Results"), tr("<p>No mails match your criteria.</p>"), tr("Ok")); 91 QMessageBox::information(this, tr("Results"), tr("<p>No mails match your criteria.</p>"), tr("Ok"));
92 return; 92 return;
93 } 93 }
94 94
95 response.imapHandler()->iFetch(results.mails().join(","), "ENVELOPE FLAGS UID"); 95 response.imapHandler()->iFetch(results.mails().join(","), "ENVELOPE FLAGS UID");
96 connect(response.imapHandler(), SIGNAL(gotResponse(IMAPResponse &)), SLOT(slotIMAPFetch(IMAPResponse &))); 96 connect(response.imapHandler(), SIGNAL(gotResponse(IMAPResponse &)), SLOT(slotIMAPFetch(IMAPResponse &)));
97 } else { 97 } else {
98 QMessageBox::warning(this, tr("Error"), tr("<p>Search failed. (Server said: %1)").arg(response.statusResponse().comment()), tr("Ok")); 98 QMessageBox::warning(this, tr("Error"), tr("<p>Search failed. (Server said: %1)").arg(response.statusResponse().comment()), tr("Ok"));
99 } 99 }
100} 100}
101 101
102void SearchDiag::slotIMAPFetch(IMAPResponse &response) 102void SearchDiag::slotIMAPFetch(IMAPResponse &response)
103{ 103{
104 disconnect(response.imapHandler(), SIGNAL(gotResponse(IMAPResponse &)), this, SLOT(slotIMAPSearch(IMAPResponse &))); 104 disconnect(response.imapHandler(), SIGNAL(gotResponse(IMAPResponse &)), this, SLOT(slotIMAPSearch(IMAPResponse &)));
105 105
106 if (response.statusResponse().status() == IMAPResponseEnums::OK) { 106 if (response.statusResponse().status() == IMAPResponseEnums::OK) {
107 mailTable->setHeaders(response.FETCH()); 107 mailTable->setHeaders(response.FETCH());
108 } else { 108 } else {
109 QMessageBox::warning(this, tr("Error"), tr("<p>Couldn't fetch the mail headers. (Server said: %1)").arg(response.statusResponse().comment())); 109 QMessageBox::warning(this, tr("Error"), tr("<p>Couldn't fetch the mail headers. (Server said: %1)").arg(response.statusResponse().comment()));
110 } 110 }
111} 111}
112 112
113void SearchDiag::slotMailClicked(IMAPResponseFETCH fetch, IMAPHandler *) 113void SearchDiag::slotMailClicked(IMAPResponseFETCH fetch, IMAPHandler *)
114{ 114{
115 ViewMail *viewMail = new ViewMail(fetch, _folder.topFolder().handler()); 115 ViewMail viewMail(fetch, _folder.topFolder().handler(), this, 0, true);
116 viewMail->showMaximized(); 116 viewMail.showMaximized();
117 viewMail->show(); 117 viewMail.exec();
118} 118}
119 119
120void SearchDiag::slotInItemActivated(int index) 120void SearchDiag::slotInItemActivated(int index)
121{ 121{
122 if (index == INMENU_HEADERF) { 122 if (index == INMENU_HEADERF) {
123 other->setEnabled(true); 123 other->setEnabled(true);
124 } else { 124 } else {
125 other->setEnabled(false); 125 other->setEnabled(false);
126 } 126 }
127} 127}
128 128
diff --git a/noncore/unsupported/mail2/viewmail.cpp b/noncore/unsupported/mail2/viewmail.cpp
index ae1f5f3..3c88d99 100644
--- a/noncore/unsupported/mail2/viewmail.cpp
+++ b/noncore/unsupported/mail2/viewmail.cpp
@@ -1,172 +1,198 @@
1#include <qtextbrowser.h> 1#include <qtextbrowser.h>
2#include <qmessagebox.h> 2#include <qmessagebox.h>
3#include <qaction.h> 3#include <qaction.h>
4#include <qapplication.h>
4 5
5#include "mailfactory.h" 6#include "mailfactory.h"
6#include "composer.h" 7#include "composer.h"
7#include "viewmail.h" 8#include "viewmail.h"
8 9
9AttachItem::AttachItem(QListView *parent, AttachItemStore &attachItemStore) 10AttachItem::AttachItem(QListView *parent, AttachItemStore &attachItemStore)
10 : QListViewItem(parent), _attachItemStore(attachItemStore) 11 : QListViewItem(parent), _attachItemStore(attachItemStore)
11{ 12{
12 setText(0, _attachItemStore.mimeType()); 13 setText(0, _attachItemStore.mimeType());
13 setText(1, _attachItemStore.fileName()); 14 setText(1, _attachItemStore.fileName());
14 setText(2, _attachItemStore.description()); 15 setText(2, _attachItemStore.description());
15} 16}
16 17
17AttachItem::AttachItem(QListViewItem *parent, AttachItemStore &attachItemStore) 18AttachItem::AttachItem(QListViewItem *parent, AttachItemStore &attachItemStore)
18 : QListViewItem(parent), _attachItemStore(attachItemStore) 19 : QListViewItem(parent), _attachItemStore(attachItemStore)
19{ 20{
20 setText(0, _attachItemStore.mimeType()); 21 setText(0, _attachItemStore.mimeType());
21 setText(1, _attachItemStore.fileName()); 22 setText(1, _attachItemStore.fileName());
22 setText(2, _attachItemStore.description()); 23 setText(2, _attachItemStore.description());
23} 24}
24 25
25ViewMail::ViewMail(IMAPResponseFETCH &mail, IMAPHandler *handler, QWidget *parent, const char *name, WFlags fl) 26ViewMail::ViewMail(IMAPResponseFETCH &mail, IMAPHandler *handler, QWidget *parent, const char *name, WFlags fl)
26 : ViewMailBase(parent, name, fl), _mail(mail), _handler(handler) 27 : ViewMailBase(parent, name, fl), _inLoop(false), _mail(mail), _handler(handler)
27{ 28{
28 setCaption(caption().arg(mail.envelope().from()[0].name())); 29 setCaption(caption().arg(mail.envelope().from()[0].name()));
29 30
30 _gotBody = false; 31 _gotBody = false;
31 _mailHtml = tr( 32 _mailHtml = tr(
32 "<html><body>" 33 "<html><body>"
33 "<div align=center><b>%1</b></div>" 34 "<div align=center><b>%1</b></div>"
34 "<b>From:</b> %2<br>" 35 "<b>From:</b> %2<br>"
35 "<b>To:</b> %3<br>" 36 "<b>To:</b> %3<br>"
36 "%4" 37 "%4"
37 "%5" 38 "%5"
38 "<b>Date:</b> %6<hr>" 39 "<b>Date:</b> %6<hr>"
39 "<font face=fixed>%7</font>") 40 "<font face=fixed>%7</font>")
40 .arg(deHtml(mail.envelope().subject().isNull() ? tr("(no subject)") 41 .arg(deHtml(mail.envelope().subject().isNull() ? tr("(no subject)")
41 : deHtml(mail.envelope().subject()))) 42 : deHtml(mail.envelope().subject())))
42 .arg(deHtml(mail.envelope().from().toString().isNull() ? tr("(no from)") 43 .arg(deHtml(mail.envelope().from().toString().isNull() ? tr("(no from)")
43 : mail.envelope().from().toString())) 44 : mail.envelope().from().toString()))
44 .arg(deHtml(mail.envelope().to().toString().isNull() ? tr("(no recipient)") 45 .arg(deHtml(mail.envelope().to().toString().isNull() ? tr("(no recipient)")
45 : mail.envelope().to().toString())) 46 : mail.envelope().to().toString()))
46 .arg(mail.envelope().cc().toString().isNull() ? QString(0) 47 .arg(mail.envelope().cc().toString().isNull() ? QString(0)
47 : tr("<b>Cc:</b> %1<br>").arg(deHtml(mail.envelope().cc().toString()))) 48 : tr("<b>Cc:</b> %1<br>").arg(deHtml(mail.envelope().cc().toString())))
48 .arg(mail.envelope().bcc().toString().isNull() ? QString(0) 49 .arg(mail.envelope().bcc().toString().isNull() ? QString(0)
49 : tr("<b>Bcc:</b> %1<br>").arg(deHtml(mail.envelope().bcc().toString()))) 50 : tr("<b>Bcc:</b> %1<br>").arg(deHtml(mail.envelope().bcc().toString())))
50 .arg(mail.envelope().mailDate().isNull() ? tr("(no date)") 51 .arg(mail.envelope().mailDate().isNull() ? tr("(no date)")
51 : mail.envelope().mailDate()) 52 : mail.envelope().mailDate())
52 .arg("%1"); 53 .arg("%1");
53 54
54 connect(reply, SIGNAL(activated()), SLOT(slotReply())); 55 connect(reply, SIGNAL(activated()), SLOT(slotReply()));
55 connect(forward, SIGNAL(activated()), SLOT(slotForward())); 56 connect(forward, SIGNAL(activated()), SLOT(slotForward()));
56 57
57 attachments->setEnabled(_gotBody); 58 attachments->setEnabled(_gotBody);
58 browser->setText(QString(_mailHtml).arg(tr("Getting mail body from server. Please wait..."))); 59 browser->setText(QString(_mailHtml).arg(tr("Getting mail body from server. Please wait...")));
59 60
60 _handler->iUid("FETCH", QString("%1 (BODY[1])").arg(mail.uid())); 61 _handler->iUid("FETCH", QString("%1 (BODY[1])").arg(mail.uid()));
61 connect(_handler, SIGNAL(gotResponse(IMAPResponse &)), SLOT(slotIMAPUid(IMAPResponse &))); 62 connect(_handler, SIGNAL(gotResponse(IMAPResponse &)), SLOT(slotIMAPUid(IMAPResponse &)));
62} 63}
63 64
65ViewMail::~ViewMail()
66{
67 hide();
68}
69
70void ViewMail::hide()
71{
72 QWidget::hide();
73
74 if (_inLoop) {
75 _inLoop = false;
76 qApp->exit_loop();
77 }
78}
79
80void ViewMail::exec()
81{
82 show();
83
84 if (!_inLoop) {
85 _inLoop = true;
86 qApp->enter_loop();
87 }
88}
89
64QString ViewMail::deHtml(const QString &string) 90QString ViewMail::deHtml(const QString &string)
65{ 91{
66 QString string_ = string; 92 QString string_ = string;
67 string_.replace(QRegExp("&"), "&amp;"); 93 string_.replace(QRegExp("&"), "&amp;");
68 string_.replace(QRegExp("<"), "&lt;"); 94 string_.replace(QRegExp("<"), "&lt;");
69 string_.replace(QRegExp(">"), "&gt;"); 95 string_.replace(QRegExp(">"), "&gt;");
70 string_.replace(QRegExp("\\n"), "<br>"); 96 string_.replace(QRegExp("\\n"), "<br>");
71 return string_; 97 return string_;
72} 98}
73 99
74void ViewMail::slotReply() 100void ViewMail::slotReply()
75{ 101{
76 if (!_gotBody) { 102 if (!_gotBody) {
77 QMessageBox::information(this, tr("Error"), tr("<p>The mail body is not yet downloaded, so you cannot reply yet."), tr("Ok")); 103 QMessageBox::information(this, tr("Error"), tr("<p>The mail body is not yet downloaded, so you cannot reply yet."), tr("Ok"));
78 return; 104 return;
79 } 105 }
80 106
81 QString rtext; 107 QString rtext;
82 rtext += QString("* %1 wrote on %2:\n") // no i18n on purpose 108 rtext += QString("* %1 wrote on %2:\n") // no i18n on purpose
83 .arg(_mail.envelope().from()[0].toString()) 109 .arg(_mail.envelope().from()[0].toString())
84 .arg(_mail.envelope().mailDate()); 110 .arg(_mail.envelope().mailDate());
85 111
86 QString text = _mail.bodyPart(1).data(); 112 QString text = _mail.bodyPart(1).data();
87 QStringList lines = QStringList::split(QRegExp("\\n"), text); 113 QStringList lines = QStringList::split(QRegExp("\\n"), text);
88 QStringList::Iterator it; 114 QStringList::Iterator it;
89 for (it = lines.begin(); it != lines.end(); it++) { 115 for (it = lines.begin(); it != lines.end(); it++) {
90 rtext += "> " + *it + "\n"; 116 rtext += "> " + *it + "\n";
91 } 117 }
92 rtext += "\n"; 118 rtext += "\n";
93 119
94 QString prefix; 120 QString prefix;
95 if (_mail.envelope().subject().find(QRegExp("^Re: *$")) != -1) prefix = ""; 121 if (_mail.envelope().subject().find(QRegExp("^Re: *$")) != -1) prefix = "";
96 else prefix = "Re: "; // no i18n on purpose 122 else prefix = "Re: "; // no i18n on purpose
97 123
98 SendMail sendMail; 124 SendMail sendMail;
99 sendMail.setTo(_mail.envelope().from()[0].toString()); 125 sendMail.setTo(_mail.envelope().from()[0].toString());
100 sendMail.setSubject(prefix + _mail.envelope().subject()); 126 sendMail.setSubject(prefix + _mail.envelope().subject());
101 sendMail.setInReplyTo(_mail.envelope().messageId()); 127 sendMail.setInReplyTo(_mail.envelope().messageId());
102 sendMail.setMessage(rtext); 128 sendMail.setMessage(rtext);
103 129
104 Composer *composer = new Composer(0, 0, Qt::WType_Modal); 130 Composer composer(this, 0, true);
105 composer->setSendMail(sendMail); 131 composer.setSendMail(sendMail);
106 composer->showMaximized(); 132 composer.showMaximized();
107 composer->show(); 133 composer.exec();
108} 134}
109 135
110void ViewMail::slotForward() 136void ViewMail::slotForward()
111{ 137{
112 if (!_gotBody) { 138 if (!_gotBody) {
113 QMessageBox::information(this, tr("Error"), tr("<p>The mail body is not yet downloaded, so you cannot forward yet."), tr("Ok")); 139 QMessageBox::information(this, tr("Error"), tr("<p>The mail body is not yet downloaded, so you cannot forward yet."), tr("Ok"));
114 return; 140 return;
115 } 141 }
116 142
117 QString ftext; 143 QString ftext;
118 ftext += QString("\n----- Forwarded message from %1 -----\n\n") 144 ftext += QString("\n----- Forwarded message from %1 -----\n\n")
119 .arg(_mail.envelope().from()[0].toString()); 145 .arg(_mail.envelope().from()[0].toString());
120 if (!_mail.envelope().mailDate().isNull()) 146 if (!_mail.envelope().mailDate().isNull())
121 ftext += QString("Date: %1\n") 147 ftext += QString("Date: %1\n")
122 .arg(_mail.envelope().mailDate()); 148 .arg(_mail.envelope().mailDate());
123 if (!_mail.envelope().from()[0].toString().isNull()) 149 if (!_mail.envelope().from()[0].toString().isNull())
124 ftext += QString("From: %1\n") 150 ftext += QString("From: %1\n")
125 .arg(_mail.envelope().from()[0].toString()); 151 .arg(_mail.envelope().from()[0].toString());
126 if (!_mail.envelope().to().toString().isNull()) 152 if (!_mail.envelope().to().toString().isNull())
127 ftext += QString("To: %1\n") 153 ftext += QString("To: %1\n")
128 .arg(_mail.envelope().to().toString()); 154 .arg(_mail.envelope().to().toString());
129 if (!_mail.envelope().cc().toString().isNull()) 155 if (!_mail.envelope().cc().toString().isNull())
130 ftext += QString("Cc: %1\n") 156 ftext += QString("Cc: %1\n")
131 .arg(_mail.envelope().cc().toString()); 157 .arg(_mail.envelope().cc().toString());
132 if (!_mail.envelope().bcc().toString().isNull()) 158 if (!_mail.envelope().bcc().toString().isNull())
133 ftext += QString("Bcc: %1\n") 159 ftext += QString("Bcc: %1\n")
134 .arg(_mail.envelope().bcc().toString()); 160 .arg(_mail.envelope().bcc().toString());
135 if (!_mail.envelope().subject().isNull()) 161 if (!_mail.envelope().subject().isNull())
136 ftext += QString("Subject: %1\n") 162 ftext += QString("Subject: %1\n")
137 .arg(_mail.envelope().subject()); 163 .arg(_mail.envelope().subject());
138 164
139 ftext += QString("\n%1\n") 165 ftext += QString("\n%1\n")
140 .arg(_mail.bodyPart(1).data()); 166 .arg(_mail.bodyPart(1).data());
141 167
142 ftext += QString("----- End forwarded message -----\n"); 168 ftext += QString("----- End forwarded message -----\n");
143 169
144 SendMail sendMail; 170 SendMail sendMail;
145 sendMail.setSubject("Fwd: " + _mail.envelope().subject()); 171 sendMail.setSubject("Fwd: " + _mail.envelope().subject());
146 sendMail.setMessage(ftext); 172 sendMail.setMessage(ftext);
147 173
148 Composer *composer = new Composer(0, 0, Qt::WType_Modal); 174 Composer composer(this, 0, true);
149 composer->setSendMail(sendMail); 175 composer.setSendMail(sendMail);
150 composer->showMaximized(); 176 composer.showMaximized();
151 composer->show(); 177 composer.exec();
152} 178}
153 179
154void ViewMail::slotIMAPUid(IMAPResponse &response) 180void ViewMail::slotIMAPUid(IMAPResponse &response)
155{ 181{
156 disconnect(_handler, SIGNAL(gotResponse(IMAPResponse &)), this, SLOT(slotIMAPUid(IMAPResponse &))); 182 disconnect(_handler, SIGNAL(gotResponse(IMAPResponse &)), this, SLOT(slotIMAPUid(IMAPResponse &)));
157 183
158 if (response.statusResponse().status() == IMAPResponseEnums::OK) { 184 if (response.statusResponse().status() == IMAPResponseEnums::OK) {
159 QValueList<IMAPResponseBodyPart> bodyParts; 185 QValueList<IMAPResponseBodyPart> bodyParts;
160 bodyParts.append(response.FETCH()[0].bodyPart(1)); 186 bodyParts.append(response.FETCH()[0].bodyPart(1));
161 _mail.setBodyParts(bodyParts); 187 _mail.setBodyParts(bodyParts);
162 188
163 browser->setText(QString(_mailHtml).arg(deHtml(response.FETCH()[0].bodyPart(1).data()))); 189 browser->setText(QString(_mailHtml).arg(deHtml(response.FETCH()[0].bodyPart(1).data())));
164 190
165 // fillList(response.FETCH()[0].bodyStructure()); 191 // fillList(response.FETCH()[0].bodyStructure());
166 192
167 _gotBody = true; 193 _gotBody = true;
168 } else { 194 } else {
169 QMessageBox::warning(this, tr("Error"), tr("<p>I was unable to retrieve the mail from the server. You can try again later or give up.</p>"), tr("Ok")); 195 QMessageBox::warning(this, tr("Error"), tr("<p>I was unable to retrieve the mail from the server. You can try again later or give up.</p>"), tr("Ok"));
170 } 196 }
171} 197}
172 198
diff --git a/noncore/unsupported/mail2/viewmail.h b/noncore/unsupported/mail2/viewmail.h
index a013e43..efc2300 100644
--- a/noncore/unsupported/mail2/viewmail.h
+++ b/noncore/unsupported/mail2/viewmail.h
@@ -1,65 +1,70 @@
1#ifndef VIEWMAIL_H 1#ifndef VIEWMAIL_H
2#define VIEWMAIL_H 2#define VIEWMAIL_H
3 3
4#include <qlistview.h> 4#include <qlistview.h>
5 5
6#include "viewmailbase.h" 6#include "viewmailbase.h"
7#include "imapresponse.h" 7#include "imapresponse.h"
8#include "mailtable.h" 8#include "mailtable.h"
9 9
10class AttachItemStore 10class AttachItemStore
11{ 11{
12public: 12public:
13 void setMimeType(QString mimeType) { _mimeType = mimeType; } 13 void setMimeType(QString mimeType) { _mimeType = mimeType; }
14 QString mimeType() { return _mimeType; } 14 QString mimeType() { return _mimeType; }
15 void setFileName(QString fileName) { _fileName = fileName; } 15 void setFileName(QString fileName) { _fileName = fileName; }
16 QString fileName() { return _fileName; } 16 QString fileName() { return _fileName; }
17 void setDescription(QString description) { _description = description; } 17 void setDescription(QString description) { _description = description; }
18 QString description() { return _description; } 18 QString description() { return _description; }
19 void setPartNum(QString partNum) { _partNum = partNum; } 19 void setPartNum(QString partNum) { _partNum = partNum; }
20 QString partNum() { return _partNum; } 20 QString partNum() { return _partNum; }
21 21
22private: 22private:
23 QString _mimeType, _fileName, _description, _partNum; 23 QString _mimeType, _fileName, _description, _partNum;
24 24
25}; 25};
26 26
27class AttachItem : public QListViewItem 27class AttachItem : public QListViewItem
28{ 28{
29public: 29public:
30 AttachItem(QListView *parent, AttachItemStore &attachment); 30 AttachItem(QListView *parent, AttachItemStore &attachment);
31 AttachItem(QListViewItem *parent, AttachItemStore &attachment); 31 AttachItem(QListViewItem *parent, AttachItemStore &attachment);
32 32
33 AttachItemStore attachItemStore() { return _attachItemStore; } 33 AttachItemStore attachItemStore() { return _attachItemStore; }
34 34
35private: 35private:
36 AttachItemStore _attachItemStore; 36 AttachItemStore _attachItemStore;
37 37
38}; 38};
39 39
40class ViewMail : public ViewMailBase 40class ViewMail : public ViewMailBase
41{ 41{
42 Q_OBJECT 42 Q_OBJECT
43 43
44public: 44public:
45 ViewMail(IMAPResponseFETCH &mail, IMAPHandler *handler, QWidget *parent = 0, const char *name = 0, WFlags fl = Qt::WType_Modal); 45 ViewMail(IMAPResponseFETCH &mail, IMAPHandler *handler, QWidget *parent = 0, const char *name = 0, WFlags fl = Qt::WType_Modal);
46 ~ViewMail();
47
48 void hide();
49 void exec();
46 50
47protected: 51protected:
48 //void fillList(IMAPResponseBODYSTRUCTURE &structure); 52 //void fillList(IMAPResponseBODYSTRUCTURE &structure);
49 QString deHtml(const QString &string); 53 QString deHtml(const QString &string);
50 54
51protected slots: 55protected slots:
52 void slotReply(); 56 void slotReply();
53 void slotForward(); 57 void slotForward();
54 58
55 void slotIMAPUid(IMAPResponse &response); 59 void slotIMAPUid(IMAPResponse &response);
56 60
57private: 61private:
62 bool _inLoop;
58 IMAPResponseFETCH _mail; 63 IMAPResponseFETCH _mail;
59 IMAPHandler *_handler; 64 IMAPHandler *_handler;
60 QString _mailHtml; 65 QString _mailHtml;
61 bool _gotBody; 66 bool _gotBody;
62 67
63}; 68};
64 69
65#endif 70#endif