KDevelop API Documentation

buildtools/autotools/subprojectoptionsdlg.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 "subprojectoptionsdlg.h" 00013 00014 #include <qdom.h> 00015 #include <qheader.h> 00016 #include <qlabel.h> 00017 #include <qlayout.h> 00018 #include <qlineedit.h> 00019 #include <qpushbutton.h> 00020 #include <qcheckbox.h> 00021 #include <qregexp.h> 00022 #include <kbuttonbox.h> 00023 #include <kdebug.h> 00024 #include <kdialog.h> 00025 #include <keditlistbox.h> 00026 #include <klineeditdlg.h> 00027 #include <klocale.h> 00028 #include <knotifyclient.h> 00029 #include <kservice.h> 00030 00031 #include "domutil.h" 00032 #include "misc.h" 00033 #include "addprefixdlg.h" 00034 00035 #include "autolistviewitems.h" 00036 00037 #include "autoprojectpart.h" 00038 #include "autoprojectwidget.h" 00039 00040 00041 SubprojectOptionsDialog::SubprojectOptionsDialog(AutoProjectPart *part, AutoProjectWidget *widget, 00042 SubprojectItem *item, QWidget *parent, const char *name) 00043 : SubprojectOptionsDialogBase(parent, name, true) 00044 { 00045 setCaption(i18n("Subproject Options for '%1'").arg(item->subdir)); 00046 00047 subProject = item; 00048 m_part = part; 00049 00050 QFontMetrics fm(cflags_edit->fontMetrics()); 00051 int wid = fm.width('X')*35; 00052 cflags_edit->setMinimumWidth(wid); 00053 cxxflags_edit->setMinimumWidth(wid); 00054 fflags_edit->setMinimumWidth(wid); 00055 00056 QDomDocument &dom = *part->projectDom(); 00057 QString prefix = "/kdevautoproject/configurations/" + m_part->currentBuildConfig() + "/"; 00058 00059 ccompiler = DomUtil::readEntry(dom, prefix + "ccompiler", "kdevgccoptions"); 00060 cxxcompiler = DomUtil::readEntry(dom, prefix + "cxxcompiler", "kdevgppoptions"); 00061 f77compiler = DomUtil::readEntry(dom, prefix + "f77compiler", "kdevg77options"); 00062 00063 if (!KService::serviceByDesktopName(ccompiler)) 00064 cflags_button->setEnabled(false); 00065 if (!KService::serviceByDesktopName(cxxcompiler)) 00066 cxxflags_button->setEnabled(false); 00067 if (!KService::serviceByDesktopName(f77compiler)) 00068 fflags_button->setEnabled(false); 00069 00070 insideinc_listview->header()->hide(); 00071 outsideinc_listview->header()->hide(); 00072 buildorder_listview->header()->hide(); 00073 00074 insideinc_listview->setSorting(-1); 00075 outsideinc_listview->setSorting(-1); 00076 prefix_listview->setSorting(-1); 00077 buildorder_listview->setSorting(-1); 00078 00079 connect( prefix_listview, SIGNAL( doubleClicked ( QListViewItem *, const QPoint &, int ) ), this, SLOT( editPrefixClicked() ) ); 00080 00081 // Insert all subdirectories as possible include directories 00082 QStringList l = widget->allSubprojects(); 00083 QCheckListItem *lastItem = 0; 00084 QStringList::ConstIterator it; 00085 for (it = l.begin(); it != l.end(); ++it) { 00086 kdDebug(9013) << "----------> subproject = " << (*it) << endl; 00087 QString subProjectName = *it; 00088 00089 if( subProjectName.isEmpty() ){ 00090 subProjectName = QString::fromLatin1( "." ); 00091 } 00092 QCheckListItem *clitem = new QCheckListItem(insideinc_listview, subProjectName, QCheckListItem::CheckBox); 00093 if (lastItem) 00094 clitem->moveItem(lastItem); 00095 lastItem = clitem; 00096 } 00097 00098 setIcon ( SmallIcon ( "configure" ) ); 00099 00100 readConfig(); 00101 } 00102 00103 00104 SubprojectOptionsDialog::~SubprojectOptionsDialog() 00105 {} 00106 00107 00108 void SubprojectOptionsDialog::readConfig() 00109 { 00110 00111 cflags_edit->setText(subProject->variables["AM_CFLAGS"]); 00112 cxxflags_edit->setText(subProject->variables["AM_CXXFLAGS"]); 00113 fflags_edit->setText(subProject->variables["AM_FFLAGS"]); 00114 00115 metasources_checkbox->setChecked(subProject->variables["METASOURCES"].stripWhiteSpace() == "AUTO"); 00116 00117 QString includes = subProject->variables["INCLUDES"]; 00118 QStringList includeslist = QStringList::split(QRegExp("[ \t]"), QString(includes)); 00119 00120 QListViewItem *lastItem = 0; 00121 QStringList::Iterator it; 00122 for (it = includeslist.begin(); it != includeslist.end(); ++it) { 00123 QCheckListItem *clitem = static_cast<QCheckListItem*>(insideinc_listview->firstChild()); 00124 while (clitem) { 00125 if (*it == ("-I$(top_srcdir)/" + clitem->text())) { 00126 clitem->setOn(true); 00127 break; 00128 } 00129 clitem = static_cast<QCheckListItem*>(clitem->nextSibling()); 00130 } 00131 if (!clitem) { 00132 QListViewItem *item = new QListViewItem(outsideinc_listview, *it); 00133 if (lastItem) 00134 item->moveItem(lastItem); 00135 lastItem = item; 00136 } 00137 } 00138 00139 QMap<QString, QString>::ConstIterator it2; 00140 for (it2 = subProject->prefixes.begin(); it2 != subProject->prefixes.end(); ++it2) 00141 new QListViewItem(prefix_listview, it2.key(), it2.data()); 00142 00143 QString subdirs = subProject->variables["SUBDIRS"]; 00144 kdDebug(9020) << "Subdirs variable: " << subdirs << endl; 00145 QStringList subdirslist = QStringList::split(QRegExp("[ \t]"), QString(subdirs)); 00146 lastItem = 0; 00147 for (it = subdirslist.begin(); it != subdirslist.end(); ++it) { 00148 QListViewItem *item = new QListViewItem(buildorder_listview, *it); 00149 if (lastItem) 00150 item->moveItem(lastItem); 00151 lastItem = item; 00152 } 00153 } 00154 00155 00156 void SubprojectOptionsDialog::storeConfig() 00157 { 00158 QMap<QString, QString> replaceMap; 00159 00160 QString old_cflags = subProject->variables["AM_CFLAGS"]; 00161 QString new_cflags = cflags_edit->text(); 00162 if (new_cflags != old_cflags) { 00163 subProject->variables["AM_CFLAGS"] = new_cflags; 00164 replaceMap.insert("AM_CFLAGS", new_cflags); 00165 } 00166 00167 QString old_cxxflags = subProject->variables["AM_CXXFLAGS"]; 00168 QString new_cxxflags = cxxflags_edit->text(); 00169 if (new_cxxflags != old_cxxflags) { 00170 subProject->variables["AM_CXXFLAGS"] = new_cxxflags; 00171 replaceMap.insert("AM_CXXFLAGS", new_cxxflags); 00172 } 00173 00174 QString old_fflags = subProject->variables["AM_FFLAGS"]; 00175 QString new_fflags = fflags_edit->text(); 00176 if (new_fflags != old_fflags) { 00177 subProject->variables["AM_FFLAGS"] = new_fflags; 00178 replaceMap.insert("AM_FFLAGS", new_fflags); 00179 } 00180 00181 QString old_metasources = subProject->variables["METASOURCES"]; 00182 QString new_metasources = metasources_checkbox->isChecked() ? QString::fromLatin1("AUTO") : QString::null; 00183 if (new_metasources != old_metasources) { 00184 subProject->variables["METASOURCES"] = new_metasources; 00185 replaceMap.insert("METASOURCES", new_metasources); 00186 } 00187 00188 QStringList includeslist; 00189 QCheckListItem *clitem = static_cast<QCheckListItem*>(insideinc_listview->firstChild()); 00190 while (clitem) { 00191 if (clitem->isOn()) 00192 includeslist.append("-I$(top_srcdir)/" + clitem->text()); 00193 clitem = static_cast<QCheckListItem*>(clitem->nextSibling()); 00194 } 00195 clitem = static_cast<QCheckListItem*>(outsideinc_listview->firstChild()); 00196 while (clitem) { 00197 includeslist.append(clitem->text()); 00198 clitem = static_cast<QCheckListItem*>(clitem->nextSibling()); 00199 } 00200 QString includes = includeslist.join(" "); 00201 subProject->variables["INCLUDES"] = includes; 00202 replaceMap.insert("INCLUDES", includes); 00203 00204 subProject->prefixes.clear(); 00205 for (QListViewItem *item = prefix_listview->firstChild(); 00206 item; item = item->nextSibling()) { 00207 QString key = item->text(0); 00208 QString data = item->text(1); 00209 subProject->prefixes[key] = data; 00210 replaceMap.insert(key + "dir", data); 00211 } 00213 00214 QStringList subdirslist; 00215 for (QListViewItem *item = buildorder_listview->firstChild(); 00216 item; item = item->nextSibling()) 00217 subdirslist.append(item->text(0)); 00218 QString subdirs = subdirslist.join(" "); 00219 kdDebug() << "New subdirs variable: " << subdirs << endl; 00220 subProject->variables["SUBDIRS"] = subdirs; 00221 replaceMap.insert("SUBDIRS", subdirs); 00222 00223 AutoProjectTool::modifyMakefileam(subProject->path + "/Makefile.am", replaceMap); 00224 } 00225 00226 00227 void SubprojectOptionsDialog::cflagsClicked() 00228 { 00229 QString new_cflags = AutoProjectTool::execFlagsDialog(ccompiler, cflags_edit->text(), this); 00230 if (!new_cflags.isNull()) 00231 cflags_edit->setText(new_cflags); 00232 } 00233 00234 00235 void SubprojectOptionsDialog::cxxFlagsClicked() 00236 { 00237 QString new_cxxflags = AutoProjectTool::execFlagsDialog(cxxcompiler, cxxflags_edit->text(), this); 00238 if (!new_cxxflags.isNull()) 00239 cxxflags_edit->setText(new_cxxflags); 00240 } 00241 00242 00243 void SubprojectOptionsDialog::fflagsClicked() 00244 { 00245 QString new_fflags = AutoProjectTool::execFlagsDialog(f77compiler, fflags_edit->text(), this); 00246 if (!new_fflags.isNull()) 00247 fflags_edit->setText(new_fflags); 00248 } 00249 00250 00251 void SubprojectOptionsDialog::insideMoveUpClicked() 00252 { 00253 if (insideinc_listview->currentItem() == insideinc_listview->firstChild()) { 00254 KNotifyClient::beep(); 00255 return; 00256 } 00257 00258 QListViewItem *item = insideinc_listview->firstChild(); 00259 while (item->nextSibling() != insideinc_listview->currentItem()) 00260 item = item->nextSibling(); 00261 item->moveItem(insideinc_listview->currentItem()); 00262 } 00263 00264 00265 void SubprojectOptionsDialog::insideMoveDownClicked() 00266 { 00267 if (insideinc_listview->currentItem() == 0 || insideinc_listview->currentItem()->nextSibling() == 0) { 00268 KNotifyClient::beep(); 00269 return; 00270 } 00271 00272 insideinc_listview->currentItem()->moveItem(insideinc_listview->currentItem()->nextSibling()); 00273 } 00274 00275 00276 void SubprojectOptionsDialog::outsideMoveUpClicked() 00277 { 00278 if (outsideinc_listview->currentItem() == outsideinc_listview->firstChild()) { 00279 KNotifyClient::beep(); 00280 return; 00281 } 00282 00283 QListViewItem *item = outsideinc_listview->firstChild(); 00284 while (item->nextSibling() != outsideinc_listview->currentItem()) 00285 item = item->nextSibling(); 00286 item->moveItem(outsideinc_listview->currentItem()); 00287 } 00288 00289 00290 void SubprojectOptionsDialog::outsideMoveDownClicked() 00291 { 00292 if (outsideinc_listview->currentItem() == 0 || outsideinc_listview->currentItem()->nextSibling() == 0) { 00293 KNotifyClient::beep(); 00294 return; 00295 } 00296 00297 outsideinc_listview->currentItem()->moveItem(outsideinc_listview->currentItem()->nextSibling()); 00298 } 00299 00300 00301 void SubprojectOptionsDialog::outsideAddClicked() 00302 { 00303 bool ok; 00304 QString dir = KLineEditDlg::getText(i18n("Add include directory:"), "-I", &ok, 0); 00305 if (ok && !dir.isEmpty() && dir != "-I") 00306 new QListViewItem(outsideinc_listview, dir); 00307 } 00308 00309 00310 void SubprojectOptionsDialog::outsideEditClicked() 00311 { 00312 if ( (outsideinc_listview->childCount()==0) || (outsideinc_listview->currentItem() == 0) ) 00313 return; 00314 bool ok; 00315 QString dir = KLineEditDlg::getText(i18n("Edit include directory:"), 00316 outsideinc_listview->currentItem()-> text(0), &ok, 0); 00317 if (ok && !dir.isEmpty()) 00318 outsideinc_listview->currentItem()-> setText(0, dir); 00319 } 00320 00321 00322 void SubprojectOptionsDialog::outsideRemoveClicked() 00323 { 00324 delete outsideinc_listview->currentItem(); 00325 } 00326 00327 00328 void SubprojectOptionsDialog::addPrefixClicked() 00329 { 00330 AddPrefixDialog dlg; 00331 if (!dlg.exec() || dlg.name().isEmpty() || dlg.path().isEmpty() ) 00332 return; 00333 00334 new QListViewItem(prefix_listview, dlg.name(), dlg.path()); 00335 } 00336 00337 00338 void SubprojectOptionsDialog::editPrefixClicked() 00339 { 00340 QListViewItem* lvItem = prefix_listview->currentItem(); 00341 if ( (prefix_listview->childCount()==0) || (lvItem == 0) ) 00342 return; 00343 AddPrefixDialog dlg(lvItem-> text(0), lvItem-> text(1)); 00344 dlg.setCaption(i18n("Edit Prefix")); 00345 if (!dlg.exec() || dlg.name().isEmpty() || dlg.path().isEmpty() ) 00346 return; 00347 lvItem-> setText(0, dlg.name()); 00348 lvItem-> setText(1, dlg.path()); 00349 } 00350 00351 void SubprojectOptionsDialog::removePrefixClicked() 00352 { 00353 delete prefix_listview->currentItem(); 00354 } 00355 00356 00357 void SubprojectOptionsDialog::buildorderMoveUpClicked() 00358 { 00359 if (buildorder_listview->currentItem() == buildorder_listview->firstChild()) { 00360 KNotifyClient::beep(); 00361 return; 00362 } 00363 00364 QListViewItem *item = buildorder_listview->firstChild(); 00365 while (item->nextSibling() != buildorder_listview->currentItem()) 00366 item = item->nextSibling(); 00367 item->moveItem(buildorder_listview->currentItem()); 00368 } 00369 00370 00371 void SubprojectOptionsDialog::buildorderMoveDownClicked() 00372 { 00373 if (buildorder_listview->currentItem() == 0 || buildorder_listview->currentItem()->nextSibling() == 0) { 00374 KNotifyClient::beep(); 00375 return; 00376 } 00377 00378 buildorder_listview->currentItem()->moveItem(buildorder_listview->currentItem()->nextSibling()); 00379 } 00380 00381 00382 void SubprojectOptionsDialog::accept() 00383 { 00384 storeConfig(); 00385 QDialog::accept(); 00386 } 00387 00388 #include "subprojectoptionsdlg.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