KDevelop API Documentation

buildtools/autotools/removefiledlg.cpp

Go to the documentation of this file.
00001 /*************************************************************************** 00002 * Copyright (C) 2001 by Bernd Gehrmann * 00003 * bernd@kdevelop.org * 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 "removefiledlg.h" 00013 00014 #include <qcheckbox.h> 00015 #include <qgroupbox.h> 00016 #include <qfile.h> 00017 #include <qlabel.h> 00018 #include <qlayout.h> 00019 #include <qpushbutton.h> 00020 #include <qregexp.h> 00021 00022 #include <kbuttonbox.h> 00023 #include <kdebug.h> 00024 #include <kdialog.h> 00025 #include <ksqueezedtextlabel.h> 00026 00027 #include "autolistviewitems.h" 00028 00029 #include "misc.h" 00030 #include "autoprojectpart.h" 00031 #include "autoprojectwidget.h" 00032 #include "autodetailsview.h" 00033 00034 static bool fileListContains(const QPtrList<FileItem> &list, const QString &name) 00035 { 00036 QPtrListIterator<FileItem> it(list); 00037 for (; it.current(); ++it) 00038 if ((*it)->text(0) == name) 00039 return true; 00040 return false; 00041 } 00042 00043 00044 RemoveFileDialog::RemoveFileDialog(AutoProjectWidget *widget, AutoProjectPart* part, SubprojectItem *spitem, 00045 TargetItem *item, const QString &filename, 00046 QWidget *parent, const char *name) 00047 : RemoveFileDlgBase(parent, name, true) 00048 { 00049 removeFromTargetsCheckBox = 0; 00050 00051 QStringList targets; 00052 00053 QPtrListIterator<TargetItem> it(spitem->targets); 00054 for (; it.current(); ++it) 00055 if (fileListContains((*it)->sources, filename)) 00056 targets.append((*it)->name); 00057 00058 if (targets.count() > 1) 00059 { 00060 removeFromTargetsCheckBox = new QCheckBox( fileGroupBox, "removeFromTargetsCheckBox" ); 00061 removeFromTargetsCheckBox->setMinimumSize( QSize( 0, 45 ) ); 00062 fileLayout->addWidget( removeFromTargetsCheckBox ); 00063 00064 QString joinedtargets = " *" + targets.join("\n *"); 00065 removeFromTargetsCheckBox->setText ( i18n ( "The file %1 is still used by the following targets:\n%2\n" 00066 "Remove it from all of them?").arg(filename).arg(joinedtargets) ); 00067 setMinimumSize(QSize(size().width(), size().height() + removeFromTargetsCheckBox->size().height()*2) ); 00068 } 00069 00070 removeLabel->setText ( i18n ( "Do you really want to remove <b>%1</b>?" ).arg ( filename ) ); 00071 00072 directoryLabel->setText ( spitem->path ); 00073 if ( item->name.isEmpty() ) 00074 targetLabel->setText ( i18n ( "%1 in %2" ).arg ( item->primary ).arg ( item->prefix ) ); 00075 else 00076 targetLabel->setText ( item->name ); 00077 00078 connect ( removeButton, SIGNAL ( clicked() ), this, SLOT ( accept() ) ); 00079 connect ( cancelButton, SIGNAL ( clicked() ), this, SLOT ( reject() ) ); 00080 00081 setIcon ( SmallIcon ( "editdelete.png" ) ); 00082 00083 m_widget = widget; 00084 m_part = part; 00085 subProject = spitem; 00086 target = item; 00087 fileName = filename; 00088 } 00089 00090 00091 RemoveFileDialog::~RemoveFileDialog() 00092 {} 00093 00094 00095 void RemoveFileDialog::accept() 00096 { 00097 m_widget->emitRemovedFile ( subProject->path.mid ( m_part->projectDirectory().length() + 1 ) + "/" + fileName ); 00098 00099 QMap<QString,QString> replaceMap; 00100 00101 if (removeFromTargetsCheckBox && removeFromTargetsCheckBox->isChecked()) { 00102 QPtrListIterator<TargetItem> it(subProject->targets); 00103 for (; it.current(); ++it) { 00104 if ((*it) != target && fileListContains((*it)->sources, fileName)) { 00105 FileItem *fitem = static_cast<FileItem*>((*it)->firstChild()); 00106 while (fitem) { 00107 FileItem *nextitem = static_cast<FileItem*>(fitem->nextSibling()); 00108 if (fitem->text(0) == fileName) { 00109 QListView *lv = fitem->listView(); 00110 lv->setSelected(fitem, false); 00111 (*it)->sources.remove(fitem); 00112 } 00113 fitem = nextitem; 00114 } 00115 QString canontargetname = AutoProjectTool::canonicalize((*it)->name); 00116 QString varname; 00117 if( (*it)->primary == "PROGRAMS" || (*it)->primary == "LIBRARIES" || (*it)->primary == "LTLIBRARIES" ) 00118 varname = canontargetname + "_SOURCES"; 00119 else 00120 varname = (*it)->prefix + "_" + (*it)->primary; 00121 QStringList sources = QStringList::split(QRegExp("[ \t\n]"), subProject->variables[varname]); 00122 sources.remove(fileName); 00123 subProject->variables[varname] = sources.join(" "); 00124 replaceMap.insert(varname, subProject->variables[varname]); 00125 } 00126 } 00127 } 00128 00129 QString fileItemName; 00130 FileItem *fitem = static_cast<FileItem*>(target->firstChild()); 00131 while (fitem) { 00132 if (fitem->text(0) == fileName) { 00133 QListView *lv = fitem->listView(); 00134 lv->setSelected(fitem, false); 00135 fileItemName = fitem->name; 00136 target->sources.remove(fitem); 00137 break; 00138 } 00139 fitem = static_cast<FileItem*>(fitem->nextSibling()); 00140 } 00141 QString canontargetname = AutoProjectTool::canonicalize(target->name); 00142 QString varname; 00143 if( target->primary == "PROGRAMS" || target->primary == "LIBRARIES" || target->primary == "LTLIBRARIES" ) 00144 varname = canontargetname + "_SOURCES"; 00145 else 00146 varname = target->prefix + "_" + target->primary; 00147 QStringList sources = QStringList::split(QRegExp("[ \t\n]"), subProject->variables[varname]); 00148 sources.remove(fileName); 00149 subProject->variables[varname] = sources.join(" "); 00150 replaceMap.insert(varname, subProject->variables[varname]); 00151 00152 AutoProjectTool::modifyMakefileam(subProject->path + "/Makefile.am", replaceMap); 00153 00154 // review configuration cleanup in the project file after removing subclassing related source 00155 QDomDocument &dom = *(m_part->projectDom()); 00156 00157 QDomElement el = dom.documentElement(); 00158 QDomNode el2 = el.namedItem("kdevautoproject"); 00159 QDomNode el3 = el2.namedItem("subclassing"); 00160 00161 QDomNode n = el3.firstChild(); 00162 QValueList<QDomNode> nodesToRemove; 00163 while ( !n.isNull() ) { 00164 QDomNamedNodeMap attr = n.attributes(); 00165 QString fpath = subProject->path + QString("/") + fileItemName; 00166 QString relpath = fpath.remove(0, m_part->projectDirectory().length()); 00167 if ((attr.item(0).nodeValue() == relpath) 00168 || (attr.item(1).nodeValue() == relpath) ) 00169 nodesToRemove.append(n); 00170 n = n.nextSibling(); 00171 } 00172 QValueList<QDomNode>::iterator it; 00173 for ( it = nodesToRemove.begin(); it != nodesToRemove.end(); ++it ) 00174 el3.removeChild(*it); 00175 00176 if (removeCheckBox->isChecked()) 00177 QFile::remove(subProject->path + "/" + fileName); 00178 00179 QDialog::accept(); 00180 } 00181 00182 #include "removefiledlg.moc"
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:38:54 2004 by doxygen 1.3.7 written by Dimitri van Heesch, © 1997-2003