00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
#include <kurlrequester.h>
00011
#include <kservice.h>
00012
#include <kdebug.h>
00013
#include <kmessagebox.h>
00014
#include <klocale.h>
00015
00016
#include <qlineedit.h>
00017
#include <qcombobox.h>
00018
#include <qregexp.h>
00019
#include <qvalidator.h>
00020
00021
#include "domutil.h"
00022
#include "kdevcompileroptions.h"
00023
00024
#include "service.h"
00025
#include "adaproject_part.h"
00026
#include "adaprojectoptionsdlg.h"
00027
00028 AdaProjectOptionsDlg::AdaProjectOptionsDlg(
AdaProjectPart *part,
QWidget* parent,
const char* name, WFlags fl)
00029 :
AdaProjectOptionsDlgBase(parent,name, fl), m_part(part)
00030 {
00031 config_combo->setValidator(
new QRegExpValidator(
QRegExp(
"^\\D.*"),
this));
00032
00033
offers = KTrader::self()->query(
"KDevelop/CompilerOptions",
"[X-KDevelop-Language] == 'Ada'");
00034
00035 ServiceComboBox::insertStringList(compiler_box,
offers, &
service_names, &
service_execs);
00036
00037
if (
offers.isEmpty())
00038 options_button->setEnabled(
false);
00039
00040
allConfigs =
allBuildConfigs();
00041 config_combo->insertStringList(
allConfigs);
00042
00043
dirty =
false;
00044
00045
QDomDocument &dom = *(
m_part->
projectDom());
00046
currentConfig = QString::null;
00047
configChanged(DomUtil::readEntry(dom,
"/kdevadaproject/general/useconfiguration",
"default"));
00048 }
00049
00050 AdaProjectOptionsDlg::~AdaProjectOptionsDlg()
00051 {
00052 }
00053
00054 QStringList AdaProjectOptionsDlg::allBuildConfigs()
00055 {
00056
QDomDocument &dom = *(
m_part->
projectDom());
00057
00058
QStringList allConfigs;
00059 allConfigs.append(
"default");
00060
00061
QDomNode node = dom.documentElement().namedItem(
"kdevadaproject").namedItem(
"configurations");
00062
QDomElement childEl = node.firstChild().toElement();
00063
while (!childEl.isNull()) {
00064
QString config = childEl.tagName();
00065
kdDebug() <<
"Found config " << config <<
endl;
00066
if (config !=
"default")
00067 allConfigs.append(config);
00068 childEl = childEl.nextSibling().toElement();
00069 }
00070
00071
return allConfigs;
00072 }
00073
00074 void AdaProjectOptionsDlg::accept()
00075 {
00076 DomUtil::writeEntry(*
m_part->
projectDom(),
"/kdevadaproject/general/useconfiguration",
currentConfig);
00077
if (
dirty)
00078 {
00079
saveConfig(
currentConfig);
00080 }
00081 }
00082
00083 void AdaProjectOptionsDlg::compiler_box_activated(
const QString& )
00084 {
00085
QString exec = ServiceComboBox::currentText(compiler_box,
service_execs);
00086 exec_edit->setText(exec);
00087 }
00088
00089 void AdaProjectOptionsDlg::saveConfig(
QString config )
00090 {
00091
QDomDocument dom = *
m_part->
projectDom();
00092
QString prefix =
"/kdevadaproject/configurations/" + config +
"/";
00093
00094 DomUtil::writeEntry(dom, prefix +
"compiler",
00095 ServiceComboBox::currentText(compiler_box,
service_names));
00096 DomUtil::writeEntry(dom, prefix +
"compileroptions", options_edit->text());
00097 DomUtil::writeEntry(dom, prefix +
"compilerexec", exec_edit->text());
00098 DomUtil::writeEntry(dom, prefix +
"mainsource", mainSourceUrl->
url().replace(
QRegExp(
m_part->
projectDirectory() +
QString(
"/")),
""));
00099 }
00100
00101 void AdaProjectOptionsDlg::readConfig(
QString config )
00102 {
00103
QDomDocument dom = *
m_part->
projectDom();
00104
QString prefix =
"/kdevadaproject/configurations/" + config +
"/";
00105
00106
QString compiler = DomUtil::readEntry(dom, prefix +
"compiler",
"");
00107
00108
if (compiler.isEmpty())
00109 {
00110
offers = KTrader::self()->query(
"KDevelop/CompilerOptions",
"[X-KDevelop-Language] == 'Ada'");
00111
QValueList<KService::Ptr>::ConstIterator it;
00112
for (it =
offers.begin(); it !=
offers.end(); ++it) {
00113
if ((*it)->property(
"X-KDevelop-Default").toBool()) {
00114 compiler = (*it)->name();
00115
kdDebug() <<
"compiler is " << compiler <<
endl;
00116
break;
00117 }
00118 }
00119 }
00120 ServiceComboBox::setCurrentText(compiler_box, compiler,
service_names);
00121
00122
QString exec = DomUtil::readEntry(dom, prefix +
"compilerexec",
"");
00123
if (exec.isEmpty())
00124 exec = ServiceComboBox::currentText(compiler_box,
service_execs);
00125 exec_edit->setText(exec);
00126 options_edit->setText(DomUtil::readEntry(dom, prefix +
"compileroptions"));
00127 mainSourceUrl->
setURL(
m_part->
projectDirectory() +
"/" + DomUtil::readEntry(dom, prefix +
"mainsource"));
00128 }
00129
00130 void AdaProjectOptionsDlg::configComboTextChanged(
const QString &config)
00131 {
00132
bool canAdd = !
allConfigs.contains(config) && !config.contains(
"/") && !config.isEmpty();
00133
bool canRemove =
allConfigs.contains(config) && config !=
"default";
00134 addconfig_button->setEnabled(canAdd);
00135 removeconfig_button->setEnabled(canRemove);
00136 }
00137
00138
00139 void AdaProjectOptionsDlg::configChanged(
const QString &config)
00140 {
00141
if (config ==
currentConfig || !
allConfigs.contains(config))
00142
return;
00143
00144
if (!
currentConfig.isNull() &&
dirty)
00145
saveConfig(
currentConfig);
00146
00147
currentConfig = config;
00148
readConfig(config);
00149
dirty =
false;
00150
00151 config_combo->blockSignals(
true);
00152 config_combo->setEditText(config);
00153 config_combo->blockSignals(
false);
00154 }
00155
00156
00157 void AdaProjectOptionsDlg::configAdded()
00158 {
00159
QString config = config_combo->currentText();
00160
00161
allConfigs.append(config);
00162
00163 config_combo->clear();
00164 config_combo->insertStringList(
allConfigs);
00165
configChanged(config);
00166
setDirty();
00167 }
00168
00169
00170 void AdaProjectOptionsDlg::configRemoved()
00171 {
00172
QString config = config_combo->currentText();
00173
00174
QDomDocument dom = *
m_part->
projectDom();
00175
QDomNode node = dom.documentElement().namedItem(
"kdevadaproject").namedItem(
"configurations");
00176 node.removeChild(node.namedItem(config));
00177
allConfigs.remove(config);
00178
00179 config_combo->clear();
00180 config_combo->insertStringList(
allConfigs);
00181
00182
currentConfig = QString::null;
00183
configChanged(
"default");
00184 }
00185
00186 void AdaProjectOptionsDlg::optionsButtonClicked( )
00187 {
00188
QString name = ServiceComboBox::currentText(compiler_box,
service_names);
00189
KDevCompilerOptions *plugin =
m_part->
createCompilerOptions(name);
00190
00191
if (plugin) {
00192
QString flags = plugin->
exec(
this, options_edit->text());
00193 options_edit->setText(flags);
00194
delete plugin;
00195 }
00196 }
00197
00198 void AdaProjectOptionsDlg::setDirty( )
00199 {
00200
dirty =
true;
00201 }
00202
00203 void AdaProjectOptionsDlg::setDefaultOptions( )
00204 {
00205
if (!compiler_box->currentText().isEmpty())
00206 options_edit->setText(
m_part->
defaultOptions(compiler_box->currentText()));
00207 }
00208
00209
#include "adaprojectoptionsdlg.moc"