choosetargetdialog.cpp
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #include <qcheckbox.h>
00018 #include <qgroupbox.h>
00019 #include <qlistview.h>
00020 #include <qptrlist.h>
00021 #include <qradiobutton.h>
00022 #include <qstringlist.h>
00023 #include <qfileinfo.h>
00024
00025 #include <kcombobox.h>
00026 #include <kdebug.h>
00027 #include <klistbox.h>
00028 #include <kmessagebox.h>
00029 #include <kprocess.h>
00030 #include <ksqueezedtextlabel.h>
00031 #include <kurl.h>
00032
00033 #include "choosetargetdialog.h"
00034
00035 #include "autodetailsview.h"
00036 #include "autolistviewitems.h"
00037 #include "autosubprojectview.h"
00038
00039 #include "misc.h"
00040 #include "autoprojectwidget.h"
00041 #include "autoprojectpart.h"
00042
00043 #include "kdevpartcontroller.h"
00044
00045
00046 ChooseTargetDialog::ChooseTargetDialog ( AutoProjectWidget* widget, AutoProjectPart* part, QStringList fileList, QWidget* parent, const char* name )
00047 : ChooseTargetDlgBase ( parent, name, false, 0 ), m_choosenSubproject ( 0 ), m_choosenTarget ( 0 )
00048 {
00049 m_widget = widget;
00050 m_part = part;
00051 m_fileList = fileList;
00052 m_subprojectList = widget->allSubprojectItems();
00053
00054 subprojectComboBox->setAutoCompletion ( true );
00055 targetComboBox->setAutoCompletion ( true );
00056
00057 setIcon ( SmallIcon ( "target_kdevelop" ) );
00058
00059
00060 SubprojectItem* spitem = m_subprojectList.first();
00061
00062 for ( ; spitem; spitem = m_subprojectList.next() )
00063 {
00064 QPtrList <TargetItem> targetList = spitem->targets;
00065 TargetItem* titem = targetList.first();
00066
00067
00068 for ( ; titem; titem = targetList.next() )
00069 {
00070 if ( titem->primary == "PROGRAMS" || titem->primary == "LIBRARIES" ||
00071 titem->primary == "LTLIBRARIES" || titem->primary == "JAVA" )
00072 {
00073 subprojectComboBox->insertItem ( SmallIcon ( "folder" ), spitem->subdir );
00074
00075
00076
00077
00078 break;
00079 }
00080 }
00081 }
00082
00083
00084
00085 if ( widget->activeTarget() && widget->activeSubproject() )
00086 {
00087 m_choosenTarget = widget->activeTarget();
00088
00089 m_choosenSubproject = widget->activeSubproject();
00090 choosenTargetLabel->setText ( ( widget->activeSubproject()->path + "/<b>" + m_widget->activeTarget()->name + "</b>" ).mid ( m_part->projectDirectory().length() + 1 ) );
00091 subprojectComboBox->setEnabled ( false );
00092 targetComboBox->setEnabled ( false );
00093
00094 subprojectComboBox->setCurrentItem ( widget->activeSubproject()->subdir );
00095 slotSubprojectChanged ( widget->activeSubproject()->subdir );
00096 }
00097 else
00098 {
00099 activeTargetRadioButton->setChecked ( false );
00100 chooseTargetRadioButton->setChecked ( true );
00101 activeTargetRadioButton->setEnabled ( false );
00102 neverAskAgainCheckBox->setEnabled ( false );
00103
00104 slotSubprojectChanged ( subprojectComboBox->text(0) );
00105 }
00106
00107 QStringList::iterator it;
00108 QString fileName;
00109
00110 for ( it = fileList.begin(); it != fileList.end(); ++it )
00111 {
00112 int pos = ( *it ).findRev('/');
00113 if (pos != -1)
00114 {
00115 fileName = ( *it ).mid(pos+1);
00116 }
00117 else
00118 {
00119 fileName = ( *it );
00120 }
00121
00122 newFilesListBox->insertItem ( SmallIcon ( "document" ), fileName );
00123 }
00124
00125 connect ( activeTargetRadioButton, SIGNAL ( toggled ( bool ) ), this, SLOT ( slotActiveTargetToggled ( bool ) ) );
00126 connect ( chooseTargetRadioButton, SIGNAL ( toggled ( bool ) ), this, SLOT ( slotChooseTargetToggled ( bool ) ) );
00127
00128 connect ( subprojectComboBox, SIGNAL ( activated ( const QString& ) ), this, SLOT ( slotSubprojectChanged ( const QString& ) ) );
00129 connect ( targetComboBox, SIGNAL ( activated ( const QString& ) ), this, SLOT ( slotTargetChanged ( const QString& ) ) );
00130 }
00131
00132
00133 ChooseTargetDialog::~ChooseTargetDialog()
00134 {
00135 }
00136
00137 void ChooseTargetDialog::slotSubprojectChanged ( const QString& name )
00138 {
00139 m_choosenTarget = 0;
00140 SubprojectItem* spitem = m_subprojectList.first();
00141
00142 for ( ; spitem; spitem = m_subprojectList.next() )
00143 {
00144 if ( spitem->subdir == name )
00145 {
00146 QPtrList <TargetItem> targetList = spitem->targets;
00147 TargetItem* titem = targetList.first();
00148
00149 targetComboBox->clear();
00150
00151
00152
00153 m_choosenSubproject = spitem;
00154
00155 for ( ; titem; titem = targetList.next() )
00156 {
00157 if ( titem->primary == "PROGRAMS" || titem->primary == "LIBRARIES" ||
00158 titem->primary == "LTLIBRARIES" || titem->primary == "JAVA" )
00159 {
00160 targetComboBox->insertItem ( SmallIcon ( "target_kdevelop" ), titem->name );
00161
00162
00163
00164
00165 if ( m_widget->activeTarget() &&
00166 titem->name == m_widget->activeTarget()->name )
00167 {
00168 targetComboBox->setCurrentItem ( titem->name );
00169 choosenTargetLabel->setText ( ( spitem->path + "/<b>" + titem->name + "</b>" ).mid ( m_part->projectDirectory().length() + 1 ) );
00170
00171 m_choosenTarget = titem;
00172
00173 }
00174 else
00175 {
00176
00177 if ( !m_choosenTarget )
00178 {
00179 choosenTargetLabel->setText ( ( spitem->path + "/<b>" + titem->name + "</b>" ).mid ( m_part->projectDirectory().length() + 1 ) );
00180
00181
00182 m_choosenTarget = titem;
00183 }
00184
00185 }
00186 }
00187 }
00188
00189 break;
00190 }
00191 }
00192 }
00193
00194 void ChooseTargetDialog::slotTargetChanged ( const QString& name )
00195 {
00196 choosenTargetLabel->setText ( ( m_choosenSubproject->path + "/<b>" + name + "</b>" ).mid ( m_part->projectDirectory().length() + 1 ) );
00197
00198 QPtrList <TargetItem> targetList = m_choosenSubproject->targets;
00199 TargetItem* titem = targetList.first();
00200
00201 for ( ; titem; titem = targetList.next() )
00202 {
00203 if ( titem->name == name )
00204 {
00205 m_choosenTarget = titem;
00206
00207
00208 break;
00209 }
00210 }
00211 }
00212
00213 void ChooseTargetDialog::slotActiveTargetToggled(bool on)
00214 {
00215 if ( on )
00216 {
00217 chooseTargetRadioButton->setChecked ( false );
00218
00219 subprojectComboBox->setEnabled ( false );
00220 targetComboBox->setEnabled ( false );
00221 }
00222 else
00223 {
00224 chooseTargetRadioButton->setChecked ( true );
00225
00226 subprojectComboBox->setEnabled ( true );
00227 targetComboBox->setEnabled ( true );
00228 }
00229 }
00230
00231 void ChooseTargetDialog::slotChooseTargetToggled(bool on)
00232 {
00233 if ( on )
00234 {
00235 activeTargetRadioButton->setChecked ( false );
00236
00237 subprojectComboBox->setEnabled ( true );
00238 targetComboBox->setEnabled ( true );
00239 }
00240 else
00241 {
00242 activeTargetRadioButton->setChecked ( true );
00243
00244 subprojectComboBox->setEnabled ( false );
00245 targetComboBox->setEnabled ( false );
00246 }
00247 }
00248
00249 void ChooseTargetDialog::accept ()
00250 {
00251 if ( activeTargetRadioButton->isChecked() )
00252 {
00253 m_choosenTarget = m_widget->activeTarget();
00254 m_choosenSubproject = m_widget->activeSubproject();
00255 }
00256 if ( !m_choosenSubproject || !m_choosenTarget )
00257 return;
00258
00259
00260
00261 QStringList newFileList;
00262 QStringList::iterator it;
00263 QString directory, fileName;
00264
00265 for ( it = m_fileList.begin(); it != m_fileList.end(); ++it )
00266 {
00267 bool found = false;
00268
00269 int pos = ( *it ).findRev('/');
00270 if (pos != -1)
00271 {
00272 directory = ( *it ).left(pos);
00273 fileName = ( *it ).mid(pos+1);
00274 }
00275 else
00276 {
00277 fileName = ( *it );
00278 }
00279
00280 FileItem * fitem = m_choosenTarget->sources.first();
00281 for ( ; fitem; fitem = m_choosenTarget->sources.next() )
00282 {
00283 if ( fitem->name == fileName )
00284 {
00285 KMessageBox::error ( this, i18n ( "The file %1 already exists in the chosen target.\nThe file will be created but will not be added to the target.\n"
00286 "Rename the file and select 'Add Existing Files' from the Automake Manager." ).arg ( fitem->name ),
00287 i18n ( "Error While Adding Files" ) );
00288 found = true;
00289 }
00290 }
00291
00292 if ( !found )
00293 {
00296 if (AutoProjectPrivate::isHeader(fileName) &&
00297 ( m_choosenTarget->primary == "PROGRAMS" || m_choosenTarget->primary == "LIBRARIES" || m_choosenTarget->primary == "LTLIBRARIES" ) )
00298 {
00299 kdDebug ( 9020 ) << "Ignoring header file and adding it to noinst_HEADERS: " << fileName << endl;
00300 TargetItem* noinst_HEADERS_item = m_widget->getSubprojectView()->findNoinstHeaders(m_choosenSubproject);
00301 FileItem *fitem = m_widget->createFileItem( fileName, m_choosenSubproject );
00302 noinst_HEADERS_item->sources.append( fitem );
00303 noinst_HEADERS_item->insertItem( fitem );
00304
00305 QString varname = "noinst_HEADERS";
00306 m_choosenSubproject->variables[ varname ] += ( " " + fileName );
00307
00308 QMap<QString, QString> replaceMap;
00309 replaceMap.insert( varname, m_choosenSubproject->variables[ varname ] );
00310
00311 AutoProjectTool::modifyMakefileam( m_choosenSubproject->path + "/Makefile.am", replaceMap );
00312 }
00313 else
00314 {
00315 fitem = m_widget->createFileItem( fileName,m_choosenSubproject );
00316 m_choosenTarget->sources.append( fitem );
00317 m_choosenTarget->insertItem( fitem );
00318
00319 QString canontargetname = AutoProjectTool::canonicalize( m_choosenTarget->name );
00320 QString varname = canontargetname + "_SOURCES";
00321 m_choosenSubproject->variables[ varname ] += ( " " + fileName );
00322
00323 QMap<QString, QString> replaceMap;
00324 replaceMap.insert( varname, m_choosenSubproject->variables[ varname ] );
00325
00326 AutoProjectTool::modifyMakefileam( m_choosenSubproject->path + "/Makefile.am", replaceMap );
00327 }
00328 newFileList.append ( m_choosenSubproject->path.mid ( m_part->projectDirectory().length() + 1 ) + "/" + fileName );
00329 }
00330
00331 if ( directory.isEmpty() || directory != m_choosenSubproject->subdir )
00332 {
00333 KShellProcess proc("/bin/sh");
00334
00335 proc << "mv";
00336 proc << KShellProcess::quote( m_part->projectDirectory() + "/" + directory + "/" + fileName );
00337 proc << KShellProcess::quote( m_choosenSubproject->path + "/" + fileName );
00338 proc.start(KProcess::DontCare);
00339 }
00340
00341
00342
00343
00344 found = false;
00345 }
00346
00347 m_widget->emitAddedFiles( newFileList );
00348
00349 QDialog::accept();
00350 }
00351
00352 TargetItem* ChooseTargetDialog::choosenTarget()
00353 {
00354 return m_choosenTarget;
00355 }
00356
00357 SubprojectItem* ChooseTargetDialog::choosenSubproject()
00358 {
00359 return m_choosenSubproject;
00360 }
00361
00362 void ChooseTargetDialog::slotSubprojectTextChanged ( const QString& text )
00363 {
00364 Q_UNUSED( text );
00365
00366 }
This file is part of the documentation for KDevelop Version 3.1.2.