/***************************************************************************
- * Copyright (C) 2005-2013 by the Quassel Project *
+ * Copyright (C) 2005-2016 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
#include "identityeditwidget.h"
-#include <QDesktopServices>
#include <QDragEnterEvent>
#include <QDropEvent>
#include <QFileDialog>
+#include <QIcon>
+#include <QMimeData>
#include <QUrl>
+#include <QMessageBox>
+
+#if QT_VERSION < 0x050000
+# include <QDesktopServices>
+#else
+# include <QStandardPaths>
+#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()));
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 << "<qt><style>.bold { font-weight: bold; } "
+ ".italic { font-style: italic; }</style>";
+
+ // Function to add a row to the tooltip table
+ auto addRow = [&](const QString& key, const QString& value, bool condition) {
+ if (condition) {
+ formatTooltip << "<tr><td class='bold' align='right'>"
+ << key << "</td><td>" << value << "</td></tr>";
+ }
+ };
+
+ // Original tooltip goes here
+ formatTooltip << "<p>%1</p>";
+ // New timestamp formatting guide here
+ formatTooltip << "<p>" << tr("You can add date/time to this message "
+ "using the syntax: "
+ "<br/>%%<span class='italic'><format></span>%%, where "
+ "<span class='italic'><format></span> is:") << "</p>";
+ formatTooltip << "<table cellspacing='5' cellpadding='0'>";
+ 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 << "</table>";
+ formatTooltip << "<p>" << tr("Example: Away since %%hh:mm%% on %%dd.MM%%.") << "</p>";
+ formatTooltip << "<p>" << tr("%%%% without anything inside represents %%. Other format "
+ "codes are available.") << "</p>";
+ formatTooltip << "</qt>";
+
+ // 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
}
if (isCert) {
QSslCertificate cert = certByFilename(filename);
- if (cert.isValid())
+ if (!cert.isNull())
showCertState(cert);
}
else {
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();
goto returnKey;
}
}
+ 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:
return key;
}
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();
}
for (int i = 0; i < 2; i++) {
cert = QSslCertificate(certRaw, (QSsl::EncodingFormat)i);
- if (cert.isValid())
+ if (!cert.isNull())
break;
}
return cert;
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());