X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fqtui%2Fsettingspages%2Fidentityeditwidget.cpp;h=d31020a7fe9e4ec0d5ba1f4388558ddcf2606fff;hp=be889c29e5cf1dda83afcf1a5bfdd7dbea3023c4;hb=0dbec2cfc937857d66a9645249f876f1e6b3f05e;hpb=9d54503555534a2c554f09a33df6afa33d6308ec diff --git a/src/qtui/settingspages/identityeditwidget.cpp b/src/qtui/settingspages/identityeditwidget.cpp index be889c29..d31020a7 100644 --- a/src/qtui/settingspages/identityeditwidget.cpp +++ b/src/qtui/settingspages/identityeditwidget.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-2014 by the Quassel Project * + * Copyright (C) 2005-2018 by the Quassel Project * * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * @@ -20,26 +20,32 @@ #include "identityeditwidget.h" -#include #include #include #include +#include +#include #include #include +#if QT_VERSION < 0x050000 +# include +#else +# include +#endif + #include "client.h" -#include "iconloader.h" IdentityEditWidget::IdentityEditWidget(QWidget *parent) : QWidget(parent) { ui.setupUi(this); - ui.addNick->setIcon(SmallIcon("list-add")); - ui.deleteNick->setIcon(SmallIcon("edit-delete")); - ui.renameNick->setIcon(SmallIcon("edit-rename")); - ui.nickUp->setIcon(SmallIcon("go-up")); - ui.nickDown->setIcon(SmallIcon("go-down")); + ui.addNick->setIcon(QIcon::fromTheme("list-add")); + ui.deleteNick->setIcon(QIcon::fromTheme("edit-delete")); + ui.renameNick->setIcon(QIcon::fromTheme("edit-rename")); + ui.nickUp->setIcon(QIcon::fromTheme("go-up")); + ui.nickDown->setIcon(QIcon::fromTheme("go-down")); // We need to know whenever the state of input widgets changes... connect(ui.realName, SIGNAL(textEdited(const QString &)), this, SIGNAL(widgetHasChanged())); @@ -79,6 +85,52 @@ IdentityEditWidget::IdentityEditWidget(QWidget *parent) ui.sslCertGroupBox->setAcceptDrops(true); ui.sslCertGroupBox->installEventFilter(this); #endif + + if (Client::isCoreFeatureEnabled(Quassel::Feature::AwayFormatTimestamp)) { + // Core allows formatting %%timestamp%% messages in away strings. Update tooltips. + QString strFormatTooltip; + QTextStream formatTooltip( &strFormatTooltip, QIODevice::WriteOnly ); + formatTooltip << ""; + + // Function to add a row to the tooltip table + auto addRow = [&](const QString& key, const QString& value, bool condition) { + if (condition) { + formatTooltip << "" + << key << "" << value << ""; + } + }; + + // Original tooltip goes here + formatTooltip << "

%1

"; + // New timestamp formatting guide here + formatTooltip << "

" << tr("You can add date/time to this message " + "using the syntax: " + "
%%<format>%%, where " + "<format> is:") << "

"; + formatTooltip << ""; + addRow("hh", tr("the hour"), true); + addRow("mm", tr("the minutes"), true); + addRow("ss", tr("seconds"), true); + addRow("AP", tr("AM/PM"), true); + addRow("dd", tr("day"), true); + addRow("MM", tr("month"), true); +#if QT_VERSION > 0x050000 + // Alas, this was only added in Qt 5. We don't know what version the core has, just hope + // for the best (Qt 4 will soon be dropped). + addRow("t", tr("current timezone"), true); +#endif + formatTooltip << "
"; + formatTooltip << "

" << tr("Example: Away since %%hh:mm%% on %%dd.MM%%.") << "

"; + formatTooltip << "

" << tr("%%%% without anything inside represents %%. Other format " + "codes are available.") << "

