[PATCH] Add an 'About' dialog for the Qt UI

Lubomir I. Ivanov neolit123 at gmail.com
Mon Jun 24 04:36:38 PDT 2013


From: "Lubomir I. Ivanov" <neolit123 at gmail.com>

The dialog is similar to the one in the GTK version

Signed-off-by: Lubomir I. Ivanov <neolit123 at gmail.com>
---

please, comment if something can be improved.
---
 Makefile             |   2 +
 qt-ui/about.cpp      |  39 ++++++++++++++
 qt-ui/about.h        |  26 ++++++++++
 qt-ui/about.ui       | 142 +++++++++++++++++++++++++++++++++++++++++++++++++++
 qt-ui/mainwindow.cpp |   3 +-
 5 files changed, 211 insertions(+), 1 deletion(-)
 create mode 100644 qt-ui/about.cpp
 create mode 100644 qt-ui/about.h
 create mode 100644 qt-ui/about.ui

diff --git a/Makefile b/Makefile
index 1a4f60a..664cd97 100644
--- a/Makefile
+++ b/Makefile
@@ -51,6 +51,7 @@ HEADERS = \
 	qt-ui/subsurfacewebservices.h \
 	qt-ui/divecomputermanagementdialog.h \
 	qt-ui/diveplanner.h \
+	qt-ui/about.h \
 
 
 SOURCES = \
@@ -88,6 +89,7 @@ SOURCES = \
 	qt-ui/subsurfacewebservices.cpp \
 	qt-ui/divecomputermanagementdialog.cpp \
 	qt-ui/diveplanner.cpp \
+	qt-ui/about.cpp \
 	$(RESFILE)
 
 
