0
0
mirror of https://github.com/keepassxreboot/keepassxc.git synced 2024-09-20 12:22:16 +02:00

Redesign DatabaseSettingsWidget

This commit is contained in:
Janek Bevendorff 2018-01-06 15:27:44 +01:00 committed by Jonathan White
parent f7d3c90218
commit 995d6646be
No known key found for this signature in database
GPG Key ID: 440FC65F2E0C6E01
6 changed files with 458 additions and 364 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

@ -17,10 +17,13 @@
#include "DatabaseSettingsWidget.h"
#include "ui_DatabaseSettingsWidget.h"
#include "ui_DatabaseSettingsWidgetGeneral.h"
#include "ui_DatabaseSettingsWidgetEncryption.h"
#include <QMessageBox>
#include "core/Global.h"
#include "core/FilePath.h"
#include "core/AsyncTask.h"
#include "core/Database.h"
#include "core/Group.h"
@ -32,18 +35,31 @@
DatabaseSettingsWidget::DatabaseSettingsWidget(QWidget* parent)
: DialogyWidget(parent)
, m_ui(new Ui::DatabaseSettingsWidget())
, m_uiGeneral(new Ui::DatabaseSettingsWidgetGeneral())
, m_uiEncryption(new Ui::DatabaseSettingsWidgetEncryption())
, m_uiGeneralPage(new QWidget())
, m_uiEncryptionPage(new QWidget())
, m_db(nullptr)
{
m_ui->setupUi(this);
m_uiGeneral->setupUi(m_uiGeneralPage);
m_uiEncryption->setupUi(m_uiEncryptionPage);
connect(m_ui->buttonBox, SIGNAL(accepted()), SLOT(save()));
connect(m_ui->buttonBox, SIGNAL(rejected()), SLOT(reject()));
connect(m_ui->historyMaxItemsCheckBox, SIGNAL(toggled(bool)),
m_ui->historyMaxItemsSpinBox, SLOT(setEnabled(bool)));
connect(m_ui->historyMaxSizeCheckBox, SIGNAL(toggled(bool)),
m_ui->historyMaxSizeSpinBox, SLOT(setEnabled(bool)));
connect(m_ui->transformBenchmarkButton, SIGNAL(clicked()), SLOT(transformRoundsBenchmark()));
connect(m_ui->kdfComboBox, SIGNAL(currentIndexChanged(int)), SLOT(kdfChanged(int)));
connect(m_uiGeneral->historyMaxItemsCheckBox, SIGNAL(toggled(bool)),
m_uiGeneral->historyMaxItemsSpinBox, SLOT(setEnabled(bool)));
connect(m_uiGeneral->historyMaxSizeCheckBox, SIGNAL(toggled(bool)),
m_uiGeneral->historyMaxSizeSpinBox, SLOT(setEnabled(bool)));
connect(m_uiEncryption->transformBenchmarkButton, SIGNAL(clicked()), SLOT(transformRoundsBenchmark()));
connect(m_uiEncryption->kdfComboBox, SIGNAL(currentIndexChanged(int)), SLOT(kdfChanged(int)));
m_ui->categoryList->addCategory(tr("General"), FilePath::instance()->icon("categories", "preferences-other"));
m_ui->categoryList->addCategory(tr("Encryption"), FilePath::instance()->icon("actions", "document-encrypt"));
m_ui->stackedWidget->addWidget(m_uiGeneralPage);
m_ui->stackedWidget->addWidget(m_uiEncryptionPage);
connect(m_ui->categoryList, SIGNAL(categoryChanged(int)), m_ui->stackedWidget, SLOT(setCurrentIndex(int)));
}
DatabaseSettingsWidget::~DatabaseSettingsWidget()
@ -56,77 +72,77 @@ void DatabaseSettingsWidget::load(Database* db)
Metadata* meta = m_db->metadata();
m_ui->dbNameEdit->setText(meta->name());
m_ui->dbDescriptionEdit->setText(meta->description());
m_ui->recycleBinEnabledCheckBox->setChecked(meta->recycleBinEnabled());
m_ui->defaultUsernameEdit->setText(meta->defaultUserName());
m_uiGeneral->dbNameEdit->setText(meta->name());
m_uiGeneral->dbDescriptionEdit->setText(meta->description());
m_uiGeneral->recycleBinEnabledCheckBox->setChecked(meta->recycleBinEnabled());
m_uiGeneral->defaultUsernameEdit->setText(meta->defaultUserName());
if (meta->historyMaxItems() > -1) {
m_ui->historyMaxItemsSpinBox->setValue(meta->historyMaxItems());
m_ui->historyMaxItemsCheckBox->setChecked(true);
m_uiGeneral->historyMaxItemsSpinBox->setValue(meta->historyMaxItems());
m_uiGeneral->historyMaxItemsCheckBox->setChecked(true);
} else {
m_ui->historyMaxItemsSpinBox->setValue(Metadata::DefaultHistoryMaxItems);
m_ui->historyMaxItemsCheckBox->setChecked(false);
m_uiGeneral->historyMaxItemsSpinBox->setValue(Metadata::DefaultHistoryMaxItems);
m_uiGeneral->historyMaxItemsCheckBox->setChecked(false);
}
int historyMaxSizeMiB = qRound(meta->historyMaxSize() / qreal(1048576));
if (historyMaxSizeMiB > 0) {
m_ui->historyMaxSizeSpinBox->setValue(historyMaxSizeMiB);
m_ui->historyMaxSizeCheckBox->setChecked(true);
m_uiGeneral->historyMaxSizeSpinBox->setValue(historyMaxSizeMiB);
m_uiGeneral->historyMaxSizeCheckBox->setChecked(true);
} else {
m_ui->historyMaxSizeSpinBox->setValue(Metadata::DefaultHistoryMaxSize);
m_ui->historyMaxSizeCheckBox->setChecked(false);
m_uiGeneral->historyMaxSizeSpinBox->setValue(Metadata::DefaultHistoryMaxSize);
m_uiGeneral->historyMaxSizeCheckBox->setChecked(false);
}
m_ui->algorithmComboBox->clear();
m_uiEncryption->algorithmComboBox->clear();
for (auto& cipher: asConst(KeePass2::CIPHERS)) {
m_ui->algorithmComboBox->addItem(cipher.second, cipher.first.toByteArray());
m_uiEncryption->algorithmComboBox->addItem(cipher.second, cipher.first.toByteArray());
}
int cipherIndex = m_ui->algorithmComboBox->findData(m_db->cipher().toByteArray());
int cipherIndex = m_uiEncryption->algorithmComboBox->findData(m_db->cipher().toByteArray());
if (cipherIndex > -1) {
m_ui->algorithmComboBox->setCurrentIndex(cipherIndex);
m_uiEncryption->algorithmComboBox->setCurrentIndex(cipherIndex);
}
// Setup kdf combo box
m_ui->kdfComboBox->blockSignals(true);
m_ui->kdfComboBox->clear();
m_uiEncryption->kdfComboBox->blockSignals(true);
m_uiEncryption->kdfComboBox->clear();
for (auto& kdf: asConst(KeePass2::KDFS)) {
m_ui->kdfComboBox->addItem(kdf.second, kdf.first.toByteArray());
m_uiEncryption->kdfComboBox->addItem(kdf.second, kdf.first.toByteArray());
}
m_ui->kdfComboBox->blockSignals(false);
m_uiEncryption->kdfComboBox->blockSignals(false);
auto kdfUuid = m_db->kdf()->uuid();
int kdfIndex = m_ui->kdfComboBox->findData(kdfUuid.toByteArray());
int kdfIndex = m_uiEncryption->kdfComboBox->findData(kdfUuid.toByteArray());
if (kdfIndex > -1) {
m_ui->kdfComboBox->setCurrentIndex(kdfIndex);
m_uiEncryption->kdfComboBox->setCurrentIndex(kdfIndex);
kdfChanged(kdfIndex);
}
// Setup kdf parameters
auto kdf = m_db->kdf();
m_ui->transformRoundsSpinBox->setValue(kdf->rounds());
m_uiEncryption->transformRoundsSpinBox->setValue(kdf->rounds());
if (kdfUuid == KeePass2::KDF_ARGON2) {
auto argon2Kdf = kdf.staticCast<Argon2Kdf>();
m_ui->memorySpinBox->setValue(argon2Kdf->memory() / (1<<10));
m_ui->parallelismSpinBox->setValue(argon2Kdf->parallelism());
m_uiEncryption->memorySpinBox->setValue(static_cast<int>(argon2Kdf->memory()) / (1 << 10));
m_uiEncryption->parallelismSpinBox->setValue(argon2Kdf->parallelism());
}
m_ui->dbNameEdit->setFocus();
m_uiGeneral->dbNameEdit->setFocus();
}
void DatabaseSettingsWidget::save()
{
Metadata* meta = m_db->metadata();
meta->setName(m_ui->dbNameEdit->text());
meta->setDescription(m_ui->dbDescriptionEdit->text());
meta->setDefaultUserName(m_ui->defaultUsernameEdit->text());
meta->setRecycleBinEnabled(m_ui->recycleBinEnabledCheckBox->isChecked());
meta->setName(m_uiGeneral->dbNameEdit->text());
meta->setDescription(m_uiGeneral->dbDescriptionEdit->text());
meta->setDefaultUserName(m_uiGeneral->defaultUsernameEdit->text());
meta->setRecycleBinEnabled(m_uiGeneral->recycleBinEnabledCheckBox->isChecked());
meta->setSettingsChanged(QDateTime::currentDateTimeUtc());
bool truncate = false;
int historyMaxItems;
if (m_ui->historyMaxItemsCheckBox->isChecked()) {
historyMaxItems = m_ui->historyMaxItemsSpinBox->value();
if (m_uiGeneral->historyMaxItemsCheckBox->isChecked()) {
historyMaxItems = m_uiGeneral->historyMaxItemsSpinBox->value();
} else {
historyMaxItems = -1;
}
@ -136,8 +152,8 @@ void DatabaseSettingsWidget::save()
}
int historyMaxSize;
if (m_ui->historyMaxSizeCheckBox->isChecked()) {
historyMaxSize = m_ui->historyMaxSizeSpinBox->value() * 1048576;
if (m_uiGeneral->historyMaxSizeCheckBox->isChecked()) {
historyMaxSize = m_uiGeneral->historyMaxSizeSpinBox->value() * 1048576;
} else {
historyMaxSize = -1;
}
@ -150,15 +166,15 @@ void DatabaseSettingsWidget::save()
truncateHistories();
}
m_db->setCipher(Uuid(m_ui->algorithmComboBox->currentData().toByteArray()));
m_db->setCipher(Uuid(m_uiEncryption->algorithmComboBox->currentData().toByteArray()));
// Save kdf parameters
auto kdf = KeePass2::uuidToKdf(Uuid(m_ui->kdfComboBox->currentData().toByteArray()));
kdf->setRounds(m_ui->transformRoundsSpinBox->value());
auto kdf = KeePass2::uuidToKdf(Uuid(m_uiEncryption->kdfComboBox->currentData().toByteArray()));
kdf->setRounds(m_uiEncryption->transformRoundsSpinBox->value());
if (kdf->uuid() == KeePass2::KDF_ARGON2) {
auto argon2Kdf = kdf.staticCast<Argon2Kdf>();
argon2Kdf->setMemory(m_ui->memorySpinBox->value() * (1<<10));
argon2Kdf->setParallelism(m_ui->parallelismSpinBox->value());
argon2Kdf->setMemory(static_cast<quint64>(m_uiEncryption->memorySpinBox->value()) * (1 << 10));
argon2Kdf->setParallelism(static_cast<quint32>(m_uiEncryption->parallelismSpinBox->value()));
}
QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
@ -183,30 +199,30 @@ void DatabaseSettingsWidget::reject()
void DatabaseSettingsWidget::transformRoundsBenchmark()
{
QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
m_ui->transformBenchmarkButton->setEnabled(false);
m_uiEncryption->transformBenchmarkButton->setEnabled(false);
m_uiEncryption->transformRoundsSpinBox->setFocus();
// Create a new kdf with the current parameters
auto kdf = KeePass2::uuidToKdf(Uuid(m_ui->kdfComboBox->currentData().toByteArray()));
kdf->setRounds(m_ui->transformRoundsSpinBox->value());
auto kdf = KeePass2::uuidToKdf(Uuid(m_uiEncryption->kdfComboBox->currentData().toByteArray()));
kdf->setRounds(m_uiEncryption->transformRoundsSpinBox->value());
if (kdf->uuid() == KeePass2::KDF_ARGON2) {
auto argon2Kdf = kdf.staticCast<Argon2Kdf>();
if (!argon2Kdf->setMemory(m_ui->memorySpinBox->value() * (1<<10))) {
m_ui->memorySpinBox->setValue(argon2Kdf->memory() / (1<<10));
if (!argon2Kdf->setMemory(static_cast<quint64>(m_uiEncryption->memorySpinBox->value()) * (1 << 10))) {
m_uiEncryption->memorySpinBox->setValue(static_cast<int>(argon2Kdf->memory() / (1 << 10)));
}
if (!argon2Kdf->setParallelism(m_ui->parallelismSpinBox->value())) {
m_ui->parallelismSpinBox->setValue(argon2Kdf->parallelism());
if (!argon2Kdf->setParallelism(static_cast<quint32>(m_uiEncryption->parallelismSpinBox->value()))) {
m_uiEncryption->parallelismSpinBox->setValue(argon2Kdf->parallelism());
}
}
// Determine the number of rounds required to meet 1 second delay
int rounds = AsyncTask::runAndWaitForFuture([kdf]() {
int rounds = AsyncTask::runAndWaitForFuture([&kdf]() {
return kdf->benchmark(1000);
});
m_ui->transformRoundsSpinBox->setValue(rounds);
m_uiEncryption->transformRoundsSpinBox->setValue(rounds);
m_uiEncryption->transformBenchmarkButton->setEnabled(true);
QApplication::restoreOverrideCursor();
m_ui->transformBenchmarkButton->setEnabled(true);
}
void DatabaseSettingsWidget::truncateHistories()
@ -219,12 +235,13 @@ void DatabaseSettingsWidget::truncateHistories()
void DatabaseSettingsWidget::kdfChanged(int index)
{
Uuid id(m_ui->kdfComboBox->itemData(index).toByteArray());
if (id == KeePass2::KDF_ARGON2) {
m_ui->memorySpinBox->setEnabled(true);
m_ui->parallelismSpinBox->setEnabled(true);
} else {
m_ui->memorySpinBox->setEnabled(false);
m_ui->parallelismSpinBox->setEnabled(false);
}
Uuid id(m_uiEncryption->kdfComboBox->itemData(index).toByteArray());
bool memoryEnabled = id == KeePass2::KDF_ARGON2;
m_uiEncryption->memoryUsageLabel->setEnabled(memoryEnabled);
m_uiEncryption->memorySpinBox->setEnabled(memoryEnabled);
bool parallelismEnabled = id == KeePass2::KDF_ARGON2;
m_uiEncryption->parallelismLabel->setEnabled(parallelismEnabled);
m_uiEncryption->parallelismSpinBox->setEnabled(parallelismEnabled);
}

View File

@ -31,6 +31,8 @@ class Database;
namespace Ui
{
class DatabaseSettingsWidget;
class DatabaseSettingsWidgetGeneral;
class DatabaseSettingsWidgetEncryption;
}
class DatabaseSettingsWidget: public DialogyWidget
@ -57,6 +59,10 @@ private:
void truncateHistories();
const QScopedPointer<Ui::DatabaseSettingsWidget> m_ui;
const QScopedPointer<Ui::DatabaseSettingsWidgetGeneral> m_uiGeneral;
const QScopedPointer<Ui::DatabaseSettingsWidgetEncryption> m_uiEncryption;
QWidget* m_uiGeneralPage;
QWidget* m_uiEncryptionPage;
Database* m_db;
};

View File

@ -7,320 +7,45 @@
<x>0</x>
<y>0</y>
<width>1082</width>
<height>506</height>
<height>578</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout" stretch="1,2,5,1">
<layout class="QVBoxLayout" name="verticalLayout" stretch="0,0">
<item>
<spacer name="verticalSpacer_2">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
</spacer>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_5" stretch="0,1,0">
<layout class="QHBoxLayout" name="horizontalLayout_2" stretch="0,1">
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
</spacer>
<widget class="CategoryListWidget" name="categoryList" native="true"/>
</item>
<item>
<widget class="QWidget" name="widget" native="true">
<property name="maximumSize">
<size>
<width>400</width>
<height>16777215</height>
</size>
<widget class="QStackedWidget" name="stackedWidget">
<property name="currentIndex">
<number>-1</number>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="11" column="1">
<widget class="QCheckBox" name="historyMaxSizeCheckBox">
<property name="text">
<string>Max. history size:</string>
</property>
</widget>
</item>
<item row="0" column="2">
<widget class="QLineEdit" name="dbNameEdit"/>
</item>
<item row="7" column="2">
<layout class="QHBoxLayout" name="horizontalLayout_3">
<item>
<widget class="QSpinBox" name="memorySpinBox">
<property name="suffix">
<string> MB</string>
</property>
<property name="minimum">
<number>1</number>
</property>
<property name="maximum">
<number>1048576</number>
</property>
<property name="value">
<number>64</number>
</property>
</widget>
</item>
</layout>
</item>
<item row="0" column="1" alignment="Qt::AlignRight">
<widget class="QLabel" name="dbNameLabel">
<property name="text">
<string>Database name:</string>
</property>
</widget>
</item>
<item row="10" column="1">
<widget class="QCheckBox" name="historyMaxItemsCheckBox">
<property name="text">
<string>Max. history items:</string>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QLabel" name="kdfLabel">
<property name="text">
<string>Key Derivation Function</string>
</property>
</widget>
</item>
<item row="3" column="2">
<widget class="QComboBox" name="algorithmComboBox">
<item>
<property name="text">
<string>AES: 256 Bit (default)</string>
</property>
</item>
<item>
<property name="text">
<string>Twofish: 256 Bit</string>
</property>
</item>
</widget>
</item>
<item row="3" column="1" alignment="Qt::AlignRight">
<widget class="QLabel" name="algorithmLabel">
<property name="text">
<string>Encryption Algorithm:</string>
</property>
</widget>
</item>
<item row="1" column="1" alignment="Qt::AlignRight">
<widget class="QLabel" name="dbDescriptionLabel">
<property name="text">
<string>Database description:</string>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QLineEdit" name="dbDescriptionEdit"/>
</item>
<item row="4" column="2">
<widget class="QComboBox" name="kdfComboBox"/>
</item>
<item row="10" column="2">
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<widget class="QSpinBox" name="historyMaxItemsSpinBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximum">
<number>2000000000</number>
</property>
</widget>
</item>
</layout>
</item>
<item row="11" column="2">
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QSpinBox" name="historyMaxSizeSpinBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="suffix">
<string> MiB</string>
</property>
<property name="minimum">
<number>1</number>
</property>
<property name="maximum">
<number>2000000000</number>
</property>
</widget>
</item>
</layout>
</item>
<item row="6" column="2">
<widget class="QSpinBox" name="transformRoundsSpinBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
</property>
<property name="minimum">
<number>1</number>
</property>
<property name="maximum">
<number>1000000000</number>
</property>
</widget>
</item>
<item row="5" column="2">
<widget class="QToolButton" name="transformBenchmarkButton">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Benchmark 1-second delay</string>
</property>
</widget>
</item>
<item row="2" column="2">
<widget class="QLineEdit" name="defaultUsernameEdit">
<property name="enabled">
<bool>true</bool>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QLabel" name="defaultUsernameLabel">
<property name="text">
<string>Default username:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="6" column="1">
<widget class="QLabel" name="transformRoundsLabel">
<property name="text">
<string>Transform rounds:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="7" column="1">
<widget class="QLabel" name="memoryUsageLabel">
<property name="text">
<string>Memory Usage:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="8" column="1">
<widget class="QLabel" name="parallelismLabel">
<property name="text">
<string>Parallelism:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="8" column="2">
<widget class="QSpinBox" name="parallelismSpinBox">
<property name="suffix">
<string> thread</string>
</property>
<property name="minimum">
<number>1</number>
</property>
<property name="maximum">
<number>128</number>
</property>
</widget>
</item>
<item row="9" column="1">
<widget class="QCheckBox" name="recycleBinEnabledCheckBox">
<property name="text">
<string>Use recycle bin</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
<item>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QDialogButtonBox" name="buttonBox">
<property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
</property>
</widget>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QDialogButtonBox" name="buttonBox">
<property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
<tabstops>
<tabstop>dbNameEdit</tabstop>
<tabstop>dbDescriptionEdit</tabstop>
<tabstop>historyMaxItemsCheckBox</tabstop>
<tabstop>historyMaxItemsSpinBox</tabstop>
<tabstop>historyMaxSizeCheckBox</tabstop>
<tabstop>historyMaxSizeSpinBox</tabstop>
<tabstop>buttonBox</tabstop>
</tabstops>
<customwidgets>
<customwidget>
<class>CategoryListWidget</class>
<extends>QWidget</extends>
<header>gui/CategoryListWidget.h</header>
<container>1</container>
</customwidget>
</customwidgets>
<resources/>
<connections/>
</ui>
</ui>

View File

@ -0,0 +1,192 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>DatabaseSettingsWidgetEncryption</class>
<widget class="QWidget" name="DatabaseSettingsWidgetEncryption">
<layout class="QFormLayout" name="formLayout">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item row="0" column="0">
<widget class="QLabel" name="algorithmLabel">
<property name="text">
<string>Encryption Algorithm:</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QComboBox" name="algorithmComboBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<item>
<property name="text">
<string>AES: 256 Bit (default)</string>
</property>
</item>
<item>
<property name="text">
<string>Twofish: 256 Bit</string>
</property>
</item>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="kdfLabel">
<property name="text">
<string>Key Derivation Function:</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QComboBox" name="kdfComboBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="transformRoundsLabel">
<property name="text">
<string>Transform rounds:</string>
</property>
</widget>
</item>
<item row="2" column="1">
<layout class="QHBoxLayout" name="horizontalLayout" stretch="40,40,0">
<item>
<widget class="QSpinBox" name="transformRoundsSpinBox">
<property name="minimumSize">
<size>
<width>150</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>150</width>
<height>16777215</height>
</size>
</property>
<property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
</property>
<property name="minimum">
<number>1</number>
</property>
<property name="maximum">
<number>1000000000</number>
</property>
</widget>
</item>
<item>
<widget class="QToolButton" name="transformBenchmarkButton">
<property name="focusPolicy">
<enum>Qt::WheelFocus</enum>
</property>
<property name="text">
<string>Benchmark 1-second delay</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
<item row="3" column="0">
<widget class="QLabel" name="memoryUsageLabel">
<property name="text">
<string>Memory Usage:</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QSpinBox" name="memorySpinBox">
<property name="minimumSize">
<size>
<width>150</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>150</width>
<height>16777215</height>
</size>
</property>
<property name="suffix">
<string> MB</string>
</property>
<property name="minimum">
<number>1</number>
</property>
<property name="maximum">
<number>1048576</number>
</property>
<property name="value">
<number>64</number>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="parallelismLabel">
<property name="text">
<string>Parallelism:</string>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QSpinBox" name="parallelismSpinBox">
<property name="minimumSize">
<size>
<width>150</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>150</width>
<height>16777215</height>
</size>
</property>
<property name="suffix">
<string> thread</string>
</property>
<property name="minimum">
<number>1</number>
</property>
<property name="maximum">
<number>128</number>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>

View File

@ -0,0 +1,154 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>DatabaseSettingsWidgetGeneral</class>
<widget class="QWidget" name="DatabaseSettingsWidgetGeneral">
<layout class="QVBoxLayout" name="verticalLayout">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QGroupBox" name="groupBox">
<property name="title">
<string>Database Meta Data</string>
</property>
<layout class="QFormLayout" name="formLayout">
<item row="0" column="0">
<widget class="QLabel" name="dbNameLabel">
<property name="text">
<string>Database name:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLineEdit" name="dbNameEdit"/>
</item>
<item row="1" column="0">
<widget class="QLabel" name="dbDescriptionLabel">
<property name="text">
<string>Database description:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLineEdit" name="dbDescriptionEdit"/>
</item>
<item row="2" column="0">
<widget class="QLabel" name="defaultUsernameLabel">
<property name="text">
<string>Default username:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QLineEdit" name="defaultUsernameEdit">
<property name="enabled">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupBox_2">
<property name="title">
<string>History Settings</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<widget class="QCheckBox" name="historyMaxItemsCheckBox">
<property name="text">
<string>Max. history items:</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QCheckBox" name="historyMaxSizeCheckBox">
<property name="text">
<string>Max. history size:</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QSpinBox" name="historyMaxSizeSpinBox">
<property name="suffix">
<string> MiB</string>
</property>
<property name="minimum">
<number>1</number>
</property>
<property name="maximum">
<number>2000000000</number>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QSpinBox" name="historyMaxItemsSpinBox">
<property name="maximum">
<number>2000000000</number>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QCheckBox" name="recycleBinEnabledCheckBox">
<property name="text">
<string>Use recycle bin</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</item>
<item>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>