You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

271 lines
6.7 KiB

// Main View
#include <qstring.h>
#include <qpixmap.h>
#include <qdir.h>
#include <qfile.h>
#include <qtstream.h>
#include <kmsgbox.h>
#include <kpanner.h>
#include <klocale.h>
#include "util.h"
#include "kmcomposewin.h"
#include "kmsettings.h"
#include "kmfolderdia.h"
#include "kmaccount.h"
#include "kmacctmgr.h"
#include "kbusyptr.h"
#include "kmfolder.h"
#include "kmmessage.h"
#include "kmmainview.h"
#include "kmglobal.h"
#include "kmfoldertree.h"
#include "kmheaders.h"
#include "kmreaderwin.h"
#include "kmmainview.moc"
//-----------------------------------------------------------------------------
KMMainView::KMMainView(QWidget *parent, const char *name):
KMMainViewInherited(parent,name)
{
QString o;
KConfig *config;
config = app->getConfig();
config->setGroup("Settings");
o = config->readEntry("Reader");
if( !o.isEmpty() && o.find("separated",0,false) ==0)
initSeparated();
else
initIntegrated();
currentFolder = new KMFolder();
}
//-----------------------------------------------------------------------------
void KMMainView::initSeparated()
{
vertPanner=new KPanner(NULL, NULL,KPanner::O_VERTICAL,30);
connect(vertPanner, SIGNAL(positionChanged()),
this, SLOT(pannerHasChanged()));
folderTree = new KMFolderTree(NULL, "foldertree-seperated");
connect(folderTree, SIGNAL(folderSelected(KMFolder*)),
this, SLOT(folderSelected(KMFolder*)));
folderTree->setCaption(nls->translate("KMail Folders"));
folderTree->resize(folderTree->size());
folderTree->show();
headers = new KMHeaders;
connect(headers, SIGNAL(messageSelected(KMMessage*)),
this, SLOT(messageSelected(KMMessage *)));
headers->setCaption(nls->translate("KMail Message List"));
headers->resize(headers->size());
headers->show();
horzPanner = NULL;
Integrated = FALSE;
resize(10,10);
}
//-----------------------------------------------------------------------------
void KMMainView::initIntegrated()
{
horzPanner=new KPanner(this, NULL,KPanner::O_HORIZONTAL,40);
connect(horzPanner, SIGNAL(positionChanged()),
this, SLOT(pannerHasChanged()));
vertPanner=new KPanner(horzPanner->child0(), NULL,KPanner::O_VERTICAL,30);
connect(vertPanner, SIGNAL(positionChanged()),
this, SLOT(pannerHasChanged()));
folderTree = new KMFolderTree(vertPanner->child0(), "foldertree-integrated");
connect(folderTree, SIGNAL(folderSelected(KMFolder*)),
this, SLOT(folderSelected(KMFolder*)));
headers = new KMHeaders(vertPanner->child1());
connect(headers, SIGNAL(messageSelected(KMMessage*)),
this, SLOT(messageSelected(KMMessage*)));
messageView = new KMReaderView(horzPanner->child1());
Integrated = TRUE;
}
//-----------------------------------------------------------------------------
void KMMainView::doAddFolder()
{
#ifdef BROKEN
KMFolderDialog *d=new KMFolderDialog(this);
d->setCaption("Create Folder");
if (d->exec())
{
QDir dir;
folderTree->cdFolder(&dir);
dir.mkdir(d->nameEdit->text());
folderTree->getList();
}
delete d;
#endif
}
//-----------------------------------------------------------------------------
void KMMainView::doCheckMail()
{
acctMgr->checkMail();
}
//-----------------------------------------------------------------------------
void KMMainView::doCompose()
{
KMComposeWin *d;
d = new KMComposeWin;
d->show();
}
//-----------------------------------------------------------------------------
void KMMainView::doModifyFolder()
{
#ifdef BROKEN
KMFolderDialog *d;
if ((folderTree->currentItem())<1)
return; // make sure something is selected and it's not "/"
d = new KMFolderDialog(this, currentFolder);
d->setCaption("Modify Folder");
d->nameEdit->setText(folderTree->getCurrentItem()->getText());
if (d->exec())
{
QDir dir;
folderTree->cdFolder(&dir);
dir.cdUp();
dir.rename(folderTree->getCurrentItem()->getText(),d->nameEdit->text());
folderTree->getList();
}
delete d;
#endif
}
//-----------------------------------------------------------------------------
void KMMainView::doEmptyFolder()
{
currentFolder->expunge();
currentFolder->open();
headers->setFolder(currentFolder);
}
//-----------------------------------------------------------------------------
void KMMainView::doRemoveFolder()
{
#ifdef BROKEN
if ((folderTree->currentItem())<1) return;
QString s;
QDir dir;
s.sprintf("Are you sure you want to remove the folder \"%s\"\n and all of its child folders?",
folderTree->getCurrentItem()->getText());
if ((KMsgBox::yesNo(this,"Confirmation",s))==1) {
headers->clear();
if ( horzPanner) messageView->clearCanvas();
folderTree->cdFolder(&dir);
removeDirectory(dir.path());
folderTree->getList();
}
#endif
}
//-----------------------------------------------------------------------------
void KMMainView::folderSelected(KMFolder* aFolder)
{
if (currentFolder) currentFolder->close();
currentFolder = aFolder;
if (currentFolder) currentFolder->open();
headers->setFolder(currentFolder);
if (horzPanner) messageView->clearCanvas();
}
//-----------------------------------------------------------------------------
void KMMainView::doDeleteMessage()
{
headers->toggleDeleteMsg();
}
//-----------------------------------------------------------------------------
void KMMainView::doForwardMessage()
{
headers->forwardMsg();
}
//-----------------------------------------------------------------------------
void KMMainView::doReplyMessage()
{
headers->replyToMsg();
}
//-----------------------------------------------------------------------------
void KMMainView::messageSelected(KMMessage *m)
{
KMReaderWin *w;
if(horzPanner) messageView->parseMessage(m);
else
{
w = new KMReaderWin(0,0,headers->currentItem()+1,currentFolder);
w->show();
}
}
//-----------------------------------------------------------------------------
void KMMainView::pannerHasChanged()
{
resizeEvent(NULL);
}
//-----------------------------------------------------------------------------
void KMMainView::resizeEvent(QResizeEvent *e)
{
QWidget::resizeEvent(e);
if(horzPanner)
{
horzPanner->setGeometry(0, 0, width(), height());
vertPanner->resize(horzPanner->child0()->width(),
horzPanner->child0()->height());
folderTree->resize(vertPanner->child0()->width(),
vertPanner->child0()->height());
headers->resize(vertPanner->child1()->width(),
vertPanner->child1()->height());
messageView->resize(horzPanner->child1()->width(),
horzPanner->child1()->height());
}
else
{
vertPanner->resize(width(), height());
folderTree->resize(vertPanner->child0()->width(),
vertPanner->child0()->height());
headers->resize(vertPanner->child1()->width(),
vertPanner->child1()->height());
}
}