00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
#ifndef __CLASSVIEW_WIDGET_H__
00023
#define __CLASSVIEW_WIDGET_H__
00024
00025
#include <klistview.h>
00026
#include <qstring.h>
00027
#include <qstringlist.h>
00028
#include <qmap.h>
00029
#include <qtooltip.h>
00030
#include <codemodel.h>
00031
00032
class KDevProject;
00033
class ClassViewPart;
00034
class ClassViewItem;
00035
class FolderBrowserItem;
00036
class NamespaceDomBrowserItem;
00037
class ClassDomBrowserItem;
00038
class TypeAliasDomBrowserItem;
00039
class FunctionDomBrowserItem;
00040
class VariableDomBrowserItem;
00041
class KSelectAction;
00042
00043 class ClassViewWidget :
public KListView,
public QToolTip
00044 {
00045 Q_OBJECT
00046
public:
00047 enum ViewMode
00048 {
00049
KDevelop3ViewMode = 0,
00050
KDevelop2ViewMode,
00051
JavaLikeViewMode
00052 };
00053
00054
public:
00055
ClassViewWidget(
ClassViewPart *part );
00056
virtual ~ClassViewWidget();
00057
00058
int viewMode() const;
00059
void setViewMode(
int mode );
00060
00061
void clear();
00062
00063 signals:
00064
void removedNamespace(const
QString &name);
00065
00066 private slots:
00067
void slotNewClass();
00068
void slotAddMethod();
00069
void slotAddAttribute();
00070
void slotOpenDeclaration();
00071
void slotOpenImplementation();
00072
00073 protected:
00074
void contentsContextMenuEvent(
QContextMenuEvent* );
00075
void maybeTip(
QPoint const & );
00076
00077 private slots:
00078
void slotProjectOpened();
00079
void slotProjectClosed();
00080
void refresh();
00081
void insertFile( const
QString& fileName );
00082
void removeFile( const
QString& fileName );
00083
void slotExecuted(
QListViewItem* item );
00084
00085 private:
00086 ClassViewPart* m_part;
00087 QStringList removedText;
00088 QString m_projectDirectory;
00089 int m_projectDirectoryLength;
00090 FolderBrowserItem* m_projectItem;
00091 KSelectAction* m_actionViewMode;
00092 KAction* m_actionNewClass;
00093 KAction* m_actionAddMethod;
00094 KAction* m_actionAddAttribute;
00095 KAction* m_actionOpenDeclaration;
00096 KAction* m_actionOpenImplementation;
00097
00098 friend class
ClassViewItem;
00099 friend class
FolderBrowserItem;
00100 friend class
NamespaceDomBrowserItem;
00101 friend class
ClassDomBrowserItem;
00102 friend class
TypeAliasDomBrowserItem;
00103 friend class
FunctionDomBrowserItem;
00104 friend class
VariableDomBrowserItem;
00105 };
00106
00107 class ClassViewItem: public
KListViewItem
00108 {
00109
public:
00110 ClassViewItem(
QListView* parent,
const QString& text=QString::null )
00111 : KListViewItem( parent,
text ) {}
00112 ClassViewItem(
QListViewItem* parent,
const QString& text=QString::null )
00113 : KListViewItem( parent,
text ) {}
00114
00115 virtual const CodeModelItem* model()
const {
return 0; }
00116
00117 virtual bool isFolder()
const {
return false; }
00118 virtual bool isFile()
const {
return false; }
00119 virtual bool isNamespace()
const {
return false; }
00120 virtual bool isClass()
const {
return false; }
00121 virtual bool isFunction()
const {
return false; }
00122 virtual bool isVariable()
const {
return false; }
00123
00124 virtual bool hasDeclaration()
const {
return false; }
00125 virtual bool hasImplementation()
const {
return false; }
00126
00127 virtual void openDeclaration() {}
00128 virtual void openImplementation() {}
00129
00130 ClassViewWidget* listView() {
return static_cast<ClassViewWidget*>( KListViewItem::listView() ); }
00131 const ClassViewWidget* listView()
const {
return static_cast<ClassViewWidget*>( KListViewItem::listView() ); }
00132 };
00133
00134 class FolderBrowserItem:
public ClassViewItem
00135 {
00136
public:
00137 FolderBrowserItem(
ClassViewWidget* widget,
QListView* parent,
const QString& name=QString::null )
00138 :
ClassViewItem( parent, name ), m_widget(widget) {}
00139 FolderBrowserItem(
ClassViewWidget* widget,
QListViewItem* parent,
const QString& name=QString::null )
00140 :
ClassViewItem( parent, name ), m_widget(widget) {}
00141
00142 virtual bool isFolder()
const {
return true; }
00143
00144
void setup();
00145
QString key(
int,
bool ) const;
00146
00147
void processFile(
FileDom file,
QStringList& path,
bool remove=false );
00148
void processNamespace(
NamespaceDom ns,
bool remove=false );
00149
void processClass(
ClassDom klass,
bool remove=false );
00150
void processTypeAlias(
TypeAliasDom typeAlias,
bool remove=false );
00151
void processFunction(
FunctionDom fun,
bool remove=false );
00152
void processVariable(
VariableDom var,
bool remove=false );
00153
00154 private:
00155 QMap<
QString,
FolderBrowserItem*> m_folders;
00156 QMap<QString,
NamespaceDomBrowserItem*> m_namespaces;
00157 QMap<
ClassDom,
ClassDomBrowserItem*> m_classes;
00158 QMap<
TypeAliasDom,
TypeAliasDomBrowserItem*> m_typeAliases;
00159 QMap<
FunctionDom,
FunctionDomBrowserItem*> m_functions;
00160 QMap<
VariableDom,
VariableDomBrowserItem*> m_variables;
00161
00162 ClassViewWidget* m_widget;
00163 };
00164
00165 class
NamespaceDomBrowserItem: public
ClassViewItem
00166 {
00167
public:
00168 NamespaceDomBrowserItem(
QListView* parent,
NamespaceDom dom )
00169 : ClassViewItem( parent, dom->name() ), m_dom( dom ) {}
00170 NamespaceDomBrowserItem(
QListViewItem* parent,
NamespaceDom dom )
00171 : ClassViewItem( parent, dom->name() ), m_dom( dom ) {}
00172
00173 const CodeModelItem* model()
const {
return m_dom; }
00174
00175 virtual bool isNamespace()
const {
return true; }
00176
00177
void setup();
00178 QString key(
int,
bool ) const;
00179
00180
void processNamespace(
NamespaceDom ns,
bool remove=false );
00181
void processClass( ClassDom klass,
bool remove=false );
00182
void processTypeAlias( TypeAliasDom typeAlias,
bool remove=false );
00183
void processFunction( FunctionDom fun,
bool remove=false );
00184
void processVariable( VariableDom var,
bool remove=false );
00185
00186 NamespaceDom dom() {
return m_dom; }
00187
00188
private:
00189 NamespaceDom m_dom;
00190 QMap<QString, NamespaceDomBrowserItem*> m_namespaces;
00191 QMap<ClassDom, ClassDomBrowserItem*> m_classes;
00192 QMap<TypeAliasDom, TypeAliasDomBrowserItem*> m_typeAliases;
00193 QMap<FunctionDom, FunctionDomBrowserItem*> m_functions;
00194 QMap<VariableDom, VariableDomBrowserItem*> m_variables;
00195 };
00196
00197 class ClassDomBrowserItem:
public ClassViewItem
00198 {
00199
public:
00200 ClassDomBrowserItem(
QListView* parent,
ClassDom dom )
00201 :
ClassViewItem( parent, dom->name() ), m_dom( dom ) {}
00202 ClassDomBrowserItem(
QListViewItem* parent,
ClassDom dom )
00203 :
ClassViewItem( parent, dom->name() ), m_dom( dom ) {}
00204
00205 const CodeModelItem* model()
const {
return m_dom; }
00206 virtual bool isClass()
const {
return true; }
00207
00208 virtual bool hasDeclaration()
const {
return true; }
00209
virtual void openDeclaration();
00210
00211
void setup();
00212
QString key(
int,
bool ) const;
00213
00214
void processClass(
ClassDom klass,
bool remove=false );
00215
void processTypeAlias(
TypeAliasDom typeAlias,
bool remove=false );
00216
void processFunction(
FunctionDom fun,
bool remove=false );
00217
void processVariable(
VariableDom var,
bool remove=false );
00218
00219 ClassDom dom() {
return m_dom; }
00220
00221
private:
00222 ClassDom m_dom;
00223 QMap<ClassDom, ClassDomBrowserItem*> m_classes;
00224 QMap<TypeAliasDom, TypeAliasDomBrowserItem*> m_typeAliases;
00225 QMap<FunctionDom, FunctionDomBrowserItem*> m_functions;
00226 QMap<VariableDom, VariableDomBrowserItem*> m_variables;
00227 };
00228
00229 class TypeAliasDomBrowserItem:
public ClassViewItem
00230 {
00231
public:
00232 TypeAliasDomBrowserItem(
QListView* parent,
TypeAliasDom dom )
00233 :
ClassViewItem( parent, dom->name() ), m_dom( dom ) {}
00234 TypeAliasDomBrowserItem(
QListViewItem* parent,
TypeAliasDom dom )
00235 :
ClassViewItem( parent, dom->name() ), m_dom( dom ) {}
00236
00237 const CodeModelItem* model()
const {
return m_dom; }
00238
00239 virtual bool hasDeclaration()
const {
return true; }
00240
virtual void openDeclaration();
00241
00242
void setup();
00243
QString key(
int,
bool ) const;
00244
00245 TypeAliasDom dom() {
return m_dom; }
00246
00247
private:
00248 TypeAliasDom m_dom;
00249 };
00250
00251 class FunctionDomBrowserItem:
public ClassViewItem
00252 {
00253
public:
00254 FunctionDomBrowserItem(
QListView* parent,
FunctionDom dom )
00255 :
ClassViewItem( parent, dom->name() ), m_dom( dom ) {}
00256 FunctionDomBrowserItem(
QListViewItem* parent,
FunctionDom dom )
00257 :
ClassViewItem( parent, dom->name() ), m_dom( dom ) {}
00258
00259 const CodeModelItem* model()
const {
return m_dom; }
00260 virtual bool isFunction()
const {
return true; }
00261
00262 virtual bool hasDeclaration()
const {
return true; }
00263
virtual bool hasImplementation() const;
00264
00265 virtual
void openDeclaration();
00266 virtual
void openImplementation();
00267
00268
void setup();
00269
QString key(
int,
bool ) const;
00270
00271 FunctionDom dom() {
return m_dom; }
00272
00273
private:
00274 FunctionDom m_dom;
00275 };
00276
00277 class VariableDomBrowserItem:
public ClassViewItem
00278 {
00279
public:
00280 VariableDomBrowserItem(
QListView* parent,
VariableDom dom )
00281 :
ClassViewItem( parent, dom->name() ), m_dom( dom ) {}
00282 VariableDomBrowserItem(
QListViewItem* parent,
VariableDom dom )
00283 :
ClassViewItem( parent, dom->name() ), m_dom( dom ) {}
00284
00285 const CodeModelItem* model()
const {
return m_dom; }
00286 virtual bool isVariable()
const {
return true; }
00287
00288 virtual bool hasDeclaration()
const {
return true; }
00289 virtual bool hasImplementation()
const {
return false; }
00290
00291
virtual void openDeclaration();
00292
virtual void openImplementation();
00293
00294
void setup();
00295
QString key(
int,
bool ) const;
00296
00297 VariableDom dom() {
return m_dom; }
00298
00299
private:
00300 VariableDom m_dom;
00301 };
00302
00303 struct FindOp
00304 {
00305 FindOp(
const FunctionDom& dom ): m_dom( dom ) {}
00306
00307 bool operator() (
const FunctionDefinitionDom& def )
const
00308
{
00309
if( m_dom->name() != def->name() )
00310
return false;
00311
00312
if( m_dom->isConstant() != m_dom->isConstant() )
00313
return false;
00314
00315
QString scope1 =
QString(
"::") + m_dom->scope().join(
"::");
00316 QString scope2 = QString(
"::") + def->scope().join(
"::");
00317
if( !scope1.endsWith(scope2) )
00318
return false;
00319
00320
const ArgumentList args = m_dom->argumentList();
00321
const ArgumentList args2 = def->argumentList();
00322
if( args.size() != args2.size() )
00323
return false;
00324
00325
for( uint i=0; i<args.size(); ++i ){
00326
if( args[i]->type() != args[i]->type() )
00327
return false;
00328 }
00329
00330
return true;
00331 }
00332
00333
private:
00334 const FunctionDom& m_dom;
00335 };
00336
00337
#endif