diff options
Diffstat (limited to 'lib/interfaces/tdevproject.cpp')
-rw-r--r-- | lib/interfaces/tdevproject.cpp | 164 |
1 files changed, 164 insertions, 0 deletions
diff --git a/lib/interfaces/tdevproject.cpp b/lib/interfaces/tdevproject.cpp new file mode 100644 index 00000000..77136ca0 --- /dev/null +++ b/lib/interfaces/tdevproject.cpp @@ -0,0 +1,164 @@ +/* This file is part of the KDE project + Copyright (C) 2001 Matthias Hoelzer-Kluepfel <hoelzer@kde.org> + Copyright (C) 2002-2003 Roberto Raggi <roberto@kdevelop.org> + Copyright (C) 2002 Simon Hausmann <hausmann@kde.org> + Copyright (C) 2003 Jens Dagerbo <jens.dagerbo@swipnet.se> + Copyright (C) 2003 Mario Scalas <mario.scalas@libero.it> + Copyright (C) 2003-2004 Alexander Dymo <adymo@kdevelop.org> + + This library 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 library 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ + +#include <kdebug.h> + +#include "tdevproject.h" +#include <urlutil.h> +#include <tqfileinfo.h> +#include <tqtimer.h> +#include "tdevprojectiface.h" + +struct TDevProject::Private { + TQMap<TQString, TQString> m_absToRel; + TQStringList m_symlinkList; + TQTimer *m_timer; + TDevProjectIface *m_iface; +}; + +TDevProject::TDevProject(const TDevPluginInfo *info, TQObject *parent, const char *name) + : TDevPlugin(info, parent, name), d(new TDevProject::Private()) +{ + connect( this, TQT_SIGNAL(addedFilesToProject(const TQStringList& )), this, TQT_SLOT(buildFileMap()) ); + connect( this, TQT_SIGNAL(removedFilesFromProject(const TQStringList& )), this, TQT_SLOT(buildFileMap()) ); + + connect( this, TQT_SIGNAL(addedFilesToProject(const TQStringList& )), this, TQT_SLOT(slotAddFilesToFileMap(const TQStringList& )) ); + connect( this, TQT_SIGNAL(removedFilesFromProject(const TQStringList& )), this, TQT_SLOT(slotRemoveFilesFromFileMap(const TQStringList& )) ); + + d->m_timer = new TQTimer(this); + connect(d->m_timer, TQT_SIGNAL(timeout()), this, TQT_SLOT(slotBuildFileMap())); + d->m_iface = new TDevProjectIface(this); +} + +TDevProject::~TDevProject() +{ + d->m_timer->stop(); + delete d->m_iface; + delete d->m_timer; + delete d; +} + +void TDevProject::changedFile( const TQString & fileName ) +{ + TQStringList fileList; + fileList.append ( fileName ); + + emit changedFilesInProject( fileList ); + +} + +void TDevProject::changedFiles( const TQStringList & fileList ) +{ + emit changedFilesInProject( fileList ); +} + +TDevProject::Options TDevProject::options() const +{ + return (TDevProject::Options)0; +} + +bool TDevProject::isProjectFile( const TQString & absFileName ) +{ + return d->m_absToRel.contains( absFileName ); +} + +TQString TDevProject::relativeProjectFile( const TQString & absFileName ) +{ + if( isProjectFile(absFileName) ) + return d->m_absToRel[ absFileName ]; + return TQString(); +} + +void TDevProject::buildFileMap() +{ + d->m_timer->stop(); + d->m_timer->start(0, true); +} + +void TDevProject::slotBuildFileMap() +{ + kdDebug(9000) << k_funcinfo << endl; + + d->m_absToRel.clear(); + d->m_symlinkList.clear(); + const TQStringList fileList = allFiles(); + for( TQStringList::ConstIterator it=fileList.begin(); it!=fileList.end(); ++it ) + { + TQFileInfo fileInfo( projectDirectory() + "/" + *it ); + d->m_absToRel[ URLUtil::canonicalPath(fileInfo.absFilePath()) ] = *it; + + if ( URLUtil::canonicalPath( fileInfo.absFilePath() ) != fileInfo.absFilePath() ) + { + d->m_symlinkList << *it; + } + } +} + +void TDevProject::openProject( const TQString & /*dirName*/, const TQString & /*projectName*/ ) +{ + buildFileMap(); +} + +TQStringList TDevProject::symlinkProjectFiles( ) +{ + return d->m_symlinkList; +} + +TQString TDevProject::defaultRunDirectory(const TQString& projectPluginName) const +{ + return DomUtil::readEntry(*projectDom(), "/" + projectPluginName + "/run/globalcwd"); +} + +void TDevProject::slotAddFilesToFileMap( const TQStringList & fileList ) +{ + TQStringList::ConstIterator it = fileList.begin(); + while( it != fileList.end() ) + { + TQFileInfo fileInfo( projectDirectory() + "/" + *it ); + d->m_absToRel[ URLUtil::canonicalPath(fileInfo.absFilePath()) ] = *it; + + if ( URLUtil::canonicalPath( fileInfo.absFilePath() ) != fileInfo.absFilePath() ) + { + d->m_symlinkList << *it; + } + + ++it; + } +} + +void TDevProject::slotRemoveFilesFromFileMap( const TQStringList & fileList ) +{ + TQStringList::ConstIterator it = fileList.begin(); + while( it != fileList.end() ) + { + TQFileInfo fileInfo( projectDirectory() + "/" + *it ); + d->m_absToRel.remove( URLUtil::canonicalPath(fileInfo.absFilePath()) ); + + d->m_symlinkList.remove( *it ); + + ++it; + } +} + +#include "tdevproject.moc" |