diff --git a/qt-ui/about.cpp b/qt-ui/about.cpp
new file mode 100644
index 0000000..18b54b9
--- /dev/null
+++ b/qt-ui/about.cpp
@@ -0,0 +1,39 @@
+#include "about.h"
+#include "ui_about.h"
+#include "../version.h"
+#include <QDebug>
+#include <QDialogButtonBox>
+#include <QNetworkReply>
+#include <qdesktopservices.h>
+
+SubsurfaceAbout *SubsurfaceAbout::instance()
+{
+	static SubsurfaceAbout *self = new SubsurfaceAbout();
+	return self;
+}
+
+SubsurfaceAbout::SubsurfaceAbout(QWidget* parent, Qt::WindowFlags f)
+: ui( new Ui::SubsurfaceAbout())
+{
+	ui->setupUi(this);
+	ui->aboutLabel->setText(tr("<span style='font-size: 18pt; font-weight: bold;'>" \
+		"Subsurface " VERSION_STRING "</span><br><br>" \
+		"Multi-platform divelog software in C<br>" \
+		"<span style='font-size: 8pt'>Linus Torvalds, Dirk Hohndel, and others, 2011, 2012, 2013</span>"));
+	licenseButton = new QPushButton(tr("&License"));
+	websiteButton = new QPushButton(tr("&Website"));
+	ui->buttonBox->addButton(licenseButton, QDialogButtonBox::ActionRole);
+	ui->buttonBox->addButton(websiteButton, QDialogButtonBox::ActionRole);
+	connect(licenseButton, SIGNAL(clicked(bool)), this, SLOT(licenseClicked()));
+	connect(websiteButton, SIGNAL(clicked(bool)), this, SLOT(websiteClicked()));
+}
+
+void SubsurfaceAbout::licenseClicked(void)
+{
+	QDesktopServices::openUrl(QUrl("http://www.gnu.org/licenses/gpl-2.0.txt"));
+}
+
+void SubsurfaceAbout::websiteClicked(void)
+{
+	QDesktopServices::openUrl(QUrl("http://subsurface.hohndel.org"));
+}
diff --git a/qt-ui/about.h b/qt-ui/about.h
new file mode 100644
index 0000000..219df5d
--- /dev/null
+++ b/qt-ui/about.h
@@ -0,0 +1,26 @@
+#ifndef ABOUT_H
+#define ABOUT_H
+
+#include <QDialog>
+#include <QPushButton>
+
+namespace Ui {
+	class SubsurfaceAbout;
+}
+
+class SubsurfaceAbout : public QDialog {
+	Q_OBJECT
+
+public:
+	static SubsurfaceAbout* instance();
+private slots:
+	void licenseClicked();
+	void websiteClicked();
+private:
+	explicit SubsurfaceAbout(QWidget* parent = 0, Qt::WindowFlags f = 0);
+	QPushButton *licenseButton;
+	QPushButton *websiteButton; 
+	Ui::SubsurfaceAbout *ui;
+};
+
+#endif
diff --git a/qt-ui/about.ui b/qt-ui/about.ui
new file mode 100644
index 0000000..e03bb3e
--- /dev/null
+++ b/qt-ui/about.ui
@@ -0,0 +1,142 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>SubsurfaceAbout</class>
+ <widget class="QDialog" name="SubsurfaceAbout">
+  <property name="windowModality">
+   <enum>Qt::WindowModal</enum>
+  </property>
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>456</width>
+    <height>450</height>
+   </rect>
+  </property>
+  <property name="sizePolicy">
+   <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+    <horstretch>0</horstretch>
+    <verstretch>0</verstretch>
+   </sizepolicy>
+  </property>
+  <property name="windowTitle">
+   <string>About Subsurface</string>
+  </property>
+  <property name="windowIcon">
+   <iconset resource="../subsurface.qrc">
+    <normaloff>:/subsurface-icon</normaloff>:/subsurface-icon</iconset>
+  </property>
+  <property name="modal">
+   <bool>true</bool>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout_2">
+   <property name="spacing">
+    <number>0</number>
+   </property>
+   <property name="leftMargin">
+    <number>0</number>
+   </property>
+   <property name="topMargin">
+    <number>0</number>
+   </property>
+   <property name="rightMargin">
+    <number>0</number>
+   </property>
+   <property name="bottomMargin">
+    <number>0</number>
+   </property>
+   <item>
+    <spacer name="verticalSpacer">
+     <property name="orientation">
+      <enum>Qt::Vertical</enum>
+     </property>
+     <property name="sizeType">
+      <enum>QSizePolicy::Fixed</enum>
+     </property>
+     <property name="sizeHint" stdset="0">
+      <size>
+       <width>20</width>
+       <height>20</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+   <item>
+    <widget class="QLabel" name="subsurfaceIcon">
+     <property name="text">
+      <string/>
+     </property>
+     <property name="pixmap">
+      <pixmap resource="../subsurface.qrc">:/subsurface-icon</pixmap>
+     </property>
+     <property name="alignment">
+      <set>Qt::AlignCenter</set>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <widget class="QLabel" name="aboutLabel">
+     <property name="text">
+      <string>TextLabel</string>
+     </property>
+     <property name="textFormat">
+      <enum>Qt::RichText</enum>
+     </property>
+     <property name="alignment">
+      <set>Qt::AlignCenter</set>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <widget class="QDialogButtonBox" name="buttonBox">
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+     <property name="standardButtons">
+      <set>QDialogButtonBox::Close</set>
+     </property>
+     <property name="centerButtons">
+      <bool>true</bool>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <spacer name="verticalSpacer_2">
+     <property name="orientation">
+      <enum>Qt::Vertical</enum>
+     </property>
+     <property name="sizeType">
+      <enum>QSizePolicy::Fixed</enum>
+     </property>
+     <property name="sizeHint" stdset="0">
+      <size>
+       <width>20</width>
+       <height>20</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+  </layout>
+ </widget>
+ <resources>
+  <include location="../subsurface.qrc"/>
+ </resources>
+ <connections>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>rejected()</signal>
+   <receiver>SubsurfaceAbout</receiver>
+   <slot>close()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>227</x>
+     <y>437</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>227</x>
+     <y>224</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
+</ui>
diff --git a/qt-ui/mainwindow.cpp b/qt-ui/mainwindow.cpp
index b61f962..fc454ab 100644
--- a/qt-ui/mainwindow.cpp
+++ b/qt-ui/mainwindow.cpp
@@ -33,6 +33,7 @@
 #include "divecomputermanagementdialog.h"
 #include "simplewidgets.h"
 #include "diveplanner.h"
+#include "about.h"
 
 static MainWindow* instance = 0;
 
@@ -335,7 +336,7 @@ void MainWindow::on_actionInputPlan_triggered()
 
 void MainWindow::on_actionAboutSubsurface_triggered()
 {
-	qDebug("actionAboutSubsurface");
+	SubsurfaceAbout::instance()->show();
 }
 
 void MainWindow::on_actionUserManual_triggered()
-- 
1.7.11.msysgit.0



More information about the subsurface mailing list