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"