diff options
Diffstat (limited to 'src/settingsdialog.cpp')
-rwxr-xr-x | src/settingsdialog.cpp | 716 |
1 files changed, 716 insertions, 0 deletions
diff --git a/src/settingsdialog.cpp b/src/settingsdialog.cpp new file mode 100755 index 0000000..a99b832 --- /dev/null +++ b/src/settingsdialog.cpp @@ -0,0 +1,716 @@ +/* + * settingsdialog.cpp + * + * Copyright 2008 gpg4usb-team <[email protected]> + * + * This file is part of gpg4usb. + * + * Gpg4usb 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. + * + * Gpg4usb 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 gpg4usb. If not, see <http://www.gnu.org/licenses/> + */ + +#include "settingsdialog.h" + +SettingsDialog::SettingsDialog(GpgME::GpgContext *ctx, QWidget *parent) + : QDialog(parent) +{ + mCtx=ctx; + tabWidget = new QTabWidget; + generalTab = new GeneralTab(mCtx); + appearanceTab = new AppearanceTab; + mimeTab = new MimeTab; + keyserverTab = new KeyserverTab; + advancedTab = new AdvancedTab; + gpgPathsTab = new GpgPathsTab; + + tabWidget->addTab(generalTab, tr("General")); + tabWidget->addTab(appearanceTab, tr("Appearance")); + tabWidget->addTab(mimeTab, tr("PGP/Mime")); + tabWidget->addTab(keyserverTab, tr("Keyserver")); + tabWidget->addTab(gpgPathsTab, tr("Gpg paths")); + tabWidget->addTab(advancedTab, tr("Advanced")); + + buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok + | QDialogButtonBox::Cancel); + + connect(buttonBox, SIGNAL(accepted()), this, SLOT(slotAccept())); + connect(buttonBox, SIGNAL(rejected()), this, SLOT(reject())); + + QVBoxLayout *mainLayout = new QVBoxLayout; + mainLayout->addWidget(tabWidget); + mainLayout->addWidget(buttonBox); + setLayout(mainLayout); + + setWindowTitle(tr("Settings")); + + // slots for handling the restartneeded member + this->slotSetRestartNeeded(false); + connect(generalTab, SIGNAL(signalRestartNeeded(bool)), this, SLOT(slotSetRestartNeeded(bool))); + connect(appearanceTab, SIGNAL(signalRestartNeeded(bool)), this, SLOT(slotSetRestartNeeded(bool))); + connect(mimeTab, SIGNAL(signalRestartNeeded(bool)), this, SLOT(slotSetRestartNeeded(bool))); + connect(keyserverTab, SIGNAL(signalRestartNeeded(bool)), this, SLOT(slotSetRestartNeeded(bool))); + connect(advancedTab, SIGNAL(signalRestartNeeded(bool)), this, SLOT(slotSetRestartNeeded(bool))); + + connect(this, SIGNAL(signalRestartNeeded(bool)), parent, SLOT(slotSetRestartNeeded(bool))); + + exec(); +} + +bool SettingsDialog::getRestartNeeded() +{ + return this->restartNeeded; +} + +void SettingsDialog::slotSetRestartNeeded(bool needed) +{ + this->restartNeeded = needed; +} + +void SettingsDialog::slotAccept() +{ + generalTab->applySettings(); + mimeTab->applySettings(); + appearanceTab->applySettings(); + keyserverTab->applySettings(); + advancedTab->applySettings(); + gpgPathsTab->applySettings(); + if (getRestartNeeded()) { + emit signalRestartNeeded(true); + } + close(); +} + +// http://www.informit.com/articles/article.aspx?p=1405555&seqNum=3 +// http://developer.qt.nokia.com/wiki/How_to_create_a_multi_language_application +QHash<QString, QString> SettingsDialog::listLanguages() +{ + QHash<QString, QString> languages; + + languages.insert("", tr("System Default")); + + QString appPath = qApp->applicationDirPath(); + QDir qmDir = QDir(appPath + "/ts/"); + QStringList fileNames = + qmDir.entryList(QStringList("gpg4usb_*.qm")); + + for (int i = 0; i < fileNames.size(); ++i) { + QString locale = fileNames[i]; + locale.truncate(locale.lastIndexOf('.')); + locale.remove(0, locale.indexOf('_') + 1); + + // this works in qt 4.8 + QLocale qloc(locale); + #if QT_VERSION < 0x040800 + QString language = QLocale::languageToString(qloc.language()) +" (" + locale + ")"; //+ " (" + QLocale::languageToString(qloc.language()) + ")"; + #else + QString language = qloc.nativeLanguageName() +" (" + locale + ")"; //+ " (" + QLocale::languageToString(qloc.language()) + ")"; + #endif + languages.insert(locale, language); + } + return languages; +} + + + +GeneralTab::GeneralTab(GpgME::GpgContext *ctx,QWidget *parent) + : QWidget(parent) +{ + mCtx=ctx; + + /***************************************** + * remember Password-Box + *****************************************/ + QGroupBox *rememberPasswordBox = new QGroupBox(tr("Remember Password")); + QHBoxLayout *rememberPasswordBoxLayout = new QHBoxLayout(); + rememberPasswordCheckBox = new QCheckBox(tr("Remember password until closing gpg4usb"), this); + rememberPasswordBoxLayout->addWidget(rememberPasswordCheckBox); + rememberPasswordBox->setLayout(rememberPasswordBoxLayout); + + /***************************************** + * Save-Checked-Keys-Box + *****************************************/ + QGroupBox *saveCheckedKeysBox = new QGroupBox(tr("Save Checked Keys")); + QHBoxLayout *saveCheckedKeysBoxLayout = new QHBoxLayout(); + saveCheckedKeysCheckBox = new QCheckBox(tr("Save checked private keys on exit and restore them on next start."), this); + saveCheckedKeysBoxLayout->addWidget(saveCheckedKeysCheckBox); + saveCheckedKeysBox->setLayout(saveCheckedKeysBoxLayout); + + /***************************************** + * Key-Impport-Confirmation Box + *****************************************/ + QGroupBox *importConfirmationBox = new QGroupBox(tr("Confirm drag'n'drop key import")); + QHBoxLayout *importConfirmationBoxLayout = new QHBoxLayout(); + importConfirmationCheckBox= new QCheckBox(tr("Import files dropped on the keylist without confirmation."), this); + importConfirmationBoxLayout->addWidget(importConfirmationCheckBox); + importConfirmationBox->setLayout(importConfirmationBoxLayout); + + /***************************************** + * Language Select Box + *****************************************/ + QGroupBox *langBox = new QGroupBox(tr("Language")); + QVBoxLayout *langBoxLayout = new QVBoxLayout(); + langSelectBox = new QComboBox; + lang = SettingsDialog::listLanguages(); + + foreach(QString l , lang) { + langSelectBox->addItem(l); + } + + langBoxLayout->addWidget(langSelectBox); + langBoxLayout->addWidget(new QLabel(tr("<b>NOTE: </b> Gpg4usb will restart automatically if you change the language!"))); + langBox->setLayout(langBoxLayout); + connect(langSelectBox,SIGNAL(currentIndexChanged(int)),this,SLOT(slotLanguageChanged())); + + /***************************************** + * Own Key Select Box + *****************************************/ + QGroupBox *ownKeyBox = new QGroupBox(tr("Own key")); + QVBoxLayout *ownKeyBoxLayout = new QVBoxLayout(); + ownKeySelectBox = new QComboBox; + + ownKeyBox->setLayout(ownKeyBoxLayout); + mKeyList = new KeyList(mCtx); + + // Fill the keyid hashmap + keyIds.insert("", tr("<none>")); + + foreach (QString keyid, *mKeyList->getAllPrivateKeys()) { + gpgme_key_t key = mCtx->getKeyDetails(keyid); + QString newKey = " (" + keyid + ")"; + if (! QString(key->uids->email).isEmpty()) { + newKey.prepend( " <"+ QString::fromUtf8(key->uids->email) +">"); + } + if (! QString(key->uids->name).isEmpty()) { + newKey.prepend( " "+ QString::fromUtf8(key->uids->name)); + } + keyIds.insert(key->uids->uid, newKey); + } + foreach(QString k , keyIds) { + ownKeySelectBox->addItem(k); + } + connect(ownKeySelectBox,SIGNAL(currentIndexChanged(int)),this,SLOT(slotOwnKeyIdChanged())); + + ownKeyBoxLayout->addWidget(new QLabel(tr("Encrypt all messages additionally to the chosen key:"))); + ownKeyBoxLayout->addWidget(ownKeySelectBox); + + /***************************************** + * Mainlayout + *****************************************/ + QVBoxLayout *mainLayout = new QVBoxLayout; + mainLayout->addWidget(rememberPasswordBox); + mainLayout->addWidget(saveCheckedKeysBox); + mainLayout->addWidget(importConfirmationBox); + mainLayout->addWidget(langBox); + mainLayout->addWidget(ownKeyBox); + + setSettings(); + mainLayout->addStretch(1); + setLayout(mainLayout); +} + +/********************************** + * Read the settings from config + * and set the buttons and checkboxes + * appropriately + **********************************/ +void GeneralTab::setSettings() +{ + QSettings settings; + // Keysaving + if (settings.value("keys/keySave").toBool()) { + saveCheckedKeysCheckBox->setCheckState(Qt::Checked); + } + + // Remember Password + if (settings.value("general/rememberPassword").toBool()) { + rememberPasswordCheckBox->setCheckState(Qt::Checked); + } + + // Language setting + QString langKey = settings.value("int/lang").toString(); + QString langValue = lang.value(langKey); + if (langKey != "") { + langSelectBox->setCurrentIndex(langSelectBox->findText(langValue)); + } + + // Get own key information from keydb/gpg.conf (if contained) + QFile gpgConfFile(qApp->applicationDirPath() + "/keydb/gpg.conf"); + gpgConfFile.open(QFile::ReadOnly); + while (!gpgConfFile.atEnd()) + { + QString line = gpgConfFile.readLine(); + if (line.startsWith("recipient")){ + QStringList args; + + // get key id from gpg.conf + args=line.split(" "); + ownKeyId = args.at(1); + // remove linebreak at end of id + ownKeyId.remove("\n"); + ownKeyId.remove("\r"); + } + } + gpgConfFile.close(); + if (ownKeyId.isEmpty()) { + ownKeySelectBox->setCurrentIndex(0); + } else { + ownKeySelectBox->setCurrentIndex(ownKeySelectBox->findText(ownKeyId, Qt::MatchContains)); + } + + if (settings.value("general/confirmImportKeys",Qt::Checked).toBool()){ + importConfirmationCheckBox->setCheckState(Qt::Checked); + } +} + +/*********************************** + * get the values of the buttons and + * write them to settings-file + *************************************/ +void GeneralTab::applySettings() +{ + QSettings settings; + settings.setValue("keys/keySave", saveCheckedKeysCheckBox->isChecked()); + // TODO: clear passwordCache instantly on unset rememberPassword + settings.setValue("general/rememberPassword", rememberPasswordCheckBox->isChecked()); + settings.setValue("int/lang", lang.key(langSelectBox->currentText())); + settings.setValue("general/confirmImportKeys", importConfirmationCheckBox->isChecked()); +} + +void GeneralTab::slotLanguageChanged() +{ + emit signalRestartNeeded(true); +} + +void GeneralTab::slotOwnKeyIdChanged() +{ + // Set ownKeyId to currently selected + + QHashIterator<QString, QString> i(keyIds); + while (i.hasNext()) { + i.next(); + if (ownKeySelectBox->currentText() == i.value()) { + ownKeyId = i.key(); + } + } + + /***************************************** + * Write keyid of own key to gpg.conf + *****************************************/ + QFile gpgConfFile(qApp->applicationDirPath() + "/keydb/gpg.conf"); + gpgConfFile.open(QFile::ReadWrite); + QFile gpgConfTempFile(qApp->applicationDirPath() + "/keydb/gpg.conf.swp"); + gpgConfTempFile.open(QFile::WriteOnly); + + // remove line with the hidden-encrypt-to + while (!gpgConfFile.atEnd()) + { + QByteArray line = gpgConfFile.readLine(); + if (!line.startsWith("recipient")) { + gpgConfTempFile.write(line); + } + } + + // add line with hidden-encrypt-to, if a key is chosen + if (!ownKeyId.isEmpty()) { + QByteArray string("recipient "); + string.append(ownKeyId); + string.append("\n"); + gpgConfTempFile.write(string); + } + + gpgConfFile.close(); + gpgConfTempFile.close(); + + // move the temporary gpg.conffile to the actual one + gpgConfFile.remove(); + gpgConfTempFile.copy(gpgConfTempFile.fileName(),gpgConfFile.fileName()); + gpgConfTempFile.remove(); +} + +MimeTab::MimeTab(QWidget *parent) + : QWidget(parent) +{ + /***************************************** + * MIME-Parsing-Box + *****************************************/ + QGroupBox *mimeQPBox = new QGroupBox(tr("Decode quoted printable")); + QVBoxLayout *mimeQPBoxLayout = new QVBoxLayout(); + mimeQPCheckBox = new QCheckBox(tr("Try to recognize quoted printable."), this); + mimeQPBoxLayout->addWidget(mimeQPCheckBox); + mimeQPBox->setLayout(mimeQPBoxLayout); + + QGroupBox *mimeParseBox = new QGroupBox(tr("Parse PGP/MIME (Experimental)")); + QVBoxLayout *mimeParseBoxLayout = new QVBoxLayout(); + mimeParseCheckBox = new QCheckBox(tr("Try to split attachments from PGP-MIME ecrypted messages."), this); + mimeParseBoxLayout->addWidget(mimeParseCheckBox); + mimeParseBox->setLayout(mimeParseBoxLayout); + + QGroupBox *mimeOpenAttachmentBox = new QGroupBox(tr("Open with external application (Experimental)")); + QVBoxLayout *mimeOpenAttachmentBoxLayout = new QVBoxLayout(); + QLabel *mimeOpenAttachmentText = new QLabel(tr("Open attachments with default application for the filetype.<br> " + "There are at least two possible problems with this behaviour:" + "<ol><li>File needs to be saved unencrypted to attachments folder.<br> " + "Its your job to clean this folder.</li>" + "<li>The external application may have its own temp files.</li></ol>")); + + //mimeOpenAttachmentBox->setDisabled(true); + mimeOpenAttachmentCheckBox = new QCheckBox(tr("Enable opening with external applications."), this); + + mimeOpenAttachmentBoxLayout->addWidget(mimeOpenAttachmentText); + mimeOpenAttachmentBoxLayout->addWidget(mimeOpenAttachmentCheckBox); + mimeOpenAttachmentBox->setLayout(mimeOpenAttachmentBoxLayout); + + QVBoxLayout *mainLayout = new QVBoxLayout; + mainLayout->addWidget(mimeParseBox); + mainLayout->addWidget(mimeOpenAttachmentBox); + mainLayout->addWidget(mimeQPBox); + mainLayout->addStretch(1); + setLayout(mainLayout); + setSettings(); +} + +/********************************** + * Read the settings from config + * and set the buttons and checkboxes + * appropriately + **********************************/ +void MimeTab::setSettings() +{ + QSettings settings; + + // MIME-Parsing + if (settings.value("mime/parsemime").toBool()) mimeParseCheckBox->setCheckState(Qt::Checked); + + // Qouted Printable + if (settings.value("mime/parseQP",true).toBool()) mimeQPCheckBox->setCheckState(Qt::Checked); + + // Open Attachments with external app + if (settings.value("mime/openAttachment").toBool()) mimeOpenAttachmentCheckBox->setCheckState(Qt::Checked); +} + + +/*********************************** + * get the values of the buttons and + * write them to settings-file + *************************************/ +void MimeTab::applySettings() +{ + QSettings settings; + settings.setValue("mime/parsemime" , mimeParseCheckBox->isChecked()); + settings.setValue("mime/parseQP" , mimeQPCheckBox->isChecked()); + settings.setValue("mime/openAttachment" , mimeOpenAttachmentCheckBox->isChecked()); + +} + +AppearanceTab::AppearanceTab(QWidget *parent) + : QWidget(parent) +{ + /***************************************** + * Icon-Size-Box + *****************************************/ + QGroupBox *iconSizeBox = new QGroupBox(tr("Iconsize")); + iconSizeGroup = new QButtonGroup(); + iconSizeSmall = new QRadioButton(tr("small")); + iconSizeMedium = new QRadioButton(tr("medium")); + iconSizeLarge = new QRadioButton(tr("large")); + + iconSizeGroup->addButton(iconSizeSmall, 1); + iconSizeGroup->addButton(iconSizeMedium, 2); + iconSizeGroup->addButton(iconSizeLarge, 3); + + QHBoxLayout *iconSizeBoxLayout = new QHBoxLayout(); + iconSizeBoxLayout->addWidget(iconSizeSmall); + iconSizeBoxLayout->addWidget(iconSizeMedium); + iconSizeBoxLayout->addWidget(iconSizeLarge); + + iconSizeBox->setLayout(iconSizeBoxLayout); + + /***************************************** + * Icon-Style-Box + *****************************************/ + QGroupBox *iconStyleBox = new QGroupBox(tr("Iconstyle")); + iconStyleGroup = new QButtonGroup(); + iconTextButton = new QRadioButton(tr("just text")); + iconIconsButton = new QRadioButton(tr("just icons")); + iconAllButton = new QRadioButton(tr("text and icons")); + + iconStyleGroup->addButton(iconTextButton, 1); + iconStyleGroup->addButton(iconIconsButton, 2); + iconStyleGroup->addButton(iconAllButton, 3); + + QHBoxLayout *iconStyleBoxLayout = new QHBoxLayout(); + iconStyleBoxLayout->addWidget(iconTextButton); + iconStyleBoxLayout->addWidget(iconIconsButton); + iconStyleBoxLayout->addWidget(iconAllButton); + + iconStyleBox->setLayout(iconStyleBoxLayout); + + /***************************************** + * Window-Size-Box + *****************************************/ + QGroupBox *windowSizeBox = new QGroupBox(tr("Windowstate")); + QHBoxLayout *windowSizeBoxLayout = new QHBoxLayout(); + windowSizeCheckBox = new QCheckBox(tr("Save window size and position on exit."), this); + windowSizeBoxLayout->addWidget(windowSizeCheckBox); + windowSizeBox->setLayout(windowSizeBoxLayout); + + QVBoxLayout *mainLayout = new QVBoxLayout; + mainLayout->addWidget(iconSizeBox); + mainLayout->addWidget(iconStyleBox); + mainLayout->addWidget(windowSizeBox); + mainLayout->addStretch(1); + setSettings(); + setLayout(mainLayout); +} + +/********************************** + * Read the settings from config + * and set the buttons and checkboxes + * appropriately + **********************************/ +void AppearanceTab::setSettings() +{ + QSettings settings; + + //Iconsize + QSize iconSize = settings.value("toolbar/iconsize", QSize(24, 24)).toSize(); + switch (iconSize.height()) { + case 12: iconSizeSmall->setChecked(true); + break; + case 24:iconSizeMedium->setChecked(true); + break; + case 32:iconSizeLarge->setChecked(true); + break; + } + // Iconstyle + Qt::ToolButtonStyle iconStyle = static_cast<Qt::ToolButtonStyle>(settings.value("toolbar/iconstyle", Qt::ToolButtonTextUnderIcon).toUInt()); + switch (iconStyle) { + case Qt::ToolButtonTextOnly: iconTextButton->setChecked(true); + break; + case Qt::ToolButtonIconOnly:iconIconsButton->setChecked(true); + break; + case Qt::ToolButtonTextUnderIcon:iconAllButton->setChecked(true); + break; + default: + break; + } + + // Window Save and Position + if (settings.value("window/windowSave").toBool()) windowSizeCheckBox->setCheckState(Qt::Checked); + +} + +/*********************************** + * get the values of the buttons and + * write them to settings-file + *************************************/ +void AppearanceTab::applySettings() +{ + QSettings settings; + switch (iconSizeGroup->checkedId()) { + case 1: settings.setValue("toolbar/iconsize", QSize(12, 12)); + break; + case 2:settings.setValue("toolbar/iconsize", QSize(24, 24)); + break; + case 3:settings.setValue("toolbar/iconsize", QSize(32, 32)); + break; + } + + switch (iconStyleGroup->checkedId()) { + case 1: settings.setValue("toolbar/iconstyle", Qt::ToolButtonTextOnly); + break; + case 2:settings.setValue("toolbar/iconstyle", Qt::ToolButtonIconOnly); + break; + case 3:settings.setValue("toolbar/iconstyle", Qt::ToolButtonTextUnderIcon); + break; + } + + settings.setValue("window/windowSave", windowSizeCheckBox->isChecked()); +} + +KeyserverTab::KeyserverTab(QWidget *parent) + : QWidget(parent) +{ + QVBoxLayout *mainLayout = new QVBoxLayout(this); + + QLabel *label = new QLabel(tr("Default Keyserver for import:")); + comboBox = new QComboBox; + comboBox->setEditable(false); + comboBox->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); + + QWidget *addKeyServerBox = new QWidget(this); + QHBoxLayout *addKeyServerLayout = new QHBoxLayout(addKeyServerBox); + QLabel *http = new QLabel("http://"); + newKeyServerEdit = new QLineEdit(this); + QPushButton *newKeyServerButton = new QPushButton(tr("Add to keyserverlist"), this); + connect(newKeyServerButton,SIGNAL(clicked()), this, SLOT(addKeyServer())); + addKeyServerLayout->addWidget(http); + addKeyServerLayout->addWidget(newKeyServerEdit); + addKeyServerLayout->addWidget(newKeyServerButton); + + mainLayout->addWidget(label); + mainLayout->addWidget(comboBox); + mainLayout->addWidget(addKeyServerBox); + mainLayout->addStretch(1); + + // Read keylist from ini-file and fill it into combobox + setSettings(); +} + + +/********************************** + * Read the settings from config + * and set the buttons and checkboxes + * appropriately + **********************************/ +void KeyserverTab::setSettings() +{ + QSettings settings; + QString defKeyserver = settings.value("keyserver/defaultKeyServer").toString(); + + QStringList *keyServerList = new QStringList(); + for(int i=0; i < comboBox->count(); i++) { + keyServerList->append(comboBox->itemText(i)); + } + settings.setValue("keyserver/keyServerList", *keyServerList); +} + +void KeyserverTab::addKeyServer() +{ + if (newKeyServerEdit->text().startsWith("http://")) { + comboBox->addItem(newKeyServerEdit->text()); + } else { + comboBox->addItem("http://" +newKeyServerEdit->text()); + } + comboBox->setCurrentIndex(comboBox->count()-1); +} +/*********************************** + * get the values of the buttons and + * write them to settings-file + *************************************/ +void KeyserverTab::applySettings() +{ + QSettings settings; + settings.setValue("keyserver/defaultKeyServer",comboBox->currentText()); +} + +AdvancedTab::AdvancedTab(QWidget *parent) + : QWidget(parent) +{ + /***************************************** + * Steganography Box + *****************************************/ + QGroupBox *steganoBox = new QGroupBox(tr("Show Steganography Options [Advanced]")); + QHBoxLayout *steganoBoxLayout = new QHBoxLayout(); + steganoCheckBox= new QCheckBox(tr("Show Steganographic Options."), this); + steganoBoxLayout->addWidget(steganoCheckBox); + steganoBox->setLayout(steganoBoxLayout); + + QVBoxLayout *mainLayout = new QVBoxLayout; + mainLayout->addWidget(steganoBox); + setSettings(); + mainLayout->addStretch(1); + setLayout(mainLayout); + +} + +void AdvancedTab::setSettings() +{ + QSettings settings; + if (settings.value("advanced/steganography").toBool()){ + steganoCheckBox->setCheckState(Qt::Checked); + } +} + +void AdvancedTab::applySettings() +{ + QSettings settings; + settings.setValue("advanced/steganography", steganoCheckBox->isChecked()); +} + +GpgPathsTab::GpgPathsTab(QWidget *parent) + : QWidget(parent) +{ + setSettings(); + + /***************************************** + * Keydb Box + *****************************************/ + QGroupBox *keydbBox = new QGroupBox(tr("Relative path to keydb")); + QGridLayout *keydbBoxLayout = new QGridLayout(); + + // Label containing the current keydbpath relative to default keydb path + keydbLabel = new QLabel(accKeydbPath,this); + + QPushButton *keydbButton = new QPushButton("Change keydb path",this); + connect(keydbButton, SIGNAL(clicked()), this, SLOT(chooseKeydbDir())); + QPushButton *keydbDefaultButton = new QPushButton("Set keydb to default path",this); + connect(keydbDefaultButton, SIGNAL(clicked()), this, SLOT(setKeydbPathToDefault())); + + keydbBox->setLayout(keydbBoxLayout); + keydbBoxLayout->addWidget(new QLabel(tr("Current keydb path: ")),1,1); + keydbBoxLayout->addWidget(keydbLabel,1,2); + keydbBoxLayout->addWidget(keydbButton,1,3); + keydbBoxLayout->addWidget(keydbDefaultButton,2,3); + keydbBoxLayout->addWidget(new QLabel(tr("<b>NOTE: </b> Gpg4usb will restart automatically if you change the keydb path!")),3,1,1,3); + + QVBoxLayout *mainLayout = new QVBoxLayout; + mainLayout->addWidget(keydbBox); + mainLayout->addStretch(1); + setLayout(mainLayout); +} + +QString GpgPathsTab::getRelativePath(const QString dir1,const QString dir2) +{ + QDir dir(dir1); + QString s; + + s = dir.relativeFilePath(dir2); + qDebug() << "relative path: " << s; + if (s.isEmpty()) { + s = "."; + } + return s; +} + +void GpgPathsTab::setKeydbPathToDefault() +{ + accKeydbPath = "."; + keydbLabel->setText("."); +} + +QString GpgPathsTab::chooseKeydbDir() +{ + QString dir = QFileDialog::getExistingDirectory(this,tr ("Choose keydb directory"),accKeydbPath,QFileDialog::ShowDirsOnly); + + accKeydbPath = getRelativePath(defKeydbPath, dir); + keydbLabel->setText(accKeydbPath); + return ""; +} + +void GpgPathsTab::setSettings() +{ + defKeydbPath = qApp->applicationDirPath() + "/keydb"; + + QSettings settings; + accKeydbPath = settings.value("gpgpaths/keydbpath").toString(); + if (accKeydbPath.isEmpty()) { + accKeydbPath = "."; + } +} + +void GpgPathsTab::applySettings() +{ + QSettings settings; + settings.setValue("gpgpaths/keydbpath",accKeydbPath); +} |