File indexing completed on 2024-05-12 04:37:43
0001 /* 0002 SPDX-FileCopyrightText: 2009 Lior Mualem <lior.m.kde@gmail.com> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #include "allclassesfolder.h" 0008 0009 #include "../../interfaces/icore.h" 0010 #include <interfaces/iproject.h> 0011 #include <interfaces/iprojectcontroller.h> 0012 0013 #include <KLocalizedString> 0014 0015 using namespace KDevelop; 0016 using namespace ClassModelNodes; 0017 0018 ////////////////////////////////////////////////////////////////////////////// 0019 ////////////////////////////////////////////////////////////////////////////// 0020 0021 AllClassesFolder::AllClassesFolder(NodesModelInterface* a_model) 0022 : DocumentClassesFolder(i18n("All projects classes"), a_model) 0023 { 0024 } 0025 0026 void AllClassesFolder::nodeCleared() 0027 { 0028 DocumentClassesFolder::nodeCleared(); 0029 0030 disconnect( 0031 ICore::self()->projectController(), &IProjectController::projectOpened, this, &AllClassesFolder::projectOpened); 0032 disconnect( 0033 ICore::self()->projectController(), &IProjectController::projectClosing, this, 0034 &AllClassesFolder::projectClosing); 0035 } 0036 0037 void AllClassesFolder::populateNode() 0038 { 0039 DocumentClassesFolder::populateNode(); 0040 0041 // Get notification for future project addition / removal. 0042 connect( 0043 ICore::self()->projectController(), &IProjectController::projectOpened, this, &AllClassesFolder::projectOpened); 0044 connect( 0045 ICore::self()->projectController(), &IProjectController::projectClosing, this, 0046 &AllClassesFolder::projectClosing); 0047 0048 // Parse each existing project file 0049 const auto projects = ICore::self()->projectController()->projects(); 0050 for (IProject* project : projects) { 0051 projectOpened(project); 0052 } 0053 } 0054 0055 void AllClassesFolder::projectClosing(KDevelop::IProject* project) 0056 { 0057 // Run over all the files in the project. 0058 const auto files = project->fileSet(); 0059 for (const IndexedString& file : files) { 0060 closeDocument(file); 0061 } 0062 } 0063 0064 void AllClassesFolder::projectOpened(KDevelop::IProject* project) 0065 { 0066 // Run over all the files in the project. 0067 const auto files = project->fileSet(); 0068 for (const IndexedString& file : files) { 0069 parseDocument(file); 0070 } 0071 0072 recursiveSort(); 0073 } 0074 0075 ////////////////////////////////////////////////////////////////////////////// 0076 ////////////////////////////////////////////////////////////////////////////// 0077 0078 FilteredAllClassesFolder::FilteredAllClassesFolder(NodesModelInterface* a_model) 0079 : AllClassesFolder(a_model) 0080 { 0081 } 0082 0083 void FilteredAllClassesFolder::updateFilterString(const QString& a_newFilterString) 0084 { 0085 m_filterString = a_newFilterString; 0086 0087 if (isPopulated()) { 0088 #if 1 // Choose speed over correctness. 0089 // Close the node and re-open it should be quicker than reload each document 0090 // and remove individual nodes (at the cost of losing the current selection). 0091 performPopulateNode(true); 0092 #else 0093 bool hadChanges = false; 0094 0095 // Reload the documents. 0096 foreach (const IndexedString& file, getAllOpenDocuments()) 0097 hadChanges |= updateDocument(file); 0098 0099 // Sort if we've updated documents. 0100 if (hadChanges) 0101 recursiveSort(); 0102 else 0103 { 0104 // If nothing changed, the title changed so mark the node as updated. 0105 m_model->nodesLayoutAboutToBeChanged(this); 0106 m_model->nodesLayoutChanged(this); 0107 } 0108 #endif 0109 } else 0110 { 0111 // Displayed name changed only... 0112 m_model->nodesLayoutAboutToBeChanged(this); 0113 m_model->nodesLayoutChanged(this); 0114 } 0115 } 0116 0117 bool FilteredAllClassesFolder::isClassFiltered(const KDevelop::QualifiedIdentifier& a_id) 0118 { 0119 return !a_id.last().toString().contains(m_filterString, Qt::CaseInsensitive); 0120 } 0121 0122 #include "moc_allclassesfolder.cpp"