This library provides a simple and nice C++ wrapper around these libraries, so that programmers can concentrate on functionality. It offers general support for PCSC-lite, OpenSSL, PKCS#11, plus specific functionality for the SuisseID.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

118 lines
3.4 KiB

/*! @file
@id $Id$
*/
// 1 2 3 4 5 6 7 8
// 45678901234567890123456789012345678901234567890123456789012345678901234567890
#ifndef CARDGUI_HXX
#define CARDGUI_HXX
#include <cardgui-model.hxx>
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#include <ui_cardgui.hxx>
#pragma GCC diagnostic pop
#include <password.hxx>
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#include <QtCore/QProcess>
#if QT_VERSION >= 0x050000
#include <QtWidgets/QMessageBox>
#else
#include <QtGui/QMessageBox>
#endif
#pragma GCC diagnostic pop
class CardGui: public QMainWindow, protected Ui_CardGui {
Q_OBJECT
public:
CardGui(QWidget* p=0):
QMainWindow(p), _pwd(this) {
setupUi(this);
on__rescan_clicked();
}
void resizeEvent(QResizeEvent* event) {
QMainWindow::resizeEvent(event);
if (_tree->model())
for (int i = 0; i < _tree->model()->columnCount(); ++i)
_tree->resizeColumnToContents(i);
}
public Q_SLOTS:
void on__rescan_clicked(bool=true) {
static bool inRescan(false);
if (inRescan) return;
inRescan = true;
try {
delete _tree->model();
_tree->setModel(0);
_card->clear();
pcsc::Connection::Strings readers(pcsc::Connection::scan());
for (pcsc::Connection::Strings::iterator r(readers.begin());
r!=readers.end(); ++r)
_card->addItem(QString::fromStdString(*r));
} catch (...) {
}
inRescan = false;
}
void on__card_currentIndexChanged(int) {
on__reload_clicked();
}
void on__reload_clicked(bool=true) {
try {
delete _tree->model();
_tree->setModel(0);
cardos::Commands cmd(pcsc::Connection::reader
(_card->currentText().toStdString()));
_tree->setModel(new CardGuiModel(cmd, "3f00"));
} catch (...) {
on__rescan_clicked();
}
}
void on__actionRestartPCSCD_triggered() {
delete _tree->model();
_tree->setModel(0);
if (_pwd.exec()) {
_p.start("sudo -S service pcscd restart");
_p.write((_pwd.password()+"\n").toUtf8());
_p.closeWriteChannel();
if (!_p.waitForFinished())
QMessageBox::warning(this, tr("Restarting PCSC Daemon failed"),
tr("<html><p>Restarting PCSC daemon"
" failed with message:</p>"
"\n<pre>%1</pre></html>")
.arg(QString::fromUtf8
(_p.readAll()+"\n"+
_p.readAllStandardOutput()+"\n"+
_p.readAllStandardError())));
else
QMessageBox::information(this, tr("Restarted PCSC Daemon"),
tr("<html><p>Restarted PCSC daemon"
" with message:</p>"
"\n<pre>%1</pre></html>")
.arg(QString::fromUtf8
(_p.readAll()+"\n"+
_p.readAllStandardOutput()+"\n"+
_p.readAllStandardError())));
}
on__reload_clicked();
}
protected:
Password _pwd;
QProcess _p;
};
#endif