00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
#include "targetoptionsdlg.h"
00013
00014
#include <qcheckbox.h>
00015
#include <qheader.h>
00016
#include <qlabel.h>
00017
#include <qlayout.h>
00018
#include <qlineedit.h>
00019
#include <qregexp.h>
00020
#include <kbuttonbox.h>
00021
#include <kdialog.h>
00022
#include <klineeditdlg.h>
00023
#include <klocale.h>
00024
#include <knotifyclient.h>
00025
00026
#include "autolistviewitems.h"
00027
00028
#include "misc.h"
00029
#include "autoprojectpart.h"
00030
#include "autoprojectwidget.h"
00031
00032
00033 TargetOptionsDialog::TargetOptionsDialog(
AutoProjectWidget *widget,
TargetItem *item,
00034
QWidget *parent,
const char *name)
00035 :
TargetOptionsDialogBase(parent, name, true)
00036 {
00037 setCaption( i18n(
"Target Options for '%1'").arg(item->
name) );
00038 setIcon( SmallIcon(
"configure") );
00039
00040
target = item;
00041
m_widget = widget;
00042
00043
if (item->primary ==
"PROGRAMS") {
00044 insidelib_label->setText(i18n(
"Link convenience libraries inside project (LDADD)"));
00045 outsidelib_label->setText(i18n(
"Link libraries outside project (LDADD)"));
00046 }
00047
else
00048 run_arguments_edit->setEnabled(
false);
00049
00050 insidelib_listview->header()->hide();
00051 outsidelib_listview->header()->hide();
00052 insidelib_listview->setSorting(-1);
00053 outsidelib_listview->setSorting(-1);
00054
00055
00056
QStringList l = widget->allLibraries();
00057 QStringList::ConstIterator it;
00058
QString fulltargetname =
m_widget->
subprojectDirectory() +
"/" + item->name;
00059
for (it = l.begin(); it != l.end(); ++it)
00060
00061
if ( !fulltargetname.endsWith(*it) )
00062 (
void)
new QCheckListItem(insidelib_listview, *it, QCheckListItem::CheckBox);
00063
readConfig();
00064 }
00065
00066
00067 TargetOptionsDialog::~TargetOptionsDialog()
00068 {}
00069
00070
00071 void TargetOptionsDialog::readConfig()
00072 {
00073
QString flagsstr =
target->
ldflags;
00074 flagsstr.replace(
QRegExp(
"$(KDE_PLUGIN)"),
"-avoid-version -module -no-undefined $(KDE_RPATH)");
00075
QStringList l1 = QStringList::split(
QRegExp(
"[ \t]"), flagsstr);
00076 QStringList::Iterator l1it;
00077
00078 l1it = l1.find(
"-all-static");
00079
if (l1it != l1.end()) {
00080 allstatic_box->setChecked(
true);
00081 l1.remove(l1it);
00082 }
00083 l1it = l1.find(
"-avoid-version");
00084
if (l1it != l1.end()) {
00085 avoidversion_box->setChecked(
true);
00086 l1.remove(l1it);
00087 }
00088 l1it = l1.find(
"-module");
00089
if (l1it != l1.end()) {
00090 module_box->setChecked(
true);
00091 l1.remove(l1it);
00092 }
00093 l1it = l1.find(
"-no-undefined");
00094
if (l1it != l1.end()) {
00095 noundefined_box->setChecked(
true);
00096 l1.remove(l1it);
00097 }
00098 ldflagsother_edit->setText(l1.join(
" "));
00099 dependencies_edit->setText(
target->
dependencies);
00100
00101
QString addstr = (
target->
primary ==
"PROGRAMS")?
target->
ldadd :
target->
libadd;
00102
QStringList l2 = QStringList::split(
QRegExp(
"[ \t]"), addstr);
00103
00104
bool inlistItem;
00105
QListViewItem *lastItem = 0;
00106 QStringList::Iterator l2it;
00107
QCheckListItem *flitem = static_cast<QCheckListItem*>(insidelib_listview->firstChild());
00108
for (l2it = l2.begin(); l2it != l2.end(); ++l2it) {
00109 inlistItem =
false;
00110
QCheckListItem *clitem = static_cast<QCheckListItem*>(insidelib_listview->firstChild());
00111
if (flitem) {
00112
while (clitem) {
00113
if (*l2it == (
"$(top_builddir)/" + clitem->text())) {
00114 clitem->setOn(
true);
00115
00116
if (flitem != clitem)
00117 clitem->moveItem(flitem);
00118
00119 flitem = static_cast<QCheckListItem*>(flitem->nextSibling());
00120 inlistItem =
true;
00121
break;
00122 }
00123 clitem = static_cast<QCheckListItem*>(clitem->nextSibling());
00124 }
00125 }
00126
if ( inlistItem ==
false ) {
00127
QListViewItem *item =
new QListViewItem(outsidelib_listview, *l2it);
00128
if (lastItem)
00129 item->moveItem(lastItem);
00130 lastItem = item;
00131 }
00132 }
00133
00134
if (
target->
primary ==
"PROGRAMS")
00135 run_arguments_edit->setText(DomUtil::readEntry(*
m_widget->
m_part->
projectDom(),
"/kdevautoproject/run/runarguments/" +
target->
name));
00136 }
00137
00138
00139 void TargetOptionsDialog::storeConfig()
00140 {
00141
QStringList flagslist;
00142
if (allstatic_box->isChecked())
00143 flagslist.append(
"-all-static");
00144
if (avoidversion_box->isChecked())
00145 flagslist.append(
"-avoid-version");
00146
if (module_box->isChecked())
00147 flagslist.append(
"-module");
00148
if (noundefined_box->isChecked())
00149 flagslist.append(
"-no-undefined");
00150 flagslist.append(ldflagsother_edit->text());
00151
QString new_ldflags = flagslist.join(
" ");
00152
00153
QStringList liblist;
00154
QCheckListItem *clitem = static_cast<QCheckListItem*>(insidelib_listview->firstChild());
00155
while (clitem) {
00156
if( clitem->isOn() )
00157 liblist.append(
"$(top_builddir)/" + clitem->text());
00158 clitem = static_cast<QCheckListItem*>(clitem->nextSibling());
00159 }
00160 clitem = static_cast<QCheckListItem*>(outsidelib_listview->firstChild());
00161
while (clitem) {
00162 liblist.append(clitem->text());
00163 clitem = static_cast<QCheckListItem*>(clitem->nextSibling());
00164 }
00165
QString new_addstr = liblist.join(
" ");
00166
00167
QString canonname = AutoProjectTool::canonicalize(
target->
name);
00168
QMap<QString, QString> replaceMap;
00169
00170
if (
target->
primary ==
"PROGRAMS") {
00171
QString old_ldadd =
target->
ldadd;
00172
if (new_addstr != old_ldadd) {
00173
target->
ldadd = new_addstr;
00174 replaceMap.insert(canonname +
"_LDADD", new_addstr);
00175 }
00176 }
00177
00178
if (
target->
primary ==
"LIBRARIES" ||
target->
primary ==
"LTLIBRARIES") {
00179
QString old_libadd =
target->
libadd;
00180
if (new_addstr != old_libadd) {
00181
target->
libadd = new_addstr;
00182 replaceMap.insert(canonname +
"_LIBADD", new_addstr);
00183 }
00184 }
00185
00186
QString old_ldflags =
target->
ldflags;
00187
if (new_ldflags != old_ldflags) {
00188
target->
ldflags = new_ldflags;
00189 replaceMap.insert(canonname +
"_LDFLAGS", new_ldflags);
00190 }
00191
00192
QString new_dependencies = dependencies_edit->text();
00193
QString old_dependencies =
target->
dependencies;
00194
if (new_dependencies != old_dependencies) {
00195
target->
dependencies = new_dependencies;
00196
if (!new_dependencies.isEmpty())
00197 replaceMap.insert(canonname +
"_DEPENDENCIES", new_dependencies);
00198 }
00199
00200
00201 AutoProjectTool::modifyMakefileam(
m_widget->
subprojectDirectory() +
"/Makefile.am", replaceMap);
00202
00203
if (
target->
primary ==
"PROGRAMS")
00204 DomUtil::writeEntry(*
m_widget->
m_part->
projectDom(),
"/kdevautoproject/run/runarguments/" +
target->
name, run_arguments_edit->text());
00205 }
00206
00207
00208 void TargetOptionsDialog::insideMoveUpClicked()
00209 {
00210
if (!insidelib_listview->currentItem())
00211
return;
00212
if (insidelib_listview->currentItem() == insidelib_listview->firstChild()) {
00213
KNotifyClient::beep();
00214
return;
00215 }
00216
00217
QListViewItem *item = insidelib_listview->firstChild();
00218
while (item->nextSibling() != insidelib_listview->currentItem())
00219 item = item->nextSibling();
00220 item->moveItem(insidelib_listview->currentItem());
00221 }
00222
00223
00224 void TargetOptionsDialog::insideMoveDownClicked()
00225 {
00226
if (!insidelib_listview->currentItem())
00227
return;
00228
00229
if (insidelib_listview->currentItem()->nextSibling() == 0) {
00230
KNotifyClient::beep();
00231
return;
00232 }
00233
00234 insidelib_listview->currentItem()->moveItem(insidelib_listview->currentItem()->nextSibling());
00235 }
00236
00237
00238 void TargetOptionsDialog::outsideMoveUpClicked()
00239 {
00240
if (!outsidelib_listview->currentItem())
00241
return;
00242
if (outsidelib_listview->currentItem() == outsidelib_listview->firstChild()) {
00243
KNotifyClient::beep();
00244
return;
00245 }
00246
00247
QListViewItem *item = outsidelib_listview->firstChild();
00248
while (item->nextSibling() != outsidelib_listview->currentItem())
00249 item = item->nextSibling();
00250 item->moveItem(outsidelib_listview->currentItem());
00251 }
00252
00253
00254 void TargetOptionsDialog::outsideMoveDownClicked()
00255 {
00256
if (!outsidelib_listview->currentItem())
00257
return;
00258
if (outsidelib_listview->currentItem()->nextSibling() == 0) {
00259
KNotifyClient::beep();
00260
return;
00261 }
00262
00263 outsidelib_listview->currentItem()->moveItem(outsidelib_listview->currentItem()->nextSibling());
00264 }
00265
00266
00267 void TargetOptionsDialog::outsideAddClicked()
00268 {
00269
bool ok;
00270
QString dir = KLineEditDlg::getText(i18n(
"Add library:"),
"-l", &ok, 0);
00271
if (ok && !dir.isEmpty() && dir !=
"-l")
00272
new QListViewItem(outsidelib_listview, dir);
00273 }
00274
00275
00276 void TargetOptionsDialog::outsideEditClicked()
00277 {
00278
if ( (outsidelib_listview->childCount()==0) || (outsidelib_listview->currentItem() == 0) )
00279
return;
00280
bool ok;
00281
QString dir = KLineEditDlg::getText(i18n(
"Edit external library:"),
00282 outsidelib_listview->currentItem()->
text(0), &ok, 0);
00283
if (ok && !dir.isEmpty())
00284 outsidelib_listview->currentItem()-> setText(0, dir);
00285 }
00286
00287
00288 void TargetOptionsDialog::outsideRemoveClicked()
00289 {
00290
delete outsidelib_listview->currentItem();
00291 }
00292
00293
00294 void TargetOptionsDialog::accept()
00295 {
00296
storeConfig();
00297 QDialog::accept();
00298 }
00299
00300
#include "targetoptionsdlg.moc"