author | zautrix <zautrix> | 2004-07-03 16:33:12 (UTC) |
---|---|---|
committer | zautrix <zautrix> | 2004-07-03 16:33:12 (UTC) |
commit | e3b89230f065c48c84b48c88edb6eb088374c487 (patch) (side-by-side diff) | |
tree | 162ea2ef909a6f82ccfcedf45d80d6c821174912 /kmicromail/accountitem.cpp | |
parent | 2dd6ac0b2d24c91d35ce674a6c26351352df2b15 (diff) | |
download | kdepimpi-e3b89230f065c48c84b48c88edb6eb088374c487.zip kdepimpi-e3b89230f065c48c84b48c88edb6eb088374c487.tar.gz kdepimpi-e3b89230f065c48c84b48c88edb6eb088374c487.tar.bz2 |
Initial revision
-rw-r--r-- | kmicromail/accountitem.cpp | 1140 |
1 files changed, 1140 insertions, 0 deletions
diff --git a/kmicromail/accountitem.cpp b/kmicromail/accountitem.cpp new file mode 100644 index 0000000..d0321ef --- a/dev/null +++ b/kmicromail/accountitem.cpp @@ -0,0 +1,1140 @@ + +#include "accountitem.h" +#include "accountview.h" +#include "newmaildir.h" +#include "nntpgroupsdlg.h" +#include "defines.h" + +#include <libmailwrapper/mailtypes.h> +#include <libmailwrapper/abstractmail.h> +#include <libmailwrapper/mailwrapper.h> +/* OPIE */ +//#include <qpe/qpeapplication.h> + +/* QT */ +#include <qpopupmenu.h> +#include <qmessagebox.h> +#include <kiconloader.h> + +using namespace Opie::Core; +#define SETPIX(x) if (!account->getOffline()) {setPixmap( 0,x);} else {setPixmap( 0, PIXMAP_OFFLINE );} +/** + * POP3 Account stuff + */ +POP3viewItem::POP3viewItem( POP3account *a, AccountView *parent ) + : AccountViewItem( parent ) +{ + account = a; + wrapper = AbstractMail::getWrapper( account ); + SETPIX(PIXMAP_POP3FOLDER); +#if 0 + if (!account->getOffline()) + { + setPixmap( 0, ); + } + else + { + setPixmap( 0, PIXMAP_OFFLINE ); + } +#endif + setText( 0, account->getAccountName() ); + setOpen( true ); +} + +POP3viewItem::~POP3viewItem() +{ + delete wrapper; +} + +AbstractMail *POP3viewItem::getWrapper() +{ + return wrapper; +} + +void POP3viewItem::refresh(QValueList<Opie::Core::OSmartPointer<RecMail> > & ) +{ + refresh(); +} + +void POP3viewItem::refresh() +{ + if (account->getOffline()) return; + QValueList<FolderP> *folders = wrapper->listFolders(); + QListViewItem *child = firstChild(); + while ( child ) + { + QListViewItem *tmp = child; + child = child->nextSibling(); + delete tmp; + } + QValueList<FolderP>::ConstIterator it; + QListViewItem*item = 0; + for ( it = folders->begin(); it!=folders->end(); ++it) + { + item = new POP3folderItem( (*it), this , item ); + item->setSelectable( (*it)->may_select()); + } + delete folders; +} + +RECBODYP POP3viewItem::fetchBody( const RecMailP &mail ) +{ + + return wrapper->fetchBody( mail ); +} + +QPopupMenu * POP3viewItem::getContextMenu() +{ + QPopupMenu *m = new QPopupMenu(0); + if (m) + { + if (!account->getOffline()) + { + m->insertItem(QObject::tr("Disconnect",contextName),0); + m->insertItem(QObject::tr("Set offline",contextName),1); + } + else + { + m->insertItem(QObject::tr("Set online",contextName),1); + } + } + return m; +} + +void POP3viewItem::disconnect() +{ + QListViewItem *child = firstChild(); + while ( child ) + { + QListViewItem *tmp = child; + child = child->nextSibling(); + delete tmp; + } + wrapper->logout(); +} + +void POP3viewItem::setOnOffline() +{ + if (!account->getOffline()) + { + disconnect(); + } + account->setOffline(!account->getOffline()); + account->save(); + SETPIX(PIXMAP_POP3FOLDER); + refresh(); +} + +void POP3viewItem::contextMenuSelected(int which) +{ + switch (which) + { + case 0: + disconnect(); + break; + case 1: + setOnOffline(); + break; + } +} + +POP3folderItem::~POP3folderItem() +{} + +POP3folderItem::POP3folderItem( const FolderP&folderInit, POP3viewItem *parent , QListViewItem*after ) + : AccountViewItem(folderInit,parent,after ) +{ + pop3 = parent; + if (folder->getDisplayName().lower()!="inbox") + { + setPixmap( 0, PIXMAP_POP3FOLDER ); + } + else + { + setPixmap( 0, PIXMAP_INBOXFOLDER); + } + setText( 0, folder->getDisplayName() ); +} + +void POP3folderItem::refresh(QValueList<RecMailP>&target) +{ + if (folder->may_select()) + pop3->getWrapper()->listMessages( folder->getName(),target ); +} + +RECBODYP POP3folderItem::fetchBody(const RecMailP&aMail) +{ + return pop3->getWrapper()->fetchBody(aMail); +} + +QPopupMenu * POP3folderItem::getContextMenu() +{ + QPopupMenu *m = new QPopupMenu(0); + if (m) + { + m->insertItem(QObject::tr("Refresh header list",contextName),0); + m->insertItem(QObject::tr("Delete all mails",contextName),1); + m->insertItem(QObject::tr("Move/Copie all mails",contextName),2); + } + return m; +} + +void POP3folderItem::downloadMails() +{ + AccountView*bl = pop3->accountView(); + if (!bl) return; + bl->downloadMails(folder,pop3->getWrapper()); +} + +void POP3folderItem::contextMenuSelected(int which) +{ + AccountView * view = (AccountView*)listView(); + switch (which) + { + case 0: + /* must be 'cause pop3 lists are cached */ + pop3->getWrapper()->logout(); + view->refreshCurrent(); + break; + case 1: + deleteAllMail(pop3->getWrapper(),folder); + break; + case 2: + downloadMails(); + break; + default: + break; + } +} + +/** + * NNTP Account stuff + */ +NNTPviewItem::NNTPviewItem( NNTPaccount *a, AccountView *parent ) + : AccountViewItem( parent ) +{ + account = a; + wrapper = AbstractMail::getWrapper( account ); + //FIXME + SETPIX(PIXMAP_POP3FOLDER); +#if 0 + if (!account->getOffline()) + { + setPixmap( 0, ); + } + else + { + setPixmap( 0, PIXMAP_OFFLINE ); + } +#endif + setText( 0, account->getAccountName() ); + setOpen( true ); +} + +NNTPviewItem::~NNTPviewItem() +{ + delete wrapper; +} + +AbstractMail *NNTPviewItem::getWrapper() +{ + return wrapper; +} + +void NNTPviewItem::refresh( QValueList<RecMailP> & ) +{ + refresh(); +} + +void NNTPviewItem::refresh() +{ + if (account->getOffline()) return; + QValueList<FolderP> *folders = wrapper->listFolders(); + + QListViewItem *child = firstChild(); + while ( child ) + { + QListViewItem *tmp = child; + child = child->nextSibling(); + delete tmp; + } + QValueList<FolderP>::ConstIterator it; + QListViewItem*item = 0; + for ( it = folders->begin(); it!=folders->end(); ++it) + { + item = new NNTPfolderItem( (*it), this , item ); + item->setSelectable( (*it)->may_select()); + } + delete folders; +} + +RECBODYP NNTPviewItem::fetchBody( const RecMailP &mail ) +{ + + return wrapper->fetchBody( mail ); +} + +QPopupMenu * NNTPviewItem::getContextMenu() +{ + QPopupMenu *m = new QPopupMenu(0); + if (m) + { + if (!account->getOffline()) + { + m->insertItem(QObject::tr("Disconnect",contextName),0); + m->insertItem(QObject::tr("Set offline",contextName),1); + m->insertItem(QObject::tr("(Un-)Subscribe groups",contextName),2); + } + else + { + m->insertItem(QObject::tr("Set online",contextName),1); + } + } + return m; +} + +void NNTPviewItem::subscribeGroups() +{ + NNTPGroupsDlg dlg(account); + dlg.showMaximized(); + if ( dlg.exec()== QDialog::Accepted ){ + refresh(); + } +} + +void NNTPviewItem::disconnect() +{ + QListViewItem *child = firstChild(); + while ( child ) + { + QListViewItem *tmp = child; + child = child->nextSibling(); + delete tmp; + } + wrapper->logout(); +} + +void NNTPviewItem::setOnOffline() +{ + if (!account->getOffline()) + { + disconnect(); + } + account->setOffline(!account->getOffline()); + account->save(); + //FIXME + SETPIX(PIXMAP_POP3FOLDER); + refresh(); +} + +void NNTPviewItem::contextMenuSelected(int which) +{ + switch (which) + { + case 0: + disconnect(); + break; + case 1: + setOnOffline(); + break; + case 2: + subscribeGroups(); + break; + } +} + +NNTPfolderItem::~NNTPfolderItem() +{} + +NNTPfolderItem::NNTPfolderItem( const FolderP &folderInit, NNTPviewItem *parent , QListViewItem*after ) + : AccountViewItem( folderInit, parent,after ) +{ + nntp = parent; + if (folder->getDisplayName().lower()!="inbox") + { + setPixmap( 0, PIXMAP_POP3FOLDER ); + } + else + { + setPixmap( 0, PIXMAP_INBOXFOLDER); + } + setText( 0, folder->getDisplayName() ); +} + +void NNTPfolderItem::refresh(QValueList<RecMailP>&target) +{ + if (folder->may_select()) + nntp->getWrapper()->listMessages( folder->getName(),target ); +} + +RECBODYP NNTPfolderItem::fetchBody(const RecMailP&aMail) +{ + return nntp->getWrapper()->fetchBody(aMail); +} + +QPopupMenu * NNTPfolderItem::getContextMenu() +{ + QPopupMenu *m = new QPopupMenu(0); + if (m) + { + m->insertItem(QObject::tr("Refresh header list",contextName),0); + m->insertItem(QObject::tr("Copy all postings",contextName),1); + } + return m; +} + +void NNTPfolderItem::downloadMails() +{ + AccountView*bl = nntp->accountView(); + if (!bl) return; + bl->downloadMails(folder,nntp->getWrapper()); +} + +void NNTPfolderItem::contextMenuSelected(int which) +{ + AccountView * view = (AccountView*)listView(); + switch (which) + { + case 0: + /* must be 'cause pop3 lists are cached */ + nntp->getWrapper()->logout(); + view->refreshCurrent(); + break; + case 1: + downloadMails(); + break; + default: + break; + } +} + +/** + * IMAP Account stuff + */ +IMAPviewItem::IMAPviewItem( IMAPaccount *a, AccountView *parent ) + : AccountViewItem( parent ) +{ + account = a; + wrapper = AbstractMail::getWrapper( account ); + SETPIX(PIXMAP_IMAPFOLDER); + setText( 0, account->getAccountName() ); + setOpen( true ); +} + +IMAPviewItem::~IMAPviewItem() +{ + delete wrapper; +} + +AbstractMail *IMAPviewItem::getWrapper() +{ + return wrapper; +} + +void IMAPviewItem::refresh(QValueList<RecMailP>&) +{ + refreshFolders(false); +} + +const QStringList&IMAPviewItem::subFolders() +{ + return currentFolders; +} + +void IMAPviewItem::refreshFolders(bool force) +{ + if (childCount()>0 && force==false) return; + if (account->getOffline()) return; + + removeChilds(); + currentFolders.clear(); + QValueList<FolderP> * folders = wrapper->listFolders(); + + QValueList<FolderP>::Iterator it; + QListViewItem*item = 0; + QListViewItem*titem = 0; + QString fname,del,search; + int pos; + + for ( it = folders->begin(); it!=folders->end(); ++it) + { + if ((*it)->getDisplayName().lower()=="inbox") + { + item = new IMAPfolderItem( (*it), this , item ); + folders->remove(it); + break; + } + } + for ( it = folders->begin(); it!=folders->end(); ++it) + { + fname = (*it)->getDisplayName(); + currentFolders.append((*it)->getName()); + pos = fname.findRev((*it)->Separator()); + if (pos != -1) + { + fname = fname.left(pos); + } + IMAPfolderItem*pitem = (IMAPfolderItem*)findSubItem(fname); + if (pitem) + { + titem = item; + item = new IMAPfolderItem( (*it),pitem,pitem->firstChild(),this); + /* setup the short name */ + item->setText(0,(*it)->getDisplayName().right((*it)->getDisplayName().length()-pos-1)); + item = titem; + } + else + { + item = new IMAPfolderItem( (*it), this , item ); + } + } + delete folders; +} + +QPopupMenu * IMAPviewItem::getContextMenu() +{ + QPopupMenu *m = new QPopupMenu(0); + if (m) + { + if (!account->getOffline()) + { + m->insertItem(QObject::tr("Refresh folder list",contextName),0); + m->insertItem(QObject::tr("Create new folder",contextName),1); + m->insertSeparator(); + m->insertItem(QObject::tr("Disconnect",contextName),2); + m->insertItem(QObject::tr("Set offline",contextName),3); + } + else + { + m->insertItem(QObject::tr("Set online",contextName),3); + } + } + return m; +} + +void IMAPviewItem::createNewFolder() +{ + Newmdirdlg ndirdlg; + + ndirdlg.showMaximized(); + if ( ndirdlg.exec() ) + { + QString ndir = ndirdlg.Newdir(); + bool makesubs = ndirdlg.subpossible(); + QString delemiter = "/"; + IMAPfolderItem*item = (IMAPfolderItem*)firstChild(); + if (item) + { + delemiter = item->Delemiter(); + } + if (wrapper->createMbox(ndir,0,delemiter,makesubs)) + { + refreshFolders(true); + } + } +} + +void IMAPviewItem::contextMenuSelected(int id) +{ + + switch (id) + { + case 0: + refreshFolders(true); + break; + case 1: + createNewFolder(); + break; + case 2: + removeChilds(); + wrapper->logout(); + break; + case 3: + if (account->getOffline()==false) + { + removeChilds(); + wrapper->logout(); + } + account->setOffline(!account->getOffline()); + account->save(); + SETPIX(PIXMAP_IMAPFOLDER); + refreshFolders(false); + break; + default: + break; + } +} + +RECBODYP IMAPviewItem::fetchBody(const RecMailP&) +{ + return new RecBody(); +} + +bool IMAPviewItem::offline() +{ + return account->getOffline(); +} + +IMAPfolderItem::IMAPfolderItem( const FolderP& folderInit, IMAPviewItem *parent , QListViewItem*after ) + : AccountViewItem( folderInit, parent , after ) +{ + imap = parent; + if (folder->getDisplayName().lower()!="inbox") + { + setPixmap( 0, PIXMAP_IMAPFOLDER ); + } + else + { + setPixmap( 0, PIXMAP_INBOXFOLDER); + } + setText( 0, folder->getDisplayName() ); +} + +IMAPfolderItem::IMAPfolderItem(const FolderP &folderInit, IMAPfolderItem *parent , QListViewItem*after, IMAPviewItem *master ) + : AccountViewItem(folderInit, parent,after ) +{ + imap = master; + if (folder->getDisplayName().lower()!="inbox") + { + setPixmap( 0, PIXMAP_IMAPFOLDER ); + } + else + { + setPixmap( 0, PIXMAP_INBOXFOLDER); + } + setText( 0, folder->getDisplayName() ); +} + +IMAPfolderItem::~IMAPfolderItem() +{} + +const QString& IMAPfolderItem::Delemiter()const +{ + return folder->Separator(); +} + +void IMAPfolderItem::refresh(QValueList<RecMailP>&target) +{ + if (folder->may_select()) + { + imap->getWrapper()->listMessages( folder->getName(),target ); + } + else + { + target.clear(); + } +} + +RECBODYP IMAPfolderItem::fetchBody(const RecMailP&aMail) +{ + return imap->getWrapper()->fetchBody(aMail); +} + +QPopupMenu * IMAPfolderItem::getContextMenu() +{ + QPopupMenu *m = new QPopupMenu(0); + if (m) + { + if (folder->may_select()) + { + m->insertItem(QObject::tr("Refresh header list",contextName),0); + m->insertItem(QObject::tr("Move/Copie all mails",contextName),4); + m->insertItem(QObject::tr("Delete all mails",contextName),1); + } + if (folder->no_inferior()==false) + { + m->insertItem(QObject::tr("Create new subfolder",contextName),2); + } + if (folder->getDisplayName().lower()!="inbox") + { + m->insertItem(QObject::tr("Delete folder",contextName),3); + } + } + return m; +} + +void IMAPfolderItem::createNewFolder() +{ + Newmdirdlg ndirdlg; + ndirdlg.showMaximized(); + if ( ndirdlg.exec() ) + { + QString ndir = ndirdlg.Newdir(); + bool makesubs = ndirdlg.subpossible(); + QString delemiter = Delemiter(); + if (imap->wrapper->createMbox(ndir,folder,delemiter,makesubs)) + { + imap->refreshFolders(true); + } + } +} + +void IMAPfolderItem::deleteFolder() +{ + int yesno = QMessageBox::warning(0,QObject::tr("Delete folder",contextName), + QObject::tr("<center>Realy delete folder <br><b>%1</b><br>and all if it content?</center>",contextName).arg(folder->getDisplayName()), + QObject::tr("Yes",contextName), + QObject::tr("No",contextName),QString::null,1,1); + + if (yesno == 0) + { + if (imap->getWrapper()->deleteMbox(folder)) + { + QListView*v=listView(); + IMAPviewItem * box = imap; + /* be carefull - after that this object is destroyd so don't use + * any member of it after that call!!*/ + imap->refreshFolders(true); + if (v) + { + v->setSelected(box,true); + } + } + } +} + +void IMAPfolderItem::downloadMails() +{ + AccountView*bl = imap->accountView(); + if (!bl) return; + bl->downloadMails(folder,imap->getWrapper()); +} + +void IMAPfolderItem::contextMenuSelected(int id) +{ + + AccountView * view = (AccountView*)listView(); + switch(id) + { + case 0: + view->refreshCurrent(); + break; + case 1: + deleteAllMail(imap->getWrapper(),folder); + break; + case 2: + createNewFolder(); + break; + case 3: + deleteFolder(); + break; + case 4: + downloadMails(); + break; + default: + break; + } +} + +/** + * MH Account stuff + */ +/* MH is a little bit different - the top folder can contains messages other than in IMAP and + POP3 and MBOX */ +MHviewItem::MHviewItem( const QString&aPath, AccountView *parent ) + : AccountViewItem( parent ) +{ + m_Path = aPath; + /* be carefull - the space within settext is wanted - thats why the string twice */ + wrapper = AbstractMail::getWrapper( m_Path,"Local Folders"); + setPixmap( 0, PIXMAP_LOCALFOLDER ); + setText( 0, " Local Folders" ); + setOpen( true ); + folder = 0; +} + +MHviewItem::~MHviewItem() +{ + delete wrapper; +} + +AbstractMail *MHviewItem::getWrapper() +{ + return wrapper; +} + +void MHviewItem::refresh( QValueList<RecMailP> & target) +{ + refresh(false); + getWrapper()->listMessages( "",target ); +} + +void MHviewItem::refresh(bool force) +{ + if (childCount()>0 && force==false) return; + removeChilds(); + currentFolders.clear(); + QValueList<FolderP> *folders = wrapper->listFolders(); + QValueList<FolderP>::ConstIterator it; + MHfolderItem*item = 0; + MHfolderItem*pmaster = 0; + QString fname = ""; + int pos; + for ( it = folders->begin(); it!=folders->end(); ++it) + { + fname = (*it)->getDisplayName(); + /* this folder itself */ + if (fname=="/") + { + currentFolders.append(fname); + folder = (*it); + continue; + } + currentFolders.append(fname); + pos = fname.findRev("/"); + if (pos > 0) + { + fname = fname.left(pos); + pmaster = (MHfolderItem*)findSubItem(fname); + } + else + { + pmaster = 0; + } + if (pmaster) + { + item = new MHfolderItem( (*it), pmaster, item, this ); + } + else + { + item = new MHfolderItem( (*it), this , item ); + } + item->setSelectable((*it)->may_select()); + } + delete folders; +} + +RECBODYP MHviewItem::fetchBody( const RecMailP &mail ) +{ + + return wrapper->fetchBody( mail ); +} + +QPopupMenu * MHviewItem::getContextMenu() +{ + QPopupMenu *m = new QPopupMenu(0); + if (m) + { + m->insertItem(QObject::tr("Refresh folder list",contextName),0); + m->insertItem(QObject::tr("Create new folder",contextName),1); + m->insertItem(QObject::tr("Delete all mails",contextName),2); + m->insertItem(QObject::tr("Move/Copie all mails",contextName),3); + } + return m; +} + +void MHviewItem::createFolder() +{ + Newmdirdlg ndirdlg(0,0,true); + ndirdlg.showMaximized(); + if ( ndirdlg.exec() ) + { + QString ndir = ndirdlg.Newdir(); + if (wrapper->createMbox(ndir)) + { + refresh(true); + } + } +} + +void MHviewItem::downloadMails() +{ + AccountView*bl = accountView(); + if (!bl) return; + bl->downloadMails(folder,getWrapper()); +} + +QStringList MHviewItem::subFolders() +{ + return currentFolders; +} + +void MHviewItem::contextMenuSelected(int which) +{ + switch (which) + { + case 0: + refresh(true); + break; + case 1: + createFolder(); + break; + case 2: + deleteAllMail(getWrapper(),folder); + break; + case 3: + downloadMails(); + break; + default: + break; + } +} + +MHfolderItem::~MHfolderItem() +{} + +MHfolderItem::MHfolderItem( const FolderP &folderInit, MHviewItem *parent , QListViewItem*after ) + : AccountViewItem(folderInit, parent,after ) +{ + mbox = parent; + initName(); +} + +MHfolderItem::MHfolderItem(const FolderP& folderInit, MHfolderItem *parent, QListViewItem*after, MHviewItem*master) + : AccountViewItem(folderInit, parent,after ) +{ + folder = folderInit; + mbox = master; + initName(); +} + +void MHfolderItem::initName() +{ + QString bName = folder->getDisplayName(); + if (bName.startsWith("/")&&bName.length()>1) + { + bName.replace(0,1,""); + } + int pos = bName.findRev("/"); + if (pos > 0) + { + bName.replace(0,pos+1,""); + } + if (bName.lower() == "outgoing") + { + setPixmap( 0, PIXMAP_OUTBOXFOLDER ); + } + else if (bName.lower() == "inbox") + { + setPixmap( 0, PIXMAP_INBOXFOLDER); + } else if (bName.lower() == "drafts") { + setPixmap(0, SmallIcon ("edit")); + } else { + setPixmap( 0, PIXMAP_MBOXFOLDER ); + } + setText( 0, bName ); +} + +const FolderP&MHfolderItem::getFolder()const +{ + return folder; +} + +void MHfolderItem::refresh(QValueList<RecMailP>&target) +{ + if (folder->may_select()) + mbox->getWrapper()->listMessages( folder->getName(),target ); +} + +RECBODYP MHfolderItem::fetchBody(const RecMailP&aMail) +{ + return mbox->getWrapper()->fetchBody(aMail); +} + +void MHfolderItem::deleteFolder() +{ + int yesno = QMessageBox::warning(0,QObject::tr("Delete folder",contextName), + QObject::tr("<center>Realy delete folder <br><b>%1</b><br>and all if it content?</center>",contextName).arg(folder->getDisplayName()), + QObject::tr("Yes",contextName), + QObject::tr("No",contextName),QString::null,1,1); + + if (yesno == 0) + { + if (mbox->getWrapper()->deleteMbox(folder)) + { + QListView*v=listView(); + MHviewItem * box = mbox; + /* be carefull - after that this object is destroyd so don't use + * any member of it after that call!!*/ + mbox->refresh(true); + if (v) + { + v->setSelected(box,true); + } + } + } +} + +QPopupMenu * MHfolderItem::getContextMenu() +{ + QPopupMenu *m = new QPopupMenu(0); + if (m) + { + m->insertItem(QObject::tr("Move/Copie all mails",contextName),2); + m->insertItem(QObject::tr("Delete all mails",contextName),0); + m->insertItem(QObject::tr("Create new subfolder",contextName),3); + m->insertItem(QObject::tr("Delete folder",contextName),1); + } + return m; +} + +void MHfolderItem::downloadMails() +{ + AccountView*bl = mbox->accountView(); + if (!bl) return; + bl->downloadMails(folder,mbox->getWrapper()); +} + +void MHfolderItem::createFolder() +{ + Newmdirdlg ndirdlg(0,0,true); + ndirdlg.showMaximized(); + if (ndirdlg.exec() ) + { + QString ndir = ndirdlg.Newdir(); + if (mbox->getWrapper()->createMbox(ndir,folder)) + { + QListView*v=listView(); + MHviewItem * box = mbox; + /* be carefull - after that this object is destroyd so don't use + * any member of it after that call!!*/ + mbox->refresh(true); + if (v) + { + v->setSelected(box,true); + } + } + } +} + +void MHfolderItem::contextMenuSelected(int which) +{ + switch(which) + { + case 0: + deleteAllMail(mbox->getWrapper(),folder); + break; + case 1: + deleteFolder(); + break; + case 2: + downloadMails(); + break; + case 3: + createFolder(); + break; + default: + break; + } +} + +bool MHfolderItem::isDraftfolder() +{ + if (folder && folder->getName()==AbstractMail::defaultLocalfolder()+"/"+AbstractMail::draftFolder()) return true; + return false; +} + +/** + * Generic stuff + */ + +const QString AccountViewItem::contextName="AccountViewItem"; + +AccountViewItem::AccountViewItem( AccountView *parent ) + : QListViewItem( parent ) +{ + init(); + m_Backlink = parent; +} + +AccountViewItem::AccountViewItem( QListViewItem *parent) + : QListViewItem( parent),folder(0) +{ + init(); +} + +AccountViewItem::AccountViewItem( QListViewItem *parent , QListViewItem*after ) + :QListViewItem( parent,after ),folder(0) +{ + init(); +} + +AccountViewItem::AccountViewItem( const Opie::Core::OSmartPointer<Folder>&folderInit,QListViewItem *parent , QListViewItem*after ) + :QListViewItem( parent,after ),folder(folderInit) +{ + init(); +} + +void AccountViewItem::init() +{ + m_Backlink = 0; +} + +AccountViewItem::~AccountViewItem() +{ + folder = 0; +} + +AccountView*AccountViewItem::accountView() +{ + return m_Backlink; +} + +void AccountViewItem::deleteAllMail(AbstractMail*wrapper,const FolderP&folder) +{ + if (!wrapper) return; + QString fname=""; + if (folder) fname = folder->getDisplayName(); + int yesno = QMessageBox::warning(0,QObject::tr("Delete all mails",contextName), + QObject::tr("<center>Realy delete all mails in box <br>%1</center>",contextName). + arg(fname), + QObject::tr("Yes",contextName), + QObject::tr("No",contextName),QString::null,1,1); + + if (yesno == 0) + { + if (wrapper->deleteAllMail(folder)) + { + AccountView * view = (AccountView*)listView(); + if (view) view->refreshCurrent(); + } + } +} + +void AccountViewItem::removeChilds() +{ + QListViewItem *child = firstChild(); + while ( child ) + { + QListViewItem *tmp = child; + child = child->nextSibling(); + delete tmp; + } +} + +bool AccountViewItem::matchName(const QString&name)const +{ + if (!folder) return false; + return folder->getDisplayName()==name; +} + + +AccountViewItem*AccountViewItem::findSubItem(const QString&path,AccountViewItem*start) +{ + AccountViewItem*pitem,*sitem; + if (!start) pitem = (AccountViewItem*)firstChild(); + else pitem = (AccountViewItem*)start->firstChild(); + while (pitem) + { + if (pitem->matchName(path)) + { + break; + } + if (pitem->childCount()>0) + { + sitem = findSubItem(path,pitem); + if (sitem) + { + pitem = sitem; + break; + } + } + pitem=(AccountViewItem*)pitem->nextSibling(); + } + return pitem; +} + +bool AccountViewItem::isDraftfolder() +{ + return false; +} |