Add key viewer
diff --git a/src/fib-status.cpp b/src/fib-status.cpp
index 8f56483..9b8079f 100644
--- a/src/fib-status.cpp
+++ b/src/fib-status.cpp
@@ -36,7 +36,7 @@
FibStatusModel::FibStatusModel(Face& face, QObject *parent/* = 0*/)
: QAbstractListModel(parent)
- , m_face(face)
+ // , m_face(face)
{
}
diff --git a/src/fib-status.hpp b/src/fib-status.hpp
index 0ebd80e..a5d365e 100644
--- a/src/fib-status.hpp
+++ b/src/fib-status.hpp
@@ -103,7 +103,7 @@
onTimeout();
private:
- Face& m_face;
+ // Face& m_face;
QList<FibStatusItem> m_items;
// shared_ptr<OBufferStream> m_buffer;
};
diff --git a/src/key-tree-item.cpp b/src/key-tree-item.cpp
new file mode 100644
index 0000000..070537e
--- /dev/null
+++ b/src/key-tree-item.cpp
@@ -0,0 +1,104 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/**
+ * Copyright (c) 2013-2014, Regents of the University of California,
+ *
+ * This file is part of NFD Control Center. See AUTHORS.md for complete list of NFD
+ * authors and contributors.
+ *
+ * NFD Control Center 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.
+ *
+ * NFD Control Center 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 NFD
+ * Control Center, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+
+#include <QStringList>
+#include "key-tree-item.hpp"
+
+namespace ndn {
+namespace ncc {
+
+KeyTreeItem::KeyTreeItem(const QVariant& name, const QVariant& data, Type type, KeyTreeItem* parent)
+ : m_name(name)
+ , m_data(data)
+ , m_type(type)
+ , m_parentItem(parent)
+{
+}
+
+KeyTreeItem::~KeyTreeItem()
+{
+ qDeleteAll(m_childItems);
+}
+
+void
+KeyTreeItem::setParent(KeyTreeItem* parent)
+{
+ m_parentItem = parent;
+}
+
+void
+KeyTreeItem::appendChild(KeyTreeItem* item)
+{
+ m_childItems.append(item);
+}
+
+KeyTreeItem*
+KeyTreeItem::child(int row)
+{
+ return m_childItems.value(row);
+}
+
+int
+KeyTreeItem::childCount() const
+{
+ return m_childItems.count();
+}
+
+int
+KeyTreeItem::columnCount() const
+{
+ return 1;
+}
+
+QVariant
+KeyTreeItem::name() const
+{
+ return m_name;
+}
+
+QVariant
+KeyTreeItem::data() const
+{
+ return m_data;
+}
+
+KeyTreeItem::Type
+KeyTreeItem::type() const
+{
+ return m_type;
+}
+
+KeyTreeItem*
+KeyTreeItem::parentItem()
+{
+ return m_parentItem;
+}
+
+int
+KeyTreeItem::row() const
+{
+ if (m_parentItem)
+ return m_parentItem->m_childItems.indexOf(const_cast<KeyTreeItem*>(this));
+
+ return 0;
+}
+
+} // namespace ndn
+} // namespace ncc
diff --git a/src/key-tree-item.hpp b/src/key-tree-item.hpp
new file mode 100644
index 0000000..6d7a02a
--- /dev/null
+++ b/src/key-tree-item.hpp
@@ -0,0 +1,90 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/**
+ * Copyright (c) 2013-2014, Regents of the University of California,
+ *
+ * This file is part of NFD Control Center. See AUTHORS.md for complete list of NFD
+ * authors and contributors.
+ *
+ * NFD Control Center 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.
+ *
+ * NFD Control Center 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 NFD
+ * Control Center, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef NDN_NCC_KEY_TREE_ITEM_HPP
+#define NDN_NCC_KEY_TREE_ITEM_HPP
+
+#include <string>
+#include <QList>
+#include <QVariant>
+
+namespace ndn {
+namespace ncc {
+
+class KeyTreeItem
+{
+public:
+ enum class Type {
+ ROOT = 0,
+ ID = 1,
+ KEY = 2,
+ CERT = 3
+ };
+
+public:
+ explicit
+ KeyTreeItem(const QVariant& name,
+ const QVariant& data = QVariant(),
+ Type type = Type::ROOT,
+ KeyTreeItem* parent = nullptr);
+
+ ~KeyTreeItem();
+
+ void
+ setParent(KeyTreeItem* parent);
+
+ void
+ appendChild(KeyTreeItem* child);
+
+ KeyTreeItem*
+ child(int row);
+
+ int
+ childCount() const;
+
+ int
+ columnCount() const;
+
+ QVariant
+ name() const;
+
+ QVariant
+ data() const;
+
+ Type
+ type() const;
+
+ int
+ row() const;
+
+ KeyTreeItem*
+ parentItem();
+
+private:
+ QList<KeyTreeItem*> m_childItems;
+ QVariant m_name;
+ QVariant m_data;
+ Type m_type;
+ KeyTreeItem* m_parentItem;
+};
+
+} // namespace ndn
+} // namespace ncc
+
+#endif // NDN_NCC_KEY_TREE_ITEM_HPP
diff --git a/src/key-tree-model.cpp b/src/key-tree-model.cpp
new file mode 100644
index 0000000..ec4fc02
--- /dev/null
+++ b/src/key-tree-model.cpp
@@ -0,0 +1,214 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/**
+ * Copyright (c) 2013-2014, Regents of the University of California,
+ *
+ * This file is part of NFD Control Center. See AUTHORS.md for complete list of NFD
+ * authors and contributors.
+ *
+ * NFD Control Center 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.
+ *
+ * NFD Control Center 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 NFD
+ * Control Center, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "key-tree-model.hpp"
+#include "key-tree-item.hpp"
+
+#include <QStringList>
+
+
+#ifdef WAF
+#include "key-tree-model.moc"
+#endif
+
+namespace ndn {
+namespace ncc {
+
+KeyTreeModel::KeyTreeModel(QObject *parent)
+ : QAbstractItemModel(parent)
+ , m_rootItem(new KeyTreeItem(QVariant("")))
+{
+}
+
+KeyTreeModel::~KeyTreeModel()
+{
+ delete m_rootItem;
+}
+
+void
+KeyTreeModel::clear()
+{
+ delete m_rootItem;
+ m_rootItem = new KeyTreeItem(QVariant(""));
+}
+
+void
+KeyTreeModel::addChild(KeyTreeItem* child)
+{
+ child->setParent(m_rootItem);
+ m_rootItem->appendChild(child);
+}
+
+int
+KeyTreeModel::columnCount(const QModelIndex& parent) const
+{
+ if (parent.isValid())
+ return static_cast<KeyTreeItem*>(parent.internalPointer())->columnCount();
+ else
+ return m_rootItem->columnCount();
+}
+
+QVariant
+KeyTreeModel::name(const QModelIndex& index, int role) const
+{
+ if (!index.isValid())
+ return QVariant();
+
+ if (role != Qt::DisplayRole)
+ return QVariant();
+
+ KeyTreeItem* item = static_cast<KeyTreeItem*>(index.internalPointer());
+
+ return item->name();
+}
+
+QVariant
+KeyTreeModel::data(const QModelIndex& index, int role) const
+{
+ if (!index.isValid())
+ return QVariant();
+
+ if (role != Qt::DisplayRole)
+ return QVariant();
+
+ KeyTreeItem* item = static_cast<KeyTreeItem*>(index.internalPointer());
+
+ return item->data();
+}
+
+Qt::ItemFlags
+KeyTreeModel::flags(const QModelIndex& index) const
+{
+ if (!index.isValid())
+ return 0;
+
+ return QAbstractItemModel::flags(index);
+}
+
+QVariant
+KeyTreeModel::headerData(int section, Qt::Orientation orientation, int role) const
+{
+ // if (orientation == Qt::Horizontal && role == Qt::DisplayRole)
+ // return m_rootItem->data();
+
+ return QVariant();
+}
+
+QModelIndex
+KeyTreeModel::index(int row, int column, const QModelIndex &parent) const
+{
+ if (!hasIndex(row, column, parent))
+ return QModelIndex();
+
+ KeyTreeItem *parentItem;
+
+ if (!parent.isValid())
+ parentItem = m_rootItem;
+ else
+ parentItem = static_cast<KeyTreeItem*>(parent.internalPointer());
+
+ KeyTreeItem *childItem = parentItem->child(row);
+ if (childItem)
+ return createIndex(row, column, childItem);
+ else
+ return QModelIndex();
+}
+
+QModelIndex
+KeyTreeModel::parent(const QModelIndex &index) const
+{
+ if (!index.isValid())
+ return QModelIndex();
+
+ KeyTreeItem *childItem = static_cast<KeyTreeItem*>(index.internalPointer());
+ KeyTreeItem *parentItem = childItem->parentItem();
+
+ if (parentItem == m_rootItem)
+ return QModelIndex();
+
+ return createIndex(parentItem->row(), 0, parentItem);
+}
+
+int
+KeyTreeModel::rowCount(const QModelIndex &parent) const
+{
+ KeyTreeItem *parentItem;
+ if (parent.column() > 0)
+ return 0;
+
+ if (!parent.isValid())
+ parentItem = m_rootItem;
+ else
+ parentItem = static_cast<KeyTreeItem*>(parent.internalPointer());
+
+ return parentItem->childCount();
+}
+
+// void
+// KeyTreeModel::setupModelData(const QStringList &lines, KeyTreeItem *parent)
+// {
+ // QList<KeyTreeItem*> parents;
+ // QList<int> indentations;
+ // parents << parent;
+ // indentations << 0;
+
+ // int number = 0;
+
+ // while (number < lines.count()) {
+ // int position = 0;
+ // while (position < lines[number].length()) {
+ // if (lines[number].at(position) != ' ')
+ // break;
+ // position++;
+ // }
+
+ // QString lineData = lines[number].mid(position).trimmed();
+
+ // if (!lineData.isEmpty()) {
+ // // Read the column data from the rest of the line.
+ // QStringList columnStrings = lineData.split("\t", QString::SkipEmptyParts);
+ // QList<QVariant> columnData;
+ // for (int column = 0; column < columnStrings.count(); ++column)
+ // columnData << columnStrings[column];
+
+ // if (position > indentations.last()) {
+ // // The last child of the current parent is now the new parent
+ // // unless the current parent has no children.
+
+ // if (parents.last()->childCount() > 0) {
+ // parents << parents.last()->child(parents.last()->childCount()-1);
+ // indentations << position;
+ // }
+ // } else {
+ // while (position < indentations.last() && parents.count() > 0) {
+ // parents.pop_back();
+ // indentations.pop_back();
+ // }
+ // }
+
+ // // Append a new item to the current parent's list of children.
+ // parents.last()->appendChild(new TreeItem(columnData, parents.last()));
+ // }
+
+ // ++number;
+ // }
+// }
+
+} // namespace ndn
+} // namespace ncc
diff --git a/src/key-tree-model.hpp b/src/key-tree-model.hpp
new file mode 100644
index 0000000..4cb72ce
--- /dev/null
+++ b/src/key-tree-model.hpp
@@ -0,0 +1,80 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/**
+ * Copyright (c) 2013-2014, Regents of the University of California,
+ *
+ * This file is part of NFD Control Center. See AUTHORS.md for complete list of NFD
+ * authors and contributors.
+ *
+ * NFD Control Center 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.
+ *
+ * NFD Control Center 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 NFD
+ * Control Center, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef NDN_NCC_KEY_TREE_MODEL_HPP
+#define NDN_NCC_KEY_TREE_MODEL_HPP
+
+#include <QAbstractItemModel>
+#include <QModelIndex>
+#include <QVariant>
+
+namespace ndn {
+namespace ncc {
+
+class KeyTreeItem;
+
+class KeyTreeModel : public QAbstractItemModel
+{
+ Q_OBJECT
+
+public:
+ explicit
+ KeyTreeModel(QObject* parent = 0);
+
+ ~KeyTreeModel();
+
+ void
+ clear();
+
+ void
+ addChild(KeyTreeItem* child);
+
+ QVariant
+ name(const QModelIndex& index, int role) const;
+
+ QVariant
+ data(const QModelIndex& index, int role) const Q_DECL_OVERRIDE;
+
+ Qt::ItemFlags
+ flags(const QModelIndex& index) const Q_DECL_OVERRIDE;
+
+ QVariant
+ headerData(int section, Qt::Orientation orientation,
+ int role = Qt::DisplayRole) const Q_DECL_OVERRIDE;
+
+ QModelIndex
+ index(int row, int column, const QModelIndex& parent = QModelIndex()) const Q_DECL_OVERRIDE;
+
+ QModelIndex
+ parent(const QModelIndex& index) const Q_DECL_OVERRIDE;
+
+ int
+ rowCount(const QModelIndex& parent = QModelIndex()) const Q_DECL_OVERRIDE;
+
+ int
+ columnCount(const QModelIndex& parent = QModelIndex()) const Q_DECL_OVERRIDE;
+
+private:
+ KeyTreeItem* m_rootItem;
+};
+
+} // namespace ncc
+} // namespace ndn
+
+#endif // NDN_NCC_KEY_TREE_MODEL_HPP
diff --git a/src/key-viewer-dialog.cpp b/src/key-viewer-dialog.cpp
new file mode 100644
index 0000000..9a95bbd
--- /dev/null
+++ b/src/key-viewer-dialog.cpp
@@ -0,0 +1,189 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/**
+ * Copyright (c) 2013-2014, Regents of the University of California,
+ *
+ * This file is part of NFD Control Center. See AUTHORS.md for complete list of NFD
+ * authors and contributors.
+ *
+ * NFD Control Center 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.
+ *
+ * NFD Control Center 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 NFD
+ * Control Center, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "key-viewer-dialog.hpp"
+#include "ui_key-viewer-dialog.h"
+#include "key-tree-item.hpp"
+
+#include <iostream>
+
+
+#ifdef WAF
+#include "key-viewer-dialog.moc"
+#endif
+
+namespace ndn {
+namespace ncc {
+
+KeyViewerDialog::KeyViewerDialog(QWidget *parent)
+ : QDialog(parent)
+ , ui(new Ui::KeyViewerDialog)
+ , m_model(new KeyTreeModel)
+{
+ ui->setupUi(this);
+
+ ui->treeView->setModel(m_model.get());
+ ui->treeView->show();
+
+ connect(ui->treeView, SIGNAL(clicked(const QModelIndex&)), this, SLOT(displayCert(const QModelIndex&)));
+}
+
+KeyViewerDialog::~KeyViewerDialog()
+{
+}
+
+void
+KeyViewerDialog::updateModel()
+{
+}
+
+void
+KeyViewerDialog::present()
+{
+ m_keyChain = make_shared<KeyChain>();
+ auto newModel = make_shared<KeyTreeModel>();
+
+ std::vector<Name> defaultIdentities;
+ m_keyChain->getAllIdentities(defaultIdentities, true);
+ for (const auto& identity : defaultIdentities) {
+ newModel->addChild(createIdentityNode(identity));
+ }
+
+ std::vector<Name> otherIdentities;
+ m_keyChain->getAllIdentities(otherIdentities, false);
+ for (const auto& identity : otherIdentities) {
+ newModel->addChild(createIdentityNode(identity));
+ }
+
+ ui->treeView->setModel(newModel.get());
+ ui->treeView->show();
+ m_model = newModel;
+
+ show();
+ raise();
+}
+
+void
+KeyViewerDialog::displayCert(const QModelIndex& index)
+{
+ std::cerr << "clicked" << std::endl;
+
+ QModelIndex parent = index;
+ KeyTreeItem* item = static_cast<KeyTreeItem*>(parent.internalPointer());
+ if (item->type() == KeyTreeItem::Type::ID) {
+ std::cerr << item->name().toString().toStdString() << std::endl;
+ parent = m_model->index(0, 0, parent);
+ }
+
+ item = static_cast<KeyTreeItem*>(parent.internalPointer());
+ if (item->type() == KeyTreeItem::Type::KEY) {
+ std::cerr << item->name().toString().toStdString() << std::endl;
+ parent = m_model->index(0, 0, parent);
+ }
+
+ shared_ptr<QStandardItemModel> tableModel;
+ item = static_cast<KeyTreeItem*>(parent.internalPointer());
+ if (item->type() == KeyTreeItem::Type::CERT) {
+ std::cerr << item->name().toString().toStdString() << std::endl;
+
+ shared_ptr<IdentityCertificate> cert =
+ m_keyChain->getCertificate(Name(item->name().toString().toStdString()));
+
+ tableModel = make_shared<QStandardItemModel>(5, 2);
+ tableModel->setItem(0, 0, new QStandardItem(QString("Name")));
+ tableModel->setItem(0, 1, new QStandardItem(item->name().toString()));
+
+ tableModel->setItem(1, 0, new QStandardItem(QString("NotBefore")));
+ tableModel->setItem(1, 1, new QStandardItem(QString::fromStdString(time::toIsoString(cert->getNotBefore()))));
+
+ tableModel->setItem(2, 0, new QStandardItem(QString("NotAfter")));
+ tableModel->setItem(2, 1, new QStandardItem(QString::fromStdString(time::toIsoString(cert->getNotAfter()))));
+
+ tableModel->setItem(3, 0, new QStandardItem(QString("FingerPrint")));
+ tableModel->setItem(3, 1, new QStandardItem(QString("FFFF")));
+
+ Name signerName = cert->getSignature().getKeyLocator().getName();
+ tableModel->setItem(4, 0, new QStandardItem(QString("KeyLocator")));
+ tableModel->setItem(4, 1, new QStandardItem(QString::fromStdString(signerName.toUri())));
+ }
+ else {
+ tableModel = make_shared<QStandardItemModel>(5, 2);
+ }
+ ui->tableView->setModel(tableModel.get());
+ ui->tableView->resizeColumnsToContents();
+ QHeaderView* header = ui->tableView->horizontalHeader();
+ header->setStretchLastSection(true);
+ ui->tableView->setHorizontalHeader(header);
+ ui->tableView->show();
+ m_tableModel = tableModel;
+}
+
+KeyTreeItem*
+KeyViewerDialog::createIdentityNode(const Name& identity)
+{
+ KeyTreeItem* idItem = new KeyTreeItem(QVariant(QString::fromStdString(identity.toUri())),
+ QVariant(QString::fromStdString(identity.toUri())),
+ KeyTreeItem::Type::ID);
+
+ std::vector<Name> defaultKeys;
+ m_keyChain->getAllKeyNamesOfIdentity(identity, defaultKeys, true);
+ for (const auto& keyName : defaultKeys) {
+ idItem->appendChild(createKeyNode(keyName, idItem));
+ }
+
+ std::vector<ndn::Name> otherKeys;
+ m_keyChain->getAllKeyNamesOfIdentity(identity, otherKeys, false);
+ for (const auto& keyName : otherKeys) {
+ idItem->appendChild(createKeyNode(keyName, idItem));
+ }
+
+ return idItem;
+}
+
+KeyTreeItem*
+KeyViewerDialog::createKeyNode(const Name& keyName, KeyTreeItem* idItem)
+{
+ KeyTreeItem* keyItem = new KeyTreeItem(QVariant(QString::fromStdString(keyName.toUri())),
+ QVariant(QString::fromStdString(keyName[-1].toUri())),
+ KeyTreeItem::Type::KEY,
+ idItem);
+
+ std::vector<Name> defaultCertificates;
+ m_keyChain->getAllCertificateNamesOfKey(keyName, defaultCertificates, true);
+ for (const auto& certName : defaultCertificates) {
+ keyItem->appendChild(new KeyTreeItem(QVariant(QString::fromStdString(certName.toUri())),
+ QVariant(QString::fromStdString(certName[-1].toUri())),
+ KeyTreeItem::Type::CERT,
+ keyItem));
+ }
+
+ std::vector<ndn::Name> otherCertificates;
+ m_keyChain->getAllCertificateNamesOfKey(keyName, otherCertificates, false);
+ for (const auto& certName : otherCertificates) {
+ keyItem->appendChild(new KeyTreeItem(QVariant(QString::fromStdString(certName.toUri())),
+ QVariant(QString::fromStdString(certName[-1].toUri())),
+ KeyTreeItem::Type::CERT,
+ keyItem));
+ }
+
+ return keyItem;
+}
+
+} // namespace ncc
+} // namespace ndn
diff --git a/src/key-viewer-dialog.hpp b/src/key-viewer-dialog.hpp
new file mode 100644
index 0000000..60996af
--- /dev/null
+++ b/src/key-viewer-dialog.hpp
@@ -0,0 +1,85 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/**
+ * Copyright (c) 2013-2014, Regents of the University of California,
+ *
+ * This file is part of NFD Control Center. See AUTHORS.md for complete list of NFD
+ * authors and contributors.
+ *
+ * NFD Control Center 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.
+ *
+ * NFD Control Center 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 NFD
+ * Control Center, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef NDN_NCC_KEY_VIEWER_DIALOG_HPP
+#define NDN_NCC_KEY_VIEWER_DIALOG_HPP
+
+#include "key-tree-model.hpp"
+#include <ndn-cxx/security/key-chain.hpp>
+
+#include <QDialog>
+#include <QStandardItemModel>
+
+namespace Ui {
+class KeyViewerDialog;
+}
+
+namespace ndn {
+namespace ncc {
+
+class KeyViewerDialog : public QDialog
+{
+ Q_OBJECT
+
+public:
+ KeyViewerDialog(QWidget *parent = 0);
+
+ virtual
+ ~KeyViewerDialog();
+
+ void
+ updateModel();
+
+private:
+ KeyTreeItem*
+ createIdentityNode(const Name& identity);
+
+ KeyTreeItem*
+ createKeyNode(const Name& keyName, KeyTreeItem* idItem);
+
+signals:
+ void
+ clicked(const QModelIndex &index);
+
+public slots:
+ void
+ present();
+
+private slots:
+ void
+ displayCert(const QModelIndex& index);
+ // void insertChild();
+ // bool insertColumn();
+ // void insertRow();
+ // bool removeColumn();
+ // void removeRow();
+
+private:
+ Ui::KeyViewerDialog* ui;
+
+ shared_ptr<KeyTreeModel> m_model;
+ shared_ptr<KeyChain> m_keyChain;
+
+ shared_ptr<QStandardItemModel> m_tableModel;
+};
+
+} // namespace ncc
+} // namespace ndn
+
+#endif // NDN_NCC_KEY_VIEWER_DIALOG_HPP
diff --git a/src/key-viewer-dialog.ui b/src/key-viewer-dialog.ui
new file mode 100644
index 0000000..e3b6e38
--- /dev/null
+++ b/src/key-viewer-dialog.ui
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>KeyViewerDialog</class>
+ <widget class="QDialog" name="KeyViewerDialog">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>800</width>
+ <height>600</height>
+ </rect>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>960</width>
+ <height>720</height>
+ </size>
+ </property>
+ <property name="windowTitle">
+ <string>NDN Key Viewer</string>
+ </property>
+ <property name="sizeGripEnabled">
+ <bool>true</bool>
+ </property>
+ <property name="modal">
+ <bool>false</bool>
+ </property>
+ <layout class="QHBoxLayout" name="horizontalLayout_2">
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout" stretch="1,1">
+ <property name="sizeConstraint">
+ <enum>QLayout::SetMaximumSize</enum>
+ </property>
+ <item>
+ <widget class="QTreeView" name="treeView"/>
+ </item>
+ <item>
+ <widget class="QTableView" name="tableView"/>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/src/tray-menu.cpp b/src/tray-menu.cpp
index 115cec1..1d47216 100644
--- a/src/tray-menu.cpp
+++ b/src/tray-menu.cpp
@@ -46,11 +46,14 @@
, m_entryPref(new QAction("Preferences...", m_menu))
, m_entrySec(new QAction("Security", m_menu))
, m_entryQuit(new QAction("Quit", m_menu))
+ , m_keyViewerDialog(new ncc::KeyViewerDialog)
{
connect(m_entryPref, SIGNAL(triggered()), this, SIGNAL(showApp()));
+ connect(m_entrySec, SIGNAL(triggered()), m_keyViewerDialog, SLOT(present()));
connect(m_entryQuit, SIGNAL(triggered()), this, SLOT(quitApp()));
+
connect(this, SIGNAL(nfdActivityUpdate(bool)), this, SLOT(updateNfdActivityIcon(bool)),
Qt::QueuedConnection);
diff --git a/src/tray-menu.hpp b/src/tray-menu.hpp
index 952260a..9e78abc 100644
--- a/src/tray-menu.hpp
+++ b/src/tray-menu.hpp
@@ -30,6 +30,8 @@
#include <QtQml/QQmlContext>
+#include "key-viewer-dialog.hpp"
+
namespace ndn {
class TrayMenu : public QWidget
@@ -90,6 +92,8 @@
QAction* m_entryPref;
QAction* m_entrySec;
QAction* m_entryQuit;
+
+ ncc::KeyViewerDialog* m_keyViewerDialog;
};
} // namespace ndn