From 51e3fa45d62873e672117d13a5b6e131c0fb670d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9F=D0=B5=D0=BB=D0=B8=D0=BF=D0=B5=D0=BD=D0=BA=D0=BE=20?= =?UTF-8?q?=D0=98=D0=B2=D0=B0=D0=BD?= Date: Wed, 1 Apr 2020 16:44:50 +0000 Subject: [PATCH] git-svn-id: svn://db.shs.com.ru/libs@924 a8b55f48-bf90-11e4-a774-851b48703e85 --- qad/application/aboutwindow.cpp | 157 ++++++++++++++++++++++++++++ qad/application/aboutwindow.h | 48 +++++++++ qad/application/aboutwindow.ui | 155 +++++++++++++++++++++++++++ qad/application/qad_application.qrc | 1 + qad/icons/qt.png | Bin 0 -> 6637 bytes 5 files changed, 361 insertions(+) create mode 100644 qad/application/aboutwindow.cpp create mode 100644 qad/application/aboutwindow.h create mode 100644 qad/application/aboutwindow.ui create mode 100644 qad/icons/qt.png diff --git a/qad/application/aboutwindow.cpp b/qad/application/aboutwindow.cpp new file mode 100644 index 0000000..0f972e2 --- /dev/null +++ b/qad/application/aboutwindow.cpp @@ -0,0 +1,157 @@ +#include "aboutwindow.h" +#include "ui_aboutwindow.h" +#include "qad_types.h" +#include +#include +#include + +#if defined(Q_OS_ANDROID) || defined(Q_OS_IOS) +# define MOBILE_VIEW +#endif + +QImage AboutWindow::logo; +QVector AboutWindow::versions, AboutWindow::builds; +QString AboutWindow::comment; + + +AboutWindow::AboutWindow(QWidget * parent): QDialog(parent), ui(new Ui::AboutWindow) { +#ifdef ANDROID + setStyleSheet("font: 12pt \"DejaVu Sans\";"); +#endif + ui->setupUi(this); + QImage logo_im = logo; + if (logo_im.isNull()) + logo_im.load(":/icons/splash.png"); + setWindowTitle(QApplication::applicationName() + " - " + tr("About")); + QIcon ic = QApplication::windowIcon(); + if (ic.isNull()) { + QWidgetList tlw = QApplication::topLevelWidgets(); + foreach (QWidget * w, tlw) + if (!w->windowIcon().isNull()) { + ic = w->windowIcon(); + break; + } + } + if (ic.isNull()) + ic = QIcon(QPixmap::fromImage(logo_im)); + setWindowIcon(ic); + QFormLayout * lay = (QFormLayout*)(ui->groupVersions->layout()); + foreach (SSPair p, versions) { + lay->addRow(p.first, new QLabel(p.second)); + } + lay = (QFormLayout*)(ui->groupBuild->layout()); + foreach (SSPair p, builds) { + lay->addRow(p.first, new QLabel(p.second)); + } + ui->labelComment->setText(comment); + ui->labelComment->setHidden(comment.isEmpty()); + //ui->labelArch->setText(QSysInfo::currentCpuArchitecture()); + ui->labelAuthors->setText(authors()); + connect(ui->buttonQt, SIGNAL(clicked()), qApp, SLOT(aboutQt())); +#ifdef MOBILE_VIEW + ui->layoutMain->insertWidget(0, ui->imageView); + //ui->verticalSpacer->changeSize(1, 1, QSizePolicy::Preferred, QSizePolicy::Preferred); +#endif +#ifdef MOBILE_VIEW + ui->layoutMain->addSpacerItem(new QSpacerItem(1, 1, QSizePolicy::Preferred, QSizePolicy::Expanding)); +#else + QScreen * scr = +# if QT_VERSION >= 0x050A00 + QApplication::screenAt(QCursor::pos()); +# else + QApplication::screens()[0]; +# endif + if (scr) { + QRect r; + r.setSize(scr->availableSize() / 2); + r.moveCenter(scr->availableGeometry().center()); + setGeometry(r); + } +#endif +} + + +AboutWindow::~AboutWindow() { + delete ui; +} + + +void AboutWindow::setLogo(QImage im) { + logo = im; +} + + +void AboutWindow::addVersion(QString name, QString version) { + if (!name.endsWith(":")) name.append(":"); + foreach (const SSPair & p, versions) { + if (p.first == name) return; + } + versions << SSPair(name, version); +} + + +void AboutWindow::addBuildInfo(QString name, QString value) { + if (!name.endsWith(":")) name.append(":"); + foreach (const SSPair & p, builds) { + if (p.first == name) return; + } + builds << SSPair(name, value); +} + + +void AboutWindow::setComment(QString text) { + comment = text; +} + + +void AboutWindow::show() { + AboutWindow w; + w.exec(); +} + + +int AboutWindow::exec() { +#ifdef MOBILE_VIEW + showFullScreen(); + //setWindowState(Qt::WindowFullScreen); +#endif + return QDialog::exec(); +} + + +void AboutWindow::changeEvent(QEvent *e) { + QDialog::changeEvent(e); + switch (e->type()) { + case QEvent::LanguageChange: + ui->retranslateUi(this); + break; + case QEvent::FontChange: + case QEvent::Polish: + ui->buttonOK->setIconSize(preferredIconSize(2., this)); + ui->buttonQt->setIconSize(preferredIconSize(2., this)); + break; + default: break; + } +} + + +QString AboutWindow::authors() { + QFile f(":/authors.txt"); + if (!f.open(QIODevice::ReadOnly)) return QString(); + QString ret; + QTextStream ts(&f); + ts.readLine(); + QStringList sl; + while (!ts.atEnd()) { + QString l = ts.readLine(); + if (l.isEmpty()) continue; + QString name, mail; + sl = l.split(";"); + if (sl.size() > 0) name = sl[0].trimmed(); + if (sl.size() > 1) mail = sl[1].trimmed(); + if (!ret.isEmpty()) ret += "\n"; + ret += QString("%1 (%2)").arg(name, mail); + } + return ret; +} + diff --git a/qad/application/aboutwindow.h b/qad/application/aboutwindow.h new file mode 100644 index 0000000..d447566 --- /dev/null +++ b/qad/application/aboutwindow.h @@ -0,0 +1,48 @@ +#ifndef ABOUTWINDOW_H +#define ABOUTWINDOW_H + +#include "qad_export.h" +#include + +#define ADD_ABOUT_VERSION(lib) AboutWindow::addVersion(#lib, lib##_VERSION_NAME); +#define ADD_ABOUT_BUILD_INFO(lib) \ + AboutWindow::addBuildInfo("Arch", lib##_ARCH); \ + AboutWindow::addBuildInfo("Compiler", lib##_CXX_COMPILER); \ + AboutWindow::addBuildInfo("CMake", lib##_CMAKE_VERSION); \ + AboutWindow::addBuildInfo("Date", lib##_BUILD_DATE); + +namespace Ui { + class AboutWindow; +} + +class QAD_EXPORT AboutWindow: public QDialog +{ + Q_OBJECT + typedef QPair SSPair; + explicit AboutWindow(QWidget * parent = 0); + ~AboutWindow(); +public: + + static void setLogo(QImage im); + static void addVersion(QString name, QString version); + static void addBuildInfo(QString name, QString value); + static void setComment(QString text); + + static void show(); + +protected: + virtual void changeEvent(QEvent * e); + virtual int exec(); + + QString authors(); + +private: + Ui::AboutWindow * ui; + + static QImage logo; + static QVector versions, builds; + static QString comment; + +}; + +#endif // ABOUTWINDOW_H diff --git a/qad/application/aboutwindow.ui b/qad/application/aboutwindow.ui new file mode 100644 index 0000000..e0b0c42 --- /dev/null +++ b/qad/application/aboutwindow.ui @@ -0,0 +1,155 @@ + + + AboutWindow + + + + 0 + 0 + 724 + 502 + + + + - About + + + + + + QFrame::NoFrame + + + + + 0 + 0 + 0 + + + + + :/icons/splash.png + + + + + + + + + + + + Versions + + + + QFormLayout::AllNonFixedFieldsGrow + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + Build + + + + QFormLayout::AllNonFixedFieldsGrow + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + Authors + + + + + + + + + + + + + + + + Qt::Vertical + + + + 1 + 1 + + + + + + + + About Qt... + + + + :/icons/qt.png:/icons/qt.png + + + + + + + OK + + + + :/icons/dialog-ok-apply.png:/icons/dialog-ok-apply.png + + + + + + + + + + ImageView + QGraphicsView +
image_view.h
+
+
+ + + + + + + buttonOK + clicked() + AboutWindow + close() + + + 712 + 490 + + + 320 + 385 + + + + +
diff --git a/qad/application/qad_application.qrc b/qad/application/qad_application.qrc index 6a6c8f9..aafad3d 100644 --- a/qad/application/qad_application.qrc +++ b/qad/application/qad_application.qrc @@ -27,5 +27,6 @@ ../icons/clear-history.png ../icons/layer-visible-off.png ../icons/layer-visible-on.png + ../icons/qt.png diff --git a/qad/icons/qt.png b/qad/icons/qt.png new file mode 100644 index 0000000000000000000000000000000000000000..d999cb336fcb3a2887c12463a78834d00cc6f1bd GIT binary patch literal 6637 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.-BE1xw7G5r%`5X6h13hawT-?4{iLsmYUjQE~N=~W`Dcw)llFKFwJHrtlk}|cp%4_8E+hT z78R9ji1+7Fe7jmxvgy#9oH5s>P?P&#cpfyJoKQzo+MNWY@DG~I*X^&o97E4n6BxT) zQMoO6Q9GZ8jN6I@&-z}ww%GPY8K)@=^3(~&0!&5>{1Hy(b9tW?54n3FUP=vNUtM@b zEpETS6@Y>->N6Msea9R6j00$=d_zG`Fj>4j*JmT+LthP1oewZD1ObYp%|~!EbHv=!<(8{CD2o?5J1olO z%LCx&!kz;$Y`{7RnKp7abYH-cw5Bx+BD+!PhMv%Z)Is`hC5O#IVL zz40;tGHmnt-C#{@`p8-?NXPGb9?J6f)(!nwlv4FXxuF0eJM{+S_%+;2$d>=fdbDMj zFark3>2?N^3E_3a7sHe+xkmU1hzqP-lu;I&c69f<28I5++E;+b@x~Z#xzQ*+1F}>{ zXQ1Cs7gL)`*S8uQ5?j&2UWbM%TG)5>Y1NjAJO-=oO`qDt)0r7lS+rY^$Vva7nqDj# Zn)mUKk^u%C_;UpS)ReRpE9I>s{ts}me+~cu literal 0 HcmV?d00001