/* * Cppcheck - A tool for static C/C++ code analysis * Copyright (C) 2007-2009 Daniel Marjamäki, Reijo Tomperi, Nicolas Le Cam, * Leandro Penz, Kimmo Varis, Vesa Pikki * * 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 3 of the License, or * (at your option) any later version. * * This program 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see #include #include #include "applicationdialog.h" SettingsDialog::SettingsDialog(QSettings &programSettings, ApplicationList &list) : mSettings(programSettings), mApplications(list) { //Create a layout for the settings dialog QVBoxLayout *dialoglayout = new QVBoxLayout(); //Create a tabwidget and add it to dialogs layout QTabWidget *tabs = new QTabWidget(); dialoglayout->addWidget(tabs); //Add ok and cancel buttons QPushButton *cancel = new QPushButton(tr("Cancel")); QPushButton *ok = new QPushButton(tr("Ok")); //Add a layout for ok/cancel buttons QHBoxLayout *buttonLayout = new QHBoxLayout(); buttonLayout->addWidget(ok); buttonLayout->addWidget(cancel); //Add button layout to the main dialog layout dialoglayout->addLayout(buttonLayout); //Connect OK buttons connect(ok, SIGNAL(clicked()), this, SLOT(accept())); connect(cancel, SIGNAL(clicked()), this, SLOT(reject())); //Begin adding tabs and tab content //General tab QWidget *general = new QWidget(); tabs->addTab(general, tr("General")); //layout for general tab QVBoxLayout *layout = new QVBoxLayout(); //Number of jobs QHBoxLayout *jobsLayout = new QHBoxLayout(); mJobs = new QLineEdit(programSettings.value(tr("Check threads"), 1).toString()); jobsLayout->addWidget(new QLabel(tr("Number of threads: "))); jobsLayout->addWidget(mJobs); mJobs->setValidator(new QIntValidator(this)); layout->addLayout(jobsLayout); //Force mForce = AddCheckbox(layout, tr("Force checking on files that have \"too many\" configurations"), tr("Check force"), false); general->setLayout(layout); //Add tab for setting user startable applications QWidget *applications = new QWidget(); tabs->addTab(applications, tr("Applications")); QVBoxLayout *appslayout = new QVBoxLayout(); mListWidget = new QListWidget(); appslayout->addWidget(mListWidget); applications->setLayout(appslayout); QPushButton *add = new QPushButton(tr("Add application")); appslayout->addWidget(add); connect(add, SIGNAL(clicked()), this, SLOT(AddApplication())); QPushButton *del = new QPushButton(tr("Delete application")); appslayout->addWidget(del); connect(del, SIGNAL(clicked()), this, SLOT(DeleteApplication())); QPushButton *modify = new QPushButton(tr("Modify application")); appslayout->addWidget(modify); connect(modify, SIGNAL(clicked()), this, SLOT(ModifyApplication())); connect(mListWidget, SIGNAL(itemDoubleClicked(QListWidgetItem *)), this, SLOT(ModifyApplication())); PopulateListWidget(); setLayout(dialoglayout); setWindowTitle(tr("Settings")); LoadSettings(); } SettingsDialog::~SettingsDialog() { SaveSettings(); } Qt::CheckState SettingsDialog::BoolToCheckState(bool yes) { if (yes) { return Qt::Checked; } return Qt::Unchecked; } bool SettingsDialog::CheckStateToBool(Qt::CheckState state) { if (state == Qt::Checked) { return true; } return false; } QCheckBox* SettingsDialog::AddCheckbox(QVBoxLayout *layout, const QString &label, const QString &settings, bool value) { QCheckBox *result = new QCheckBox(label); result->setCheckState(BoolToCheckState(mSettings.value(settings, value).toBool())); layout->addWidget(result); return result; } void SettingsDialog::LoadSettings() { resize(mSettings.value(tr("Check dialog width"), 800).toInt(), mSettings.value(tr("Check dialog height"), 600).toInt()); } void SettingsDialog::SaveSettings() { mSettings.setValue(tr("Check dialog width"), size().width()); mSettings.setValue(tr("Check dialog height"), size().height()); } void SettingsDialog::SaveCheckboxValues() { mSettings.setValue(tr("Check threads"), mJobs->text().toInt()); SaveCheckboxValue(mForce, tr("Check force")); } void SettingsDialog::SaveCheckboxValue(QCheckBox *box, const QString &name) { mSettings.setValue(name, CheckStateToBool(box->checkState())); } void SettingsDialog::AddApplication() { ApplicationDialog dialog("", "", tr("Add a new application")); if (dialog.exec() == QDialog::Accepted) { mApplications.AddApplicationType(dialog.GetName(), dialog.GetPath()); mListWidget->addItem(dialog.GetName()); } } void SettingsDialog::DeleteApplication() { QList selected = mListWidget->selectedItems(); QListWidgetItem *item = 0; foreach(item, selected) { qDebug() << item; mApplications.RemoveApplication(mListWidget->row(item)); mListWidget->clear(); PopulateListWidget(); } } void SettingsDialog::ModifyApplication() { QList selected = mListWidget->selectedItems(); QListWidgetItem *item = 0; foreach(item, selected) { int row = mListWidget->row(item); ApplicationDialog dialog(mApplications.GetApplicationName(row), mApplications.GetApplicationPath(row), tr("Modify an application")); if (dialog.exec() == QDialog::Accepted) { mApplications.SetApplicationType(row, dialog.GetName(), dialog.GetPath()); item->setText(dialog.GetName()); } } } void SettingsDialog::PopulateListWidget() { for (int i = 0;i < mApplications.GetApplicationCount();i++) { mListWidget->addItem(mApplications.GetApplicationName(i)); } }