KDevelop API Documentation

filepropertydlg.cpp

Go to the documentation of this file.
00001 /***************************************************************************
00002  *   Copyright (C) 2002 by Jakob Simon-Gaarde                              *
00003  *   jsgaarde@tdcspace.dk                                                  *
00004  *                                                                         *
00005  *   This program is free software; you can redistribute it and/or modify  *
00006  *   it under the terms of the GNU General Public License as published by  *
00007  *   the Free Software Foundation; either version 2 of the License, or     *
00008  *   (at your option) any later version.                                   *
00009  *                                                                         *
00010  ***************************************************************************/
00011 
00012 #include <qmessagebox.h>
00013 #include "filepropertydlg.h"
00014 #include <kmessagebox.h>
00015 #include <kdebug.h>
00016 
00017 ScopeItem::ScopeItem(QListView *parent,const QString &text,QStringList *excludeList,bool initialMode)
00018 : QCheckListItem(parent,text,QCheckListItem::CheckBox)
00019 {
00020   m_excludeList = excludeList;
00021   setOn(initialMode);
00022   m_initialMode = initialMode;
00023 }
00024 
00025 ScopeItem::ScopeItem(QCheckListItem *parent,const QString &text,QStringList *excludeList,bool initialMode)
00026 : QCheckListItem(parent,text,QCheckListItem::CheckBox)
00027 {
00028   m_excludeList = excludeList;
00029   setOn(initialMode);
00030   m_initialMode = initialMode;
00031 }
00032 
00033 bool ScopeItem::isDirty()
00034 {
00035   if (m_initialMode==isOn())
00036     return false;  // no change totally
00037   return true; // changed
00038 }
00039 
00040 void ScopeItem::excludeFromScope(const QString &fileName,bool b)
00041 {
00042   if (!m_excludeList)
00043     return;
00044   // remove entries of same text before appending to ensure only one resulting entry
00045   m_excludeList->remove(fileName);
00046   if (b)
00047     m_excludeList->append(fileName);
00048 }
00049 
00050 FilePropertyDlg::FilePropertyDlg(SubqmakeprojectItem *spitem,int grtype, FileItem *fitem, QStringList &dirtyScopes,
00051                                  QWidget *parent, const char* name, bool modal, WFlags fl)
00052 : FilePropertyBase(parent,name,modal,fl),
00053 m_dirtyScopes(dirtyScopes)
00054 {
00055   if (grtype == GroupItem::InstallObject)
00056   {
00057     GroupItem* gitem = dynamic_cast<GroupItem*>(fitem->parent());
00058     if (gitem)
00059       m_installObjectName = gitem->install_objectname;    
00060   }
00061   m_gtype = grtype;
00062   m_subProjectItem = spitem;
00063   m_fileItem = fitem;
00064   ScopeTree->setRootIsDecorated(true);
00065   createScopeTree(m_subProjectItem);
00066 }
00067 
00068 GroupItem* FilePropertyDlg::getInstallRoot(SubqmakeprojectItem* item)
00069 {
00070   QPtrListIterator<GroupItem> it(item->groups);
00071   for (;it.current();++it)
00072   {
00073     if ((*it)->groupType == GroupItem::InstallRoot)
00074       return *it;
00075   }
00076   return 0;
00077 }
00078 
00079 GroupItem* FilePropertyDlg::getInstallObject(SubqmakeprojectItem* item, const QString& objectname)
00080 {
00081   GroupItem* instroot = getInstallRoot(item);
00082   if (!instroot)
00083     return 0;
00084   QPtrListIterator<GroupItem> it(instroot->installs);
00085   for (;it.current();++it)
00086   {
00087     if ((*it)->groupType == GroupItem::InstallObject &&
00088         (*it)->install_objectname == objectname )
00089       return *it;
00090   }
00091   return 0;
00092   
00093 }
00094 
00095 
00096 QStringList* FilePropertyDlg::getExcludeList(SubqmakeprojectItem *spitem)
00097 {
00098     if (m_gtype == GroupItem::Sources)
00099       return &(spitem->sources_exclude);
00100     if (m_gtype == GroupItem::Headers)
00101       return &(spitem->headers_exclude);
00102     if (m_gtype == GroupItem::Forms)
00103       return &(spitem->forms_exclude);
00104     if (m_gtype == GroupItem::Images)
00105       return &(spitem->images_exclude);
00106     if (m_gtype == GroupItem::IDLs)
00107       return &(spitem->idls_exclude);
00108     if (m_gtype == GroupItem::Translations)
00109       return &(spitem->translations_exclude);
00110     if (m_gtype == GroupItem::Yaccsources)
00111       return &(spitem->yaccsources_exclude);
00112     if (m_gtype == GroupItem::Lexsources)
00113       return &(spitem->lexsources_exclude);
00114     if (m_gtype == GroupItem::Distfiles)
00115       return &(spitem->distfiles_exclude);
00116     if (m_gtype == GroupItem::InstallObject)
00117     {
00118       GroupItem* gitem = getInstallObject(spitem,m_installObjectName);
00119       if (gitem)
00120         return &(gitem->str_files_exclude);
00121       return &m_dummy;
00122     }
00123     return NULL;
00124 }
00125 
00126 void FilePropertyDlg::createScopeTree(SubqmakeprojectItem *spitem,ScopeItem *sitem)
00127 {
00128   QPtrListIterator<SubqmakeprojectItem> spit(spitem->scopes);
00129   for (; spit.current(); ++spit)
00130   {
00131     SubqmakeprojectItem *nextSubproject = spit;
00132     QStringList *excludeList = getExcludeList(nextSubproject);
00133     if (!excludeList)
00134       continue;
00135     // check if file is already excluded in current scope
00136     bool initiallyExcluded = false;
00137     if (excludeList->find(m_fileItem->name)!=excludeList->end())
00138       initiallyExcluded = true;
00139     ScopeItem *item;
00140     if (!sitem)
00141        item = new ScopeItem(ScopeTree,nextSubproject->text(0),excludeList,initiallyExcluded);
00142     else
00143        item = new ScopeItem(sitem,nextSubproject->text(0),excludeList,initiallyExcluded);
00144     item->setScopeString(nextSubproject->scopeString);
00145     if (!sitem)
00146       ScopeTree->insertItem(item);
00147     else
00148       sitem->insertItem(item);
00149     createScopeTree(nextSubproject,item);
00150   }
00151 }
00152 
00153 
00154 void FilePropertyDlg::updateFileProperties()
00155 {
00156   m_dirtyScopes = getExcludedScopes();
00157   accept();
00158 }
00159 
00160 QStringList FilePropertyDlg::getExcludedScopes(ScopeItem *sitem)
00161 {
00162   QStringList scopes;
00163   if (!sitem)
00164     sitem = static_cast<ScopeItem*>(ScopeTree->firstChild());
00165   else
00166     sitem = static_cast<ScopeItem*>(sitem->firstChild());
00167   while (sitem)
00168   {
00169     if (sitem->isDirty())
00170     {
00171       if (sitem->isOn())
00172       {
00173         if (m_gtype != GroupItem::InstallObject)
00174           sitem->excludeFromScope(m_fileItem->name,true);
00175       }
00176       else
00177       {
00178         if (m_gtype != GroupItem::InstallObject)
00179           sitem->excludeFromScope(m_fileItem->name,false);
00180       }
00181       scopes.append(sitem->getScopeString());
00182       kdDebug(9024) << "dirty scope - " << sitem->getScopeString() << endl;
00183     }
00184     scopes += getExcludedScopes(sitem);
00185     sitem = static_cast<ScopeItem*>(sitem->nextSibling());
00186   }
00187   return scopes;
00188 }
00189 
KDE Logo
This file is part of the documentation for KDevelop Version 3.1.2.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Tue Feb 22 09:22:23 2005 by doxygen 1.3.9.1 written by Dimitri van Heesch, © 1997-2003