Chris@175: /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ Chris@175: Chris@175: /* Chris@175: EasyMercurial Chris@175: Chris@175: Based on HgExplorer by Jari Korhonen Chris@175: Copyright (c) 2010 Jari Korhonen Chris@175: Copyright (c) 2010 Chris Cannam Chris@175: Copyright (c) 2010 Queen Mary, University of London Chris@175: Chris@175: This program is free software; you can redistribute it and/or Chris@175: modify it under the terms of the GNU General Public License as Chris@175: published by the Free Software Foundation; either version 2 of the Chris@175: License, or (at your option) any later version. See the file Chris@175: COPYING included with this distribution for more information. Chris@175: */ Chris@175: Chris@175: #include "settingsdialog.h" Chris@175: #include "common.h" Chris@177: #include "debug.h" Chris@175: Chris@175: #include Chris@175: #include Chris@175: #include Chris@175: #include Chris@181: #include Chris@181: #include Chris@175: Chris@175: SettingsDialog::SettingsDialog(QWidget *parent) : Chris@175: QDialog(parent) Chris@175: { Chris@175: setModal(true); Chris@175: setWindowTitle(tr("Settings")); Chris@175: Chris@175: QSettings settings; Chris@175: Chris@175: QGridLayout *mainLayout = new QGridLayout; Chris@175: setLayout(mainLayout); Chris@175: Chris@181: QGroupBox *meBox = new QGroupBox(tr("User details")); Chris@175: mainLayout->addWidget(meBox, 0, 0); Chris@175: QGridLayout *meLayout = new QGridLayout; Chris@175: meBox->setLayout(meLayout); Chris@175: Chris@175: settings.beginGroup("User Information"); Chris@175: Chris@175: int row = 0; Chris@175: Chris@175: meLayout->addWidget(new QLabel(tr("Name:")), row, 0); Chris@175: Chris@175: m_nameEdit = new QLineEdit(); Chris@175: m_nameEdit->setText(settings.value("name", getUserRealName()).toString()); Chris@175: meLayout->addWidget(m_nameEdit, row++, 1); Chris@175: Chris@175: meLayout->addWidget(new QLabel(tr("Email address:")), row, 0); Chris@175: Chris@175: m_emailEdit = new QLineEdit(); Chris@175: m_emailEdit->setText(settings.value("email").toString()); Chris@175: meLayout->addWidget(m_emailEdit, row++, 1); Chris@175: Chris@175: settings.endGroup(); Chris@175: Chris@175: QGroupBox *pathsBox = new QGroupBox(tr("System application locations")); Chris@175: mainLayout->addWidget(pathsBox, 1, 0); Chris@175: QGridLayout *pathsLayout = new QGridLayout; Chris@175: pathsBox->setLayout(pathsLayout); Chris@175: Chris@175: settings.beginGroup("Locations"); Chris@175: Chris@175: row = 0; Chris@175: Chris@175: pathsLayout->addWidget(new QLabel(tr("Mercurial (hg) program:")), row, 0); Chris@175: Chris@181: m_hgPathLabel = new QLabel(); Chris@181: m_hgPathLabel->setText(settings.value("hgbinary").toString()); Chris@181: pathsLayout->addWidget(m_hgPathLabel, row, 2); Chris@175: Chris@175: QPushButton *browse = new QPushButton(tr("Browse...")); Chris@181: pathsLayout->addWidget(browse, row++, 1); Chris@175: connect(browse, SIGNAL(clicked()), this, SLOT(hgPathBrowse())); Chris@175: Chris@175: pathsLayout->addWidget(new QLabel(tr("External diff program:")), row, 0); Chris@175: Chris@181: m_diffPathLabel = new QLabel(); Chris@181: m_diffPathLabel->setText(settings.value("extdiffbinary").toString()); Chris@181: pathsLayout->addWidget(m_diffPathLabel, row, 2); Chris@175: Chris@175: browse = new QPushButton(tr("Browse...")); Chris@181: pathsLayout->addWidget(browse, row++, 1); Chris@175: connect(browse, SIGNAL(clicked()), this, SLOT(diffPathBrowse())); Chris@178: Chris@175: pathsLayout->addWidget(new QLabel(tr("External file-merge program:")), row, 0); Chris@175: Chris@181: m_mergePathLabel = new QLabel(); Chris@181: m_mergePathLabel->setText(settings.value("mergebinary").toString()); Chris@181: pathsLayout->addWidget(m_mergePathLabel, row, 2); Chris@175: Chris@175: browse = new QPushButton(tr("Browse...")); Chris@181: pathsLayout->addWidget(browse, row++, 1); Chris@175: connect(browse, SIGNAL(clicked()), this, SLOT(mergePathBrowse())); Chris@175: Chris@178: pathsLayout->addWidget(new QLabel(tr("External text editor:")), row, 0); Chris@178: Chris@181: m_editPathLabel = new QLabel(); Chris@181: m_editPathLabel->setText(settings.value("editorbinary").toString()); Chris@181: pathsLayout->addWidget(m_editPathLabel, row, 2); Chris@178: Chris@178: browse = new QPushButton(tr("Browse...")); Chris@181: pathsLayout->addWidget(browse, row++, 1); Chris@178: connect(browse, SIGNAL(clicked()), this, SLOT(editPathBrowse())); Chris@178: Chris@175: settings.endGroup(); Chris@176: Chris@176: settings.beginGroup("Locations"); Chris@176: Chris@176: pathsLayout->addWidget(new QLabel(tr("EasyHg Mercurial extension:")), row, 0); Chris@176: Chris@181: m_extensionPathLabel = new QLabel(); Chris@181: m_extensionPathLabel->setText(settings.value("extensionpath").toString()); Chris@181: pathsLayout->addWidget(m_extensionPathLabel, row, 2); Chris@176: Chris@176: browse = new QPushButton(tr("Browse...")); Chris@181: pathsLayout->addWidget(browse, row++, 1); Chris@176: connect(browse, SIGNAL(clicked()), this, SLOT(extensionPathBrowse())); Chris@176: Chris@176: settings.endGroup(); Chris@176: Chris@176: settings.beginGroup("General"); Chris@176: Chris@176: //!!! more info plz Chris@176: m_useExtension = new QCheckBox(tr("Use EasyHg Mercurial extension")); Chris@176: m_useExtension->setChecked(settings.value("useextension", true).toBool()); Chris@181: pathsLayout->addWidget(m_useExtension, row++, 2); Chris@176: Chris@176: settings.endGroup(); Chris@176: Chris@175: Chris@175: QDialogButtonBox *bbox = new QDialogButtonBox(QDialogButtonBox::Ok); Chris@175: connect(bbox, SIGNAL(accepted()), this, SLOT(accept())); Chris@175: mainLayout->addWidget(bbox, 2, 0); Chris@175: m_ok = bbox->button(QDialogButtonBox::Ok); Chris@175: } Chris@175: Chris@175: void Chris@175: SettingsDialog::hgPathBrowse() Chris@175: { Chris@181: browseFor(tr("Mercurial program"), m_hgPathLabel); Chris@175: } Chris@175: Chris@175: void Chris@175: SettingsDialog::diffPathBrowse() Chris@175: { Chris@181: browseFor(tr("External diff program"), m_diffPathLabel); Chris@175: } Chris@175: Chris@175: void Chris@175: SettingsDialog::mergePathBrowse() Chris@175: { Chris@181: browseFor(tr("External file-merge program"), m_mergePathLabel); Chris@175: } Chris@175: Chris@175: void Chris@178: SettingsDialog::editPathBrowse() Chris@175: { Chris@181: browseFor(tr("External text editor"), m_editPathLabel); Chris@176: } Chris@176: Chris@176: void Chris@176: SettingsDialog::extensionPathBrowse() Chris@176: { Chris@181: browseFor(tr("EasyHg Mercurial extension"), m_extensionPathLabel); Chris@181: } Chris@181: Chris@181: void Chris@181: SettingsDialog::browseFor(QString title, QLabel *edit) Chris@181: { Chris@181: QString origin = edit->text(); Chris@181: Chris@181: if (origin == "") { Chris@181: #ifdef Q_OS_WIN32 Chris@181: origin = "c:"; Chris@181: #else Chris@181: origin = QDir::homePath(); Chris@181: #endif Chris@181: } Chris@181: Chris@181: QString path = QFileDialog::getOpenFileName(this, title, origin); Chris@181: if (path != QString()) { Chris@181: edit->setText(path); Chris@181: } Chris@176: } Chris@176: Chris@176: void Chris@175: SettingsDialog::accept() Chris@175: { Chris@177: DEBUG << "SettingsDialog::accept" << endl; Chris@175: QSettings settings; Chris@175: settings.beginGroup("User Information"); Chris@175: settings.setValue("name", m_nameEdit->text()); Chris@175: settings.setValue("email", m_emailEdit->text()); Chris@175: settings.endGroup(); Chris@175: settings.beginGroup("Locations"); Chris@181: settings.setValue("hgbinary", m_hgPathLabel->text()); Chris@181: settings.setValue("extdiffbinary", m_diffPathLabel->text()); Chris@181: settings.setValue("mergebinary", m_mergePathLabel->text()); Chris@181: settings.setValue("extensionpath", m_extensionPathLabel->text()); Chris@176: settings.endGroup(); Chris@176: settings.beginGroup("General"); Chris@176: settings.setValue("useextension", m_useExtension->isChecked()); Chris@175: settings.endGroup(); Chris@175: QDialog::accept(); Chris@175: } Chris@175: Chris@175: