DCalendarPopup::DCalendarPopup(const QDate &date, QWidget *parent) : QWidget(parent, Qt::Popup) { _cal = new QCalendarWidget(this); _cal->setVerticalHeaderFormat(QCalendarWidget::NoVerticalHeader); _cal->setSelectedDate(date); QVBoxLayout *vbox = new QVBoxLayout(this); vbox->setMargin(0); vbox->setSpacing(0); vbox->addWidget(_cal); connect(_cal, SIGNAL(activated(QDate)), this, SLOT(dateSelected(QDate))); connect(_cal, SIGNAL(clicked(QDate)), this, SLOT(dateSelected(QDate))); connect(_cal, SIGNAL(activated(QDate)), this, SLOT(dateSelected(QDate))); // position the center of the popup near the center of its parent if (parent) { QSize parentsize = parent->sizeHint(); QPoint parentcenter = parent->pos() + QPoint(parentsize.width() / 2, parentsize.height() / 2); parentcenter = parent->mapToGlobal(parentcenter); QRect screen = QApplication::desktop()->availableGeometry(parentcenter); QSize mysize = sizeHint(); QPoint mycenter = parentcenter; if (mycenter.x() + (mysize.width() / 2) > screen.right()) mycenter.setX(screen.right() - (mysize.width() / 2)); else if (mycenter.x() - (mysize.width() / 2) < screen.left()) mycenter.setX(screen.left() + (mysize.width() / 2)); if (mycenter.y() + (mysize.height() / 2) > screen.bottom()) mycenter.setY(screen.bottom() - (mysize.height() / 2)); else if (mycenter.y() - (mysize.height() / 2) < screen.top()) mycenter.setY(screen.top() + (mysize.height() / 2)); QPoint myorigin(mycenter.x() - mysize.width() / 2, mycenter.y() - mysize.height() / 2); move(myorigin); } _cal->setFocus(); }
FILE * smime_sign(FILE *ip, struct header *headp) { NSSCMSMessage *msg; NSSCMSContentInfo *content; NSSCMSSignedData *data; NSSCMSSignerInfo *info; CERTCertificate *cert; CERTCertDBHandle *handle; FILE *hp, *bp, *sp; char *addr; if (nss_init() != OKAY) return NULL; if ((addr = myorigin(headp)) == NULL) { fprintf(stderr, "No \"from\" address for signing specified\n"); return NULL; } if ((cert = get_signer_cert(addr)) == NULL) return NULL; handle = CERT_GetDefaultCertDB(); if ((msg = NSS_CMSMessage_Create(NULL)) == NULL) { fprintf(stderr, "Cannot create CMS message.\n"); return NULL; } if ((data = NSS_CMSSignedData_Create(msg)) == NULL) { fprintf(stderr, "Cannot create CMS signed data.\n"); return NULL; } content = NSS_CMSMessage_GetContentInfo(msg); if (NSS_CMSContentInfo_SetContent_SignedData(msg, content, data) != SECSuccess) { fprintf(stderr, "Cannot attach CMS signed data.\n"); return NULL; } content = NSS_CMSSignedData_GetContentInfo(data); if (NSS_CMSContentInfo_SetContent_Data(msg, content, NULL, PR_TRUE) != SECSuccess) { fprintf(stderr, "Cannot attach CMS data.\n"); return NULL; } if ((info = NSS_CMSSignerInfo_Create(msg, cert, SEC_OID_SHA1)) == 0) { fprintf(stderr, "Cannot create signed information.\n"); return NULL; } if (NSS_CMSSignerInfo_IncludeCerts(info, NSSCMSCM_CertOnly, certUsageEmailSigner) != SECSuccess) { fprintf(stderr, "Cannot include certificate.\n"); return NULL; } if (NSS_CMSSignerInfo_AddSigningTime(info, PR_Now()) != SECSuccess) { fprintf(stderr, "Cannot add signing time.\n"); return NULL; } if (NSS_CMSSignerInfo_AddSMIMECaps(info) != SECSuccess) { fprintf(stderr, "Cannot add S/MIME capabilities.\n"); return NULL; } NSS_CMSSignerInfo_AddSMIMEEncKeyPrefs(info, cert, handle); NSS_CMSSignerInfo_AddMSSMIMEEncKeyPrefs(info, cert, handle); if (NSS_CMSSignedData_AddCertificate(data, cert) != SECSuccess) { fprintf(stderr, "Cannot add encryption certificate.\n"); return NULL; } if (NSS_CMSSignedData_AddSignerInfo(data, info) != SECSuccess) { fprintf(stderr, "Cannot add signer information.\n"); return NULL; } CERT_DestroyCertificate(cert); if ((sp = encode(ip, &hp, &bp, msg, base64_cb)) == NULL) { NSS_CMSMessage_Destroy(msg); return NULL; } NSS_CMSMessage_Destroy(msg); return smime_sign_assemble(hp, bp, sp); }