File indexing completed on 2024-12-08 04:34:38
0001 /* 0002 SPDX-FileCopyrightText: 2023-2024 Laurent Montel <montel.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 #include "whatsnewwidget.h" 0007 #include "whatsnewwidgettranslation.h" 0008 0009 #include <QCryptographicHash> 0010 #include <QScrollArea> 0011 #include <QTextEdit> 0012 #include <QVBoxLayout> 0013 0014 WhatsNewWidget::WhatsNewWidget(QWidget *parent) 0015 : QWidget{parent} 0016 , mLabelInfo(new QTextEdit(this)) 0017 , mWhatsNewComboBoxWidget(new WhatsNewComboBoxWidget(this)) 0018 { 0019 auto mainLayout = new QVBoxLayout(this); 0020 mainLayout->setObjectName(QStringLiteral("mainLayout")); 0021 mainLayout->setContentsMargins({}); 0022 0023 mWhatsNewComboBoxWidget->setObjectName(QStringLiteral("mWhatsNewComboBoxWidget")); 0024 mainLayout->addWidget(mWhatsNewComboBoxWidget); 0025 0026 mLabelInfo->setObjectName(QStringLiteral("mLabelInfo")); 0027 mLabelInfo->setReadOnly(true); 0028 mLabelInfo->setTextInteractionFlags(Qt::TextSelectableByMouse | Qt::LinksAccessibleByMouse); 0029 connect(mWhatsNewComboBoxWidget, &WhatsNewComboBoxWidget::versionChanged, this, &WhatsNewWidget::slotVersionChanged); 0030 mWhatsNewComboBoxWidget->initializeVersion(currentVersion()); 0031 mainLayout->addWidget(mLabelInfo); 0032 } 0033 0034 WhatsNewWidget::~WhatsNewWidget() = default; 0035 0036 WhatsNewComboBoxWidget::VersionType WhatsNewWidget::currentVersion() const 0037 { 0038 return WhatsNewComboBoxWidget::Version2_1; 0039 } 0040 0041 // static 0042 QString WhatsNewWidget::newFeaturesMD5() 0043 { 0044 QByteArray str; 0045 for (int i = 0; i < numRuqolaNewFeatures2_1; ++i) { 0046 str += ruqolaNewFeatures2_1[i].untranslatedText(); 0047 } 0048 QCryptographicHash md5(QCryptographicHash::Md5); 0049 md5.addData(str); 0050 return QLatin1String(md5.result().toBase64()); 0051 } 0052 0053 void WhatsNewWidget::updateInformations() 0054 { 0055 slotVersionChanged(currentVersion()); 0056 } 0057 0058 QString WhatsNewWidget::generateStartEndHtml(const QString &str) const 0059 { 0060 QString message = QStringLiteral("<qt>"); 0061 message += str; 0062 message += QStringLiteral("</qt>"); 0063 return message; 0064 } 0065 0066 void WhatsNewWidget::slotVersionChanged(WhatsNewComboBoxWidget::VersionType type) 0067 { 0068 if (type == WhatsNewComboBoxWidget::Version2_0) { 0069 const QString message = generateStartEndHtml(createVersionInformationsV2_0()); 0070 mLabelInfo->setHtml(message); 0071 } else if (type == WhatsNewComboBoxWidget::Version2_1) { 0072 const QString message = generateStartEndHtml(createVersionInformationsV2_1()); 0073 mLabelInfo->setHtml(message); 0074 } else if (type == WhatsNewComboBoxWidget::AllVersion) { 0075 QString message = generateVersionHeader(WhatsNewComboBoxWidget::Version2_1); 0076 message += createVersionInformationsV2_1(); 0077 message += generateVersionHeader(WhatsNewComboBoxWidget::Version2_0); 0078 message += createVersionInformationsV2_0(); 0079 mLabelInfo->setHtml(generateStartEndHtml(message)); 0080 } 0081 } 0082 0083 QString WhatsNewWidget::createVersionInformationsV2_0() const 0084 { 0085 QString message; 0086 if (numRuqolaChanges2_0 > 0) { 0087 message += QStringLiteral("<b>") + i18n("Important changes since last version:") + QStringLiteral("</b>"); 0088 message += QStringLiteral("<ul>"); 0089 for (int i = 0; i < numRuqolaChanges2_0; ++i) { 0090 message += QStringLiteral("<li>%1</li>").arg(ruqolaChangesV2_0[i].toString()); 0091 } 0092 message += QStringLiteral("</ul>"); 0093 } 0094 if (numRuqolaNewFeatures2_0 > 0) { 0095 message += QStringLiteral("<b>") + i18n("Some of the new features in this release of Ruqola include:") + QStringLiteral("</b>"); 0096 message += QStringLiteral("<ul>"); 0097 for (int i = 0; i < numRuqolaNewFeatures2_0; ++i) { 0098 message += QStringLiteral("<li>%1</li>").arg(ruqolaNewFeatures2_0[i].toString()); 0099 } 0100 message += QStringLiteral("</ul>"); 0101 } 0102 if (numRuqolaBugfixing2_0 > 0) { 0103 message += QStringLiteral("<b>") + i18n("Some bug fixing:") + QStringLiteral("</b>"); 0104 message += QStringLiteral("<ul>"); 0105 for (int i = 0; i < numRuqolaBugfixing2_0; ++i) { 0106 message += QStringLiteral("<li>%1</li>").arg(ruqolaBugfixing2_0[i].toString()); 0107 } 0108 message += QStringLiteral("</ul>"); 0109 } 0110 return message; 0111 } 0112 0113 QString WhatsNewWidget::createVersionInformationsV2_1() const 0114 { 0115 QString message; 0116 if (numRuqolaNewFeatures2_1 > 0) { 0117 message += QStringLiteral("<b>") + i18n("Some of the new features in this release of Ruqola include:") + QStringLiteral("</b>"); 0118 message += QStringLiteral("<ul>"); 0119 for (int i = 0; i < numRuqolaNewFeatures2_1; ++i) { 0120 message += QStringLiteral("<li>%1</li>").arg(ruqolaNewFeatures2_1[i].toString()); 0121 } 0122 message += QStringLiteral("</ul>"); 0123 } 0124 if (numRuqolaBugfixing2_1 > 0) { 0125 message += QStringLiteral("<b>") + i18n("Some bug fixing:") + QStringLiteral("</b>"); 0126 message += QStringLiteral("<ul>"); 0127 for (int i = 0; i < numRuqolaBugfixing2_1; ++i) { 0128 message += QStringLiteral("<li>%1</li>").arg(ruqolaBugfixing2_1[i].toString()); 0129 } 0130 message += QStringLiteral("</ul>"); 0131 } 0132 return message; 0133 } 0134 0135 QString WhatsNewWidget::generateVersionHeader(WhatsNewComboBoxWidget::VersionType type) const 0136 { 0137 switch (type) { 0138 case WhatsNewComboBoxWidget::VersionType::AllVersion: 0139 return {}; 0140 case WhatsNewComboBoxWidget::VersionType::Version2_0: 0141 case WhatsNewComboBoxWidget::VersionType::Version2_1: 0142 return QStringLiteral("<h1><i> %1 </i></h1><hr/><br>").arg(WhatsNewComboBoxWidget::convertVersionEnumToString(type)); 0143 } 0144 return {}; 0145 } 0146 0147 #include "moc_whatsnewwidget.cpp"