From 155e4d6b3273d32e6b370c8de79c16c66da04d38 Mon Sep 17 00:00:00 2001 From: sithlord48 Date: Wed, 30 Oct 2024 23:04:26 -0400 Subject: [PATCH] refactor: ui less aboutDialog --- cspell.json | 1 + res/gui/app.qrc | 2 + res/gui/icons/64x64/copy-dark.png | Bin 0 -> 1206 bytes res/gui/icons/64x64/copy-light.png | Bin 0 -> 1867 bytes src/gui/src/dialogs/AboutDialog.cpp | 163 +++++----------- src/gui/src/dialogs/AboutDialog.h | 69 +++++-- src/gui/src/dialogs/AboutDialogBase.ui | 255 ------------------------- src/lib/common/copyright.h | 22 +-- src/lib/deskflow/App.cpp | 3 +- 9 files changed, 107 insertions(+), 408 deletions(-) create mode 100644 res/gui/icons/64x64/copy-dark.png create mode 100644 res/gui/icons/64x64/copy-light.png delete mode 100644 src/gui/src/dialogs/AboutDialogBase.ui diff --git a/cspell.json b/cspell.json index 166551cea..5160873bb 100644 --- a/cspell.json +++ b/cspell.json @@ -12,6 +12,7 @@ "Compat", "contribs", "Daun", + "Devs", "Deskflow", "distro", "distros", diff --git a/res/gui/app.qrc b/res/gui/app.qrc index af963aed5..95067fc9b 100644 --- a/res/gui/app.qrc +++ b/res/gui/app.qrc @@ -10,6 +10,8 @@ icons/128x128/tray.png image/welcome.png icons/64x64/folder.png + icons/64x64/copy-light.png + icons/64x64/copy-dark.png image/placeholder.png diff --git a/res/gui/icons/64x64/copy-dark.png b/res/gui/icons/64x64/copy-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..65aa860574f8cdf1e13f54fd82bda304c3dba03f GIT binary patch literal 1206 zcmV;n1WEgeP)Y}j6g_WdENnLQe`xENbr%&Nv4~id-+=fDK%`JoRTWJZtwN|2kWj?}kSg^@ut0?n z6_za8g;SL+DoO3}WNPPmKJH^NnRsS0&z=v@*pcT-PoB{{dEPnq+;iV^0#s2&6;)JG zMHN*nX|N=dcE5Y@3Fo8B^H^Zx?fT2LPuCw8_5E6sNtR__zV+qpxnyX2=l+!=X3clHF7XA)p**#$C3D6dES+vXwpk-CS7&y^|At3)si7u=M5IUU~(x=a!|NU`K z*K_x9#(?dedv{Z9p6c~qKL2d}qq&wqPuH((+?>zm>FaOq-zY%=3fk?q^y%LI699l= zl)HJlbg6lggb-yDFv$bx%ma!C4gg|a3ZS|6^kCMr5-~#$C~qeh zm3vnC&)5T$Ga{4;CyY+#ATRuLSzlRM3EY=RK)c?O7`D{(L{n!F$F;ED?n(zys*jdKj!%{P{f~ncNv; zxO%l!o&us^TdlS<>-$gBd%$_Q$H`kno@EE0yA6gxC-VWB2P8E)dEJXLy8uZ%Aj$cj z#R4DKwt#oZ0(C#WAJ;t#sj6@V5K$_(Pv!yXvwTV;TCG+LaFKdbq-8Tee;?46%KzzK ze@HzbuiQNqh*=#Zzy3XT_o03wot&mwn!tbXtz8jS{s2*cqJrfH&Y z^ubR!j(YzIL0C`wQ*OZuh^jz@=J>5mRn^#`XzLUDsh428M$nUiXdw zh<|R~y#3R{lt2>sC#`dzq>~d4*KuK476yX>27>|geh-#A>Ro^T-5bo`P%J_TOp?0~ zXqx0zRfXd?a2yMcN{Uc$!_Mg0Fzq7Hi`7dLP7N!dj5gLs~hzQ2mxe=6j@Y8W@ z*tR#kYYUun7{>;VO#_x=*+gRP&c>aGS=Y#l0>At1gFTn%dfY*lDeI%{T zs1Rc0x_D%B`-{!Z%{O`0$%<6K?(W?t=k=MsgL7_fZEZQIqKYc2sG^E0s>m7t1D2Xz U(yiUWwEzGB07*qoM6N<$f-ECNxc~qF literal 0 HcmV?d00001 diff --git a/res/gui/icons/64x64/copy-light.png b/res/gui/icons/64x64/copy-light.png new file mode 100644 index 0000000000000000000000000000000000000000..690386905949781d555c148d9e8587e155dbaba4 GIT binary patch literal 1867 zcmV-R2ekN!P)Z056+Q31H#7VaElPw*DN!1r$RdS>E{dY)wu=CPlN2c6qW{3_qFpow64yn#=%)Xn z%fdilqz2+eSJ~HYlQ^**1udG^C@jg5+{l`l_m#z)Pl}{CvW5;~UVzYWIO4naymQaJ z_Yqjw!WOo$g)MAh3wuV5&GOJ2Z@l)VG4_W~!$A`K=6l!Pd#A4N7qdL1jQMeYWrdyw z06PyK{^;`M%XH<+74y^p0Kkj^HaB0Il{BYfAAWeZ_BBM+j3N4VX@K}9I>i`)h(DVE zaLxe`7-P>C0O_tX#z4dX(6a%63)}_FIVJZv82c6gaBy(Yiev3f3qIZPG~o0v=NwW> zFw5-Cn>T-O{`~ow%b?bJ_r{GI|Ee8;J9oBV?RdWq4#VfdL%HdD!d7a0c)s)28Z=u0 z7-N5}@*Pr2@#<@@{^I@X@BgJ%0F=@I#si>YwbWl-;aVFA@x(;yRtO%v!_5C4Y@Y*A zF90vU{L;kFKKtyS0DykKhrwWVZklrc{x1FXf|jWJXb(AqR$fByi> z%gb{NoF%Vn)uR>-a8Ar``-vzEJ_TYf0E}vYTbO}}aPQvdFlHXRPFWdE0hk*DiW*RC zVTl|FrX~c6bT0<)uII>rJ9oAc3c8)o1&HCxFZZyt)E$#H3R>$Y?i`Cjd!7%@DMuVSe2Zehzr$9>gbLYO7 z36OJ)XHML{{RyO0WBykl2!cvy5IN;pLG1EY+VlKukg7EWhyc#LEMU$>HpmchaE?R= zCfDMAe+B*i$_ePsGK%NdsScE@Ky4|&xmTLlZr{F}oDi`j_;jjc*xTDftJOM@1{8xS z2S+2~=XPHRnokwT7vagUqM@~O$QZ{E#!T{=J&^_!b33QA17h6g&p*G8;c)E;TWVr} z3*OP6u(|pDBrS@<#6bkyy7hO2VKlP_Ov>-#y<(Y7wZZp;!a+*y4B+6LXY>mK0>HsJ zD;#R1njio~$7(>irqhJ$(ON%E6Ih)L;2@%ej&9MSCY1AaQu~~1z$8%{m+Pa!`@Vl< z=TqQnV}J{umr7rLmWM+-IfAlK$P;*udJ_Z~}8`mJoh{gjYhN7&^R3E7#%1#KSAJ^HX~(-TiezHK;CZhF*(Yz&&K6p`rO&G zXE7KIE7$i~HGy+pj|QZ{bM7U8V{86+5U2!1Dt4adAq+!EDWSE7*5>p9 z@H_#|#R%O~M{-Sw;}}XQ7-PT^r7xDN!C-*la5z(bAEyuLDX^3>10as$O5^s-00cph zupr+BrwgtvHpXPmNGYL|N*Iurrjs={|PXw2!h~96*$R= zn?64&=;AAiB3NtC>zz4!Y5@4YfA`j{zkPS~zM0T)xRY{g*4Ngv=IKd-*V-VC4<`m) z1SF0ltn^o4VP8Bo0It1z?bjDBTIxYdwe9=SVo!7NU5Nt zf>bf2jM3^e(Od1&?#}MRQ%!-ZSFe6m1%TIIKOZwN2*D=~Ez^RZw9{dHh{xdpqA&(A z0`~~yGc=^{8BX#pa(wVgsfj_4-Z#)7Mp#-}0uiCvY(fZuGs|6cdtIee z{L|~#uYdZ@0Dz?@$K#uuQMylKKoms?!$SyS%#e0W`j}b*7q9{bG(?YY=fe-?%b_>1LGgb)iK6&CN zmwt8WUR57!1Hiy&Yc=-v9^uiW|7VpTZJX1Mt$6JQ8J)d%on-_mV@MexjwRaNHk!=_ z8qW>TY&DFM>W_o|@Y2PL7v)L(tPKFo?4SSh-}^uN_ZMIEN=?$pus;30&1QRREjrz{ zXtmmHWAtNd&AZ%szj^EJ%ez?E!WOo$g)MAh3tL!q`x+=aW8E+BEqMR{002ovPDHLk FV1me$mRSG* literal 0 HcmV?d00001 diff --git a/src/gui/src/dialogs/AboutDialog.cpp b/src/gui/src/dialogs/AboutDialog.cpp index 362cf4b09..a6eadf639 100644 --- a/src/gui/src/dialogs/AboutDialog.cpp +++ b/src/gui/src/dialogs/AboutDialog.cpp @@ -1,5 +1,6 @@ /* * Deskflow -- mouse and keyboard sharing utility + * Copyright (C) 2024 Chris Rizzitello * Copyright (C) 2012 Symless Ltd. * Copyright (C) 2008 Volker Lanz (vl@fidra.de) * @@ -22,123 +23,61 @@ #include "common/version.h" #include "gui/style_utils.h" +#include #include -#include +#include +#include +#include +#include -using namespace deskflow::gui; - -// -// AboutDialog::Deps -// - -bool AboutDialog::Deps::isDarkMode() const +AboutDialog::AboutDialog(QWidget *parent) : QDialog(parent) { - return ::isDarkMode(); -} - -// -// AboutDialog -// - -AboutDialog::AboutDialog(QMainWindow *parent, std::shared_ptr deps) - : QDialog(parent, Qt::WindowTitleHint | Qt::WindowSystemMenuHint), - Ui::AboutDialogBase(), - m_pDeps(deps) -{ - - setupUi(this); - - this->setFixedSize(this->size()); + setWindowTitle(tr("About Deskflow")); QString version = QString::fromStdString(deskflow::version()); - m_pLabelDeskflowVersion->setTextInteractionFlags(Qt::TextSelectableByMouse); - m_pLabelDeskflowVersion->setText(version); - QString buildDateString = QString::fromLocal8Bit(BUILD_DATE).simplified(); - QDate buildDate = QLocale("en_US").toDate(buildDateString, "yyyy-MM-dd"); - m_pLabelBuildDate->setTextInteractionFlags(Qt::TextSelectableByMouse); - m_pLabelBuildDate->setText(buildDate.toString(QLocale::system().dateFormat(QLocale::LongFormat))); + auto copyIcon = QIcon::fromTheme( + QIcon::ThemeIcon::EditCopy, deskflow::gui::isDarkMode() ? QIcon(s_darkCopy) : QIcon(s_lightCopy) + ); - this->setWindowTitle(QString("About %1").arg(DESKFLOW_APP_NAME)); -} - -int AboutDialog::exec() -{ - m_pDevelopersLabel->setText(importantDevelopers()); - m_pCopyrightLabel->setText(QString::fromStdString(deskflow::copyright())); - updateLogo(); - - return QDialog::exec(); -} - -void AboutDialog::setLogo(const char *const &filename) const -{ - QPixmap logo(filename); - if (!logo.isNull()) { - m_pLabel_Logo->setPixmap(logo); - } else { - qCritical("logo file not found: %s", qPrintable(filename)); - } -} - -void AboutDialog::updateLogo() const -{ - if (m_pDeps->isDarkMode()) { - qDebug("showing dark logo"); - setLogo(":/image/logo-dark.png"); - } else { - qDebug("showing light logo"); - setLogo(":/image/logo-light.png"); - } -} - -QString AboutDialog::importantDevelopers() const -{ - QStringList awesomePeople; - awesomePeople - - // Chris is the ultimate creator, and the one who started it all in 2001. - << "Chris Schoeneman" - - // Richard and Adam developed CosmoDeskflow, the 90's predecessor project. - << "Richard Lee" - << "Adam Feder" - - // Nick continued the legacy in 2009 started by Chris. - << "Nick Bolton" - - // Volker wrote the first version of the GUI (QSynergy) in 2008. - << "Volker Lanz" - - // Re-ignited the project in 2008 and rebuilt the community. - << "Sorin Sbârnea" - - // Contributors of bug fixes in the early days. - << "Ryan Breen" - << "Guido Poschta" - << "Bertrand Landry Hetu" - << "Tom Chadwick" - << "Brent Priddy" - << "Jason Axelson" - << "Jake Petroules" - - // Implemented Wayland support (libei and libportal). - << "Peter Hutterer" - << "Olivier Fourdan" - - // Symless employees (in order of joining). - << "Kyle Bloom" - << "Daun Chung" - << "Serhii Hadzhylov" - << "Oleksandr Lysytsia" - << "Olena Kutytska" - << "Owen Phillips" - << "Daniel Evenson"; - - for (auto &person : awesomePeople) { - // prevent names from breaking on the space when wrapped - person = person.replace(" ", QString::fromUtf8(" ")); - } - - return awesomePeople.join(", ") + "."; + auto btnCopyVersion = new QPushButton(copyIcon, QString(), this); + btnCopyVersion->setFlat(true); + connect(btnCopyVersion, &QPushButton::clicked, this, [version] { qApp->clipboard()->setText(version); }); + + auto versionLayout = new QHBoxLayout(); + versionLayout->addWidget(new QLabel(tr("Version:"))); + versionLayout->addWidget(new QLabel(version)); + versionLayout->addWidget(btnCopyVersion); + versionLayout->addSpacerItem(new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Fixed)); + + auto lblLogo = new QLabel(this); + lblLogo->setPixmap(deskflow::gui::isDarkMode() ? s_darkLogo : s_lightLogo); + + auto lblCopyright = new QLabel(QString::fromStdString(deskflow::kCopyright)); + + auto boldFont = font(); + boldFont.setBold(true); + + auto lblDevsTitle = new QLabel(tr("Important developers")); + lblDevsTitle->setFont(boldFont); + + auto lblDevsBody = new QLabel(QStringLiteral("%1\n").arg(s_awesomeDevs.join(", "))); + lblDevsBody->setWordWrap(true); + + auto btnOk = new QPushButton(tr("Ok"), this); + btnOk->setDefault(true); + connect(btnOk, &QPushButton::clicked, this, [this] { close(); }); + + auto mainLayout = new QVBoxLayout(); + mainLayout->addWidget(lblLogo); + mainLayout->addLayout(versionLayout); + mainLayout->addWidget(new QLabel(tr("Keyboard and mouse sharing application"), this)); + mainLayout->addWidget(lblCopyright); + mainLayout->addWidget(lblDevsTitle); + mainLayout->addWidget(lblDevsBody); + mainLayout->addWidget(btnOk); + + setLayout(mainLayout); + adjustSize(); + setFixedSize(size()); } diff --git a/src/gui/src/dialogs/AboutDialog.h b/src/gui/src/dialogs/AboutDialog.h index 045acd9ba..3e8a92791 100644 --- a/src/gui/src/dialogs/AboutDialog.h +++ b/src/gui/src/dialogs/AboutDialog.h @@ -1,5 +1,6 @@ /* * Deskflow -- mouse and keyboard sharing utility + * Copyright (C) 2024 Chris Rizzitello * Copyright (C) 2012 Symless Ltd. * Copyright (C) 2008 Volker Lanz (vl@fidra.de) * @@ -18,32 +19,60 @@ #pragma once -#include "ui_AboutDialogBase.h" - #include -#include -class QWidget; -class QString; - -class AboutDialog : public QDialog, public Ui::AboutDialogBase +class AboutDialog : public QDialog { Q_OBJECT - public: - struct Deps - { - virtual ~Deps() = default; - virtual bool isDarkMode() const; - }; - - explicit AboutDialog(QMainWindow *parent, std::shared_ptr deps = std::make_shared()); - int exec() override; + explicit AboutDialog(QWidget *parent = nullptr); + ~AboutDialog() = default; private: - std::shared_ptr m_pDeps; + inline static const auto s_lightCopy = QStringLiteral(":/icons/64x64/copy-light.png"); + inline static const auto s_darkCopy = QStringLiteral(":/icons/64x64/copy-dark.png"); + inline static const auto s_lightLogo = QStringLiteral(":/image/logo-light.png"); + inline static const auto s_darkLogo = QStringLiteral(":/image/logo-dark.png"); + inline static const auto s_awesomeDevs = QStringList{ + // Chris is the ultimate creator, and the one who started it all in 2001. + QStringLiteral("Chris Schoeneman"), - void updateLogo() const; - void setLogo(const char *const &filename) const; - QString importantDevelopers() const; + // Richard and Adam developed CosmoSynergy, the 90's predecessor project. + QStringLiteral("Richard Lee"), + QStringLiteral("Adam Feder"), + + // Nick continued the legacy in 2009 started by Chris. + QStringLiteral("Nick Bolton"), + + // Volker wrote the first version of the GUI (QSynergy) in 2008. + QStringLiteral("Volker Lanz"), + + // Re-ignited the project in 2008 and rebuilt the community. + QStringLiteral("Sorin Sbârnea"), + + // Contributors of bug fixes in the early days. + QStringLiteral("Ryan Breen"), + QStringLiteral("Guido Poschta"), + QStringLiteral("Bertrand Landry Hetu"), + QStringLiteral("Tom Chadwick"), + QStringLiteral("Brent Priddy"), + QStringLiteral("Jason Axelson"), + QStringLiteral("Jake Petroules"), + + // Implemented Wayland support (libei and libportal). + QStringLiteral("Peter Hutterer"), + QStringLiteral("Olivier Fourdan"), + + // Symless employees (in order of joining). + QStringLiteral("Kyle Bloom"), + QStringLiteral("Daun Chung"), + QStringLiteral("Serhii Hadzhylov"), + QStringLiteral("Oleksandr Lysytsia"), + QStringLiteral("Olena Kutytska"), + QStringLiteral("Owen Phillips"), + QStringLiteral("Daniel Evenson"), + + // Prominent Deskflow development community members + QStringLiteral("Chris Rizzitello"), + }; }; diff --git a/src/gui/src/dialogs/AboutDialogBase.ui b/src/gui/src/dialogs/AboutDialogBase.ui deleted file mode 100644 index 1af5ea6c7..000000000 --- a/src/gui/src/dialogs/AboutDialogBase.ui +++ /dev/null @@ -1,255 +0,0 @@ - - - AboutDialogBase - - - Qt::ApplicationModal - - - true - - - - 0 - 0 - 600 - 400 - - - - About Deskflow - - - true - - - - - - Copyright - - - - - - - - - Build Date: - - - - - - - Unknown - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - &Ok - - - - - - - - - - true - - - - Important developers - - - - - - - Keyboard and mouse sharing application. - - - - - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 20 - 5 - - - - - - - - - - - :/image/placeholder.png - - - 0 - - - - - - - - 0 - 0 - - - - Developers - - - Qt::RichText - - - true - - - 1 - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - - - - 0 - 0 - - - - Version: - - - 1 - - - - - - - - 0 - 0 - - - - Unknown - - - 1 - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 20 - 5 - - - - - - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 20 - 5 - - - - - - - - - buttonOk - clicked() - AboutDialogBase - accept() - - - 315 - 374 - - - 301 - 3 - - - - - diff --git a/src/lib/common/copyright.h b/src/lib/common/copyright.h index 0865155a0..6ae10d2fb 100644 --- a/src/lib/common/copyright.h +++ b/src/lib/common/copyright.h @@ -17,27 +17,11 @@ #pragma once -#include -#include -#include - namespace deskflow { -const auto kCopyrightFormat = // - "Copyright (C) 2012-%s Symless Ltd.\n" +const auto kCopyright = // + "Copyright (C) 2024 Deskflow Developers\n" + "Copyright (C) 2012-2024 Symless Ltd.\n" "Copyright (C) 2009-2012 Nick Bolton\n" "Copyright (C) 2002-2009 Chris Schoeneman"; - -inline std::string copyright() -{ - const std::string date = BUILD_DATE; - const auto year = date.substr(0, 4); - const auto kBufferLength = 256; - std::vector buffer(kBufferLength); - std::snprintf( // NOSONAR - buffer.data(), kBufferLength, kCopyrightFormat, year.c_str() - ); - return std::string(buffer.data()); -} - } // namespace deskflow diff --git a/src/lib/deskflow/App.cpp b/src/lib/deskflow/App.cpp index 512b99664..24775749e 100644 --- a/src/lib/deskflow/App.cpp +++ b/src/lib/deskflow/App.cpp @@ -94,13 +94,12 @@ App::~App() void App::version() { const auto version = deskflow::version(); - const auto copyright = deskflow::copyright(); const auto kBufferLength = 1024; std::vector buffer(kBufferLength); std::snprintf( // NOSONAR buffer.data(), kBufferLength, "%s v%s, protocol v%d.%d\n%s", // - argsBase().m_pname, version.c_str(), kProtocolMajorVersion, kProtocolMinorVersion, copyright.c_str() + argsBase().m_pname, version.c_str(), kProtocolMajorVersion, kProtocolMinorVersion, deskflow::kCopyright ); std::cout << std::string(buffer.data()) << std::endl;