KDevelop API Documentation

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.1.2.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Wed Mar 23 00:03:47 2005 by doxygen 1.3.9.1 written by Dimitri van Heesch, © 1997-2003