/*************************************************************************** ** ** This file is part of Qt Creator ** ** Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies). ** ** Contact: Qt Software Information (qt-info@nokia.com) ** ** ** Non-Open Source Usage ** ** Licensees may use this file in accordance with the Qt Beta Version ** License Agreement, Agreement version 2.2 provided with the Software or, ** alternatively, in accordance with the terms contained in a written ** agreement between you and Nokia. ** ** GNU General Public License Usage ** ** Alternatively, this file may be used under the terms of the GNU General ** Public License versions 2.0 or 3.0 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the packaging ** of this file. Please review the following information to ensure GNU ** General Public Licensing requirements will be met: ** ** http://www.fsf.org/licensing/licenses/info/GPLv2.html and ** http://www.gnu.org/copyleft/gpl.html. ** ** In addition, as a special exception, Nokia gives you certain additional ** rights. These rights are described in the Nokia Qt GPL Exception ** version 1.3, included in the file GPL_EXCEPTION.txt in this package. ** ***************************************************************************/ #include "settingsdialog.h" #include "coreimpl.h" #include #include using namespace Core; using namespace Core::Internal; SettingsDialog::SettingsDialog(QWidget *parent, const QString &initialCategory, const QString &initialPage) : QDialog(parent) { setupUi(this); buttonBox->button(QDialogButtonBox::Ok)->setDefault(true); splitter->setCollapsible(1, false); pageTree->header()->setVisible(false); connect(pageTree, SIGNAL(currentItemChanged(QTreeWidgetItem *, QTreeWidgetItem *)), this, SLOT(pageSelected(QTreeWidgetItem *))); QMap categories; QList pages = CoreImpl::instance()->pluginManager()->getObjects(); int index = 0; foreach (IOptionsPage *page, pages) { QTreeWidgetItem *item = new QTreeWidgetItem; item->setText(0, page->name()); item->setData(0, Qt::UserRole, index); QStringList categoriesId = page->category().split(QLatin1Char('|')); QStringList trCategories = page->trCategory().split(QLatin1Char('|')); QString currentCategory = categoriesId.at(0); QTreeWidgetItem *treeitem; if (!categories.contains(currentCategory)) { treeitem = new QTreeWidgetItem(pageTree); treeitem->setText(0, trCategories.at(0)); treeitem->setData(0, Qt::UserRole, index); categories.insert(currentCategory, treeitem); } int catCount = 1; while (catCount < categoriesId.count()) { if (!categories.contains(currentCategory + QLatin1Char('|') + categoriesId.at(catCount))) { treeitem = new QTreeWidgetItem(categories.value(currentCategory)); currentCategory += QLatin1Char('|') + categoriesId.at(catCount); treeitem->setText(0, trCategories.at(catCount)); treeitem->setData(0, Qt::UserRole, index); categories.insert(currentCategory, treeitem); } else { currentCategory += QLatin1Char('|') + categoriesId.at(catCount); } ++catCount; } categories.value(currentCategory)->addChild(item); m_pages.append(page); stackedPages->addWidget(page->createPage(stackedPages)); if (page->name() == initialPage && currentCategory == initialCategory) { stackedPages->setCurrentIndex(stackedPages->count()); pageTree->setCurrentItem(item); } index++; } QList sizes; sizes << 150 << 300; splitter->setSizes(sizes); splitter->setStretchFactor(splitter->indexOf(pageTree), 0); splitter->setStretchFactor(splitter->indexOf(layoutWidget), 1); } SettingsDialog::~SettingsDialog() { } void SettingsDialog::pageSelected(QTreeWidgetItem *) { QTreeWidgetItem *item = pageTree->currentItem(); int index = item->data(0, Qt::UserRole).toInt(); stackedPages->setCurrentIndex(index); } void SettingsDialog::accept() { foreach (IOptionsPage *page, m_pages) page->finished(true); done(QDialog::Accepted); } void SettingsDialog::reject() { foreach (IOptionsPage *page, m_pages) page->finished(false); done(QDialog::Rejected); }