00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
#include <kiconloader.h>
00021
#include <klocale.h>
00022
#include <kdebug.h>
00023
00024
#include "klistviewaction.h"
00025
#include "kcomboview.h"
00026
00027
#include "viewcombos.h"
00028
#include "classviewpart.h"
00029
00030 NamespaceItem::NamespaceItem(
ClassViewPart *part,
QListView *parent,
QString name,
NamespaceDom dom)
00031 :
QListViewItem(parent, name), m_dom(dom), m_part(part)
00032 {
00033
m_part->
nsmap[
m_dom->name()] =
this;
00034 }
00035
00036 NamespaceItem::NamespaceItem(
ClassViewPart *part,
QListViewItem *parent,
QString name,
NamespaceDom dom)
00037 :
QListViewItem(parent, name), m_dom(dom), m_part(part)
00038 {
00039
m_part->
nsmap[
m_dom->name()] =
this;
00040 }
00041
00042 NamespaceItem::~ NamespaceItem( )
00043 {
00044
m_part->
nsmap.remove(
m_dom->name());
00045 }
00046
00047 NamespaceDom NamespaceItem::dom()
const
00048
{
00049
return m_dom;
00050 }
00051
00052 void NamespaceItem::setup()
00053 {
00054 QListViewItem::setup();
00055 setPixmap( 0, UserIcon(
"CVnamespace", KIcon::DefaultState,
m_part->
instance()) );
00056 }
00057
00058
00059 ClassItem::ClassItem(
ClassViewPart *part,
QListView *parent,
QString name,
ClassDom dom)
00060 :
QListViewItem(parent, name), m_dom(dom), m_part(part)
00061 {
00062
m_part->
clmap[
m_dom] =
this;
00063 }
00064
00065 ClassItem::ClassItem(
ClassViewPart *part,
QListViewItem *parent,
QString name,
ClassDom dom)
00066 :
QListViewItem(parent, name), m_dom(dom), m_part(part)
00067 {
00068
m_part->
clmap[
m_dom] =
this;
00069 }
00070
00071 ClassItem::~ ClassItem( )
00072 {
00073
m_part->
clmap.remove(
m_dom);
00074 }
00075
00076 ClassDom ClassItem::dom()
const
00077
{
00078
return m_dom;
00079 }
00080
00081 void ClassItem::setup()
00082 {
00083 QListViewItem::setup();
00084 setPixmap( 0, UserIcon(
"CVclass", KIcon::DefaultState,
m_part->
instance()) );
00085 }
00086
00087
00088 FunctionItem::FunctionItem(
ClassViewPart *part,
QListView *parent,
QString name,
FunctionDom dom)
00089 :
QListViewItem(parent, name), m_dom(dom), m_part(part)
00090 {
00091
m_part->
fnmap[
m_dom] =
this;
00092 }
00093
00094 FunctionItem::FunctionItem(
ClassViewPart *part,
QListViewItem *parent,
QString name,
FunctionDom dom)
00095 :
QListViewItem(parent, name), m_dom(dom), m_part(part)
00096 {
00097
m_part->
fnmap[
m_dom] =
this;
00098 }
00099
00100 FunctionItem::~ FunctionItem( )
00101 {
00102
m_part->
fnmap.remove(
m_dom);
00103 }
00104
00105 FunctionDom FunctionItem::dom()
const
00106
{
00107
return m_dom;
00108 }
00109
00110 void FunctionItem::setup()
00111 {
00112 QListViewItem::setup();
00113
QString iconName;
00114
if(
m_dom->access() == CodeModelItem::Private )
00115 iconName =
"CVprivate_meth";
00116
else if(
m_dom->access() == CodeModelItem::Protected )
00117 iconName =
"CVprotected_meth";
00118
else
00119 iconName =
"CVpublic_meth";
00120 setPixmap( 0, UserIcon(iconName, KIcon::DefaultState,
m_part->
instance()) );
00121 }
00122
00123
00124 namespace ViewCombosOp{
00125
00126 void refreshNamespaces(
ClassViewPart *part,
KComboView *view)
00127 {
00128 view->
clear();
00129
00130 part->
global_item =
new NamespaceItem( part, view->
listView(), i18n(
"(Global Namespace)"), part->
codeModel()->
globalNamespace() );
00131 view->
addItem(part->
global_item);
00132 part->
global_item->setPixmap( 0, UserIcon(
"CVnamespace", KIcon::DefaultState, part->
instance()) );
00133
NamespaceList namespaces = part->
codeModel()->
globalNamespace()->namespaceList();
00134
for (NamespaceList::const_iterator it = namespaces.begin(); it != namespaces.end(); ++it)
00135 {
00136
NamespaceItem *item =
new NamespaceItem(part, view->
listView(), part->
languageSupport()->
formatModelItem(*it), *it);
00137 view->
addItem(item);
00138 item->setOpen(
true);
00139
processNamespace(part, view, item);
00140 }
00141 view->
setCurrentActiveItem(part->
global_item);
00142 }
00143
00144 void refreshClasses(
ClassViewPart *part,
KComboView *view,
const QString &dom)
00145 {
00146 view->
clear();
00147
00148 view->
setCurrentText(
EmptyClasses);
00149
NamespaceDom nsdom;
00150
if (dom ==
"::")
00151 nsdom = part->
codeModel()->
globalNamespace();
00152
else
00153 {
00154 nsdom =
namespaceByName(part->
codeModel()->
globalNamespace(), dom);
00155
if (!nsdom)
00156
return;
00157 }
00158
ClassList classes = nsdom->classList();
00159
for (ClassList::const_iterator it = classes.begin(); it != classes.end(); ++it)
00160 {
00161
ClassItem *item =
new ClassItem(part, view->
listView(), part->
languageSupport()->
formatModelItem(*it), *it);
00162 view->
addItem(item);
00163 item->setOpen(
true);
00164
processClass(part, view, item);
00165 }
00166 }
00167
00168 void refreshFunctions(
ClassViewPart *part,
KComboView *view,
const ClassDom & dom)
00169 {
00170 view->
clear();
00171
00172 view->
setCurrentText(
EmptyFunctions);
00173
FunctionList functions = dom->functionList();
00174
for (FunctionList::const_iterator it = functions.begin(); it != functions.end(); ++it)
00175 {
00176
FunctionItem *item =
new FunctionItem(part, view->
listView(), part->
languageSupport()->
formatModelItem(*it,
true), *it);
00177 view->
addItem(item);
00178 item->setOpen(
true);
00179
processFunction(part, view, item);
00180 }
00181 }
00182
00183 void refreshFunctions(
ClassViewPart *part,
KComboView *view,
const QString & dom)
00184 {
00185 view->
clear();
00186
00187 view->
setCurrentText(
EmptyFunctions);
00188
NamespaceDom nsdom;
00189
if (dom ==
"::")
00190 nsdom = part->
codeModel()->
globalNamespace();
00191
else
00192 {
00193 nsdom =
namespaceByName(part->
codeModel()->
globalNamespace(), dom);
00194
if (!nsdom)
00195
return;
00196 }
00197
FunctionList functions = nsdom->functionList();
00198
for (FunctionList::const_iterator it = functions.begin(); it != functions.end(); ++it)
00199 {
00200
FunctionItem *item =
new FunctionItem(part, view->
listView(), part->
languageSupport()->
formatModelItem(*it,
true), *it);
00201 view->
addItem(item);
00202 item->setOpen(
true);
00203
processFunction(part, view, item);
00204 }
00205 }
00206
00207 void processNamespace(
ClassViewPart *part,
KComboView *view,
NamespaceItem * item, ProcessType type )
00208 {
00209
NamespaceDom baseDom =
namespaceByName(part->
codeModel()->
globalNamespace(), item->
dom()->name());
00210
if (!baseDom)
00211
return;
00212
NamespaceList namespaces = baseDom->namespaceList();
00213
for (NamespaceList::const_iterator it = namespaces.begin(); it != namespaces.end(); ++it)
00214 {
00215
kdDebug() <<
" processNamespace( for " << item->
dom()->name() <<
endl;
00216
if ((type == ViewCombosOp::Refresh) && (part->
nsmap.contains((*it)->name())))
00217 {
00218
kdDebug() <<
" ok. refresh " << (*it)->name() <<
endl;
00219
NamespaceDom nsdom = *it;
00220
00221
NamespaceItem *ns = part->
nsmap[nsdom->name()];
00222 ns->setText(0, part->
languageSupport()->
formatModelItem(nsdom));
00223
if (part->
m_namespaces->
view()->
currentItem() == ns)
00224 {
00225
00226 part->
m_namespaces->
view()->
setCurrentText(part->
languageSupport()->
formatModelItem(nsdom));
00227
00228
00229 part->
updateClassesForAdd(nsdom);
00230
00231 part->
updateFunctionsForAdd(model_cast<ClassDom>(nsdom));
00232 }
00233
00234
processNamespace(part, part->
m_namespaces->
view(), ns, ViewCombosOp::Refresh);
00235
00236
continue;
00237 }
00238
00239
kdDebug() <<
" ok. add " << (*it)->name() <<
endl;
00240
NamespaceItem *newitem =
new NamespaceItem(part, item, part->
languageSupport()->
formatModelItem(*it,
true), *it);
00241 view->
addItem(newitem);
00242 newitem->setOpen(
true);
00243
processNamespace(part, view, newitem);
00244 }
00245 }
00246
00247 void processClass(
ClassViewPart *part,
KComboView *view,
ClassItem * item, ProcessType type )
00248 {
00249
ClassList classes = item->
dom()->classList();
00250
for (ClassList::const_iterator it = classes.begin(); it != classes.end(); ++it)
00251 {
00252
if ((type == ViewCombosOp::Refresh) && (part->
clmap.contains(*it)))
00253 {
00254
ClassDom cldom = *it;
00255
00256
ClassItem *cl = part->
clmap[cldom];
00257 cl->setText(0, part->
languageSupport()->
formatModelItem(cldom));
00258
if (part->
m_classes->
view()->
currentItem() == cl)
00259 {
00260
00261 part->
m_classes->
view()->
setCurrentText(part->
languageSupport()->
formatModelItem(cldom));
00262
00263
00264 part->
updateFunctionsForAdd(cldom);
00265 }
00266
00267
processClass(part, part->
m_classes->
view(), cl, ViewCombosOp::Refresh);
00268
00269
continue;
00270 }
00271
00272
ClassItem *newitem =
new ClassItem(part, item, part->
languageSupport()->
formatModelItem(*it), *it);
00273 view->
addItem(newitem);
00274 newitem->setOpen(
true);
00275
processClass(part, view, newitem);
00276 }
00277 }
00278
00279 void processFunction(
ClassViewPart* ,
KComboView* ,
FunctionItem* , ProcessType )
00280 {
00281
00282
00283
00284
00285
00286
00287
00288
00289
00290 }
00291
00292 }
00293
00294 bool ViewCombosOp::removeNamespacesItems(
ClassViewPart *part,
QListView *view,
const NamespaceDom &dom)
00295 {
00296
removeFunctionItems(part, view, model_cast<ClassDom>(dom));
00297
removeClassItems(part, view, model_cast<ClassDom>(dom));
00298
00299
bool result =
false;
00300
00301
NamespaceList nl = dom->namespaceList();
00302
for (NamespaceList::const_iterator it = nl.begin(); it != nl.end(); ++it)
00303 {
00304 result = result ||
removeNamespacesItems(part, view, *it);
00305
NamespaceDom nsd = *it;
00306
if ( (part->
nsmap.contains((*it)->name())) && (part->
nsmap[(*it)->name()] != 0) )
00307 result =
true;
00308 }
00309
return result;
00310 }
00311
00312 void ViewCombosOp::removeClassItems(
ClassViewPart * part,
QListView * view,
const ClassDom & dom )
00313 {
00314
removeFunctionItems(part, view, dom);
00315
00316
ClassList cl = dom->classList();
00317
for (ClassList::const_iterator it = cl.begin(); it != cl.end(); ++it)
00318 {
00319
removeClassItems(part, view, *it);
00320
if ( (part->
clmap.contains(*it)) && (part->
clmap[*it] != 0) )
00321 part->
m_classes->
view()->
removeItem(part->
clmap[*it]);
00322 }
00323 }
00324
00325 void ViewCombosOp::removeFunctionItems(
ClassViewPart * part,
QListView * ,
const ClassDom & dom )
00326 {
00327
FunctionList fl = dom->functionList();
00328
for (FunctionList::const_iterator it = fl.begin(); it != fl.end(); ++it)
00329 {
00330
if ( (part->
fnmap.contains(*it)) && (part->
fnmap[*it] != 0) )
00331 part->
m_functions->
view()->
removeItem(part->
fnmap[*it]);
00332 }
00333 }
00334
00335 NamespaceDom ViewCombosOp::namespaceByName(
NamespaceDom dom,
QString name )
00336 {
00337
NamespaceDom result;
00338
00339 result = dom->namespaceByName(name);
00340
if (!result)
00341 {
00342
NamespaceList nslist = dom->namespaceList();
00343
for (NamespaceList::const_iterator it = nslist.begin(); it != nslist.end(); ++it)
00344 {
00345 result =
namespaceByName(*it, name);
00346
if (result)
00347
break;
00348 }
00349 }
00350
return result;
00351 }
00352