src/aboutDialog.cpp

changeset 202
a027f6fc6141
parent 200
5583af82087e
child 211
8d35e631bef3
equal deleted inserted replaced
201:4d620d819f4f 202:a027f6fc6141
26 #include "common.h" 26 #include "common.h"
27 #include "aboutDialog.h" 27 #include "aboutDialog.h"
28 28
29 AboutDialog::AboutDialog (QWidget* parent, Qt::WindowFlags f) : QDialog (parent, f) { 29 AboutDialog::AboutDialog (QWidget* parent, Qt::WindowFlags f) : QDialog (parent, f) {
30 QWidget* mainTab, *licenseTab; 30 QWidget* mainTab, *licenseTab;
31 QTabWidget* tabs = new QTabWidget;
32 31
33 { 32 // Application icon - in full 64 x 64 glory.
34 mainTab = new QWidget; 33 QLabel* icon = new QLabel;
34 icon->setPixmap (getIcon ("ldforge"));
35
36 // Heading - application label and copyright information
37 QLabel* title = new QLabel (fmt ("<b>" APPNAME " v%d.%d</b><br />"
38 "Copyright (C) 2013 Santeri Piippo",
39 VERSION_MAJOR, VERSION_MINOR));
40
41 // Body text
42 QLabel* info = new QLabel (
43 "<p>This software is intended for usage as a parts<br />"
44 "authoring tool for the <a href=\"http://ldraw.org/\">LDraw</a> parts library.</p>"
35 45
36 // Application icon - in full 64 x 64 glory. 46 "<p>" APPNAME " is free software, and you are welcome<br />"
37 QLabel* icon = new QLabel; 47 "to redistribute it under the terms of GPL v3. See the<br />"
38 icon->setPixmap (getIcon ("ldforge")); 48 "LICENSE text file for details. If the license text is not<br />"
49 "available for some reason, see<br />"
50 "<a href=\"http://www.gnu.org/licenses/\">http://www.gnu.org/licenses/</a> for the license terms.</p>"
39 51
40 // Heading - application label and copyright information 52 "<p>The application icon is derived from "
41 QLabel* title = new QLabel (fmt ("<b>" APPNAME " v%d.%d</b><br />" 53 "<a href=\"http://en.wikipedia.org/wiki/File:Anvil,_labelled_en.svg\">this image</a>.</p>"
42 "Copyright (C) 2013 Santeri Piippo", 54 );
43 VERSION_MAJOR, VERSION_MINOR));
44
45 // Body text
46 QLabel* info = new QLabel (
47 "<p>This software is intended for usage as a parts<br />"
48 "authoring tool for the <a href=\"http://ldraw.org/\">LDraw</a> parts library.</p>"
49
50 "<p>" APPNAME " is free software, and you are welcome<br />"
51 "to redistribute it under the terms of GPL v3. See the LICENSE<br />"
52 "text file or the license tab in this dialog for details. If the<br />"
53 "license text is not available for some reason, see<br />"
54 "<a href=\"http://www.gnu.org/licenses/\">http://www.gnu.org/licenses/</a>"
55 "for the license terms.</p>"
56
57 "<p>The application icon is derived from "
58 "<a href=\"http://en.wikipedia.org/wiki/File:Anvil,_labelled_en.svg\">this image</a>.</p>"
59 );
60
61 // Rest in peace, James.
62 QLabel* memorial = new QLabel ("In living memory of James Jessiman.");
63
64 QVBoxLayout* layout = new QVBoxLayout;
65 layout->addWidget (icon);
66 layout->addWidget (title);
67 layout->addWidget (info);
68 layout->addWidget (memorial);
69
70 // Align everything to the center.
71 for (QLabel* label : vector<QLabel*> ({icon, title, info, memorial}))
72 label->setAlignment (Qt::AlignCenter);
73
74 mainTab->setLayout (layout);
75 tabs->addTab (mainTab, "About " APPNAME);
76 }
77 55
78 { 56 // Rest in peace, James.
79 licenseTab = new QWidget; 57 QLabel* memorial = new QLabel ("In living memory of James Jessiman.");
80 58
81 QTextEdit* license = new QTextEdit; 59 // Align everything to the center.
82 license->setReadOnly (true); 60 for (QLabel* label : vector<QLabel*> ({icon, title, info, memorial}))
83 61 label->setAlignment (Qt::AlignCenter);
84 QFont font ("Monospace");
85 font.setStyleHint (QFont::TypeWriter);
86 font.setPixelSize (10);
87
88 license->setFont (font);
89
90 // Make the text view wide enough to display the license text.
91 // Why isn't 80 sufficient here?
92 license->setMinimumWidth (license->fontMetrics ().width ('a') * 85);
93
94 // Try open the license text
95 FILE* fp = fopen ("LICENSE", "r");
96
97 if (fp == null) {
98 // Failed; tell the user how to get the license text instead.
99 setlocale (LC_ALL, "C");
100 char const* text = "Couldn't open LICENSE: %s.<br />"
101 "See <a href=\"http://www.gnu.org/licenses/\">http://www.gnu.org/licenses/</a> for the GPLv3 text.";
102
103 license->setHtml (fmt (text, strerror (errno)));
104 } else {
105 // Figure out file size
106 fseek (fp, 0, SEEK_END);
107 const size_t length = ftell (fp);
108 rewind (fp);
109
110 // Init text buffer and write pointer
111 char* licenseText = new char[length];
112 char* writePtr = &licenseText[0];
113
114 // Read in the license text
115 while (true) {
116 *writePtr = fgetc (fp);
117
118 if (feof (fp))
119 break;
120
121 writePtr++;
122 }
123
124 // Add terminating null character and add the license text to the
125 // license dialog text view.
126 *writePtr = '\0';
127 license->setText (licenseText);
128
129 // And dump the trash on the way out.
130 delete[] licenseText;
131 }
132
133 QVBoxLayout* layout = new QVBoxLayout;
134 layout->addWidget (license);
135 licenseTab->setLayout (layout);
136 tabs->addTab (licenseTab, "License");
137 }
138 62
139 QDialogButtonBox* buttons = new QDialogButtonBox (QDialogButtonBox::Close); 63 QDialogButtonBox* buttons = new QDialogButtonBox (QDialogButtonBox::Close);
140 QPushButton* helpButton = new QPushButton; 64 QPushButton* helpButton = new QPushButton;
141 65
142 helpButton->setText ("Mail Author"); 66 helpButton->setText ("Mail Author");
143 helpButton->setIcon (getIcon ("mail")); 67 helpButton->setIcon (getIcon ("mail"));
144 buttons->addButton (static_cast<QAbstractButton*> (helpButton), QDialogButtonBox::HelpRole); 68 buttons->addButton (static_cast<QAbstractButton*> (helpButton), QDialogButtonBox::HelpRole);
145 connect (buttons, SIGNAL (helpRequested ()), this, SLOT (slot_mail ())); 69 connect (buttons, SIGNAL (helpRequested ()), this, SLOT (slot_mail ()));
146 connect (buttons, SIGNAL (rejected ()), this, SLOT (reject ())); 70 connect (buttons, SIGNAL (rejected ()), this, SLOT (reject ()));
147 71
148 QVBoxLayout* layout = new QVBoxLayout; 72 QVBoxLayout* layout = new QVBoxLayout (this);
149 layout->addWidget (tabs); 73 layout->addWidget (icon);
74 layout->addWidget (title);
75 layout->addWidget (info);
76 layout->addWidget (memorial);
150 layout->addWidget (buttons); 77 layout->addWidget (buttons);
151 setLayout (layout); 78
152 setWindowTitle ("About " APPNAME); 79 setWindowTitle ("About " APPNAME);
153 } 80 }
154 81
155 void AboutDialog::slot_mail () { 82 void AboutDialog::slot_mail () {
156 QDesktopServices::openUrl (QUrl ("mailto:Santeri Piippo <arezey@gmail.com>?subject=LDForge")); 83 QDesktopServices::openUrl (QUrl ("mailto:Santeri Piippo <arezey@gmail.com>?subject=LDForge"));

mercurial