2
* Copyright (C) 2003 Roberto Raggi (roberto@kdevelop.org)
4
* This program is free software; you can redistribute it and/or
5
* modify it under the terms of the GNU General Public
6
* License as published by the Free Software Foundation; either
7
* version 2 of the License, or (at your option) any later version.
9
* This program is distributed in the hope that it will be useful,
10
* but WITHOUT ANY WARRANTY; without even the implied warranty of
11
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
* Library General Public License for more details.
14
* You should have received a copy of the GNU General Public License
15
* along with this program; see the file COPYING.LIB. If not, write to
16
* the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17
* Boston, MA 02111-1307, USA.
19
* Partially based on KDE Studio ClassListView http://www.thekompany.com/projects/kdestudio/
22
#ifndef __CLASSVIEW_WIDGET_H__
23
#define __CLASSVIEW_WIDGET_H__
25
#include <klistview.h>
27
#include <qstringlist.h>
30
#include <codemodel.h>
35
class FolderBrowserItem;
36
class NamespaceDomBrowserItem;
37
class ClassDomBrowserItem;
38
class TypeAliasDomBrowserItem;
39
class FunctionDomBrowserItem;
40
class VariableDomBrowserItem;
43
class ClassViewWidget : public KListView, public QToolTip
49
KDevelop3ViewMode = 0,
55
ClassViewWidget( ClassViewPart *part );
56
virtual ~ClassViewWidget();
59
void setViewMode( int mode );
64
void removedNamespace(const QString &name);
69
void slotAddAttribute();
70
void slotOpenDeclaration();
71
void slotOpenImplementation();
72
void slotCreateAccessMethods();
75
void contentsContextMenuEvent( QContextMenuEvent* );
76
void maybeTip( QPoint const & );
79
void slotProjectOpened();
80
void slotProjectClosed();
82
void insertFile( const QString& fileName );
83
void removeFile( const QString& fileName );
84
void slotExecuted( QListViewItem* item );
87
ClassViewPart* m_part;
88
QStringList removedText;
89
QString m_projectDirectory;
90
int m_projectDirectoryLength;
91
FolderBrowserItem* m_projectItem;
92
KSelectAction* m_actionViewMode;
93
KAction* m_actionNewClass;
94
KAction* m_actionAddMethod;
95
KAction* m_actionAddAttribute;
96
KAction* m_actionOpenDeclaration;
97
KAction* m_actionOpenImplementation;
98
KAction* m_actionCreateAccessMethods;
99
friend class ClassViewItem;
100
friend class FolderBrowserItem;
101
friend class NamespaceDomBrowserItem;
102
friend class ClassDomBrowserItem;
103
friend class TypeAliasDomBrowserItem;
104
friend class FunctionDomBrowserItem;
105
friend class VariableDomBrowserItem;
108
class ClassViewItem: public KListViewItem
111
ClassViewItem( QListView* parent, const QString& text=QString::null )
112
: KListViewItem( parent, text ) {}
113
ClassViewItem( QListViewItem* parent, const QString& text=QString::null )
114
: KListViewItem( parent, text ) {}
116
virtual const CodeModelItem* model() const { return 0; }
118
virtual bool isFolder() const { return false; }
119
virtual bool isFile() const { return false; }
120
virtual bool isNamespace() const { return false; }
121
virtual bool isClass() const { return false; }
122
virtual bool isFunction() const { return false; }
123
virtual bool isVariable() const { return false; }
124
virtual bool isTypeAlias() const { return false; }
126
virtual bool hasDeclaration() const { return false; }
127
virtual bool hasImplementation() const { return false; }
129
virtual void openDeclaration() {}
130
virtual void openImplementation() {}
132
ClassViewWidget* listView() { return static_cast<ClassViewWidget*>( KListViewItem::listView() ); }
133
const ClassViewWidget* listView() const { return static_cast<ClassViewWidget*>( KListViewItem::listView() ); }
136
class FolderBrowserItem: public ClassViewItem
139
FolderBrowserItem( ClassViewWidget* widget, QListView* parent, const QString& name=QString::null )
140
: ClassViewItem( parent, name ), m_widget(widget) {}
141
FolderBrowserItem( ClassViewWidget* widget, QListViewItem* parent, const QString& name=QString::null )
142
: ClassViewItem( parent, name ), m_widget(widget) {}
144
virtual bool isFolder() const { return true; }
147
QString key( int, bool ) const;
149
void processFile( FileDom file, QStringList& path, bool remove=false );
150
void processNamespace( NamespaceDom ns, bool remove=false );
151
void processClass( ClassDom klass, bool remove=false );
152
void processTypeAlias( TypeAliasDom typeAlias, bool remove=false );
153
void processFunction( FunctionDom fun, bool remove=false );
154
void processVariable( VariableDom var, bool remove=false );
157
QMap<QString, FolderBrowserItem*> m_folders;
158
QMap<QString, NamespaceDomBrowserItem*> m_namespaces;
159
QMap<ClassDom, ClassDomBrowserItem*> m_classes;
160
QMap<TypeAliasDom, TypeAliasDomBrowserItem*> m_typeAliases;
161
QMap<FunctionDom, FunctionDomBrowserItem*> m_functions;
162
QMap<VariableDom, VariableDomBrowserItem*> m_variables;
164
ClassViewWidget* m_widget;
167
class NamespaceDomBrowserItem: public ClassViewItem
170
NamespaceDomBrowserItem( QListView* parent, NamespaceDom dom )
171
: ClassViewItem( parent, dom->name() ), m_dom( dom ) {}
172
NamespaceDomBrowserItem( QListViewItem* parent, NamespaceDom dom )
173
: ClassViewItem( parent, dom->name() ), m_dom( dom ) {}
175
const CodeModelItem* model() const { return m_dom; }
177
virtual bool isNamespace() const { return true; }
180
QString key( int, bool ) const;
182
void processNamespace( NamespaceDom ns, bool remove=false );
183
void processClass( ClassDom klass, bool remove=false );
184
void processTypeAlias( TypeAliasDom typeAlias, bool remove=false );
185
void processFunction( FunctionDom fun, bool remove=false );
186
void processVariable( VariableDom var, bool remove=false );
188
NamespaceDom dom() { return m_dom; }
192
QMap<QString, NamespaceDomBrowserItem*> m_namespaces;
193
QMap<ClassDom, ClassDomBrowserItem*> m_classes;
194
QMap<TypeAliasDom, TypeAliasDomBrowserItem*> m_typeAliases;
195
QMap<FunctionDom, FunctionDomBrowserItem*> m_functions;
196
QMap<VariableDom, VariableDomBrowserItem*> m_variables;
199
class ClassDomBrowserItem: public ClassViewItem
202
ClassDomBrowserItem( QListView* parent, ClassDom dom )
203
: ClassViewItem( parent, dom->name() ), m_dom( dom ) {}
204
ClassDomBrowserItem( QListViewItem* parent, ClassDom dom )
205
: ClassViewItem( parent, dom->name() ), m_dom( dom ) {}
207
const CodeModelItem* model() const { return m_dom; }
208
virtual bool isClass() const { return true; }
210
virtual bool hasDeclaration() const { return true; }
211
virtual void openDeclaration();
214
QString key( int, bool ) const;
216
void processClass( ClassDom klass, bool remove=false );
217
void processTypeAlias( TypeAliasDom typeAlias, bool remove=false );
218
void processFunction( FunctionDom fun, bool remove=false );
219
void processVariable( VariableDom var, bool remove=false );
221
ClassDom dom() { return m_dom; }
225
QMap<ClassDom, ClassDomBrowserItem*> m_classes;
226
QMap<TypeAliasDom, TypeAliasDomBrowserItem*> m_typeAliases;
227
QMap<FunctionDom, FunctionDomBrowserItem*> m_functions;
228
QMap<VariableDom, VariableDomBrowserItem*> m_variables;
231
class TypeAliasDomBrowserItem: public ClassViewItem
234
TypeAliasDomBrowserItem( QListView* parent, TypeAliasDom dom )
235
: ClassViewItem( parent, dom->name() ), m_dom( dom ) {}
236
TypeAliasDomBrowserItem( QListViewItem* parent, TypeAliasDom dom )
237
: ClassViewItem( parent, dom->name() ), m_dom( dom ) {}
239
const CodeModelItem* model() const { return m_dom; }
240
virtual bool isTypeAlias() const { return true; }
242
virtual bool hasDeclaration() const { return true; }
243
virtual void openDeclaration();
246
QString key( int, bool ) const;
248
TypeAliasDom dom() { return m_dom; }
254
class FunctionDomBrowserItem: public ClassViewItem
257
FunctionDomBrowserItem( QListView* parent, FunctionDom dom )
258
: ClassViewItem( parent, dom->name() ), m_dom( dom ) {}
259
FunctionDomBrowserItem( QListViewItem* parent, FunctionDom dom )
260
: ClassViewItem( parent, dom->name() ), m_dom( dom ) {}
262
const CodeModelItem* model() const { return m_dom; }
263
virtual bool isFunction() const { return true; }
265
virtual bool hasDeclaration() const { return true; }
266
virtual bool hasImplementation() const;
268
virtual void openDeclaration();
269
virtual void openImplementation();
272
QString key( int, bool ) const;
274
FunctionDom dom() { return m_dom; }
280
class VariableDomBrowserItem: public ClassViewItem
283
VariableDomBrowserItem( QListView* parent, VariableDom dom )
284
: ClassViewItem( parent, dom->name() ), m_dom( dom ) {}
285
VariableDomBrowserItem( QListViewItem* parent, VariableDom dom )
286
: ClassViewItem( parent, dom->name() ), m_dom( dom ) {}
288
const CodeModelItem* model() const { return m_dom; }
289
virtual bool isVariable() const { return true; }
291
virtual bool hasDeclaration() const { return true; }
292
virtual bool hasImplementation() const { return false; }
294
virtual void openDeclaration();
295
virtual void openImplementation();
298
QString key( int, bool ) const;
300
VariableDom dom() { return m_dom; }
308
FindOp( const FunctionDom& dom ): m_dom( dom ) {}
310
bool operator() ( const FunctionDefinitionDom& def ) const
312
if( m_dom->name() != def->name() )
315
if( m_dom->isConstant() != m_dom->isConstant() )
318
QString scope1 = QString("::") + m_dom->scope().join("::");
319
QString scope2 = QString("::") + def->scope().join("::");
320
if( !scope1.endsWith(scope2) )
323
const ArgumentList args = m_dom->argumentList();
324
const ArgumentList args2 = def->argumentList();
325
if( args.size() != args2.size() )
328
for( uint i=0; i<args.size(); ++i ){
329
if( args[i]->type() != args[i]->type() )
337
const FunctionDom& m_dom;