You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdevelop/languages/fortran/compiler/pgioptions/pgioptionsplugin.cpp

325 lines
7.9 KiB

/***************************************************************************
* Copyright (C) 2001 by Bernd Gehrmann *
* bernd@kdevelop.org *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#include <qapplication.h>
#include <qheader.h>
#include <qlayout.h>
#include <qlistview.h>
#include <qradiobutton.h>
#include <qvbox.h>
#include <qvbuttongroup.h>
#include <kdebug.h>
#include <klocale.h>
#include "pgioptionsplugin.h"
const char * const optimization_flags[] = {
"-Mautopar",
"-Mextract",
"-Minline",
"-Mipa",
0
};
const char * const hpf_flags[] = {
"-Mbackslash",
"-Mcmf",
"-Mdclchk",
"-Mextend",
"-Mf90",
"-Mnofree",
"-Mstandard",
"-Mupcase",
"-Mbyteswapio",
"-Mdepchk",
"-Mdlines",
"-Mg",
"-Mftn",
"-Minfo",
"-Minform",
"-Mkeepft",
"-Mkeepstaticn",
"-Mmpi",
"-Mmpl",
"-Mlist",
"-Mnohpfc",
"-Mnoindependent",
"-Mnoprelink",
"-Moverlap",
"-Mpreprocess",
"-Mprof",
"-Mpvm",
"-Mr8",
"-Mrecursive",
"-Mreplicate",
"-Mrpm",
"-Mrpm1",
"-M[no]sequence",
"-Msmp",
"-Mstats",
0
};
class GeneralTab : public QWidget
{
public:
GeneralTab( QWidget *parent=0, const char *name=0 );
~GeneralTab();
void readFlags(QStringList *str);
void writeFlags(QStringList *str);
};
class OptimizationTab : public QWidget
{
public:
OptimizationTab( PgiOptionsPlugin::Type type, QWidget *parent=0, const char *name=0 );
~OptimizationTab();
void readFlags(QStringList *str);
void writeFlags(QStringList *str);
private:
QRadioButton *Odefault, *O0, *O1, *O2;
QListView *optBox;
};
class HpfTab : public QWidget
{
public:
HpfTab( QWidget *parent=0, const char *name=0 );
~HpfTab();
void readFlags(QStringList *str);
void writeFlags(QStringList *str);
private:
QListView *hpfBox;
};
OptimizationTab::OptimizationTab(PgiOptionsPlugin::Type type, QWidget *parent, const char *name)
: QWidget(parent, name)
{
QBoxLayout *layout = new QVBoxLayout(this, KDialog::marginHint(), KDialog::spacingHint());
layout->setAutoAdd(true);
QVButtonGroup *group = new QVButtonGroup(i18n("Optimization Level"), this);
Odefault = new QRadioButton(i18n("Default"), group);
Odefault->setChecked(true);
O0 = new QRadioButton(i18n("No optimization"), group);
O1 = new QRadioButton(i18n("Level 1"), group);
O2 = new QRadioButton(i18n("Level 2"), group);
if (type == PgiOptionsPlugin::PGHPF) {
optBox = new QListView(this);
optBox->addColumn(QString::null);
optBox->header()->hide();
for (const char * const *p = optimization_flags; *p; ++p) {
new QCheckListItem(optBox, *p, QCheckListItem::CheckBox);
kdDebug() << (*p) << endl;
}
} else
optBox = 0;
QApplication::sendPostedEvents(this, QEvent::ChildInserted);
layout->addStretch();
}
OptimizationTab::~OptimizationTab()
{}
void OptimizationTab::readFlags(QStringList *list)
{
if (optBox) {
QListViewItem *item = optBox->firstChild();
for (; item; item = item->nextSibling()) {
QStringList::Iterator sli = list->find(item->text(0));
if (sli != list->end()) {
static_cast<QCheckListItem*>(item)->setOn(true);
list->remove(sli);
}
}
}
QStringList::Iterator sli;
sli = list->find("-O0");
if (sli != list->end()) {
O0->setChecked(true);
list->remove(sli);
}
sli = list->find("-O1");
if (sli != list->end()) {
O1->setChecked(true);
list->remove(sli);
}
sli = list->find("-O2");
if (sli != list->end()) {
O2->setChecked(true);
list->remove(sli);
}
}
void OptimizationTab::writeFlags(QStringList *list)
{
if (optBox) {
QListViewItem *item = optBox->firstChild();
for (; item; item = item->nextSibling())
if (static_cast<QCheckListItem*>(item)->isOn())
(*list) << item->text(0);
}
if (O0->isChecked())
(*list) << "-O0";
else if (O1->isChecked())
(*list) << "-O1";
else if (O2->isChecked())
(*list) << "-O2";
}
HpfTab::HpfTab(QWidget *parent, const char *name)
: QWidget(parent, name)
{
QBoxLayout *layout = new QVBoxLayout(this, KDialog::marginHint(), KDialog::spacingHint());
layout->setAutoAdd(true);
hpfBox = new QListView(this);
hpfBox->addColumn(QString::null);
hpfBox->header()->hide();
for (const char * const *p = hpf_flags; *p; ++p)
new QCheckListItem(hpfBox, *p, QCheckListItem::CheckBox);
QApplication::sendPostedEvents(this, QEvent::ChildInserted);
layout->addStretch();
}
HpfTab::~HpfTab()
{}
void HpfTab::readFlags(QStringList *list)
{
QListViewItem *item = hpfBox->firstChild();
for (; item; item = item->nextSibling()) {
QStringList::Iterator sli = list->find(item->text(0));
if (sli != list->end()) {
static_cast<QCheckListItem*>(item)->setOn(true);
list->remove(sli);
}
}
}
void HpfTab::writeFlags(QStringList *list)
{
QListViewItem *item = hpfBox->firstChild();
for (; item; item = item->nextSibling()) {
if (static_cast<QCheckListItem*>(item)->isOn())
(*list) << item->text(0);
}
}
PgiOptionsDialog::PgiOptionsDialog(PgiOptionsPlugin::Type type, QWidget *parent, const char *name)
: KDialogBase(Tabbed, (type == PgiOptionsPlugin::PGHPF)? i18n("PGHPF Compiler Options") : i18n("PGF77 Compiler Options"),
Ok|Cancel, Ok, parent, name, true)
{
QVBox *vbox;
// vbox = addVBoxPage(i18n("General"));
// general = new GeneralTab(vbox, "general tab");
vbox = addVBoxPage(i18n("Optimization"));
optimization = new OptimizationTab(type, vbox, "optimization tab");
if (type == PgiOptionsPlugin::PGHPF) {
vbox = addVBoxPage(i18n("HPF"));
hpf = new HpfTab(vbox, "optimization tab");
} else
hpf = 0;
}
PgiOptionsDialog::~PgiOptionsDialog()
{
}
void PgiOptionsDialog::setFlags(const QString &flags)
{
QStringList flaglist = QStringList::split(" ", flags);
// Hand them to 'general' at last, so it can make a line edit
// with the unprocessed items
if (hpf)
hpf->readFlags(&flaglist);
optimization->readFlags(&flaglist);
// general->readFlags(&flaglist);
}
QString PgiOptionsDialog::flags() const
{
QStringList flaglist;
if (hpf)
hpf->writeFlags(&flaglist);
optimization->writeFlags(&flaglist);
// general->writeFlags(&flaglist);
QString flags;
QStringList::ConstIterator li;
for (li = flaglist.begin(); li != flaglist.end(); ++li) {
flags += (*li);
flags += " ";
}
flags.truncate(flags.length()-1);
return flags;
}
PgiOptionsPlugin::PgiOptionsPlugin(Type type, QObject *parent, const char *name)
: KDevCompilerOptions(parent, name)
{
pgitype = type;
}
PgiOptionsPlugin::~PgiOptionsPlugin()
{}
QString PgiOptionsPlugin::exec(QWidget *parent, const QString &flags)
{
PgiOptionsDialog *dlg = new PgiOptionsDialog(pgitype, parent, "pgi options dialog");
QString newFlags = flags;
dlg->setFlags(flags);
if (dlg->exec() == QDialog::Accepted)
newFlags = dlg->flags();
delete dlg;
return newFlags;
}
#include "pgioptionsplugin.moc"