summaryrefslogtreecommitdiff
path: root/noncore/unsupported/mailit/readmail.cpp
Side-by-side diff
Diffstat (limited to 'noncore/unsupported/mailit/readmail.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/unsupported/mailit/readmail.cpp326
1 files changed, 326 insertions, 0 deletions
diff --git a/noncore/unsupported/mailit/readmail.cpp b/noncore/unsupported/mailit/readmail.cpp
new file mode 100644
index 0000000..4954f34
--- a/dev/null
+++ b/noncore/unsupported/mailit/readmail.cpp
@@ -0,0 +1,326 @@
+/**********************************************************************
+** Copyright (C) 2001 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Palmtop Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#include "readmail.h"
+#include <qimage.h>
+#include <qmime.h>
+#include <qaction.h>
+#include "resource.h"
+
+ReadMail::ReadMail( QWidget* parent, const char* name, WFlags fl )
+ : QMainWindow(parent, name, fl)
+{
+ plainTxt = FALSE;
+
+ init();
+ viewAtt = new ViewAtt(0, "View Attatchments");
+}
+
+ReadMail::~ReadMail()
+{
+ delete emailView->mimeSourceFactory();
+ delete viewAtt;
+}
+
+void ReadMail::init()
+{
+ setToolBarsMovable(FALSE);
+
+ bar = new QToolBar(this);
+ bar->setHorizontalStretchable( TRUE );
+
+ menu = new QMenuBar( bar );
+
+ viewMenu = new QPopupMenu(menu);
+ menu->insertItem( tr( "&View" ), viewMenu);
+
+ mailMenu = new QPopupMenu(menu);
+ menu->insertItem( tr( "&Mail" ), mailMenu);
+
+ bar = new QToolBar(this);
+
+ //reply dependant on viewing inbox
+ replyButton = new QAction( tr( "Reply" ), Resource::loadPixmap( "pass" ),
+ QString::null, 0, this, 0 );
+ connect(replyButton, SIGNAL(activated()), this, SLOT(reply()) );
+
+ previousButton = new QAction( tr( "Previous" ), Resource::loadPixmap( "back" ), QString::null, 0, this, 0 );
+ connect( previousButton, SIGNAL( activated() ), this, SLOT( previous() ) );
+ previousButton->addTo(bar);
+ previousButton->addTo(viewMenu);
+
+ nextButton = new QAction( tr( "Next" ), Resource::loadPixmap( "forward" ), QString::null, 0, this, 0 );
+ connect( nextButton, SIGNAL( activated() ), this, SLOT( next() ) );
+ nextButton->addTo(bar);
+ nextButton->addTo(viewMenu);
+
+ attatchmentsButton = new QAction( tr( "Attatchments" ), Resource::loadPixmap( "fileopen" ), QString::null, 0, this, 0 );
+ connect( attatchmentsButton, SIGNAL( activated() ), this,
+ SLOT( viewAttatchments() ) );
+ attatchmentsButton->addTo(bar);
+ attatchmentsButton->addTo(viewMenu);
+
+ plainTextButton = new QAction( tr( "Text Format" ), Resource::loadPixmap( "new" ), QString::null, 0, this, 0, TRUE);
+ connect( plainTextButton, SIGNAL( activated() ), this, SLOT( shiftText() ) );
+ plainTextButton->addTo(bar);
+ plainTextButton->addTo(viewMenu);
+
+ deleteButton = new QAction( tr( "Delete" ), Resource::loadPixmap( "trash" ), QString::null, 0, this, 0 );
+ connect( deleteButton, SIGNAL( activated() ), this, SLOT( deleteItem() ) );
+ deleteButton->addTo(bar);
+ deleteButton->addTo(mailMenu);
+
+ viewMenu->insertItem(Resource::loadPixmap("close"), "Close", this, SLOT(close()));
+
+ emailView = new QTextView( this, "emailView" );
+ setCentralWidget(emailView);
+
+ mime = new QMimeSourceFactory();
+ emailView->setMimeSourceFactory(mime);
+}
+
+void ReadMail::updateView()
+{
+ Enclosure *ePtr;
+ QString mailStringSize;
+ QString text, temp;
+
+ mail->read = TRUE; //mark as read
+ inbox = mail->received;
+
+ replyButton->removeFrom(mailMenu);
+ replyButton->removeFrom(bar);
+
+ if (inbox == TRUE) {
+ replyButton->addTo(bar);
+ replyButton->addTo(mailMenu);
+
+ if (!mail->downloaded) {
+ //report currently viewed mail so that it will be
+ //placed first in the queue of new mails to download
+ emit viewingMail(mail);
+
+ double mailSize = (double) mail->size;
+ if (mailSize < 1024) {
+ mailStringSize.setNum(mailSize);
+ mailStringSize += " Bytes";
+ } else if (mailSize < 1024*1024) {
+ mailStringSize.setNum( (mailSize / 1024), 'g', 2 );
+ mailStringSize += " Kb";
+ } else {
+ mailStringSize.setNum( (mailSize / (1024*1024)), 'g', 3);
+ mailStringSize += " Mb";
+ }
+ }
+ }
+
+ QMimeSourceFactory *mime = emailView->mimeSourceFactory();
+
+ if (! plainTxt) { //use RichText, inline pics etc.
+ emailView->setTextFormat(QTextView::RichText);
+ text = "<b><big><center><font color=\"blue\">" + mail->subject
+ +"</font></center></big></b><br>";
+ text += "<b>From: </b>" + mail->from + " <i>" +
+ mail->fromMail + "</i><br>";
+
+ text +="<b>To: </b>";
+ for (QStringList::Iterator it = mail->recipients.begin();
+ it != mail->recipients.end(); ++it ) {
+ text += *it + " ";
+ }
+ text += "<br>" + mail->date;
+
+ if (mail->files.count() > 0) {
+ text += "<br><b>Attatchments: </b>";
+
+ for ( ePtr=mail->files.first(); ePtr != 0; ePtr=mail->files.next() ) {
+ text += ePtr->originalName + " ";
+ }
+ text += "<hr><br>" + mail->body;
+
+ if (inbox) {
+ for ( ePtr=mail->files.first(); ePtr != 0; ePtr=mail->files.next() ) {
+
+ text += "<br><hr><b>Attatchment: </b>" +
+ ePtr->originalName + "<hr>";
+
+ if (ePtr->contentType == "TEXT") {
+ QFile f(ePtr->path + ePtr->name);
+
+ if (f.open(IO_ReadOnly) ) {
+ QTextStream t(&f);
+ temp = t.read();
+ text += temp + "<br>";
+ f.close();
+ } else {
+ text += "<b>Could not locate file</b><br>";
+ }
+
+ }
+ if (ePtr->contentType == "IMAGE") {
+// temp.setNum(emailView->width()); //get display width
+// text += "<img width=" + temp +" src =""" +
+// ePtr->originalName + """> </img>";
+ text += "<img src =""" +
+ ePtr->originalName + """> </img>";
+ mime->setPixmap(ePtr->originalName, QPixmap( (ePtr->path + ePtr->name) ));
+ }
+ }
+ }
+ } else {
+ if (mail->downloaded || !inbox) {
+ text += "<hr><br>" + mail->body;
+ } else {
+ text += "<hr><br><b> Awaiting download </b><br>";
+ text += "Size of mail: " + mailStringSize;
+ }
+ }
+ emailView->setText(text);
+ } else { // show plain txt mail
+ emailView->setTextFormat(QTextView::PlainText);
+ text = "Subject: " + mail->subject + "\n";
+ text += "From: " + mail->from + " " + mail->fromMail + "\n";
+ text += "To: ";
+ for (QStringList::Iterator it = mail->recipients.begin();
+ it != mail->recipients.end(); ++it ) {
+ text += *it + " ";
+ }
+ text += "\nDate: " + mail->date + "\n";
+ if (mail->files.count() > 0) {
+ text += "Attatchments: ";
+ for ( ePtr=mail->files.first(); ePtr != 0; ePtr=mail->files.next() ) {
+ text += ePtr->originalName + " ";
+ }
+ text += "\n\n";
+ } else text += "\n";
+
+ if (!inbox) {
+ text += mail->body;
+ } else if (mail->downloaded) {
+ text += mail->bodyPlain;
+ } else {
+ text += "\nAwaiting download\n";
+ text += "Size of mail: " + mailStringSize;
+ }
+
+ emailView->setText(text);
+ }
+
+ if (mail->files.count() == 0)
+ attatchmentsButton->setEnabled(FALSE);
+ else attatchmentsButton->setEnabled(TRUE);
+
+ setCaption("Examining mail: " + mail->subject);
+}
+
+//update view with current EmailListItem (item)
+void ReadMail::update(QListView *thisView, Email *mailIn)
+{
+ view = thisView;
+ item = (EmailListItem *) view->selectedItem();
+ mail = mailIn;
+ updateView();
+ updateButtons();
+}
+
+void ReadMail::mailUpdated(Email *mailIn)
+{
+ if (mailIn == mail) {
+ updateView();
+ } else {
+ updateButtons();
+ }
+}
+
+void ReadMail::close()
+{
+ emit cancelView();
+}
+
+//gets next item in listview, exits if there is no next
+void ReadMail::next()
+{
+ item = (EmailListItem *) item->nextSibling();
+ if (item != NULL) {
+ mail = item->getMail();
+ updateView();
+ }
+ updateButtons();
+}
+
+//gets previous item in listview, exits if there is no previous
+void ReadMail::previous()
+{
+ item = (EmailListItem *) item->itemAbove();
+ if (item != NULL) {
+ mail = item->getMail();
+ updateView();
+ }
+ updateButtons();
+}
+
+//deletes item, tries bringing up next or previous, exits if unsucessful
+void ReadMail::deleteItem()
+{
+ EmailListItem *temp = item;
+ temp = (EmailListItem *) item->nextSibling(); //trybelow
+ if (temp == NULL)
+ temp = (EmailListItem *) item->itemAbove(); //try above
+
+ emit removeItem(item, inbox);
+
+ item = temp;
+ if (item != NULL) { //more items in list
+ mail = item->getMail();
+ updateView();
+ updateButtons();
+ } else close(); //no more items to see
+}
+
+void ReadMail::updateButtons()
+{
+ EmailListItem *temp;
+
+ temp = item;
+ if ((EmailListItem *) temp->nextSibling() == NULL)
+ nextButton->setEnabled(FALSE);
+ else nextButton->setEnabled(TRUE);
+
+ temp = item;
+ if ((EmailListItem *) temp->itemAbove() == NULL)
+ previousButton->setEnabled(FALSE);
+ else previousButton->setEnabled(TRUE);
+}
+
+void ReadMail::shiftText()
+{
+ plainTxt = ! plainTxt;
+ updateView();
+}
+
+void ReadMail::viewAttatchments()
+{
+ viewAtt->update(mail, inbox);
+ viewAtt->showMaximized();
+}
+
+void ReadMail::reply()
+{
+ emit replyRequested(*mail);
+}