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.
tdevelop/parts/classview/viewcombos.cpp

215 lines
6.0 KiB

/*
* Copyright (C) 2003 Alexander Dymo (cloudtemple@mksat.net)
*
* 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.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; see the file COPYING. If not, write to
* the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*
*/
#include <kiconloader.h>
#include <klocale.h>
#include <kdebug.h>
#include "klistviewaction.h"
#include "kcomboview.h"
#include "viewcombos.h"
#include "classviewpart.h"
NamespaceItem::NamespaceItem(ClassViewPart *part, QListView *parent, QString name, NamespaceDom dom)
:QListViewItem(parent, name), m_dom(dom), m_part(part)
{
}
NamespaceItem::NamespaceItem(ClassViewPart *part, QListViewItem *parent, QString name, NamespaceDom dom)
:QListViewItem(parent, name), m_dom(dom), m_part(part)
{
}
NamespaceItem::~ NamespaceItem( )
{
}
NamespaceDom NamespaceItem::dom() const
{
return m_dom;
}
void NamespaceItem::setup()
{
QListViewItem::setup();
setPixmap( 0, UserIcon("CVnamespace", KIcon::DefaultState, m_part->instance()) );
}
ClassItem::ClassItem(ClassViewPart *part, QListView *parent, QString name, ClassDom dom)
:QListViewItem(parent, name), m_dom(dom), m_part(part)
{
}
ClassItem::ClassItem(ClassViewPart *part, QListViewItem *parent, QString name, ClassDom dom)
:QListViewItem(parent, name), m_dom(dom), m_part(part)
{
}
ClassItem::~ ClassItem( )
{
}
ClassDom ClassItem::dom() const
{
return m_dom;
}
void ClassItem::setup()
{
QListViewItem::setup();
setPixmap( 0, UserIcon("CVclass", KIcon::DefaultState, m_part->instance()) );
}
FunctionItem::FunctionItem(ClassViewPart *part, QListView *parent, QString name, FunctionDom dom)
:QListViewItem(parent, name), m_dom(dom), m_part(part)
{
}
FunctionItem::FunctionItem(ClassViewPart *part, QListViewItem *parent, QString name, FunctionDom dom)
:QListViewItem(parent, name), m_dom(dom), m_part(part)
{
}
FunctionItem::~ FunctionItem( )
{
}
FunctionDom FunctionItem::dom() const
{
return m_dom;
}
void FunctionItem::setup()
{
QListViewItem::setup();
QString iconName;
if( m_dom->access() == CodeModelItem::Private )
iconName = "CVprivate_meth";
else if( m_dom->access() == CodeModelItem::Protected )
iconName = "CVprotected_meth";
else
iconName = "CVpublic_meth";
setPixmap( 0, UserIcon(iconName, KIcon::DefaultState, m_part->instance()) );
}
namespace ViewCombosOp{
void refreshNamespaces(ClassViewPart *part, KComboView *view)
{
view->clear();
NamespaceItem *global_item = new NamespaceItem( part, view->listView(), i18n("(Global Namespace)"), part->codeModel()->globalNamespace() );
view->addItem(global_item);
global_item->setPixmap( 0, UserIcon("CVnamespace", KIcon::DefaultState, part->instance()) );
NamespaceList namespaces = part->codeModel()->globalNamespace()->namespaceList();
for (NamespaceList::const_iterator it = namespaces.begin(); it != namespaces.end(); ++it)
{
NamespaceItem *item = new NamespaceItem(part, view->listView(), part->languageSupport()->formatModelItem(*it), *it);
view->addItem(item);
item->setOpen(true);
}
view->setCurrentActiveItem(global_item);
}
void refreshClasses(ClassViewPart *part, KComboView *view, const QString &dom)
{
view->clear();
view->setCurrentText(EmptyClasses);
NamespaceDom nsdom;
if (dom == "::")
nsdom = part->codeModel()->globalNamespace();
else
{
nsdom = namespaceByName(part->codeModel()->globalNamespace(), dom);
if (!nsdom)
return;
}
ClassList classes = nsdom->classList();
for (ClassList::const_iterator it = classes.begin(); it != classes.end(); ++it)
{
ClassItem *item = new ClassItem(part, view->listView(), part->languageSupport()->formatModelItem(*it), *it);
view->addItem(item);
item->setOpen(true);
}
}
void refreshFunctions(ClassViewPart *part, KComboView *view, const ClassDom & dom)
{
view->clear();
view->setCurrentText(EmptyFunctions);
FunctionList functions = dom->functionList();
for (FunctionList::const_iterator it = functions.begin(); it != functions.end(); ++it)
{
FunctionItem *item = new FunctionItem(part, view->listView(), part->languageSupport()->formatModelItem(*it, true), *it);
view->addItem(item);
item->setOpen(true);
}
}
void refreshFunctions(ClassViewPart *part, KComboView *view, const QString & dom)
{
view->clear();
view->setCurrentText(EmptyFunctions);
NamespaceDom nsdom;
if (dom == "::")
nsdom = part->codeModel()->globalNamespace();
else
{
nsdom = namespaceByName(part->codeModel()->globalNamespace(), dom);
if (!nsdom)
return;
}
FunctionList functions = nsdom->functionList();
for (FunctionList::const_iterator it = functions.begin(); it != functions.end(); ++it)
{
FunctionItem *item = new FunctionItem(part, view->listView(), part->languageSupport()->formatModelItem(*it, true), *it);
view->addItem(item);
item->setOpen(true);
}
}
}
NamespaceDom ViewCombosOp::namespaceByName( NamespaceDom dom, QString name )
{
NamespaceDom result;
result = dom->namespaceByName(name);
if (!result)
{
NamespaceList nslist = dom->namespaceList();
for (NamespaceList::const_iterator it = nslist.begin(); it != nslist.end(); ++it)
{
result = namespaceByName(*it, name);
if (result)
break;
}
}
return result;
}