00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
#include "runoptionswidget.h"
00021
00022
#include <klocale.h>
00023
#include <kfiledialog.h>
00024
#include <kdirselectdialog.h>
00025
#include <urlutil.h>
00026
00027
#include <qlineedit.h>
00028
#include <qlistview.h>
00029
#include <qgroupbox.h>
00030
#include <qcheckbox.h>
00031
#include <qradiobutton.h>
00032
#include <qpushbutton.h>
00033
#include <qlabel.h>
00034
00035
#include "domutil.h"
00036
#include "environmentvariableswidget.h"
00037
00038
00039 RunOptionsWidget::RunOptionsWidget(
QDomDocument &dom,
const QString &configGroup,
00040
const QString &buildDirectory,
QWidget *parent,
const char *name)
00041 :
RunOptionsWidgetBase(parent, name),
00042 m_dom(dom), m_configGroup(configGroup)
00043 {
00044
00045 env_var_group->setColumnLayout( 1, Qt::Vertical );
00046
m_environmentVariablesWidget =
new EnvironmentVariablesWidget( dom, configGroup +
"/run/envvars", env_var_group );
00047
00048
00049
if (buildDirectory.right(1) ==
"/")
00050
m_buildDirectory = buildDirectory;
00051
else
00052
m_buildDirectory = buildDirectory +
"/";
00053
m_buildDirectory.
cleanPath();
00054
00055
00056 buildDirectory_label->
setText(
m_buildDirectory.
directory(
false,
false));
00057
00058
00059
00060
QString directoryRadioString = DomUtil::readEntry(dom, configGroup +
"/run/directoryradio");
00061
if ( directoryRadioString ==
"build" )
00062 buildDirectory_radio->setChecked(
true);
00063
else
00064
if ( directoryRadioString ==
"custom" )
00065 customDirectory_radio->setChecked(
true);
00066
else
00067 executableDirectory_radio->setChecked(
true);
00068
directoryRadioChanged();
00069
00070
00071
QString customRunDirectory = DomUtil::readEntry(dom, configGroup +
"/run/customdirectory");
00072
if (customRunDirectory.right(1) ==
"/")
00073
m_customRunDirectory = customRunDirectory;
00074
else
00075
m_customRunDirectory = customRunDirectory +
"/";
00076
m_customRunDirectory.
cleanPath();
00077 customRunDirectory_edit->setText(
m_customRunDirectory.
directory(
false,
false));
00078
00079
00080
QString mainProgramPath = DomUtil::readEntry(dom, configGroup +
"/run/mainprogram");
00081
if ( customDirectory_radio->isChecked() )
00082
m_mainProgramAbsolutePath = mainProgramPath;
00083
else
00084
m_mainProgramAbsolutePath =
m_buildDirectory.
directory(
false,
false) + mainProgramPath;
00085
m_mainProgramAbsolutePath.
cleanPath();
00086
if ( customDirectory_radio->isChecked() )
00087 mainprogram_edit->setText(
m_mainProgramAbsolutePath.
path());
00088
else
00089 mainprogram_edit->setText(URLUtil::relativePath(
m_buildDirectory.
directory(
false,
false),
m_mainProgramAbsolutePath.
path(),
false));
00090
00091
00092 progargs_edit->setText(DomUtil::readEntry(dom, configGroup +
"/run/programargs"));
00093
00094 startinterminal_box->setChecked(DomUtil::readBoolEntry(dom, configGroup +
"/run/terminal"));
00095 autocompile_box->setChecked(DomUtil::readBoolEntry(dom, configGroup +
"/run/autocompile",
true));
00096 }
00097
00098
00099 RunOptionsWidget::~RunOptionsWidget()
00100 {}
00101
00102
00103 void RunOptionsWidget::accept()
00104 {
00105
if ( buildDirectory_radio->isChecked() )
00106 DomUtil::writeEntry(
m_dom,
m_configGroup +
"/run/directoryradio",
"build");
00107
else
00108
if ( customDirectory_radio->isChecked() )
00109 DomUtil::writeEntry(
m_dom,
m_configGroup +
"/run/directoryradio",
"custom");
00110
else
00111 DomUtil::writeEntry(
m_dom,
m_configGroup +
"/run/directoryradio",
"executable");
00112
00113
QString customDir = customRunDirectory_edit->text();
00114
if (customDir.right(1) !=
"/")
00115 customDir +=
"/";
00116 DomUtil::writeEntry(
m_dom,
m_configGroup +
"/run/customdirectory", customDir);
00117 DomUtil::writeEntry(
m_dom,
m_configGroup +
"/run/mainprogram", mainprogram_edit->text());
00118 DomUtil::writeEntry(
m_dom,
m_configGroup +
"/run/programargs", progargs_edit->text());
00119 DomUtil::writeBoolEntry(
m_dom,
m_configGroup +
"/run/terminal", startinterminal_box->isChecked());
00120 DomUtil::writeBoolEntry(
m_dom,
m_configGroup +
"/run/autocompile", autocompile_box->isChecked());
00121
00122
m_environmentVariablesWidget->
accept();
00123 }
00124
00125
00126 void RunOptionsWidget::directoryRadioChanged()
00127 {
00128
if ( customDirectory_radio->isChecked() ) {
00129 customRunDirectory_edit->setEnabled(
true);
00130 browseCustomButton->setEnabled(
true);
00131 mainProgram_relativeness_label->setText(
"( absolute path )");
00132 mainprogram_edit->setText(
m_mainProgramAbsolutePath.
path() );
00133 }
else {
00134 customRunDirectory_edit->setEnabled(
false);
00135 browseCustomButton->setEnabled(
false);
00136 mainProgram_relativeness_label->setText(
"( relative to BUILD directory )");
00137 mainprogram_edit->setText( URLUtil::relativePath(
m_buildDirectory.
directory(
false,
false),
m_mainProgramAbsolutePath.
path(),
false) );
00138 }
00139 }
00140
00141
00142 void RunOptionsWidget::browseCustomDirectory()
00143 {
00144
QString path = customRunDirectory_edit->text().stripWhiteSpace();
00145
KDirSelectDialog *dlg =
new KDirSelectDialog(path,
false,
this, 0L,
true);
00146 dlg->
setCaption(i18n(
"Select Directory"));
00147
00148
if (dlg->exec()) {
00149
00150 path = dlg->
url().
path();
00151
if (path.right(1) !=
"/")
00152 path +=
"/";
00153
00154
00155
if (!path.isEmpty()) {
00156 customRunDirectory_edit->setText(path);
00157 }
00158 }
00159
delete dlg;
00160 }
00161
00162
00163 void RunOptionsWidget::browseMainProgram()
00164 {
00165
QString start_directory;
00166
if ( customDirectory_radio->isChecked() )
00167 start_directory = mainprogram_edit->text().stripWhiteSpace();
00168
else
00169 start_directory =
m_buildDirectory.
directory(
false,
false);
00170
00171
KFileDialog *dlg =
new KFileDialog(start_directory, QString::null,
this, 0,
true);
00172
QStringList filters;
00173 filters <<
"application/x-executable"
00174 <<
"application/x-shellscript"
00175 <<
"application/x-perl"
00176 <<
"application/x-python";
00177 dlg->
setMimeFilter(filters);
00178 dlg->
setCaption(i18n(
"Select Main Program Executable"));
00179
QString path = mainprogram_edit->text().stripWhiteSpace();
00180
if (!path.isEmpty()) {
00181
00182
if ((path.length() > 2) && (path.left(2) ==
"./"))
00183 path = path.mid(2);
00184
00185
00186
QString dir;
00187
int pos = path.findRev(
"/");
00188
if (path.left(1) !=
"/")
00189 dir =
m_buildDirectory.
directory(
false,
false) + path.left(pos);
00190
else
00191 dir = path.left(pos);
00192
00193
00194
KURL target = dir;
00195 target.
addPath(path.mid(pos + 1));
00196 target.
cleanPath();
00197
00198
00199 dlg->
setURL(target.
directory(
false,
false));
00200 dlg->
setSelection(target.
filename());
00201 }
00202
00203
if (dlg->exec()) {
00204
00205 path = dlg->
selectedFile().stripWhiteSpace();
00206
if (!path.isEmpty()) {
00207
00208
m_mainProgramAbsolutePath = path;
00209
00210
if ( customDirectory_radio->isChecked() ) {
00211
00212
00213 mainprogram_edit->setText(path);
00214
00215 }
else {
00216
00217
00218
QString relative =
URLUtil::relativePath(
m_buildDirectory.
directory(
false,
false), path,
false);
00219
00220
if (relative.isEmpty() ==
false) {
00221 mainprogram_edit->setText(relative);
00222 }
00223 }
00224
00225 }
00226 }
00227
delete dlg;
00228 }
00229
00230
#include "runoptionswidget.moc"