diff --git a/src/gpgcardgui/tabbedcarddialog.cpp b/src/gpgcardgui/tabbedcarddialog.cpp index e334e81..c5fb0f3 100644 --- a/src/gpgcardgui/tabbedcarddialog.cpp +++ b/src/gpgcardgui/tabbedcarddialog.cpp @@ -1,62 +1,81 @@ #include "tabbedcarddialog.h" TabbedCardDialog::TabbedCardDialog(QWidget *parent): QWidget(parent) { mTabWidget = new QTabWidget(this); mManager.startCardList(); connect (&mManager, &Kleo::SmartCard::CardManager::cardsMayHaveChanged, this, [this] () { mTabWidget->clear(); const auto cards = mManager.cards(); for (const auto card: cards) { if (card) { if (!mCards.contains(card->serialNumber())) setCard(card); else updateCard(card); } } }); mManager.startCardList(); } void TabbedCardDialog::setCard(std::shared_ptr card) { int lastTab = mTabWidget->count(); for (const auto serialNo: index2SerialNoMap) { if (serialNo == card->serialNumber()) return; } if (!card) { qCDebug(LIBKLEO_LOG) << "No card parsable"; mTabWidget->addTab(mPlaceHolderWidget); + //FIXME } if (card->appType() == Card::OpenPGPApplication) { - mPGPCardWidget->setCard(static_cast (card.get())); - mTabWidget->addTab(mPGPCardWidget); + mPGPCardWidgets[card->serialNumber()].setCard(static_cast (card.get())); + mTabWidget->addTab(mPGPCardWidgets[card->serialNumber()], + card->reader()); } else if (card->appType() == Card::NksApplication) { - mNetKeyWidget->setCard(static_cast (card.get())); - mTabWidget->addTab(mNetKeyWidget); + mNetKeyWidgets[card->serialNumber()].setCard(static_cast (card.get())); + mTabWidget->addTab(mNetKeyWidgets[card->serialNumber()], + card->reader()); } else { qCDebug(LIBKLEO_LOG) << "Ignoring unknown card: " << card->serialNumber(); - mTabWidget->addTab(mPlaceHolderWidget); + mTabWidget->addTab(mPlaceHolderWidgets[card->serialNumber()], + card->reader()); } index2SerialNoMap[lastTab] = card->serialNumber(); } void TabbedCardDialog::updateCard(std::shared_ptr card) { - for (int i=0; i > index2SerialNoMap.end(); i++) + for (QMap::iterator + i=index2SerialNoMap.begin(); i != index2SerialNoMap.end(); i++) { if (index2SerialNoMap[i] == card->serialNumber()) - mTabWidget->insertTab(i, WIDGET, "FIXME"); + { + if (card->appType() == Card::OpenPGPApplication) { + mPGPCardWidget->setCard(static_cast (card.get())); + mTabWidget->addTab(mPGPCardWidgets[card->serialNumber()], + card->reader()); + } else if (card->appType() == Card::NksApplication) { + mNetKeyWidgets[card->serialNumber()].setCard(static_cast (card.get())); + mTabWidget->insertTab(i, mNetKeyWidgets[card->serialNumber()], + card->reader()); + } else { + qCDebug(LIBKLEO_LOG) << "Ignoring unknown card: " << card->serialNumber(); + mTabWidget->insertTab(i, mPlaceHolderWidgets[card->serialNumber()], + card->reader()); + } + } } } diff --git a/src/gpgcardgui/tabbedcarddialog.h b/src/gpgcardgui/tabbedcarddialog.h index ba7c540..f80c99d 100644 --- a/src/gpgcardgui/tabbedcarddialog.h +++ b/src/gpgcardgui/tabbedcarddialog.h @@ -1,31 +1,45 @@ /* Copyright (C) 2020 by g10 Code GmbH * * This file is free software under the GNU GPL (v>=2) * and comes with ABSOLUTELY NO WARRANTY! * See LICENSE.txt for details. */ #pragma once + +#include "gpgcardwidget.h" +#include "openpgpcard.h" +#include "netkeycard.h" +#include "pgpcardwidget.h" +#include "netkeywidget.h" +#include "cardmanager.h" +#include "placeholderwidget.h" + #include #include #include #include #include + class TabbedCardDialog : public QWidget { Q_OBJECT public: explicit TabbedCardDialog(QWidget *parent); private: QTabWidget *mTabWidget; Kleo::SmartCard::CardManager mManager; QMap mCards; + QMap mNetKeyWidgets; + QMap mPGPCardWidgets; + QMap mPlaceHolderWidgets; QMap index2SerialNoMap; + void setCard(std::shared_ptr card); void updateCard(std::shared_ptr card); };