00001
00002
00003
00004
00005
00006
00007
00008
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
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"