"; + formatTooltip << "
"; + + // Split up the message to allow re-using translations: + // [Original tool-tip] [Timestamp format message] + ui.awayReason->setToolTip(strFormatTooltip.arg(ui.awayReason->toolTip())); + ui.detachAwayEnabled->setToolTip(strFormatTooltip.arg(ui.detachAwayEnabled->toolTip())); + } // else: Do nothing, leave the original translated string } @@ -300,7 +352,7 @@ void IdentityEditWidget::sslDropEvent(QDropEvent *event, bool isCert) if (isCert) { QSslCertificate cert = certByFilename(filename); - if (cert.isValid()) + if (!cert.isNull()) showCertState(cert); } else { @@ -318,7 +370,12 @@ void IdentityEditWidget::on_clearOrLoadKeyButton_clicked() QSslKey key; if (ui.keyTypeLabel->property("sslKey").toByteArray().isEmpty()) - key = keyByFilename(QFileDialog::getOpenFileName(this, tr("Load a Key"), QDesktopServices::storageLocation(QDesktopServices::HomeLocation))); + key = keyByFilename(QFileDialog::getOpenFileName(this, tr("Load a Key"), +#if QT_VERSION < 0x050000 + QDesktopServices::storageLocation(QDesktopServices::HomeLocation))); +#else + QStandardPaths::writableLocation(QStandardPaths::HomeLocation))); +#endif showKeyState(key); emit widgetHasChanged(); @@ -335,7 +392,16 @@ QSslKey IdentityEditWidget::keyByFilename(const QString &filename) keyFile.close(); for (int i = 0; i < 2; i++) { +#if QT_VERSION >= 0x050500 + // On Qt5.5+, support QSsl::KeyAlgorithm::Rsa (1), QSsl::KeyAlgorithm::Dsa (2), and QSsl::KeyAlgorithm::Ec (3) + for (int j = 1; j < 4; j++) { +#elif QT_VERSION >= 0x050000 + // On Qt5.0-Qt5.4, support QSsl::KeyAlgorithm::Rsa (1) and QSsl::KeyAlgorithm::Dsa (2) (Ec wasn't added until 5.5) + for (int j = 1; j < 3; j++) { +#else + // On Qt4, support QSsl::KeyAlgorithm::Rsa (0) and QSsl::KeyAlgorithm::Dsa (1) (Qt4 uses different indices for the values) for (int j = 0; j < 2; j++) { +#endif key = QSslKey(keyRaw, (QSsl::KeyAlgorithm)j, (QSsl::EncodingFormat)i); if (!key.isNull()) goto returnKey; @@ -343,6 +409,12 @@ QSslKey IdentityEditWidget::keyByFilename(const QString &filename) } QMessageBox::information(this, tr("Failed to read key"), tr("Failed to read the key file. It is either incompatible or invalid. Note that the key file must not have a passphrase.")); returnKey: +#if QT_VERSION >= 0x050500 + if(!key.isNull() && key.algorithm() == QSsl::KeyAlgorithm::Ec && !Client::isCoreFeatureEnabled(Quassel::Feature::EcdsaCertfpKeys)) { + QMessageBox::information(this, tr("Core does not support ECDSA keys"), tr("You loaded an ECDSA key, but the core does not support ECDSA keys. Please contact the core administrator.")); + key.clear(); + } +#endif return key; } @@ -358,11 +430,16 @@ void IdentityEditWidget::showKeyState(const QSslKey &key) case QSsl::Rsa: ui.keyTypeLabel->setText(tr("RSA")); break; +#if QT_VERSION >= 0x050500 + case QSsl::Ec: + ui.keyTypeLabel->setText(tr("ECDSA")); + break; +#endif case QSsl::Dsa: ui.keyTypeLabel->setText(tr("DSA")); break; default: - ui.keyTypeLabel->setText(tr("No Key loaded")); + ui.keyTypeLabel->setText(tr("Invalid key or no key loaded")); } ui.clearOrLoadKeyButton->setText(tr("Clear")); } @@ -376,8 +453,12 @@ void IdentityEditWidget::on_clearOrLoadCertButton_clicked() QSslCertificate cert; if (ui.certOrgLabel->property("sslCert").toByteArray().isEmpty()) - cert = certByFilename(QFileDialog::getOpenFileName(this, tr("Load a Certificate"), QDesktopServices::storageLocation(QDesktopServices::HomeLocation))); - + cert = certByFilename(QFileDialog::getOpenFileName(this, tr("Load a Certificate"), +#if QT_VERSION < 0x050000 + QDesktopServices::storageLocation(QDesktopServices::HomeLocation))); +#else + QStandardPaths::writableLocation(QStandardPaths::HomeLocation))); +#endif showCertState(cert); emit widgetHasChanged(); } @@ -393,7 +474,7 @@ QSslCertificate IdentityEditWidget::certByFilename(const QString &filename) for (int i = 0; i < 2; i++) { cert = QSslCertificate(certRaw, (QSsl::EncodingFormat)i); - if (cert.isValid()) + if (!cert.isNull()) break; } return cert; @@ -402,14 +483,19 @@ QSslCertificate IdentityEditWidget::certByFilename(const QString &filename) void IdentityEditWidget::showCertState(const QSslCertificate &cert) { - if (!cert.isValid()) { + if (cert.isNull()) { ui.certOrgLabel->setText(tr("No Certificate loaded")); ui.certCNameLabel->setText(tr("No Certificate loaded")); ui.clearOrLoadCertButton->setText(tr("Load")); } else { +#if QT_VERSION < 0x050000 ui.certOrgLabel->setText(cert.subjectInfo(QSslCertificate::Organization)); ui.certCNameLabel->setText(cert.subjectInfo(QSslCertificate::CommonName)); +#else + ui.certOrgLabel->setText(cert.subjectInfo(QSslCertificate::Organization).join(", ")); + ui.certCNameLabel->setText(cert.subjectInfo(QSslCertificate::CommonName).join(", ")); +#endif ui.clearOrLoadCertButton->setText(tr("Clear")); } ui.certOrgLabel->setProperty("sslCert", cert.toPem());