1
/***************************************************************************
2
* Copyright (C) 2001 by Bernd Gehrmann *
5
* This program is free software; you can redistribute it and/or modify *
6
* it under the terms of the GNU General Public License as published by *
7
* the Free Software Foundation; either version 2 of the License, or *
8
* (at your option) any later version. *
10
***************************************************************************/
12
#include <qapplication.h>
15
#include <qlistview.h>
16
#include <qradiobutton.h>
18
#include <qvbuttongroup.h>
22
#include "pgioptionsplugin.h"
25
const char * const optimization_flags[] = {
34
const char * const hpf_flags[] = {
75
class GeneralTab : public QWidget
78
GeneralTab( QWidget *parent=0, const char *name=0 );
81
void readFlags(QStringList *str);
82
void writeFlags(QStringList *str);
86
class OptimizationTab : public QWidget
89
OptimizationTab( PgiOptionsPlugin::Type type, QWidget *parent=0, const char *name=0 );
92
void readFlags(QStringList *str);
93
void writeFlags(QStringList *str);
96
QRadioButton *Odefault, *O0, *O1, *O2;
101
class HpfTab : public QWidget
104
HpfTab( QWidget *parent=0, const char *name=0 );
107
void readFlags(QStringList *str);
108
void writeFlags(QStringList *str);
115
OptimizationTab::OptimizationTab(PgiOptionsPlugin::Type type, QWidget *parent, const char *name)
116
: QWidget(parent, name)
118
QBoxLayout *layout = new QVBoxLayout(this, KDialog::marginHint(), KDialog::spacingHint());
119
layout->setAutoAdd(true);
121
QVButtonGroup *group = new QVButtonGroup(i18n("Optimization Level"), this);
122
Odefault = new QRadioButton(i18n("Default"), group);
123
Odefault->setChecked(true);
124
O0 = new QRadioButton(i18n("No optimization"), group);
125
O1 = new QRadioButton(i18n("Level 1"), group);
126
O2 = new QRadioButton(i18n("Level 2"), group);
128
if (type == PgiOptionsPlugin::PGHPF) {
129
optBox = new QListView(this);
130
optBox->addColumn(QString::null);
131
optBox->header()->hide();
132
for (const char * const *p = optimization_flags; *p; ++p) {
133
new QCheckListItem(optBox, *p, QCheckListItem::CheckBox);
134
kdDebug() << (*p) << endl;
139
QApplication::sendPostedEvents(this, QEvent::ChildInserted);
140
layout->addStretch();
144
OptimizationTab::~OptimizationTab()
148
void OptimizationTab::readFlags(QStringList *list)
151
QListViewItem *item = optBox->firstChild();
152
for (; item; item = item->nextSibling()) {
153
QStringList::Iterator sli = list->find(item->text(0));
154
if (sli != list->end()) {
155
static_cast<QCheckListItem*>(item)->setOn(true);
161
QStringList::Iterator sli;
162
sli = list->find("-O0");
163
if (sli != list->end()) {
164
O0->setChecked(true);
167
sli = list->find("-O1");
168
if (sli != list->end()) {
169
O1->setChecked(true);
172
sli = list->find("-O2");
173
if (sli != list->end()) {
174
O2->setChecked(true);
180
void OptimizationTab::writeFlags(QStringList *list)
183
QListViewItem *item = optBox->firstChild();
184
for (; item; item = item->nextSibling())
185
if (static_cast<QCheckListItem*>(item)->isOn())
186
(*list) << item->text(0);
191
else if (O1->isChecked())
193
else if (O2->isChecked())
198
HpfTab::HpfTab(QWidget *parent, const char *name)
199
: QWidget(parent, name)
201
QBoxLayout *layout = new QVBoxLayout(this, KDialog::marginHint(), KDialog::spacingHint());
202
layout->setAutoAdd(true);
204
hpfBox = new QListView(this);
205
hpfBox->addColumn(QString::null);
206
hpfBox->header()->hide();
207
for (const char * const *p = hpf_flags; *p; ++p)
208
new QCheckListItem(hpfBox, *p, QCheckListItem::CheckBox);
210
QApplication::sendPostedEvents(this, QEvent::ChildInserted);
211
layout->addStretch();
219
void HpfTab::readFlags(QStringList *list)
221
QListViewItem *item = hpfBox->firstChild();
222
for (; item; item = item->nextSibling()) {
223
QStringList::Iterator sli = list->find(item->text(0));
224
if (sli != list->end()) {
225
static_cast<QCheckListItem*>(item)->setOn(true);
232
void HpfTab::writeFlags(QStringList *list)
234
QListViewItem *item = hpfBox->firstChild();
235
for (; item; item = item->nextSibling()) {
236
if (static_cast<QCheckListItem*>(item)->isOn())
237
(*list) << item->text(0);
242
PgiOptionsDialog::PgiOptionsDialog(PgiOptionsPlugin::Type type, QWidget *parent, const char *name)
243
: KDialogBase(Tabbed, (type == PgiOptionsPlugin::PGHPF)? i18n("PGHPF Compiler Options") : i18n("PGF77 Compiler Options"),
244
Ok|Cancel, Ok, parent, name, true)
248
// vbox = addVBoxPage(i18n("General"));
249
// general = new GeneralTab(vbox, "general tab");
251
vbox = addVBoxPage(i18n("Optimization"));
252
optimization = new OptimizationTab(type, vbox, "optimization tab");
254
if (type == PgiOptionsPlugin::PGHPF) {
255
vbox = addVBoxPage(i18n("HPF"));
256
hpf = new HpfTab(vbox, "optimization tab");
263
PgiOptionsDialog::~PgiOptionsDialog()
268
void PgiOptionsDialog::setFlags(const QString &flags)
270
QStringList flaglist = QStringList::split(" ", flags);
272
// Hand them to 'general' at last, so it can make a line edit
273
// with the unprocessed items
275
hpf->readFlags(&flaglist);
276
optimization->readFlags(&flaglist);
277
// general->readFlags(&flaglist);
281
QString PgiOptionsDialog::flags() const
283
QStringList flaglist;
286
hpf->writeFlags(&flaglist);
287
optimization->writeFlags(&flaglist);
288
// general->writeFlags(&flaglist);
291
QStringList::ConstIterator li;
292
for (li = flaglist.begin(); li != flaglist.end(); ++li) {
297
flags.truncate(flags.length()-1);
302
PgiOptionsPlugin::PgiOptionsPlugin(Type type, QObject *parent, const char *name)
303
: KDevCompilerOptions(parent, name)
309
PgiOptionsPlugin::~PgiOptionsPlugin()
313
QString PgiOptionsPlugin::exec(QWidget *parent, const QString &flags)
315
PgiOptionsDialog *dlg = new PgiOptionsDialog(pgitype, parent, "pgi options dialog");
316
QString newFlags = flags;
317
dlg->setFlags(flags);
318
if (dlg->exec() == QDialog::Accepted)
319
newFlags = dlg->flags();
324
#include "pgioptionsplugin.moc"