/*************************************************************************** * 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 #include #include #include #include #include #include #include #include #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 TQWidget { public: GeneralTab( TQWidget *parent=0, const char *name=0 ); ~GeneralTab(); void readFlags(TQStringList *str); void writeFlags(TQStringList *str); }; class OptimizationTab : public TQWidget { public: OptimizationTab( PgiOptionsPlugin::Type type, TQWidget *parent=0, const char *name=0 ); ~OptimizationTab(); void readFlags(TQStringList *str); void writeFlags(TQStringList *str); private: TQRadioButton *Odefault, *O0, *O1, *O2; TQListView *optBox; }; class HpfTab : public TQWidget { public: HpfTab( TQWidget *parent=0, const char *name=0 ); ~HpfTab(); void readFlags(TQStringList *str); void writeFlags(TQStringList *str); private: TQListView *hpfBox; }; OptimizationTab::OptimizationTab(PgiOptionsPlugin::Type type, TQWidget *parent, const char *name) : TQWidget(parent, name) { TQBoxLayout *tqlayout = new TQVBoxLayout(this, KDialog::marginHint(), KDialog::spacingHint()); tqlayout->setAutoAdd(true); TQVButtonGroup *group = new TQVButtonGroup(i18n("Optimization Level"), this); Odefault = new TQRadioButton(i18n("Default"), group); Odefault->setChecked(true); O0 = new TQRadioButton(i18n("No optimization"), group); O1 = new TQRadioButton(i18n("Level 1"), group); O2 = new TQRadioButton(i18n("Level 2"), group); if (type == PgiOptionsPlugin::PGHPF) { optBox = new TQListView(this); optBox->addColumn(TQString()); optBox->header()->hide(); for (const char * const *p = optimization_flags; *p; ++p) { new TQCheckListItem(optBox, *p, TQCheckListItem::CheckBox); kdDebug() << (*p) << endl; } } else optBox = 0; TQApplication::sendPostedEvents(this, TQEvent::ChildInserted); tqlayout->addStretch(); } OptimizationTab::~OptimizationTab() {} void OptimizationTab::readFlags(TQStringList *list) { if (optBox) { TQListViewItem *item = optBox->firstChild(); for (; item; item = item->nextSibling()) { TQStringList::Iterator sli = list->find(item->text(0)); if (sli != list->end()) { static_cast(item)->setOn(true); list->remove(sli); } } } TQStringList::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(TQStringList *list) { if (optBox) { TQListViewItem *item = optBox->firstChild(); for (; item; item = item->nextSibling()) if (static_cast(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(TQWidget *parent, const char *name) : TQWidget(parent, name) { TQBoxLayout *tqlayout = new TQVBoxLayout(this, KDialog::marginHint(), KDialog::spacingHint()); tqlayout->setAutoAdd(true); hpfBox = new TQListView(this); hpfBox->addColumn(TQString()); hpfBox->header()->hide(); for (const char * const *p = hpf_flags; *p; ++p) new TQCheckListItem(hpfBox, *p, TQCheckListItem::CheckBox); TQApplication::sendPostedEvents(this, TQEvent::ChildInserted); tqlayout->addStretch(); } HpfTab::~HpfTab() {} void HpfTab::readFlags(TQStringList *list) { TQListViewItem *item = hpfBox->firstChild(); for (; item; item = item->nextSibling()) { TQStringList::Iterator sli = list->find(item->text(0)); if (sli != list->end()) { static_cast(item)->setOn(true); list->remove(sli); } } } void HpfTab::writeFlags(TQStringList *list) { TQListViewItem *item = hpfBox->firstChild(); for (; item; item = item->nextSibling()) { if (static_cast(item)->isOn()) (*list) << item->text(0); } } PgiOptionsDialog::PgiOptionsDialog(PgiOptionsPlugin::Type type, TQWidget *parent, const char *name) : KDialogBase(Tabbed, (type == PgiOptionsPlugin::PGHPF)? i18n("PGHPF Compiler Options") : i18n("PGF77 Compiler Options"), Ok|Cancel, Ok, parent, name, true) { TQVBox *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 TQString &flags) { TQStringList flaglist = TQStringList::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); } TQString PgiOptionsDialog::flags() const { TQStringList flaglist; if (hpf) hpf->writeFlags(&flaglist); optimization->writeFlags(&flaglist); // general->writeFlags(&flaglist); TQString flags; TQStringList::ConstIterator li; for (li = flaglist.begin(); li != flaglist.end(); ++li) { flags += (*li); flags += " "; } flags.truncate(flags.length()-1); return flags; } PgiOptionsPlugin::PgiOptionsPlugin(Type type, TQObject *parent, const char *name) : KDevCompilerOptions(parent, name) { pgitype = type; } PgiOptionsPlugin::~PgiOptionsPlugin() {} TQString PgiOptionsPlugin::exec(TQWidget *parent, const TQString &flags) { PgiOptionsDialog *dlg = new PgiOptionsDialog(pgitype, parent, "pgi options dialog"); TQString newFlags = flags; dlg->setFlags(flags); if (dlg->exec() == TQDialog::Accepted) newFlags = dlg->flags(); delete dlg; return newFlags; } #include "pgioptionsplugin.moc"