CertificateDisplayDialog::CertificateDisplayDialog(const QCA::Certificate &cert, int result, QCA::Validity validity, QWidget *parent) : QDialog(parent)
{
	ui_.setupUi(this);
	setModal(true);

	connect(ui_.pb_close, SIGNAL(clicked()), SLOT(close()));
	ui_.pb_close->setDefault(true);
	ui_.pb_close->setFocus();

	if(cert.isNull()) {
		return;
	}

	if (result == QCA::TLS::Valid) {
		ui_.lb_valid->setText(tr("The certificate is valid."));
		setLabelStatus(*ui_.lb_valid, true);
	}
	else {
		ui_.lb_valid->setText(tr("The certificate is NOT valid!") + "\n" + QString(tr("Reason: %1.")).arg(CertificateHelpers::resultToString(result, validity)));
		setLabelStatus(*ui_.lb_valid, false);
	}

	QDateTime now = QDateTime::currentDateTime();
	QDateTime notBefore = cert.notValidBefore();
	QDateTime notAfter = cert.notValidAfter();
	ui_.lb_notBefore->setText(cert.notValidBefore().toString());
	setLabelStatus(*ui_.lb_notBefore, now > notBefore);
	ui_.lb_notAfter->setText(cert.notValidAfter().toString());
	setLabelStatus(*ui_.lb_notAfter, now < notAfter);

	ui_.lb_sn->setText(cert.serialNumber().toString());

	QString str;
	QString direction = qApp->layoutDirection() == Qt::RightToLeft ? "rtl" : "ltr";
	str += "<table dir=\"" + direction + "\">";
	str += makePropTable(tr("Subject Details:"), cert.subjectInfo());
	str += makePropTable(tr("Issuer Details:"), cert.issuerInfo());
	str += "</table>";
	for (int i=0; i < 2; i++) {
		QString hashstr = QCA::Hash(i == 0 ? "md5" : "sha1").hashToString(cert.toDER()).toUpper().replace(QRegExp("(..)"), ":\\1").mid(1);
		str += QString("Fingerprint(%1): %2<br>").arg(i == 0 ? "MD5" : "SHA-1").arg(hashstr);
	}
	ui_.tb_cert->setText(str);
}
int IMLoginWidget::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
{
    _id = QWidget::qt_metacall(_c, _id, _a);
    if (_id < 0)
        return _id;
    if (_c == QMetaObject::InvokeMetaMethod) {
        switch (_id) {
        case 0: showMainWidget(); break;
        case 1: setLabelStatus((*reinterpret_cast< const QString(*)>(_a[1])),(*reinterpret_cast< bool(*)>(_a[2])),(*reinterpret_cast< const UserInformation*(*)>(_a[3]))); break;
        case 2: setLabelStatus((*reinterpret_cast< const QString(*)>(_a[1])),(*reinterpret_cast< bool(*)>(_a[2]))); break;
        case 3: { bool _r = getIsAutoLogin();
            if (_a[0]) *reinterpret_cast< bool*>(_a[0]) = _r; }  break;
        case 4: onClickBtnLogin(); break;
        case 5: onClickLabelRegister(); break;
        case 6: onClickLabelForgotPwd(); break;
        case 7: onClickCbAutoLogin((*reinterpret_cast< int(*)>(_a[1]))); break;
        default: ;
        }
        _id -= 8;
    }
    return _id;
}
CertificateDisplayDialog::CertificateDisplayDialog(const QCA::Certificate &cert, int result, QCA::Validity validity, QWidget *parent) : QDialog(parent)
{
	// raw code from uic
	resize(518, 369);
	vboxLayout = new QVBoxLayout(this);
	vboxLayout->setSpacing(6);
	vboxLayout->setMargin(11);
	vboxLayout->setObjectName(QString::fromUtf8("vboxLayout"));
	hboxLayout = new QHBoxLayout();
	hboxLayout->setSpacing(6);
	hboxLayout->setMargin(0);
	hboxLayout->setObjectName(QString::fromUtf8("hboxLayout"));
	vboxLayout1 = new QVBoxLayout();
	vboxLayout1->setSpacing(6);
	vboxLayout1->setMargin(0);
	vboxLayout1->setObjectName(QString::fromUtf8("vboxLayout1"));
	textLabel4 = new QLabel;
	textLabel4->setObjectName(QString::fromUtf8("textLabel4"));

	vboxLayout1->addWidget(textLabel4);

	lb_valid = new QLabel;
	lb_valid->setObjectName(QString::fromUtf8("lb_valid"));

	vboxLayout1->addWidget(lb_valid);

	textLabel2 = new QLabel;
	textLabel2->setObjectName(QString::fromUtf8("textLabel2"));

	vboxLayout1->addWidget(textLabel2);

	lb_notBefore = new QLabel;
	lb_notBefore->setObjectName(QString::fromUtf8("lb_notBefore"));

	vboxLayout1->addWidget(lb_notBefore);

	textLabel3 = new QLabel;
	textLabel3->setObjectName(QString::fromUtf8("textLabel3"));

	vboxLayout1->addWidget(textLabel3);

	lb_notAfter = new QLabel;
	lb_notAfter->setObjectName(QString::fromUtf8("lb_notAfter"));

	vboxLayout1->addWidget(lb_notAfter);

	textLabel1 = new QLabel;
	textLabel1->setObjectName(QString::fromUtf8("textLabel1"));

	vboxLayout1->addWidget(textLabel1);

	lb_sn = new QLabel;
	lb_sn->setObjectName(QString::fromUtf8("lb_sn"));

	vboxLayout1->addWidget(lb_sn);

	spacerItem = new QSpacerItem(20, 106, QSizePolicy::Minimum, QSizePolicy::Expanding);

	vboxLayout1->addItem(spacerItem);


	hboxLayout->addLayout(vboxLayout1);

	tb_cert = new QTextBrowser;
	tb_cert->setObjectName(QString::fromUtf8("tb_cert"));
	tb_cert->setMinimumSize(QSize(350, 300));
	tb_cert->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);

	hboxLayout->addWidget(tb_cert);


	vboxLayout->addLayout(hboxLayout);

	line1 = new QFrame;
	line1->setObjectName(QString::fromUtf8("line1"));
	line1->setFrameShape(QFrame::HLine);
	line1->setFrameShadow(QFrame::Sunken);
	line1->setFrameShape(QFrame::HLine);

	vboxLayout->addWidget(line1);

	hboxLayout1 = new QHBoxLayout();
	hboxLayout1->setSpacing(6);
	hboxLayout1->setMargin(0);
	hboxLayout1->setObjectName(QString::fromUtf8("hboxLayout1"));
	spacerItem1 = new QSpacerItem(421, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);

	hboxLayout1->addItem(spacerItem1);

	pb_close = new QPushButton;
	pb_close->setObjectName(QString::fromUtf8("pb_close"));

	hboxLayout1->addWidget(pb_close);
	vboxLayout->addLayout(hboxLayout1);

	setWindowTitle(tr("Certificate Information"));
	textLabel4->setText(tr("Certificate Validation") + ':');
	lb_valid->setText(QString());
	textLabel2->setText(tr("Valid From") + ':');
	lb_notBefore->setText(QString());
	textLabel3->setText(tr("Valid Until") + ':');
	lb_notAfter->setText(QString());
	textLabel1->setText(tr("Serial Number") + ':');
	lb_sn->setText(QString());
	pb_close->setText(tr("Close"));

	// end of raw code from uic
	setModal(true);

	connect(pb_close, SIGNAL(clicked()), SLOT(close()));
	pb_close->setDefault(true);
	pb_close->setFocus();

	if (cert.isNull())
		return;

	if (result == QCA::TLS::Valid)
	{
		lb_valid->setText(tr("The certificate is valid."));
		setLabelStatus(*lb_valid, true);
	}
	else
	{
		lb_valid->setText(tr("The certificate is NOT valid!") + '\n' + QString(tr("Reason: %1.")).arg(CertificateHelpers::resultToString(result, validity)));
		setLabelStatus(*lb_valid, false);
	}

	QDateTime now = QDateTime::currentDateTime();
	QDateTime notBefore = cert.notValidBefore();
	QDateTime notAfter = cert.notValidAfter();
	lb_notBefore->setText(cert.notValidBefore().toString());
	setLabelStatus(*lb_notBefore, now > notBefore);
	lb_notAfter->setText(cert.notValidAfter().toString());
	setLabelStatus(*lb_notAfter, now < notAfter);

	lb_sn->setText(cert.serialNumber().toString());

	QString str;
	str += "<table>";
	str += makePropTable(tr("Subject Details:"), cert.subjectInfo());
	str += makePropTable(tr("Issuer Details:"), cert.issuerInfo());
	str += "</table>";
	for (int i=0; i < 2; i++)
	{
		QString hashstr = QCA::Hash(i == 0 ? "md5" : "sha1").hashToString(cert.toDER()).toUpper().replace(QRegExp("(..)"), ":\\1").mid(1);
		str += QString("Fingerprint(%1): %2<br>").arg(i == 0 ? "MD5" : "SHA-1").arg(hashstr);
	}
	tb_cert->setText(str);
}