/ui/aboutwindow.cpp

https://github.com/khrykin/StrategrDesktop · C++ · 180 lines · 141 code · 36 blank · 3 comment · 4 complexity · 9c11f9e78fb37e3642d755b7314f9a42 MD5 · raw file

  1. //
  2. // Created by Dmitry Khrykin on 2019-08-12.
  3. //
  4. #include <QDate>
  5. #include <QDesktopServices.h>
  6. #include <QUrl.h>
  7. #include "aboutwindow.h"
  8. #include "application.h"
  9. #include "applicationicon.h"
  10. #include "applicationsettings.h"
  11. #include "coloredlabel.h"
  12. #include "colorprovider.h"
  13. class HyperLinkLabel : public ColoredLabel {
  14. public:
  15. using ColoredLabel::ColoredLabel;
  16. void setHyperlink(const QString &hyperlink) {
  17. HyperLinkLabel::hyperlink = hyperlink;
  18. updateColor();
  19. }
  20. private:
  21. QString hyperlink;
  22. enum {
  23. inactive,
  24. clicked,
  25. hovered
  26. } state = inactive;
  27. void updateColor() {
  28. auto color = dynamicColor();
  29. auto alpha = 1.0f;
  30. switch (state) {
  31. case clicked:
  32. alpha = 0.8;
  33. break;
  34. case hovered:
  35. alpha = 0.9;
  36. break;
  37. default:
  38. break;
  39. }
  40. color.setAlphaF(alpha);
  41. setDynamicColor([=] { return color; });
  42. }
  43. void mousePressEvent(QMouseEvent *event) override {
  44. state = clicked;
  45. updateColor();
  46. }
  47. void enterEvent(QEvent *event) override {
  48. state = hovered;
  49. setCursor(Qt::PointingHandCursor);
  50. updateColor();
  51. }
  52. void leaveEvent(QEvent *event) override {
  53. state = inactive;
  54. unsetCursor();
  55. updateColor();
  56. }
  57. void mouseReleaseEvent(QMouseEvent *event) override {
  58. state = inactive;
  59. updateColor();
  60. if (hyperlink.isEmpty())
  61. return;
  62. QDesktopServices::openUrl(QUrl(hyperlink));
  63. }
  64. };
  65. AboutWindow::AboutWindow(QWidget *parent) : QDialog(parent) {
  66. setAttribute(Qt::WA_DeleteOnClose);
  67. auto mainLayout = new QVBoxLayout();
  68. setLayout(mainLayout);
  69. layout()->setSpacing(8);
  70. layout()->setContentsMargins(8, 8, 8, 8);
  71. setFixedWidth(300);
  72. setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
  73. auto *mainLabel = new QLabel("<b>Strategr Desktop</b>");
  74. mainLabel->setAlignment(Qt::AlignCenter);
  75. mainLabel->setSizePolicy(QSizePolicy::Expanding,
  76. QSizePolicy::Fixed);
  77. auto versionString = QString("Version %1").arg(ApplicationSettings::version);
  78. #ifdef Q_OS_WIN
  79. versionString += QString(" %1 bit").arg(ApplicationSettings::architectureString);
  80. #endif
  81. auto *versionLabel = new ColoredLabel(versionString);
  82. versionLabel->setDynamicColor(&ColorProvider::textColorJustLighter);
  83. versionLabel->setAlignment(Qt::AlignCenter);
  84. versionLabel->setSizePolicy(QSizePolicy::Expanding,
  85. QSizePolicy::Fixed);
  86. versionLabel->setFontHeight(12);
  87. QString years = "2019";
  88. auto currentYear = QDate::currentDate().year();
  89. if (currentYear != 2019) {
  90. years += "-" + QString::number(currentYear);
  91. }
  92. auto *copyLabel = new ColoredLabel(QString("Copyright © %1 %2.\n"
  93. "All Rights Reserved.")
  94. .arg(years)
  95. .arg(QApplication::organizationName()));
  96. copyLabel->setDynamicColor(&ColorProvider::textColorJustLighter);
  97. copyLabel->setAlignment(Qt::AlignCenter);
  98. copyLabel->setFontHeight(12);
  99. auto iconLabel = new QLabel();
  100. iconLabel->setPixmap(ApplicationIcon::defaultIcon());
  101. iconLabel->setAlignment(Qt::AlignCenter);
  102. iconLabel->setSizePolicy(QSizePolicy::Expanding,
  103. QSizePolicy::Fixed);
  104. auto *githubLabel = new HyperLinkLabel();
  105. githubLabel->setDynamicColor(&ColorProvider::textColorJustLighter);
  106. githubLabel->setText("Star on GitHub");
  107. githubLabel->setFontHeight(12);
  108. githubLabel->setAlignment(Qt::AlignRight);
  109. githubLabel->setSizePolicy(QSizePolicy::Expanding,
  110. QSizePolicy::Fixed);
  111. githubLabel->setHyperlink(QStringLiteral("https://github.com/%1").arg(ApplicationSettings::repoName));
  112. auto *dotLabel = new ColoredLabel();
  113. dotLabel->setDynamicColor(&ColorProvider::textColorJustLighter);
  114. dotLabel->setText("·");
  115. dotLabel->setFontHeight(12);
  116. dotLabel->setAlignment(Qt::AlignCenter);
  117. dotLabel->setSizePolicy(QSizePolicy::Fixed,
  118. QSizePolicy::Fixed);
  119. auto *issueLabel = new HyperLinkLabel();
  120. issueLabel->setDynamicColor(&ColorProvider::textColorJustLighter);
  121. issueLabel->setText("Report an issue");
  122. issueLabel->setFontHeight(12);
  123. issueLabel->setAlignment(Qt::AlignLeft);
  124. issueLabel->setSizePolicy(QSizePolicy::Expanding,
  125. QSizePolicy::Fixed);
  126. issueLabel->setHyperlink(QStringLiteral("https://github.com/%1/issues/new").arg(ApplicationSettings::repoName));
  127. layout()->addWidget(iconLabel);
  128. layout()->addWidget(mainLabel);
  129. layout()->addWidget(versionLabel);
  130. layout()->addWidget(copyLabel);
  131. auto githubLayout = new QHBoxLayout();
  132. githubLayout->setSpacing(5);
  133. githubLayout->setContentsMargins(0, 0, 0, 0);
  134. githubLayout->addWidget(githubLabel);
  135. githubLayout->addWidget(dotLabel);
  136. githubLayout->addWidget(issueLabel);
  137. mainLayout->addLayout(githubLayout);
  138. layout()->addWidget(new QWidget());
  139. setMinimumHeight(sizeHint().height());
  140. setMaximumHeight(sizeHint().height());
  141. }
  142. AboutWindow::~AboutWindow() {
  143. Application::aboutWindow = nullptr;
  144. }