aboutsummaryrefslogtreecommitdiffstats
path: root/src/ui/widgets/KeyTreeView.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/ui/widgets/KeyTreeView.cpp')
-rw-r--r--src/ui/widgets/KeyTreeView.cpp87
1 files changed, 69 insertions, 18 deletions
diff --git a/src/ui/widgets/KeyTreeView.cpp b/src/ui/widgets/KeyTreeView.cpp
index 3dde069a..3df5a440 100644
--- a/src/ui/widgets/KeyTreeView.cpp
+++ b/src/ui/widgets/KeyTreeView.cpp
@@ -31,10 +31,24 @@
#include <utility>
#include "core/function/gpg/GpgKeyGetter.h"
-#include "model/GpgKeyTreeProxyModel.h"
+#include "core/utils/GpgUtils.h"
+#include "ui/dialog/keypair_details/KeyDetailsDialog.h"
+#include "ui/model/GpgKeyTreeProxyModel.h"
namespace GpgFrontend::UI {
+KeyTreeView::KeyTreeView(QWidget* parent)
+ : QTreeView(parent),
+ channel_(kGpgFrontendDefaultChannel),
+ model_(QSharedPointer<GpgKeyTreeModel>::create(
+ channel_, GpgKeyGetter::GetInstance(channel_).FetchKey(),
+ [](auto) { return false; }, this)),
+ proxy_model_(
+ model_, GpgKeyTreeDisplayMode::kALL, [](auto) { return false; },
+ this) {
+ init();
+}
+
KeyTreeView::KeyTreeView(int channel,
GpgKeyTreeModel::Detector checkable_detector,
GpgKeyTreeProxyModel::KeyFilter filter,
@@ -42,10 +56,37 @@ KeyTreeView::KeyTreeView(int channel,
: QTreeView(parent),
channel_(channel),
model_(QSharedPointer<GpgKeyTreeModel>::create(
- channel, GpgKeyGetter::GetInstance(channel_).FetchKey(),
+ channel_, GpgKeyGetter::GetInstance(channel_).FetchKey(),
checkable_detector, this)),
proxy_model_(model_, GpgKeyTreeDisplayMode::kALL, std::move(filter),
this) {
+ init();
+}
+
+void KeyTreeView::paintEvent(QPaintEvent* event) {
+ QTreeView::paintEvent(event);
+
+ if (!init_) {
+ slot_adjust_column_widths();
+ init_ = true;
+ }
+}
+
+void KeyTreeView::slot_adjust_column_widths() {
+ for (int i = 1; i < model_->columnCount({}); ++i) {
+ this->resizeColumnToContents(i);
+ }
+}
+
+auto KeyTreeView::GetAllCheckedKeyIds() -> KeyIdArgsList {
+ return model_->GetAllCheckedKeyIds();
+}
+
+auto KeyTreeView::GetAllCheckedSubKey() -> QContainer<GpgSubKey> {
+ return model_->GetAllCheckedSubKey();
+}
+
+void KeyTreeView::init() {
setModel(&proxy_model_);
sortByColumn(2, Qt::AscendingOrder);
@@ -64,29 +105,39 @@ KeyTreeView::KeyTreeView(int channel,
setFocusPolicy(Qt::NoFocus);
setAlternatingRowColors(true);
setSortingEnabled(true);
-}
-void KeyTreeView::paintEvent(QPaintEvent* event) {
- QTreeView::paintEvent(event);
+ connect(this, &QTableView::doubleClicked, this,
+ [this](const QModelIndex& index) {
+ if (!index.isValid() || index.column() == 0) return;
- if (!init_) {
- slot_adjust_column_widths();
- init_ = true;
- }
-}
+ QModelIndex source_index = proxy_model_.mapToSource(index);
+ auto key =
+ GetGpgKeyByGpgAbstractKey(model_->GetKeyByIndex(source_index));
-void KeyTreeView::slot_adjust_column_widths() {
- for (int i = 1; i < model_->columnCount({}); ++i) {
- this->resizeColumnToContents(i);
- }
+ if (!key.IsGood()) {
+ QMessageBox::critical(this, tr("Error"), tr("Key Not Found."));
+ return;
+ }
+
+ new KeyDetailsDialog(model_->GetGpgContextChannel(), key, this);
+ });
}
-auto KeyTreeView::GetAllCheckedKeyIds() -> KeyIdArgsList {
- return model_->GetAllCheckedKeyIds();
+void KeyTreeView::SetKeyFilter(const GpgKeyTreeProxyModel::KeyFilter& filter) {
+ proxy_model_.SetKeyFilter(filter);
}
-auto KeyTreeView::GetAllCheckedSubKey() -> QContainer<GpgSubKey> {
- return model_->GetAllCheckedSubKey();
+void KeyTreeView::SetChannel(int channel) {
+ if (channel_ == channel) return;
+ LOG_D() << "new channel for key tree view: " << channel;
+
+ channel_ = channel;
+ init_ = false;
+ model_ = QSharedPointer<GpgKeyTreeModel>::create(
+ channel_, GpgKeyGetter::GetInstance(channel_).FetchKey(),
+ [](auto) { return false; }, this);
+ proxy_model_.setSourceModel(model_.get());
+ proxy_model_.invalidate();
}
} // namespace GpgFrontend::UI