/*************************************************************************** ------------------- begin : 21.11.2002 copyright : (C) 2002 by Victor R�er email : victor_roeder@gmx.de ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "removetargetdlg.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "autolistviewitems.h" #include "misc.h" #include "autoprojectpart.h" #include "autoprojectwidget.h" RemoveTargetDialog::RemoveTargetDialog( AutoProjectWidget *widget, AutoProjectPart* part, SubprojectItem *spitem, TargetItem *titem, TQWidget* tqparent, const char* name ) : RemoveTargetDlgBase ( tqparent, name, true, 0 ) { removeLabel->setText ( i18n ( "Do you really want to remove %1
with all files that are attached to it
and all dependencies?" ).arg ( titem->name ) ); directoryLabel->setText ( spitem->path ); if ( titem->name.isEmpty() ) targetLabel->setText ( i18n ( "%1 in %2" ).arg ( titem->primary ).arg ( titem->prefix ) ); else targetLabel->setText ( titem->name ); connect ( removeButton, TQT_SIGNAL ( clicked() ), this, TQT_SLOT ( accept() ) ); connect ( cancelButton, TQT_SIGNAL ( clicked() ), this, TQT_SLOT ( reject() ) ); setIcon ( SmallIcon ( "editdelete" ) ); progressBar->hide(); m_spitem = spitem; m_titem = titem; m_widget = widget; m_part = part; //kdDebug ( 9020 ) << "+++++ " << titem->primary << " " << titem->prefix << " " << titem->name << endl; init(); } RemoveTargetDialog::~RemoveTargetDialog() { } void RemoveTargetDialog::init() { TQPtrList subprojectItems = m_widget->allSubprojectItems(); TargetItem* titem = 0; for ( SubprojectItem* spitem = subprojectItems.first(); spitem; spitem = subprojectItems.next() ) { if ( m_titem->name.isEmpty() ) break; for ( titem = spitem->targets.first(); titem; titem = spitem->targets.next() ) { if ( m_titem->name == titem->name ) continue; if ( titem->primary == "LTLIBRARIES" || titem->primary == "PROGRAMS" || titem->primary == "LIBRARIES" || titem->primary == "JAVA" ) { TQString canonname = AutoProjectTool::canonicalize ( titem->name ); if ( spitem->variables[canonname + "_LIBADD"].tqcontains ( m_titem->name ) > 0 || spitem->variables[canonname + "_LDADD"].tqcontains ( m_titem->name ) > 0 ) { dependencyListBox->insertItem ( SmallIcon ( "target_kdevelop" ), spitem->path + " (" + titem->name + ")" ); dependentSubprojects.append ( spitem ); } } } } if ( dependencyListBox->count() == 0 ) dependencyListBox->insertItem ( i18n("no dependency", "") ); } void RemoveTargetDialog::accept () { progressBar->show(); progressBar->setFormat ( i18n ( "Removing Target... %p%" ) ); tqApp->processEvents(); TQString canonname = AutoProjectTool::canonicalize ( m_titem->name ); TQString varname = m_titem->prefix + "_" + m_titem->primary; SubprojectItem* spitem = 0; TargetItem* titem = 0; TQMap removeMap; TQMap replaceMap; // Remove dependencies to other targets first (stored by init() in 'dependentTargets') for ( spitem = dependentSubprojects.first(); spitem; spitem = dependentSubprojects.next() ) { for ( titem = spitem->targets.first(); titem; titem = spitem->targets.next() ) { TQString curVarname; TQString curCanonname = AutoProjectTool::canonicalize ( titem->name ); TQStringList dependencies; if ( spitem->variables[curCanonname + "_LIBADD"].tqcontains ( m_titem->name ) ) curVarname = curCanonname + "_LIBADD"; else curVarname = curCanonname + "_LDADD"; dependencies = TQStringList::split(TQRegExp("[ \t\n]"), spitem->variables[curVarname]); //TQStringList::Iterator it = dependencies.begin(); for ( uint i = 0; i < dependencies.size(); ++i ) { TQString s = dependencies[i]; if ( s.tqcontains ( m_titem->name ) > 0 ) dependencies.remove ( s ); } // if we removed the last entry of "blabla_LDADD" or "blabla_LIBADD", remove the complete line if ( dependencies.count() == 0 ) { removeMap.insert ( curVarname, "" ); AutoProjectTool::removeFromMakefileam ( spitem->path + "/Makefile.am", removeMap ); removeMap.clear(); } else { spitem->variables[curVarname] = dependencies.join ( " " ); replaceMap.insert ( curVarname, spitem->variables[curVarname] ); AutoProjectTool::addToMakefileam ( spitem->path + "/Makefile.am", replaceMap ); replaceMap.clear(); } } } // handling am_edit stuff if ( m_titem->primary == "KDEICON" ) removeMap.insert ( "KDE_ICON", "" ); else if ( m_titem->primary == "KDEDOCS" ) removeMap.insert ( "KDE_DOCS", "" ); else { // if we have bin_PROGRAMS = [target to be deleted] [other target] // delete only the [target to be deleted], not the whole line! TQStringList targets = TQStringList::split(TQRegExp("[ \t\n]"), m_spitem->variables[varname]); if ( targets.count() > 1 ) { targets.remove ( m_titem->name ); m_spitem->variables[varname] = targets.join ( " " ); replaceMap.insert ( varname, m_spitem->variables[varname] ); AutoProjectTool::addToMakefileam ( m_spitem->path + "/Makefile.am", replaceMap ); replaceMap.clear(); } else { removeMap.insert ( varname, m_titem->name ); } } // if we have no such line containing blabla_SOURCES, blabla_LDFLAGS, etc. // they are ignored removeMap.insert ( canonname + "_SOURCES", "" ); // remove from our internal list m_spitem->variables.erase(canonname+"_SOURCES"); if ( m_titem->primary == "PROGRAMS" || m_titem->primary == "LTLIBRARIES" ) { removeMap.insert ( canonname + "_LDFLAGS", "" ); removeMap.insert ( canonname + "_DEPENDENCIES", "" ); removeMap.insert ( canonname + "_LDADD", "" ); removeMap.insert ( canonname + "_LIBADD", "" ); } AutoProjectTool::removeFromMakefileam ( m_spitem->path + "/Makefile.am", removeMap ); removeMap.clear(); // if we have another "blabla_PROGRAMS" or "blabla_LTLIBRARIES" target in the same subproject // check if it has an empty "blabla_LIBADD"-entry if ( m_titem->primary == "PROGRAMS" || m_titem->primary == "LTLIBRARIES" ) { for ( titem = m_spitem->targets.first(); titem; titem = m_spitem->targets.next() ) { //kdDebug (9020) << "******** " << m_spitem->subdir << endl; if ( titem->primary == "PROGRAMS" || titem->primary == "LTLIBRARIES" ) { TQString curCanonname = AutoProjectTool::canonicalize ( titem->name ); if ( m_spitem->variables[curCanonname + "_LIBADD"].isEmpty() ) { removeMap.insert ( curCanonname + "_LIBADD", "" ); //kdDebug (9020) << "Removing from " << m_spitem->subdir << " " << curCanonname << "_LIBADD" << endl; AutoProjectTool::removeFromMakefileam ( m_spitem->path + "/Makefile.am", removeMap ); removeMap.clear(); } } } } progressBar->setTotalSteps ( m_titem->sources.count() ); TQStringList fileList; for ( FileItem* fitem = m_titem->sources.first(); fitem; fitem = m_titem->sources.next() ) { if (removeCheckBox->isChecked()) { // before removing the files, check if they are mentioned in "noinst_HEADERS = blabla1.h blabla2.h" TQStringList noInstHeaders = TQStringList::split ( TQRegExp ( "[ \t\n]" ), m_spitem->variables["noinst_HEADERS"] ); if ( noInstHeaders.tqcontains ( fitem->name ) ) { noInstHeaders.remove ( fitem->name ); m_spitem->variables["noinst_HEADERS"] = noInstHeaders.join ( " " ); replaceMap.insert ( "noinst_HEADERS", m_spitem->variables["noinst_HEADERS"] ); AutoProjectTool::addToMakefileam ( m_spitem->path + "/Makefile.am", replaceMap ); replaceMap.clear(); } TQFile::remove(m_spitem->path + "/" + fitem->name); } fileList.append ( m_spitem->path.mid ( m_part->projectDirectory().length() + 1 ) + "/" + fitem->name ); tqApp->processEvents(); progressBar->setValue ( progressBar->value() + 1 ); } m_widget->emitRemovedFiles ( fileList ); m_spitem->targets.remove ( m_titem ); TQDialog::accept(); }