KDevelop API Documentation

languages/fortran/compiler/pgioptions/pgioptionsplugin.cpp

Go to the documentation of this file.
00001 /*************************************************************************** 00002 * Copyright (C) 2001 by Bernd Gehrmann * 00003 * bernd@kdevelop.org * 00004 * * 00005 * This program is free software; you can redistribute it and/or modify * 00006 * it under the terms of the GNU General Public License as published by * 00007 * the Free Software Foundation; either version 2 of the License, or * 00008 * (at your option) any later version. * 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 // vbox = addVBoxPage(i18n("General")); 00249 // general = new GeneralTab(vbox, "general tab"); 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 // Hand them to 'general' at last, so it can make a line edit 00273 // with the unprocessed items 00274 if (hpf) 00275 hpf->readFlags(&flaglist); 00276 optimization->readFlags(&flaglist); 00277 // general->readFlags(&flaglist); 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 // general->writeFlags(&flaglist); 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"
KDE Logo
This file is part of the documentation for KDevelop Version 3.0.4.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Wed Oct 6 17:39:02 2004 by doxygen 1.3.7 written by Dimitri van Heesch, © 1997-2003