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.
 
 
 

167 lines
3.9 KiB

// kmfoldertree.cpp
#include <stdlib.h>
#include <qfileinf.h>
#include <qpixmap.h>
#include <kapp.h>
#include <kiconloader.h>
#include "kmglobal.h"
#include "kmfoldermgr.h"
#include "kmfolderdir.h"
#include "kmfolder.h"
#include "kmfoldertree.moc"
//-----------------------------------------------------------------------------
KMFolderTree::KMFolderTree(QWidget *parent,const char *name) :
KMFolderTreeInherited(parent, name, 1)
{
KConfig* conf = app->getConfig();
QString kdir = app->kdedir();
KIconLoader* loader = app->getIconLoader();
static QPixmap pixDir, pixNode, pixPlain, pixFld, pixIn, pixOut, pixTr,
pixSent;
static bool pixmapsLoaded = FALSE;
int width;
initMetaObject();
connect(this, SIGNAL(highlighted(int,int)),
this, SLOT(doFolderSelected(int,int)));
connect(folderMgr, SIGNAL(changed()),
this, SLOT(doFolderListChanged()));
conf->setGroup("Geometry");
width = conf->readNumEntry(name, 80);
resize(width, size().height());
clearTableFlags();
setTableFlags (Tbl_smoothVScrolling | Tbl_autoVScrollBar);
setColumn(0, "Folders", 400, KTabListBox::MixedColumn);
if (!pixmapsLoaded)
{
pixmapsLoaded = TRUE;
pixDir = loader->loadIcon("closed.xpm");
pixNode = loader->loadIcon("green-bullet.xpm");
pixPlain = loader->loadIcon("kmfolder.xpm");
pixFld = loader->loadIcon("kmfolder.xpm");
pixIn = loader->loadIcon("kmfldin.xpm");
pixOut = loader->loadIcon("kmfldout.xpm");
pixSent = loader->loadIcon("kmfldsent.xpm");
pixTr = loader->loadIcon("kmtrash.xpm");
}
dict().insert("dir", &pixDir);
dict().insert("node", &pixNode);
dict().insert("plain", &pixPlain);
dict().insert("fld", &pixFld);
dict().insert("in", &pixIn);
dict().insert("out", &pixOut);
dict().insert("st", &pixSent);
dict().insert("tr", &pixTr);
setAutoUpdate(TRUE);
reload();
}
//-----------------------------------------------------------------------------
KMFolderTree::~KMFolderTree()
{
KConfig* conf = app->getConfig();
conf->setGroup("Geometry");
conf->writeEntry(name(), size().width());
disconnect(folderMgr, SIGNAL(changed()), this, SLOT(doFolderListChanged()));
}
//-----------------------------------------------------------------------------
void KMFolderTree::reload(void)
{
KMFolderDir* fdir;
KMFolder* folder;
QString str;
QString indent = "";
bool upd = autoUpdate();
setAutoUpdate(FALSE);
clear();
mList.clear();
fdir = &folderMgr->dir();
for (folder = (KMFolder*)fdir->first();
folder != NULL;
folder = (KMFolder*)fdir->next())
{
str = indent + "{" + folder->type() + "} " + folder->name();
insertItem(str);
mList.append(folder);
}
setAutoUpdate(upd);
if (upd) repaint();
}
//-----------------------------------------------------------------------------
void KMFolderTree::doFolderListChanged()
{
reload();
}
//-----------------------------------------------------------------------------
void KMFolderTree::doFolderSelected(int index, int)
{
KMFolder* folder;
printf("KMFolderTree::doFolderSelected(%d)\n", index);
if (index < 0) return;
folder = (KMFolder*)mList.at(index);
if (folder->isDir())
{
debug("Folder `%s' is a directory -> ignoring it.",
(const char*)folder->name());
emit folderSelected(NULL);
}
else emit folderSelected(folder);
}
//-----------------------------------------------------------------------------
void KMFolderTree::resizeEvent(QResizeEvent* e)
{
KConfig* conf = app->getConfig();
conf->setGroup("Geometry");
conf->writeEntry(name(), size().width());
KMFolderTreeInherited::resizeEvent(e);
}
//-----------------------------------------------------------------------------
int KMFolderTree::indexOfFolder(const KMFolder* folder) const
{
KMFolderNodeList* list = (KMFolderNodeList*)&mList;
KMFolderNode* cur;
int i;
for (i=0, cur=list->first(); cur; cur=list->next())
{
if (cur == (KMFolderNode*)folder) return i;
i++;
}
return -1;
}