/* This file is part of KDevelop Copyright 2012 Miha Čančula This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include "templateoptionspage.h" #include "templateclassassistant.h" #include #include #include #include #include #include #include #include #include #include #include using namespace KDevelop; class KDevelop::TemplateOptionsPagePrivate { public: QList entries; QHash controls; QHash typeProperties; }; TemplateOptionsPage::TemplateOptionsPage(QWidget* parent, Qt::WindowFlags f) : QWidget(parent, f) , d(new TemplateOptionsPagePrivate) { d->typeProperties.insert("String", "text"); d->typeProperties.insert("Int", "value"); d->typeProperties.insert("Bool", "checked"); } TemplateOptionsPage::~TemplateOptionsPage() { delete d; } void TemplateOptionsPage::load(const SourceFileTemplate& fileTemplate, TemplateRenderer* renderer) { d->entries.clear(); QLayout* layout = new QVBoxLayout(); QHash > options = fileTemplate.customOptions(renderer); QHash >::const_iterator it; for (it = options.constBegin(); it != options.constEnd(); ++it) { QGroupBox* box = new QGroupBox(this); box->setTitle(it.key()); QFormLayout* formLayout = new QFormLayout; d->entries << it.value(); foreach (const SourceFileTemplate::ConfigOption& entry, it.value()) { QLabel* label = new QLabel(entry.label, box); QWidget* control = 0; const QString type = entry.type; if (type == "String") { control = new KLineEdit(entry.value.toString(), box); } else if (type == "Int") { KIntNumInput* input = new KIntNumInput(entry.value.toInt(), box); if (!entry.minValue.isEmpty()) { input->setMinimum(entry.minValue.toInt()); } if (!entry.maxValue.isEmpty()) { input->setMaximum(entry.maxValue.toInt()); } control = input; } else if (type == "Bool") { bool checked = (QString::compare(entry.value.toString(), "true", Qt::CaseInsensitive) == 0); QCheckBox* checkBox = new QCheckBox(entry.label, box); checkBox->setCheckState(checked ? Qt::Checked : Qt::Unchecked); } else { kDebug() << "Unrecognized option type" << entry.type; } if (control) { formLayout->addRow(label, control); d->controls.insert(entry.name, control); } } box->setLayout(formLayout); layout->addWidget(box); } setLayout(layout); } QVariantHash TemplateOptionsPage::templateOptions() const { QVariantHash values; foreach (const SourceFileTemplate::ConfigOption& entry, d->entries) { Q_ASSERT(d->controls.contains(entry.name)); Q_ASSERT(d->typeProperties.contains(entry.type)); values.insert(entry.name, d->controls[entry.name]->property(d->typeProperties[entry.type])); } kDebug() << values.size() << d->entries.size(); return values; }