/* * KDevelop Class Browser * * Copyright 2009 Lior Mualem * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Library General Public License as * published by the Free Software Foundation; either version 2 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public * License along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include "allclassesfolder.h" #include #include #include #include using namespace KDevelop; using namespace ClassModelNodes; ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// AllClassesFolder::AllClassesFolder(NodesModelInterface* a_model) : DocumentClassesFolder(i18n("All projects classes"), a_model) { } void AllClassesFolder::nodeCleared() { DocumentClassesFolder::nodeCleared(); disconnect(ICore::self()->projectController(), SIGNAL(projectOpened(KDevelop::IProject*)), this, SLOT(projectOpened(KDevelop::IProject*))); disconnect(ICore::self()->projectController(), SIGNAL(projectClosing(KDevelop::IProject*)), this, SLOT(projectClosing(KDevelop::IProject*))); } void AllClassesFolder::populateNode() { DocumentClassesFolder::populateNode(); // Get notification for future project addition / removal. connect (ICore::self()->projectController(), SIGNAL(projectOpened(KDevelop::IProject*)), this, SLOT(projectOpened(KDevelop::IProject*))); connect (ICore::self()->projectController(), SIGNAL(projectClosing(KDevelop::IProject*)), this, SLOT(projectClosing(KDevelop::IProject*))); // Parse each existing project file foreach(IProject* project, ICore::self()->projectController()->projects()) { // Run over all the files in the project. foreach(const IndexedString& file, project->fileSet()) parseDocument(file); } } void AllClassesFolder::projectClosing(KDevelop::IProject* project) { // Run over all the files in the project. foreach(const IndexedString& file, project->fileSet()) closeDocument(file); } void AllClassesFolder::projectOpened(KDevelop::IProject* project) { // Run over all the files in the project. foreach(const IndexedString& file, project->fileSet()) parseDocument(file); recursiveSort(); } ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// FilteredAllClassesFolder::FilteredAllClassesFolder(NodesModelInterface* a_model) : AllClassesFolder(a_model) { } void FilteredAllClassesFolder::updateFilterString(QString a_newFilterString) { m_filterString = a_newFilterString; if ( isPopulated() ) { #if 1 // Choose speed over correctness. // Close the node and re-open it should be quicker than reload each document // and remove indevidual nodes (at the cost of loosing the current selection). performPopulateNode(true); #else bool hadChanges = false; // Reload the documents. foreach( const IndexedString& file, getAllOpenDocuments() ) hadChanges |= updateDocument(file); // Sort if we've updated documents. if ( hadChanges ) recursiveSort(); else { // If nothing changed, the title changed so mark the node as updated. m_model->nodesLayoutAboutToBeChanged(this); m_model->nodesLayoutChanged(this); } #endif } else { // Displayed name changed only... m_model->nodesLayoutAboutToBeChanged(this); m_model->nodesLayoutChanged(this); } } bool FilteredAllClassesFolder::isClassFiltered(const KDevelop::QualifiedIdentifier& a_id) { return !a_id.last().toString().contains(m_filterString, Qt::CaseInsensitive); } #include "moc_allclassesfolder.cpp" // kate: space-indent on; indent-width 2; tab-width 4; replace-tabs on; auto-insert-doxygen on