KDevelop API Documentation

parts/classview/classviewwidget.h

Go to the documentation of this file.
00001 /* 00002 * Copyright (C) 2003 Roberto Raggi (roberto@kdevelop.org) 00003 * 00004 * This program is free software; you can redistribute it and/or 00005 * modify it under the terms of the GNU General Public 00006 * License as published by the Free Software Foundation; either 00007 * version 2 of the License, or (at your option) any later version. 00008 * 00009 * This program is distributed in the hope that it will be useful, 00010 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00012 * Library General Public License for more details. 00013 * 00014 * You should have received a copy of the GNU General Public License 00015 * along with this program; see the file COPYING.LIB. If not, write to 00016 * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 00017 * Boston, MA 02111-1307, USA. 00018 * 00019 * Partially based on KDE Studio ClassListView http://www.thekompany.com/projects/kdestudio/ 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
KDE Logo
This file is part of the documentation for KDevelop Version 3.0.4.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Wed Oct 6 17:39:10 2004 by doxygen 1.3.7 written by Dimitri van Heesch, © 1997-2003