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.
tdewebdev/quanta/treeviews/doctreeview.cpp

195 lines
5.9 KiB

/***************************************************************************
doctreeview.cpp - description
-------------------
begin : Sat Mar 4 2000
copyright : (C) 2000 by Yacovlev Alexander & Dmitry Poplavsky <pdima@mail.univ.kiev.ua>
(C) 2002, 2004 Andras Mantia <amantia@kde.org>
***************************************************************************/
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
// QT clases
#include <tqstrlist.h>
#include <tqheader.h>
#include <tqpixmap.h>
#include <tqdir.h>
// KDE clases
#include <kconfig.h>
#include <kapplication.h>
#include <klocale.h>
#include <kpopupmenu.h>
#include <kstandarddirs.h>
#include <kiconloader.h>
#include <kurl.h>
// application clases
#include "doctreeview.h"
#include "docfolder.h"
#include "docitem.h"
DocTreeView::DocTreeView(TQWidget *parent, const char *name )
: KListView(parent,name)
{
contextHelpDict = new TQDict<TQString>( 101, false );
setRootIsDecorated( true );
header()->hide();
setSorting(-1,false);
setFrameStyle( Panel | Sunken );
setLineWidth( 2 );
addColumn(i18n("Name"), -1);
addColumn("");
setFullWidth(true);
projectDocFolder = new KListViewItem(this, i18n("Project Documentation"));
projectDocFolder->setOpen(true);
slotRefreshTree();
setFocusPolicy(TQWidget::ClickFocus);
connect(this, TQT_SIGNAL(executed(TQListViewItem *)), TQT_SLOT(clickItem(TQListViewItem *)) );
connect(this, TQT_SIGNAL(returnPressed(TQListViewItem *)), TQT_SLOT(clickItem(TQListViewItem *)));
connect(this, TQT_SIGNAL(doubleClicked(TQListViewItem *)), TQT_SLOT(slotDoubleClicked(TQListViewItem *)));
m_contextMenu = new KPopupMenu(this);
m_menuReload = m_contextMenu->insertItem(i18n("&Reload"), this, TQT_SLOT(slotReloadProjectDocs()));
m_contextMenu->insertItem(SmallIcon("network"), i18n("&Download Documentation..."), this, TQT_SIGNAL(downloadDoc()));
connect(this, TQT_SIGNAL(contextMenu(KListView*, TQListViewItem*, const TQPoint&)),
this, TQT_SLOT(slotMenu(KListView*, TQListViewItem*, const TQPoint&)));
}
DocTreeView::~DocTreeView(){
contextHelpDict->setAutoDelete(true);
delete contextHelpDict;
}
void DocTreeView::slotRefreshTree()
{
for (TQValueList<DocFolder *>::Iterator it = m_folderList.begin(); it != m_folderList.end(); ++it)
{
delete *it;
}
m_folderList.clear();
TQStringList docDirs = KGlobal::instance()->dirs()->findDirs("appdata", "doc");
for ( TQStringList::Iterator it = docDirs.begin(); it != docDirs.end(); ++it )
{
TQString docDir = *it;
TQDir dir(docDir, "*.docrc");
TQStringList files = dir.entryList();
for ( TQStringList::Iterator it_f = files.begin(); it_f != files.end(); ++it_f )
{
KConfig config( docDir + *it_f );
config.setGroup("Tree");
TQString relDocDir = config.readEntry("Doc dir");
TQString name = config.readEntry("Name").lower();
DocFolder *folder = new DocFolder(this, config.readEntry("Top Element"), &config , TQDir::cleanDirPath(docDir+relDocDir)+"/");
folder->setPixmap( 0, SmallIcon("folder_open") );
folder->topLevel = true;
folder->setOpen(true);
m_folderList.append(folder);
config.setGroup("Context");
TQStrList list;
config.readListEntry("ContextList", list );
for ( unsigned int i=0; i<list.count(); i++ )
{
TQString keyword = list.at(i);
TQString *url = new TQString(TQDir::cleanDirPath(docDir + relDocDir + "/" + config.readEntry( list.at(i) )));
contextHelpDict->insert( name + "|" + keyword, url );
}
}
}
}
void DocTreeView::clickItem( TQListViewItem *)
{
TQListViewItem *it = currentItem();
if ( !it )
return;
DocItem *dit = dynamic_cast< DocItem *>(it);
if ( dit )
if ( ! dit->url.isEmpty() )
emit openURL( dit->url);
DocFolder *dfol = dynamic_cast< DocFolder *>(it);
if ( dfol )
if ( ! dfol->url.isEmpty() )
emit openURL( dfol->url );
//else
// emit openURL( locate("appdata","doc/documentation.html") );
}
TQString * DocTreeView::contextHelp(const TQString &keyword)
{
TQString word = keyword.mid(keyword.find("|"));
if (contextHelpDict->find(keyword))
return contextHelpDict->find(keyword);
else
return contextHelpDict->find(word); //to support old documentation packages
}
void DocTreeView::slotDoubleClicked(TQListViewItem *item )
{
if (item)
{
item->setOpen(!item->isOpen());
}
}
void DocTreeView::slotAddProjectDoc(const KURL& url)
{
TQString path = url.path();
int pos = path.find("/doc/");
path = path.mid(pos + 5);
new DocItem(projectDocFolder, path, url.url());
}
void DocTreeView::slotMenu(KListView *, TQListViewItem *item, const TQPoint &point)
{
m_contextMenu->setItemVisible(m_menuReload, false);
if (item)
{
setSelected(item, true);
if (currentItem() == projectDocFolder)
{
m_contextMenu->setItemVisible(m_menuReload, true);
}
}
m_contextMenu->popup(point);
}
void DocTreeView::slotNewProjectLoaded(const TQString &, const KURL &, const KURL &)
{
slotReloadProjectDocs();
}
void DocTreeView::slotReloadProjectDocs()
{
TQListViewItem *child = projectDocFolder->firstChild();
while (child) {
TQListViewItem *c = child;
child = child->nextSibling();
delete c;
}
emit reloadProjectDocs();
}
#include "doctreeview.moc"