diff --git a/src/gui/DetailsWidget.cpp b/src/gui/DetailsWidget.cpp index d0e9c4a4..dd80ea23 100644 --- a/src/gui/DetailsWidget.cpp +++ b/src/gui/DetailsWidget.cpp @@ -33,6 +33,8 @@ DetailsWidget::DetailsWidget(QWidget* parent) , m_locked(false) , m_currentEntry(nullptr) , m_currentGroup(nullptr) + , m_attributesWidget(nullptr) + , m_autotypeWidget(nullptr) { m_ui->setupUi(this); @@ -63,8 +65,14 @@ void DetailsWidget::getSelectedEntry(Entry* selectedEntry) m_ui->stackedWidget->setCurrentIndex(EntryPreview); + if (m_ui->tabWidget->count() < 4) { + m_ui->tabWidget->insertTab(static_cast(AttributesTab), m_attributesWidget, "Attributes"); + m_ui->tabWidget->insertTab(static_cast(AutotypeTab), m_autotypeWidget, "Autotype"); + } + m_ui->tabWidget->setTabEnabled(AttributesTab, false); m_ui->tabWidget->setTabEnabled(NotesTab, false); + m_ui->tabWidget->setTabEnabled(AutotypeTab, false); m_ui->totpButton->hide(); m_ui->totpWidget->hide(); @@ -147,6 +155,21 @@ void DetailsWidget::getSelectedEntry(Entry* selectedEntry) } m_ui->attributesEdit->setText(attributesText); } + + m_ui->autotypeTree->clear(); + AutoTypeAssociations* autotypeAssociations = m_currentEntry->autoTypeAssociations(); + QList items; + for (auto assoc : autotypeAssociations->getAll()) { + QStringList association = QStringList() << assoc.window << assoc.sequence; + if (association.at(1).isEmpty()) { + association.replace(1, m_currentEntry->effectiveAutoTypeSequence()); + } + items.append(new QTreeWidgetItem(m_ui->autotypeTree, association)); + } + if (items.count() > 0) { + m_ui->autotypeTree->addTopLevelItems(items); + m_ui->tabWidget->setTabEnabled(AutotypeTab, true); + } } void DetailsWidget::getSelectedGroup(Group* selectedGroup) @@ -159,8 +182,15 @@ void DetailsWidget::getSelectedGroup(Group* selectedGroup) m_ui->stackedWidget->setCurrentIndex(GroupPreview); - m_ui->tabWidget->setTabEnabled(AttributesTab, false); - m_ui->tabWidget->setTabEnabled(NotesTab, false); + if (m_ui->tabWidget->count() > 2) { + m_autotypeWidget = m_ui->tabWidget->widget(AutotypeTab); + m_attributesWidget = m_ui->tabWidget->widget(AttributesTab); + m_ui->tabWidget->removeTab(AutotypeTab); + m_ui->tabWidget->removeTab(AttributesTab); + } + + m_ui->tabWidget->setTabEnabled(GroupNotesTab, false); + m_ui->totpButton->hide(); m_ui->totpWidget->hide(); @@ -180,7 +210,11 @@ void DetailsWidget::getSelectedGroup(Group* selectedGroup) } m_ui->titleLabel->setText(title); - m_ui->notesEdit->setText(m_currentGroup->notes()); + QString notes = m_currentGroup->notes(); + if (!notes.isEmpty()) { + m_ui->tabWidget->setTabEnabled(GroupNotesTab, true); + m_ui->notesEdit->setText(notes); + } QString searching = tr("Disabled"); if (m_currentGroup->resolveSearchingEnabled()) { @@ -200,10 +234,6 @@ void DetailsWidget::getSelectedGroup(Group* selectedGroup) } else { m_ui->groupExpirationLabel->setText(tr("Never")); } - - m_ui->groupCreationLabel->setText(groupTime.creationTime().toString(Qt::DefaultLocaleShortDate)); - m_ui->groupModifyLabel->setText(groupTime.lastModificationTime().toString(Qt::DefaultLocaleShortDate)); - m_ui->groupAccessLabel->setText(groupTime.lastAccessTime().toString(Qt::DefaultLocaleShortDate)); } void DetailsWidget::updateTotp() diff --git a/src/gui/DetailsWidget.h b/src/gui/DetailsWidget.h index 44989fd1..155c58f1 100644 --- a/src/gui/DetailsWidget.h +++ b/src/gui/DetailsWidget.h @@ -44,7 +44,9 @@ public: { GeneralTab = 0, AttributesTab = 1, + GroupNotesTab = 1, NotesTab = 2, + AutotypeTab = 3, }; private slots: @@ -63,6 +65,8 @@ private: Group* m_currentGroup; quint8 m_step; QTimer* m_timer; + QWidget* m_attributesWidget; + QWidget* m_autotypeWidget; QString shortUrl(QString url); QString shortPassword(QString password); }; diff --git a/src/gui/DetailsWidget.ui b/src/gui/DetailsWidget.ui index 2bc6653c..99164807 100644 --- a/src/gui/DetailsWidget.ui +++ b/src/gui/DetailsWidget.ui @@ -7,7 +7,7 @@ 0 0 630 - 180 + 200 @@ -159,9 +159,6 @@ false - - false - General @@ -179,308 +176,251 @@ 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - - - - - - - 0 - 0 - - - - - 9 - 75 - true - - - - URL - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 0 - 0 - - - - - 75 - true - - - - Password - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 0 - 0 - - - - - 75 - true - - - - Qt::LeftToRight - - - Username - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - - - - 0 - 0 - - - - - - - - - - - - - - - 0 - 0 - - - - - 75 - true - - - - Expiration - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - - - - + + + + + + + + + 0 + 0 + + + + + + + + + + + + 0 + 0 + + + + + 75 + true + + + + Expiration + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 0 + + + + + 9 + 75 + true + + + + URL + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + + + + 0 + 0 + + + + + 75 + true + + + + Password + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 0 + + + + + 75 + true + + + + Qt::LeftToRight + + + Username + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - - - - - - - - - - 75 - true - - - - Autotype - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 75 - true - - - - Expiration - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 75 - true - - - - Searching - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - - - - - - - - - - - - - 75 - true - - - - Access - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - - - - - - - 75 - true - - - - Creation - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 75 - true - - - - Modification - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - - + + + + + + 0 + 0 + + + + + + + + + 0 + 0 + + + + + 75 + true + + + + Autotype + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 0 + + + + + + + + + 0 + 0 + + + + + 75 + true + + + + Searching + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 0 + + + + + + + + + 0 + 0 + + + + + 75 + true + + + + Expiration + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + Qt::Vertical + + + + 20 + 40 + + + - - - - Qt::Vertical - - - - 20 - 40 - - - - @@ -553,6 +493,54 @@ + + + Autotype + + + + + + QFrame::Sunken + + + true + + + true + + + false + + + 2 + + + false + + + 250 + + + 50 + + + true + + + + Window + + + + + Sequence + + + + + +