Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

mailtable.cpp

Go to the documentation of this file.
00001 #include <qmessagebox.h>
00002 #include <qpopupmenu.h>
00003 #include <qheader.h>
00004 #include <qtimer.h>
00005 
00006 #include "folderwidget.h"
00007 #include "imaphandler.h"
00008 #include "mailtable.h"
00009 
00010 MailTableItem::MailTableItem(QListView *parent, IMAPResponseFETCH fetch)
00011         : QListViewItem(parent), _fetch(fetch)
00012 {
00013         _draft = false;
00014         _new = false;
00015         _unseen = true;
00016 
00017         QValueList<IMAPResponseEnums::IMAPResponseFlags>::Iterator it;
00018         QValueList<IMAPResponseEnums::IMAPResponseFlags> flags = fetch.flags();
00019         for (it = flags.begin(); it != flags.end(); it++) {
00020                 if (*it == IMAPResponseEnums::Draft) _draft = true;
00021                 else if (*it == IMAPResponseEnums::Recent) _new = true;
00022                 else if (*it == IMAPResponseEnums::Seen) _unseen = false; 
00023         }
00024 
00025         setText(0, fetch.envelope().from()[0].name().isEmpty() ? QObject::tr("(no from)") : fetch.envelope().from()[0].name());
00026         setText(1, fetch.envelope().subject().isEmpty() ? QObject::tr("(no subject)") : fetch.envelope().subject());
00027         setText(2, fetch.envelope().mailDate().isEmpty() ? QObject::tr("(no date)") : fetch.envelope().mailDate());
00028 }
00029 
00030 void MailTableItem::paintCell(QPainter *painter, const QColorGroup &cg, int col, int width, int align)
00031 {
00032         QColor color = cg.color(QColorGroup::Text);
00033         QFont font = painter->font();
00034         if (_draft) {
00035                 color = QColor("#707070");
00036         } else if (_new) {
00037                 color = QColor("#ff0000");
00038                 font.setBold(true);
00039         } else if (_unseen) {
00040                 font.setBold(true);
00041         }
00042 
00043         painter->setFont(font);
00044         QColorGroup cg_(cg);
00045         cg_.setColor(QColorGroup::Text, color);
00046 
00047         QListViewItem::paintCell(painter, cg_, col, width, align);
00048 }
00049 
00050 MailTable::MailTable(QWidget *parent, const char *name, WFlags fl)
00051         : ListViewPlus(parent, name, fl), _parent(parent)
00052 {
00053         _stopped = false;
00054 
00055         setSorting(-1);
00056 
00057         setAllColumnsShowFocus(true);
00058         addColumn(tr("From"), 100);
00059         addColumn(tr("Subject"), 100);
00060         addColumn(tr("Date"), 100);
00061 
00062         QPopupMenu *menu = new QPopupMenu(this);
00063         menu->insertItem(tr("Copy"), MENU_COPY);
00064 
00065         QPopupMenu *markMenu = new QPopupMenu(this);
00066         markMenu->insertItem(tr("Seen"), MENU_MARK_READ);
00067         markMenu->insertItem(tr("Unseen"), MENU_MARK_UNREAD);
00068         markMenu->insertSeparator();
00069         markMenu->insertItem(tr("Marked"), MENU_MARK_MARKED);
00070         markMenu->insertItem(tr("Unmarked"), MENU_MARK_UNMARKED);
00071 
00072         menu->insertItem(tr("Mark as..."), markMenu, MENU_MARK);
00073         menu->insertSeparator();
00074         menu->insertItem(tr("Delete Mail"), MENU_DELETE);
00075         setPopup(menu);
00076 
00077         connect(this, SIGNAL(clicked(QListViewItem*)), SLOT(itemClicked(QListViewItem*)));
00078 }
00079 
00080 void MailTable::setFolder(Folder folder)
00081 {
00082         folder.topFolder().handler()->iSelect(folder.fullName());
00083         _handler = folder.topFolder().handler();
00084         connect(folder.topFolder().handler(), SIGNAL(gotResponse(IMAPResponse&)), SLOT(slotIMAPSelect(IMAPResponse&)));
00085 }
00086 
00087 void MailTable::setHeaders(QValueList<IMAPResponseFETCH> response)
00088 {
00089         clear();
00090         QValueList<IMAPResponseFETCH>::Iterator it;
00091         for (it = response.begin(); it != response.end(); it++) {
00092                 (void) new MailTableItem(this, *it);
00093         }
00094 }
00095 
00096 void MailTable::slotIMAPSelect(IMAPResponse &response)
00097 {
00098         disconnect(response.imapHandler(), SIGNAL(gotResponse(IMAPResponse&)), this, SLOT(slotIMAPSelect(IMAPResponse&)));
00099 
00100         if (response.statusResponse().status() == IMAPResponseEnums::OK) {
00101                 clear();
00102                 QString mails = response.EXISTS()[0].mails();
00103                 if (mails.toInt() == 0) {
00104                         emit status(tr("Mailbox contained no mails."));
00105                         return;
00106                 }
00107                 int a = mails.toInt() / 5;
00108                 int b = mails.toInt() % 5;
00109 
00110                 _downloadSteps = a;
00111                 if (b > 0) _downloadSteps++;
00112                 _lastStep = b;
00113                 _currentProgress = 0;
00114 
00115                 emit totalSteps(_downloadSteps);
00116                 emit progress(_currentProgress);
00117                 emit stopEnabled(true);
00118 
00119                 response.imapHandler()->iFetch(QString("1:%1").arg((a == 0) ? b : 5), "ENVELOPE FLAGS UID");
00120                 emit status(tr("Getting mail headers..."));
00121                 connect(response.imapHandler(), SIGNAL(gotResponse(IMAPResponse&)), SLOT(slotIMAPFetch(IMAPResponse&)));
00122         } else {
00123                 QMessageBox::warning(this, tr("Error"), tr("<p>An error occoured during the selection of the mailbox. (Server said: %1)</p>").arg(response.statusResponse().comment()), tr("Ok"));
00124         }
00125 }
00126 
00127 void MailTable::slotIMAPFetch(IMAPResponse &response)
00128 {
00129         disconnect(response.imapHandler(), SIGNAL(gotResponse(IMAPResponse&)), this, SLOT(slotIMAPFetch(IMAPResponse&)));
00130 
00131         if (response.statusResponse().status() == IMAPResponseEnums::OK) {
00132                 QValueList<IMAPResponseFETCH>::Iterator it;
00133                 QValueList<IMAPResponseFETCH> fetch = response.FETCH();
00134                 for (it = fetch.begin(); it != fetch.end(); it++) {
00135                         (void) new MailTableItem(this, *it);
00136                 }
00137                 emit progress(++_currentProgress);
00138 
00139                 if (_currentProgress != _downloadSteps) {
00140                         if (_stopped) {
00141                                 _currentProgress = 0;
00142                                 _downloadSteps = 0;
00143                                 _lastStep = 0;
00144                                 _stopped = false;
00145                                 emit status(tr("Stopped"));
00146                                 emit resetProgress();
00147                                 emit stopEnabled(false);
00148                         } else {
00149                                 response.imapHandler()->iFetch(QString("%1:%2").arg(_currentProgress * 5 + 1).arg((_currentProgress + 1 == _downloadSteps) ? _currentProgress * 5 + _lastStep : _currentProgress * 5 + 5), "ENVELOPE FLAGS UID");
00150                                 connect(response.imapHandler(), SIGNAL(gotResponse(IMAPResponse&)), SLOT(slotIMAPFetch(IMAPResponse&)));
00151                         }
00152                 } else {
00153                         _currentProgress = 0;
00154                         _downloadSteps = 0;
00155                         _lastStep = 0;
00156                         emit status(tr("Got all mail headers."));
00157                         emit resetProgress();
00158                         emit stopEnabled(false);
00159                 }
00160         } else {
00161                 emit status(tr("<font color=#ff0000>Couldn't fetch mail."));
00162         }
00163 }
00164 
00165 void MailTable::itemClicked(QListViewItem *item)
00166 {
00167         if (item == NULL) return;
00168         emit mailClicked(((MailTableItem *)item)->fetch(), _handler);
00169 }
00170 
00171 

Generated on Sat Nov 5 16:18:08 2005 for OPIE by  doxygen 1.4.2