addsubprojectdlg.cpp
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #include "addsubprojectdlg.h"
00013
00014 #include <qlabel.h>
00015 #include <qlayout.h>
00016 #include <qpushbutton.h>
00017 #include <qstringlist.h>
00018 #include <qtextstream.h>
00019 #include <kbuttonbox.h>
00020 #include <kdebug.h>
00021 #include <kfiledialog.h>
00022 #include <kiconloader.h>
00023 #include <klineedit.h>
00024 #include <kmessagebox.h>
00025
00026 #include "autolistviewitems.h"
00027
00028 #include "kdevmakefrontend.h"
00029 #include "misc.h"
00030 #include "autoprojectpart.h"
00031 #include "autosubprojectview.h"
00032
00033
00034 AddSubprojectDialog::AddSubprojectDialog(AutoProjectPart *part, AutoSubprojectView *view,
00035 SubprojectItem *item, QWidget *parent, const char *name)
00036 : AddSubprojectDlgBase(parent, name, true)
00037 {
00038 setIcon(SmallIcon("folder_new.png"));
00039
00040 connect( createButton, SIGNAL(clicked()), this, SLOT(accept()) );
00041 connect( cancelButton, SIGNAL(clicked()), this, SLOT(reject()) );
00042
00043 m_subProject = item;
00044 m_subprojectView = view;
00045 m_part = part;
00046 }
00047
00048
00049 AddSubprojectDialog::~AddSubprojectDialog()
00050 {}
00051
00052
00053 void AddSubprojectDialog::accept()
00054 {
00055 QString name = spEdit->text().stripWhiteSpace();
00056
00057 if (name.isEmpty()) {
00058 KMessageBox::sorry(this, i18n("You have to give the subproject a name."));
00059 return;
00060 }
00061
00062 QListViewItem *childItem = m_subProject->firstChild();
00063 while (childItem) {
00064 if (name == static_cast<SubprojectItem*>(childItem)->subdir) {
00065 KMessageBox::sorry(this, i18n("A subproject with this name already exists."));
00066 return;
00067 }
00068 childItem = childItem->nextSibling();
00069 }
00070
00071
00072 #if 0
00073
00074 if( !QFileInfo(m_part->projectDirectory(), "config.status").exists() ){
00075 KMessageBox::sorry(this, i18n("There is no config.status in the project root directory. Run 'Configure' first"));
00076 QDialog::accept();
00077 return;
00078 }
00079 #endif
00080
00081 QDir dir( m_subProject->path );
00082 QFileInfo file( dir, name );
00083
00084 if( file.exists() && !file.isDir() ) {
00085 KMessageBox::sorry(this, i18n("A file named %1 already exists.").arg(name));
00086 QDialog::accept();
00087 return;
00088 } else if( file.isDir() ) {
00089 if( KMessageBox::warningContinueCancel(this,
00090 i18n("A subdirectory %1 already exists. "
00091 "Do you wish to add it as a subproject?").arg(name))
00092 == KMessageBox::Cancel ){
00093 QDialog::accept();
00094 return;
00095 }
00096 } else if (!dir.mkdir(name)) {
00097 KMessageBox::sorry(this, i18n("Could not create subdirectory %1.").arg(name));
00098 QDialog::accept();
00099 return;
00100 }
00101
00102 if(!dir.cd(name)) {
00103 KMessageBox::sorry(this, i18n("Could not access the subdirectory %1.").arg(name));
00104 QDialog::accept();
00105 return;
00106 }
00107
00108
00109 if (m_subProject->variables["SUBDIRS"].find("$(TOPSUBDIRS)") != -1)
00110 {
00111 QFile subdirsfile( m_subProject->path + "/subdirs" );
00112 if ( subdirsfile.open( IO_WriteOnly | IO_Append ) )
00113 {
00114 QTextStream subdirsstream( &subdirsfile );
00115 subdirsstream << name << endl;
00116 subdirsfile.close();
00117 }
00118 }
00119 else if (m_subProject->variables["SUBDIRS"].find("$(AUTODIRS)") != -1)
00120 {
00121 }
00122 else
00123 {
00124 m_subProject->variables["SUBDIRS"] += (" " + name);
00125 QMap<QString,QString> replaceMap;
00126 replaceMap.insert("SUBDIRS", m_subProject->variables["SUBDIRS"]);
00127 AutoProjectTool::modifyMakefileam(m_subProject->path + "/Makefile.am", replaceMap);
00128 }
00129
00130
00131 SubprojectItem *newitem = new SubprojectItem(m_subProject, name);
00132 newitem->subdir = name;
00133 newitem->path = m_subProject->path + "/" + name;
00134 newitem->variables["INCLUDES"] = m_subProject->variables["INCLUDES"];
00135 newitem->setOpen(true);
00136
00137
00138 QListViewItem *lastItem = m_subProject->firstChild();
00139 while (lastItem->nextSibling())
00140 lastItem = lastItem->nextSibling();
00141 if (lastItem != newitem)
00142 newitem->moveItem(lastItem);
00143
00144
00145
00146 QFile f( dir.filePath("Makefile.am") );
00147 if (f.exists()) {
00148 m_subprojectView->parse( newitem );
00149 } else {
00150 if (!f.open(IO_WriteOnly)) {
00151 KMessageBox::sorry(this, i18n("Could not create Makefile.am in subdirectory %1.").arg(name));
00152 return;
00153 }
00154 QTextStream stream(&f);
00155 stream << "INCLUDES = " << newitem->variables["INCLUDES"] << endl << "METASOURCES = AUTO" << endl;
00156 f.close();
00157 }
00158
00159
00160
00161
00162 if ( !m_part->isKDE() ) {
00163 QString projroot = m_part->projectDirectory() + "/";
00164 QString subdirectory = dir.path();
00165 QString relpath = subdirectory.replace(0, projroot.length(),"");
00166
00167 QString configurein = projroot + "configure.in";
00168
00169 QStringList list = AutoProjectTool::configureinLoadMakefiles(configurein);
00170 list.push_back( relpath + "/Makefile" );
00171 AutoProjectTool::configureinSaveMakefiles(configurein, list);
00172 }
00173
00174 #if 0
00175 QString relmakefile = (m_subProject->path + "/" + name + "/Makefile").mid(m_part->projectDirectory().length()+1);
00176 kdDebug(9020) << "Relative makefile path: " << relmakefile << endl;
00177
00178 QString cmdline = "cd ";
00179 cmdline += KProcess::quote(m_part->projectDirectory());
00180 cmdline += " && automake ";
00181 cmdline += KProcess::quote(relmakefile);
00182 cmdline += " && CONFIG_HEADERS=config.h CONFIG_FILES=";
00183 cmdline += KProcess::quote(relmakefile);
00184 cmdline += " ./config.status";
00185
00186 m_part->makeFrontend()->queueCommand( m_part->projectDirectory(), cmdline );
00187 m_part->makeFrontend()->queueCommand( m_part->projectDirectory(), m_part->configureCommand() );
00188 #endif
00189
00190 m_part->needMakefileCvs();
00191
00192 QDialog::accept();
00193 }
00194
00195 #include "addsubprojectdlg.moc"
This file is part of the documentation for KDevelop Version 3.1.2.