mirror of
https://github.com/keepassxreboot/keepassxc.git
synced 2024-12-29 01:06:27 -05:00
Use a table view to display the list of attachments in EditEntryWidget
This commit is contained in:
parent
0a9b250d73
commit
bf5b96362f
@ -140,9 +140,14 @@ void EditEntryWidget::setupAdvanced()
|
|||||||
|
|
||||||
m_attachmentsModel->setEntryAttachments(m_entryAttachments);
|
m_attachmentsModel->setEntryAttachments(m_entryAttachments);
|
||||||
m_advancedUi->attachmentsView->setModel(m_attachmentsModel);
|
m_advancedUi->attachmentsView->setModel(m_attachmentsModel);
|
||||||
|
m_advancedUi->attachmentsView->horizontalHeader()->setStretchLastSection(true);
|
||||||
|
m_advancedUi->attachmentsView->horizontalHeader()->resizeSection(0, 600);
|
||||||
|
m_advancedUi->attachmentsView->setSelectionBehavior(QAbstractItemView::SelectRows);
|
||||||
|
m_advancedUi->attachmentsView->setSelectionMode(QAbstractItemView::MultiSelection);
|
||||||
|
|
||||||
m_advancedUi->attachmentsView->setSelectionMode(QAbstractItemView::ExtendedSelection);
|
m_advancedUi->attachmentsView->setSelectionMode(QAbstractItemView::ExtendedSelection);
|
||||||
connect(m_advancedUi->attachmentsView->selectionModel(), SIGNAL(currentChanged(QModelIndex,QModelIndex)),
|
connect(m_advancedUi->attachmentsView->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)),
|
||||||
SLOT(updateAttachmentButtonsEnabled(QModelIndex)));
|
SLOT(updateAttachmentButtonsEnabled()));
|
||||||
connect(m_advancedUi->attachmentsView, SIGNAL(doubleClicked(QModelIndex)), SLOT(openAttachment(QModelIndex)));
|
connect(m_advancedUi->attachmentsView, SIGNAL(doubleClicked(QModelIndex)), SLOT(openAttachment(QModelIndex)));
|
||||||
connect(m_advancedUi->saveAttachmentButton, SIGNAL(clicked()), SLOT(saveSelectedAttachments()));
|
connect(m_advancedUi->saveAttachmentButton, SIGNAL(clicked()), SLOT(saveSelectedAttachments()));
|
||||||
connect(m_advancedUi->openAttachmentButton, SIGNAL(clicked()), SLOT(openSelectedAttachments()));
|
connect(m_advancedUi->openAttachmentButton, SIGNAL(clicked()), SLOT(openSelectedAttachments()));
|
||||||
@ -510,15 +515,6 @@ void EditEntryWidget::useExpiryPreset(QAction* action)
|
|||||||
m_mainUi->expireDatePicker->setDateTime(expiryDateTime);
|
m_mainUi->expireDatePicker->setDateTime(expiryDateTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
void EditEntryWidget::updateAttachmentButtonsEnabled(const QModelIndex& current)
|
|
||||||
{
|
|
||||||
bool enable = current.isValid();
|
|
||||||
|
|
||||||
m_advancedUi->saveAttachmentButton->setEnabled(enable);
|
|
||||||
m_advancedUi->openAttachmentButton->setEnabled(enable);
|
|
||||||
m_advancedUi->removeAttachmentButton->setEnabled(enable && !m_history);
|
|
||||||
}
|
|
||||||
|
|
||||||
void EditEntryWidget::toggleHideNotes(bool visible)
|
void EditEntryWidget::toggleHideNotes(bool visible)
|
||||||
{
|
{
|
||||||
m_mainUi->notesEdit->setVisible(visible);
|
m_mainUi->notesEdit->setVisible(visible);
|
||||||
@ -581,7 +577,7 @@ void EditEntryWidget::setForms(const Entry* entry, bool restore)
|
|||||||
m_mainUi->togglePasswordGeneratorButton->setDisabled(m_history);
|
m_mainUi->togglePasswordGeneratorButton->setDisabled(m_history);
|
||||||
m_mainUi->passwordGenerator->reset();
|
m_mainUi->passwordGenerator->reset();
|
||||||
m_advancedUi->addAttachmentButton->setEnabled(!m_history);
|
m_advancedUi->addAttachmentButton->setEnabled(!m_history);
|
||||||
updateAttachmentButtonsEnabled(m_advancedUi->attachmentsView->currentIndex());
|
updateAttachmentButtonsEnabled();
|
||||||
m_advancedUi->addAttributeButton->setEnabled(!m_history);
|
m_advancedUi->addAttributeButton->setEnabled(!m_history);
|
||||||
m_advancedUi->editAttributeButton->setEnabled(false);
|
m_advancedUi->editAttributeButton->setEnabled(false);
|
||||||
m_advancedUi->removeAttributeButton->setEnabled(false);
|
m_advancedUi->removeAttributeButton->setEnabled(false);
|
||||||
@ -1069,7 +1065,7 @@ void EditEntryWidget::saveSelectedAttachment()
|
|||||||
|
|
||||||
void EditEntryWidget::saveSelectedAttachments()
|
void EditEntryWidget::saveSelectedAttachments()
|
||||||
{
|
{
|
||||||
const QModelIndexList indexes = m_advancedUi->attachmentsView->selectionModel()->selectedIndexes();
|
const QModelIndexList indexes = m_advancedUi->attachmentsView->selectionModel()->selectedRows(0);
|
||||||
if (indexes.isEmpty()) {
|
if (indexes.isEmpty()) {
|
||||||
return;
|
return;
|
||||||
} else if (indexes.count() == 1) {
|
} else if (indexes.count() == 1) {
|
||||||
@ -1140,7 +1136,7 @@ void EditEntryWidget::openAttachment(const QModelIndex& index)
|
|||||||
|
|
||||||
void EditEntryWidget::openSelectedAttachments()
|
void EditEntryWidget::openSelectedAttachments()
|
||||||
{
|
{
|
||||||
const QModelIndexList indexes = m_advancedUi->attachmentsView->selectionModel()->selectedIndexes();
|
const QModelIndexList indexes = m_advancedUi->attachmentsView->selectionModel()->selectedRows(0);
|
||||||
if (indexes.isEmpty()) {
|
if (indexes.isEmpty()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -1163,7 +1159,7 @@ void EditEntryWidget::removeSelectedAttachments()
|
|||||||
{
|
{
|
||||||
Q_ASSERT(!m_history);
|
Q_ASSERT(!m_history);
|
||||||
|
|
||||||
const QModelIndexList indexes = m_advancedUi->attachmentsView->selectionModel()->selectedIndexes();
|
const QModelIndexList indexes = m_advancedUi->attachmentsView->selectionModel()->selectedRows(0);
|
||||||
if (indexes.isEmpty()) {
|
if (indexes.isEmpty()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -1180,6 +1176,15 @@ void EditEntryWidget::removeSelectedAttachments()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void EditEntryWidget::updateAttachmentButtonsEnabled()
|
||||||
|
{
|
||||||
|
const bool hasSelection = m_advancedUi->attachmentsView->selectionModel()->hasSelection();
|
||||||
|
|
||||||
|
m_advancedUi->saveAttachmentButton->setEnabled(hasSelection);
|
||||||
|
m_advancedUi->openAttachmentButton->setEnabled(hasSelection);
|
||||||
|
m_advancedUi->removeAttachmentButton->setEnabled(hasSelection && !m_history);
|
||||||
|
}
|
||||||
|
|
||||||
void EditEntryWidget::updateAutoTypeEnabled()
|
void EditEntryWidget::updateAutoTypeEnabled()
|
||||||
{
|
{
|
||||||
bool autoTypeEnabled = m_autoTypeUi->enableButton->isChecked();
|
bool autoTypeEnabled = m_autoTypeUi->enableButton->isChecked();
|
||||||
|
@ -92,6 +92,7 @@ private slots:
|
|||||||
void openAttachment(const QModelIndex& index);
|
void openAttachment(const QModelIndex& index);
|
||||||
void openSelectedAttachments();
|
void openSelectedAttachments();
|
||||||
void removeSelectedAttachments();
|
void removeSelectedAttachments();
|
||||||
|
void updateAttachmentButtonsEnabled();
|
||||||
void updateAutoTypeEnabled();
|
void updateAutoTypeEnabled();
|
||||||
void insertAutoTypeAssoc();
|
void insertAutoTypeAssoc();
|
||||||
void removeAutoTypeAssoc();
|
void removeAutoTypeAssoc();
|
||||||
@ -106,7 +107,6 @@ private slots:
|
|||||||
void histEntryActivated(const QModelIndex& index);
|
void histEntryActivated(const QModelIndex& index);
|
||||||
void updateHistoryButtons(const QModelIndex& current, const QModelIndex& previous);
|
void updateHistoryButtons(const QModelIndex& current, const QModelIndex& previous);
|
||||||
void useExpiryPreset(QAction* action);
|
void useExpiryPreset(QAction* action);
|
||||||
void updateAttachmentButtonsEnabled(const QModelIndex& current);
|
|
||||||
void toggleHideNotes(bool visible);
|
void toggleHideNotes(bool visible);
|
||||||
#ifdef WITH_XC_SSHAGENT
|
#ifdef WITH_XC_SSHAGENT
|
||||||
void updateSSHAgent();
|
void updateSSHAgent();
|
||||||
|
@ -153,14 +153,7 @@
|
|||||||
</property>
|
</property>
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||||
<item>
|
<item>
|
||||||
<widget class="QListView" name="attachmentsView">
|
<widget class="QTableView" name="attachmentsView"/>
|
||||||
<property name="flow">
|
|
||||||
<enum>QListView::LeftToRight</enum>
|
|
||||||
</property>
|
|
||||||
<property name="isWrapping" stdset="0">
|
|
||||||
<bool>true</bool>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<layout class="QVBoxLayout" name="attachmentsButtonLayout">
|
<layout class="QVBoxLayout" name="attachmentsButtonLayout">
|
||||||
@ -234,7 +227,6 @@
|
|||||||
<tabstop>addAttributeButton</tabstop>
|
<tabstop>addAttributeButton</tabstop>
|
||||||
<tabstop>removeAttributeButton</tabstop>
|
<tabstop>removeAttributeButton</tabstop>
|
||||||
<tabstop>editAttributeButton</tabstop>
|
<tabstop>editAttributeButton</tabstop>
|
||||||
<tabstop>attachmentsView</tabstop>
|
|
||||||
<tabstop>addAttachmentButton</tabstop>
|
<tabstop>addAttachmentButton</tabstop>
|
||||||
<tabstop>removeAttachmentButton</tabstop>
|
<tabstop>removeAttachmentButton</tabstop>
|
||||||
<tabstop>openAttachmentButton</tabstop>
|
<tabstop>openAttachmentButton</tabstop>
|
||||||
|
@ -26,6 +26,8 @@ EntryAttachmentsModel::EntryAttachmentsModel(QObject* parent)
|
|||||||
: QAbstractListModel(parent)
|
: QAbstractListModel(parent)
|
||||||
, m_entryAttachments(nullptr)
|
, m_entryAttachments(nullptr)
|
||||||
{
|
{
|
||||||
|
m_headers << tr("Name")
|
||||||
|
<< tr("Size");
|
||||||
}
|
}
|
||||||
|
|
||||||
void EntryAttachmentsModel::setEntryAttachments(EntryAttachments* entryAttachments)
|
void EntryAttachmentsModel::setEntryAttachments(EntryAttachments* entryAttachments)
|
||||||
@ -65,7 +67,17 @@ int EntryAttachmentsModel::columnCount(const QModelIndex& parent) const
|
|||||||
{
|
{
|
||||||
Q_UNUSED(parent);
|
Q_UNUSED(parent);
|
||||||
|
|
||||||
return 1;
|
return Columns::ColumnsCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
QVariant EntryAttachmentsModel::headerData(int section, Qt::Orientation orientation, int role) const
|
||||||
|
{
|
||||||
|
if (orientation == Qt::Horizontal && role == Qt::DisplayRole) {
|
||||||
|
Q_ASSERT(m_headers.size() == columnCount());
|
||||||
|
return m_headers[section];
|
||||||
|
}
|
||||||
|
|
||||||
|
return QAbstractListModel::headerData(section, orientation, role);
|
||||||
}
|
}
|
||||||
|
|
||||||
QVariant EntryAttachmentsModel::data(const QModelIndex& index, int role) const
|
QVariant EntryAttachmentsModel::data(const QModelIndex& index, int role) const
|
||||||
@ -74,15 +86,18 @@ QVariant EntryAttachmentsModel::data(const QModelIndex& index, int role) const
|
|||||||
return QVariant();
|
return QVariant();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (role == Qt::DisplayRole && index.column() == 0) {
|
if (role == Qt::DisplayRole) {
|
||||||
QString key = keyByIndex(index);
|
QString key = keyByIndex(index);
|
||||||
|
switch (index.column()) {
|
||||||
return QString("%1 (%2)").arg(key,
|
case Columns::NameColumn:
|
||||||
Tools::humanReadableFileSize(m_entryAttachments->value(key).size()));
|
return key;
|
||||||
}
|
case Columns::SizeColumn:
|
||||||
else {
|
return Tools::humanReadableFileSize(m_entryAttachments->value(key).size());
|
||||||
return QVariant();
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
return QVariant();
|
||||||
}
|
}
|
||||||
|
|
||||||
QString EntryAttachmentsModel::keyByIndex(const QModelIndex& index) const
|
QString EntryAttachmentsModel::keyByIndex(const QModelIndex& index) const
|
||||||
|
@ -27,10 +27,17 @@ class EntryAttachmentsModel : public QAbstractListModel
|
|||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
enum Columns {
|
||||||
|
NameColumn,
|
||||||
|
SizeColumn,
|
||||||
|
ColumnsCount
|
||||||
|
};
|
||||||
|
|
||||||
explicit EntryAttachmentsModel(QObject* parent = nullptr);
|
explicit EntryAttachmentsModel(QObject* parent = nullptr);
|
||||||
void setEntryAttachments(EntryAttachments* entry);
|
void setEntryAttachments(EntryAttachments* entry);
|
||||||
int rowCount(const QModelIndex& parent = QModelIndex()) const override;
|
int rowCount(const QModelIndex& parent = QModelIndex()) const override;
|
||||||
int columnCount(const QModelIndex& parent = QModelIndex()) const override;
|
int columnCount(const QModelIndex& parent = QModelIndex()) const override;
|
||||||
|
QVariant headerData(int section, Qt::Orientation orientation, int role) const override;
|
||||||
QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override;
|
QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override;
|
||||||
QString keyByIndex(const QModelIndex& index) const;
|
QString keyByIndex(const QModelIndex& index) const;
|
||||||
|
|
||||||
@ -45,6 +52,7 @@ private slots:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
EntryAttachments* m_entryAttachments;
|
EntryAttachments* m_entryAttachments;
|
||||||
|
QStringList m_headers;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // KEEPASSX_ENTRYATTACHMENTSMODEL_H
|
#endif // KEEPASSX_ENTRYATTACHMENTSMODEL_H
|
||||||
|
Loading…
Reference in New Issue
Block a user