00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
#include <qapplication.h>
00013
#include <qheader.h>
00014
#include <qlayout.h>
00015
#include <qlistview.h>
00016
#include <qradiobutton.h>
00017
#include <qvbox.h>
00018
#include <qvbuttongroup.h>
00019
#include <kdebug.h>
00020
#include <klocale.h>
00021
00022
#include "pgioptionsplugin.h"
00023
00024
00025 const char *
const optimization_flags[] = {
00026
"-Mautopar",
00027
"-Mextract",
00028
"-Minline",
00029
"-Mipa",
00030 0
00031 };
00032
00033
00034 const char *
const hpf_flags[] = {
00035
"-Mbackslash",
00036
"-Mcmf",
00037
"-Mdclchk",
00038
"-Mextend",
00039
"-Mf90",
00040
"-Mnofree",
00041
"-Mstandard",
00042
"-Mupcase",
00043
"-Mbyteswapio",
00044
"-Mdepchk",
00045
"-Mdlines",
00046
"-Mg",
00047
"-Mftn",
00048
"-Minfo",
00049
"-Minform",
00050
"-Mkeepft",
00051
"-Mkeepstaticn",
00052
"-Mmpi",
00053
"-Mmpl",
00054
"-Mlist",
00055
"-Mnohpfc",
00056
"-Mnoindependent",
00057
"-Mnoprelink",
00058
"-Moverlap",
00059
"-Mpreprocess",
00060
"-Mprof",
00061
"-Mpvm",
00062
"-Mr8",
00063
"-Mrecursive",
00064
"-Mreplicate",
00065
"-Mrpm",
00066
"-Mrpm1",
00067
"-M[no]sequence",
00068
"-Msmp",
00069
"-Mstats",
00070 0
00071 };
00072
00073
00074
00075 class GeneralTab :
public QWidget
00076 {
00077
public:
00078
GeneralTab(
QWidget *parent=0,
const char *name=0 );
00079
~GeneralTab();
00080
00081
void readFlags(
QStringList *str);
00082
void writeFlags(
QStringList *str);
00083 };
00084
00085
00086
class OptimizationTab :
public QWidget
00087 {
00088
public:
00089
OptimizationTab( PgiOptionsPlugin::Type type,
QWidget *parent=0,
const char *name=0 );
00090
~OptimizationTab();
00091
00092
void readFlags(
QStringList *str);
00093
void writeFlags(
QStringList *str);
00094
00095
private:
00096 QRadioButton *
Odefault, *
O0, *
O1, *
O2;
00097 QListView *
optBox;
00098 };
00099
00100
00101 class HpfTab :
public QWidget
00102 {
00103
public:
00104
HpfTab(
QWidget *parent=0,
const char *name=0 );
00105
~HpfTab();
00106
00107
void readFlags(
QStringList *str);
00108
void writeFlags(
QStringList *str);
00109
00110
private:
00111 QListView *
hpfBox;
00112 };
00113
00114
00115 OptimizationTab::OptimizationTab(PgiOptionsPlugin::Type type,
QWidget *parent,
const char *name)
00116 :
QWidget(parent, name)
00117 {
00118
QBoxLayout *layout =
new QVBoxLayout(
this, KDialog::marginHint(), KDialog::spacingHint());
00119 layout->setAutoAdd(
true);
00120
00121
QVButtonGroup *group =
new QVButtonGroup(i18n(
"Optimization Level"),
this);
00122
Odefault =
new QRadioButton(i18n(
"Default"), group);
00123
Odefault->setChecked(
true);
00124
O0 =
new QRadioButton(i18n(
"No optimization"), group);
00125
O1 =
new QRadioButton(i18n(
"Level 1"), group);
00126
O2 =
new QRadioButton(i18n(
"Level 2"), group);
00127
00128
if (type == PgiOptionsPlugin::PGHPF) {
00129
optBox =
new QListView(
this);
00130
optBox->addColumn(QString::null);
00131
optBox->header()->hide();
00132
for (
const char *
const *p =
optimization_flags; *p; ++p) {
00133
new QCheckListItem(
optBox, *p, QCheckListItem::CheckBox);
00134
kdDebug() << (*p) <<
endl;
00135 }
00136 }
else
00137
optBox = 0;
00138
00139 QApplication::sendPostedEvents(
this, QEvent::ChildInserted);
00140 layout->addStretch();
00141 }
00142
00143
00144
OptimizationTab::~OptimizationTab()
00145 {}
00146
00147
00148
void OptimizationTab::readFlags(
QStringList *list)
00149 {
00150
if (
optBox) {
00151
QListViewItem *item =
optBox->firstChild();
00152
for (; item; item = item->nextSibling()) {
00153 QStringList::Iterator sli = list->find(item->text(0));
00154
if (sli != list->end()) {
00155 static_cast<QCheckListItem*>(item)->setOn(
true);
00156 list->remove(sli);
00157 }
00158 }
00159 }
00160
00161 QStringList::Iterator sli;
00162 sli = list->find(
"-O0");
00163
if (sli != list->end()) {
00164
O0->setChecked(
true);
00165 list->remove(sli);
00166 }
00167 sli = list->find(
"-O1");
00168
if (sli != list->end()) {
00169
O1->setChecked(
true);
00170 list->remove(sli);
00171 }
00172 sli = list->find(
"-O2");
00173
if (sli != list->end()) {
00174
O2->setChecked(
true);
00175 list->remove(sli);
00176 }
00177 }
00178
00179
00180
void OptimizationTab::writeFlags(
QStringList *list)
00181 {
00182
if (
optBox) {
00183
QListViewItem *item =
optBox->firstChild();
00184
for (; item; item = item->nextSibling())
00185
if (static_cast<QCheckListItem*>(item)->isOn())
00186 (*list) << item->text(0);
00187 }
00188
00189
if (
O0->isChecked())
00190 (*list) <<
"-O0";
00191
else if (
O1->isChecked())
00192 (*list) <<
"-O1";
00193
else if (
O2->isChecked())
00194 (*list) <<
"-O2";
00195 }
00196
00197
00198 HpfTab::HpfTab(
QWidget *parent,
const char *name)
00199 :
QWidget(parent, name)
00200 {
00201
QBoxLayout *layout =
new QVBoxLayout(
this, KDialog::marginHint(), KDialog::spacingHint());
00202 layout->setAutoAdd(
true);
00203
00204
hpfBox =
new QListView(
this);
00205
hpfBox->addColumn(QString::null);
00206
hpfBox->header()->hide();
00207
for (
const char *
const *p =
hpf_flags; *p; ++p)
00208
new QCheckListItem(
hpfBox, *p, QCheckListItem::CheckBox);
00209
00210 QApplication::sendPostedEvents(
this, QEvent::ChildInserted);
00211 layout->addStretch();
00212 }
00213
00214
00215 HpfTab::~HpfTab()
00216 {}
00217
00218
00219 void HpfTab::readFlags(
QStringList *list)
00220 {
00221
QListViewItem *item =
hpfBox->firstChild();
00222
for (; item; item = item->nextSibling()) {
00223 QStringList::Iterator sli = list->find(item->text(0));
00224
if (sli != list->end()) {
00225 static_cast<QCheckListItem*>(item)->setOn(
true);
00226 list->remove(sli);
00227 }
00228 }
00229 }
00230
00231
00232 void HpfTab::writeFlags(
QStringList *list)
00233 {
00234
QListViewItem *item =
hpfBox->firstChild();
00235
for (; item; item = item->nextSibling()) {
00236
if (static_cast<QCheckListItem*>(item)->isOn())
00237 (*list) << item->text(0);
00238 }
00239 }
00240
00241
00242 PgiOptionsDialog::PgiOptionsDialog(PgiOptionsPlugin::Type type,
QWidget *parent,
const char *name)
00243 :
KDialogBase(Tabbed, (type ==
PgiOptionsPlugin::PGHPF)? i18n("PGHPF Compiler Options") : i18n("PGF77 Compiler Options"),
00244 Ok|Cancel, Ok, parent, name, true)
00245 {
00246
QVBox *vbox;
00247
00248
00249
00250
00251 vbox = addVBoxPage(i18n(
"Optimization"));
00252
optimization =
new OptimizationTab(type, vbox,
"optimization tab");
00253
00254
if (type == PgiOptionsPlugin::PGHPF) {
00255 vbox = addVBoxPage(i18n(
"HPF"));
00256
hpf =
new HpfTab(vbox,
"optimization tab");
00257 }
else
00258
hpf = 0;
00259
00260 }
00261
00262
00263 PgiOptionsDialog::~PgiOptionsDialog()
00264 {
00265 }
00266
00267
00268 void PgiOptionsDialog::setFlags(
const QString &flags)
00269 {
00270
QStringList flaglist = QStringList::split(
" ", flags);
00271
00272
00273
00274
if (
hpf)
00275
hpf->
readFlags(&flaglist);
00276
optimization->
readFlags(&flaglist);
00277
00278 }
00279
00280
00281 QString PgiOptionsDialog::flags()
const
00282
{
00283
QStringList flaglist;
00284
00285
if (
hpf)
00286
hpf->
writeFlags(&flaglist);
00287
optimization->
writeFlags(&flaglist);
00288
00289
00290
QString flags;
00291 QStringList::ConstIterator li;
00292
for (li = flaglist.begin(); li != flaglist.end(); ++li) {
00293 flags += (*li);
00294 flags +=
" ";
00295 }
00296
00297 flags.truncate(flags.length()-1);
00298
return flags;
00299 }
00300
00301
00302 PgiOptionsPlugin::PgiOptionsPlugin(Type type,
QObject *parent,
const char *name)
00303 :
KDevCompilerOptions(parent, name)
00304 {
00305
pgitype = type;
00306 }
00307
00308
00309 PgiOptionsPlugin::~PgiOptionsPlugin()
00310 {}
00311
00312
00313 QString PgiOptionsPlugin::exec(
QWidget *parent,
const QString &flags)
00314 {
00315
PgiOptionsDialog *dlg =
new PgiOptionsDialog(
pgitype, parent,
"pgi options dialog");
00316
QString newFlags = flags;
00317 dlg->
setFlags(flags);
00318
if (dlg->exec() == QDialog::Accepted)
00319 newFlags = dlg->
flags();
00320
delete dlg;
00321
return newFlags;
00322 }
00323
00324
#include "pgioptionsplugin.moc"