--- a/QTfrontend/hwform.cpp Tue Dec 25 01:13:07 2012 +0100
+++ b/QTfrontend/hwform.cpp Tue Dec 25 02:30:00 2012 +0100
@@ -39,6 +39,8 @@
#include <QSignalMapper>
#include <QShortcut>
#include <QDesktopServices>
+#include <QDesktopWidget>
+#include <QApplication>
#include <QInputDialog>
#include <QPropertyAnimation>
#include <QSettings>
@@ -97,6 +99,18 @@
#include "DataManager.h"
#include "AutoUpdater.h"
+#ifdef Q_WS_WIN
+#define WINVER 0x0500
+#include <windows.h>
+#else
+#include <unistd.h>
+#include <sys/types.h>
+#endif
+
+#ifdef Q_WS_MAC
+#include <sys/sysctl.h>
+#endif
+
#ifdef __APPLE__
#include "M3Panel.h"
#ifdef SPARKLE_ENABLED
@@ -1974,28 +1988,41 @@
void HWForm::SendFeedback()
{
- //Create Xml representation of google code issue first
- if (!CreateIssueXml())
+ // Get form data
+
+ QString summary = ui.pageFeedback->summary->text();
+ QString description = ui.pageFeedback->description->toPlainText();
+ QString email = ui.pageFeedback->email->text();
+ QString captchaCode = ui.pageFeedback->captcha_code->text();
+ QString captchaID = QString::number(ui.pageFeedback->captchaID);
+ QString version = "HedgewarsFoundation-Hedgewars-" + (cVersionString?(*cVersionString):QString(""));
+
+ if (summary.isEmpty() || description.isEmpty())
{
- ShowErrorMessage(QMessageBox::tr("Please fill out all fields"));
+ ShowErrorMessage(QMessageBox::tr("Please fill out all fields. Email is optional."));
return;
}
- //Submit issue to PHP script
- QString source = "HedgewarsFoundation-Hedgewars-";
- source += (cVersionString?(*cVersionString):QString(""));
- QString captchaCode = ui.pageFeedback->captcha_code->text();
- QString captchaID = QString::number(ui.pageFeedback->captchaID);
+ // Submit issue to PHP script
QByteArray body;
body.append("captcha=");
body.append(captchaID);
body.append("&code=");
body.append(captchaCode);
- body.append("&source=");
- body.append(source);
- body.append("&issue=");
- body.append(QUrl::toPercentEncoding(issueXml));
+ body.append("&version=");
+ body.append(QUrl::toPercentEncoding(version));
+ body.append("&title=");
+ body.append(QUrl::toPercentEncoding(summary));
+ body.append("&body=");
+ body.append(QUrl::toPercentEncoding(description));
+ body.append("&email=");
+ body.append(QUrl::toPercentEncoding(email));
+ if (ui.pageFeedback->CheckSendSpecs->isChecked())
+ {
+ body.append("&specs=");
+ body.append(QUrl::toPercentEncoding(ui.pageFeedback->specs));
+ }
nam = new QNetworkAccessManager(this);
connect(nam, SIGNAL(finished(QNetworkReply*)),
@@ -2007,40 +2034,6 @@
nam->post(header, body);
}
-bool HWForm::CreateIssueXml()
-{
- QString summary = ui.pageFeedback->summary->text();
- QString description = ui.pageFeedback->description->toPlainText();
- QString email = ui.pageFeedback->email->text();
-
- //Check if all necessary information is entered
- if (summary.isEmpty() || description.isEmpty())
- return false;
-
- issueXml =
- "<?xml version='1.0' encoding='UTF-8'?>"
- "<entry xmlns='http://www.w3.org/2005/Atom' xmlns:issues='http://code.google.com/p/hedgewars/issues/list'>"
- "<title>";
- issueXml.append(summary);
- issueXml.append("</title><content type='html'>");
- issueXml.append(description);
- issueXml.append("</content><author><name>feedback.hedgewars</name></author>");
-
- if (!email.isEmpty())
- {
- issueXml.append("<issues:owner><issues:username>");
- issueXml.append(email);
- issueXml.append("</issues:username></issues:owner>");
- issueXml.append("<issues:cc><issues:username>");
- issueXml.append(email);
- issueXml.append("</issues:username></issues:cc>");
- }
-
- issueXml.append("</entry>");
-
- return true;
-}
-
void HWForm::finishedSlot(QNetworkReply* reply)
{
if (reply && reply->error() == QNetworkReply::NoError)
@@ -2048,13 +2041,13 @@
QMessageBox infoMsg(this);
infoMsg.setIcon(QMessageBox::Information);
infoMsg.setWindowTitle(QMessageBox::tr("Hedgewars - Success"));
- infoMsg.setText(QMessageBox::tr("Successfully posted the issue on hedgewars.googlecode.com"));
+ infoMsg.setText(reply->readAll());
infoMsg.setWindowModality(Qt::WindowModal);
infoMsg.exec();
ui.pageFeedback->summary->clear();
+ ui.pageFeedback->email->clear();
ui.pageFeedback->description->clear();
- ui.pageFeedback->EmbedSystemInfo();
ui.pageFeedback->LoadCaptchaImage();
return;
--- a/QTfrontend/hwform.h Tue Dec 25 01:13:07 2012 +0100
+++ b/QTfrontend/hwform.h Tue Dec 25 02:30:00 2012 +0100
@@ -128,9 +128,7 @@
void InitCampaignPage();
//Starts the transmission process for the feedback
void SendFeedback();
- //Make a xml representation of the issue to be created
- bool CreateIssueXml();
- //Called after posting a new issue
+ //Called after submitting new feedback
void finishedSlot(QNetworkReply* reply);
void NetGameChangeStatus(bool isMaster);
@@ -192,7 +190,6 @@
QSignalMapper * pageSwitchMapper;
QByteArray m_lastDemo;
QNetworkAccessManager * nam;
- QString issueXml;
QPropertyAnimation *animationNewSlide;
QPropertyAnimation *animationOldSlide;
--- a/QTfrontend/ui/page/pagefeedback.cpp Tue Dec 25 01:13:07 2012 +0100
+++ b/QTfrontend/ui/page/pagefeedback.cpp Tue Dec 25 02:30:00 2012 +0100
@@ -29,6 +29,7 @@
#include <QNetworkReply>
#include <QProcess>
#include <QMessageBox>
+#include <QCheckBox>
#include <string>
@@ -54,7 +55,9 @@
QVBoxLayout * pageLayout = new QVBoxLayout();
QHBoxLayout * summaryLayout = new QHBoxLayout();
QHBoxLayout * emailLayout = new QHBoxLayout();
+ QHBoxLayout * descriptionLayout = new QHBoxLayout();
QHBoxLayout * combinedTopLayout = new QHBoxLayout();
+ QHBoxLayout * systemLayout = new QHBoxLayout();
info = new QLabel();
info->setText(
@@ -62,55 +65,161 @@
"a { color: #fc0; }"
"b { color: #0df; }"
"</style>"
- "<div align=\"center\"><h1>Please give us a feedback!</h1>"
- "<h3>We are always happy about suggestions, ideas or bug reports.<h3>"
- "<h4>The feedback will be posted as a new issue on our Google Code page.<br />"
- "<b>Don't forget to mention your email or you won't be able to receive updates on this topic!</b><br /></h4>"
- //"<h4>Your email is optional, but if given, you will be notified of responses.<h4>"
+ "<div align=\"center\"><h1>Please give us feedback!</h1>"
+ "<h3>We are always happy about suggestions, ideas, or bug reports.<h3>"
+ "<h4>Your email address is optional, but we may want to contact you.<h4>"
"</div>"
);
pageLayout->addWidget(info);
- label_summary = new QLabel();
- label_summary->setText(QLabel::tr("Summary"));
- summaryLayout->addWidget(label_summary);
- summary = new QLineEdit();
- summaryLayout->addWidget(summary);
- combinedTopLayout->addLayout(summaryLayout);
+ QVBoxLayout * summaryEmailLayout = new QVBoxLayout();
+
+ const int labelWidth = 90;
label_email = new QLabel();
label_email->setText(QLabel::tr("Your Email"));
+ label_email->setFixedWidth(labelWidth);
emailLayout->addWidget(label_email);
email = new QLineEdit();
emailLayout->addWidget(email);
+ summaryEmailLayout->addLayout(emailLayout);
- // Email -- although implemented -- doesn't seem to work as intended.
- // It's sent in the XML as a <issues:cc> , the <entry>, but it doesn't seem
- // to actually do anything. If you figure out how to fix that, uncomment these lines
- // and the line above in the 'info' QLabel to re-enable this feature.
- // UPDATE: I found out that CC only works if that email is a member of the
- // Google Code project. So this feature is pretty much useless atm.
- /*
- combinedTopLayout->addLayout(emailLayout);
- combinedTopLayout->insertSpacing(1, 50);
- */
+ label_summary = new QLabel();
+ label_summary->setText(QLabel::tr("Summary"));
+ label_summary->setFixedWidth(labelWidth);
+ summaryLayout->addWidget(label_summary);
+ summary = new QLineEdit();
+ summaryLayout->addWidget(summary);
+ summaryEmailLayout->addLayout(summaryLayout);
+
+ combinedTopLayout->addLayout(summaryEmailLayout);
+
+
+ CheckSendSpecs = new QCheckBox();
+ CheckSendSpecs->setText(QLabel::tr("Send system information"));
+ CheckSendSpecs->setChecked(true);
+ systemLayout->addWidget(CheckSendSpecs);
+ BtnViewInfo = addButton("View", systemLayout, 1, false);
+ BtnViewInfo->setFixedSize(60, 30);
+ connect(BtnViewInfo, SIGNAL(clicked()), this, SLOT(ShowSpecs()));
+ combinedTopLayout->addLayout(systemLayout);
+
+ combinedTopLayout->setStretch(0, 1);
+ combinedTopLayout->insertSpacing(1, 20);
pageLayout->addLayout(combinedTopLayout);
label_description = new QLabel();
label_description->setText(QLabel::tr("Description"));
- pageLayout->addWidget(label_description, 0, Qt::AlignHCenter);
+ label_description->setFixedWidth(labelWidth);
+ descriptionLayout->addWidget(label_description, 0, Qt::AlignTop);
description = new QTextBrowser();
-
- EmbedSystemInfo();
-
description->setReadOnly(false);
- pageLayout->addWidget(description);
+ descriptionLayout->addWidget(description);
+ pageLayout->addLayout(descriptionLayout);
return pageLayout;
}
-void PageFeedback::EmbedSystemInfo()
+QNetworkAccessManager * PageFeedback::GetNetManager()
+{
+ if (netManager) return netManager;
+ netManager = new QNetworkAccessManager(this);
+ connect(netManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(NetReply(QNetworkReply*)));
+ return netManager;
+}
+
+void PageFeedback::LoadCaptchaImage()
+{
+ QNetworkAccessManager *netManager = GetNetManager();
+ QUrl captchaURL("http://hedgewars.org/feedback/?gencaptcha");
+ QNetworkRequest req(captchaURL);
+ genCaptchaRequest = netManager->get(req);
+}
+
+void PageFeedback::NetReply(QNetworkReply *reply)
+{
+ if (reply == genCaptchaRequest)
+ {
+ if (reply->error() != QNetworkReply::NoError)
+ {
+ qDebug() << "Error generating captcha image: " << reply->errorString();
+ ShowErrorMessage(QMessageBox::tr("Failed to generate captcha"));
+ return;
+ }
+
+ bool okay;
+ QByteArray body = reply->readAll();
+ captchaID = QString(body).toInt(&okay);
+
+ if (!okay)
+ {
+ qDebug() << "Failed to get captcha ID: " << body;
+ ShowErrorMessage(QMessageBox::tr("Failed to generate captcha"));
+ return;
+ }
+
+ QString url = "http://hedgewars.org/feedback/?captcha&id=";
+ url += QString::number(captchaID);
+
+ QNetworkAccessManager *netManager = GetNetManager();
+ QUrl captchaURL(url);
+ QNetworkRequest req(captchaURL);
+ captchaImageRequest = netManager->get(req);
+ }
+ else if (reply == captchaImageRequest)
+ {
+ if (reply->error() != QNetworkReply::NoError)
+ {
+ qDebug() << "Error loading captcha image: " << reply->errorString();
+ ShowErrorMessage(QMessageBox::tr("Failed to download captcha"));
+ return;
+ }
+
+ QByteArray imageData = reply->readAll();
+ QPixmap pixmap;
+ pixmap.loadFromData(imageData);
+ label_captcha->setPixmap(pixmap);
+ captcha_code->setText("");
+ }
+}
+
+QLayout * PageFeedback::footerLayoutDefinition()
+{
+ QHBoxLayout * bottomLayout = new QHBoxLayout();
+ QHBoxLayout * captchaLayout = new QHBoxLayout();
+ QVBoxLayout * captchaInputLayout = new QVBoxLayout();
+
+ label_captcha = new QLabel();
+ label_captcha->setStyleSheet("border: 3px solid #ffcc00; border-radius: 4px");
+ label_captcha->setText("<div style='width: 200px; height: 100px;'>loading<br>captcha</div>");
+ captchaLayout->addWidget(label_captcha);
+
+ label_captcha_input = new QLabel();
+ label_captcha_input->setText(QLabel::tr("Type the security code:"));
+ captchaInputLayout->addWidget(label_captcha_input);
+ captchaInputLayout->setAlignment(label_captcha, Qt::AlignBottom);
+ captcha_code = new QLineEdit();
+ captcha_code->setFixedSize(165, 30);
+ captchaInputLayout->addWidget(captcha_code);
+ captchaInputLayout->setAlignment(captcha_code, Qt::AlignTop);
+ captchaLayout->addLayout(captchaInputLayout);
+ captchaLayout->setAlignment(captchaInputLayout, Qt::AlignLeft);
+
+ captchaLayout->insertSpacing(-1, 40);
+ bottomLayout->addLayout(captchaLayout);
+
+ //TODO: create logo for send button
+ BtnSend = addButton("Send Feedback", bottomLayout, 0, false);
+ BtnSend->setFixedSize(120, 40);
+
+ bottomLayout->setStretchFactor(captchaLayout, 0);
+ bottomLayout->setStretchFactor(BtnSend, 1);
+
+ return bottomLayout;
+}
+
+void PageFeedback::GenerateSpecs()
{
// Gather some information about the system and embed it into the report
QDesktopWidget* screen = QApplication::desktop();
@@ -243,11 +352,8 @@
else if(sizeof(void*) == 8)
compiler_bits += "x86_64\n";
- // add everything to the field of text
- description->setText(
- "\n\n\n\n\n"
- "System information:\n"
- + qt_version
+ // concat system info
+ specs = qt_version
+ os_version
+ total_ram
+ screen_size
@@ -256,106 +362,7 @@
+ number_of_cores
+ compiler_version
+ compiler_bits
- + kernel_line
- );
-}
-
-QNetworkAccessManager * PageFeedback::GetNetManager()
-{
- if (netManager) return netManager;
- netManager = new QNetworkAccessManager(this);
- connect(netManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(NetReply(QNetworkReply*)));
- return netManager;
-}
-
-void PageFeedback::LoadCaptchaImage()
-{
- QNetworkAccessManager *netManager = GetNetManager();
- QUrl captchaURL("http://hedgewars.org/feedback/?gencaptcha");
- QNetworkRequest req(captchaURL);
- genCaptchaRequest = netManager->get(req);
-}
-
-void PageFeedback::NetReply(QNetworkReply *reply)
-{
- if (reply == genCaptchaRequest)
- {
- if (reply->error() != QNetworkReply::NoError)
- {
- qDebug() << "Error generating captcha image: " << reply->errorString();
- ShowErrorMessage(QMessageBox::tr("Failed to generate captcha"));
- return;
- }
-
- bool okay;
- QByteArray body = reply->readAll();
- captchaID = QString(body).toInt(&okay);
-
- if (!okay)
- {
- qDebug() << "Failed to get captcha ID: " << body;
- ShowErrorMessage(QMessageBox::tr("Failed to generate captcha"));
- return;
- }
-
- QString url = "http://hedgewars.org/feedback/?captcha&id=";
- url += QString::number(captchaID);
-
- QNetworkAccessManager *netManager = GetNetManager();
- QUrl captchaURL(url);
- QNetworkRequest req(captchaURL);
- captchaImageRequest = netManager->get(req);
- }
- else if (reply == captchaImageRequest)
- {
- if (reply->error() != QNetworkReply::NoError)
- {
- qDebug() << "Error loading captcha image: " << reply->errorString();
- ShowErrorMessage(QMessageBox::tr("Failed to download captcha"));
- return;
- }
-
- QByteArray imageData = reply->readAll();
- QPixmap pixmap;
- pixmap.loadFromData(imageData);
- label_captcha->setPixmap(pixmap);
- captcha_code->setText("");
- }
-}
-
-QLayout * PageFeedback::footerLayoutDefinition()
-{
- QHBoxLayout * bottomLayout = new QHBoxLayout();
- QHBoxLayout * captchaLayout = new QHBoxLayout();
- QVBoxLayout * captchaInputLayout = new QVBoxLayout();
-
- label_captcha = new QLabel();
- label_captcha->setStyleSheet("border: 3px solid #ffcc00; border-radius: 4px");
- label_captcha->setText("<div style='width: 200px; height: 100px;'>loading<br>captcha</div>");
- captchaLayout->addWidget(label_captcha);
-
- label_captcha_input = new QLabel();
- label_captcha_input->setText(QLabel::tr("Type the security code:"));
- captchaInputLayout->addWidget(label_captcha_input);
- captchaInputLayout->setAlignment(label_captcha, Qt::AlignBottom);
- captcha_code = new QLineEdit();
- captcha_code->setFixedSize(165, 30);
- captchaInputLayout->addWidget(captcha_code);
- captchaInputLayout->setAlignment(captcha_code, Qt::AlignTop);
- captchaLayout->addLayout(captchaInputLayout);
- captchaLayout->setAlignment(captchaInputLayout, Qt::AlignLeft);
-
- captchaLayout->insertSpacing(-1, 40);
- bottomLayout->addLayout(captchaLayout);
-
- //TODO: create logo for send button
- BtnSend = addButton("Send Feedback", bottomLayout, 0, false);
- BtnSend->setFixedSize(120, 40);
-
- bottomLayout->setStretchFactor(captchaLayout, 0);
- bottomLayout->setStretchFactor(BtnSend, 1);
-
- return bottomLayout;
+ + kernel_line;
}
void PageFeedback::connectSignals()
@@ -373,8 +380,21 @@
msgMsg.exec();
}
+void PageFeedback::ShowSpecs()
+{
+ QMessageBox msgMsg(this);
+ msgMsg.setIcon(QMessageBox::Information);
+ msgMsg.setWindowTitle(QMessageBox::tr("System Information Preview"));
+ msgMsg.setText(specs);
+ msgMsg.setTextFormat(Qt::PlainText);
+ msgMsg.setWindowModality(Qt::WindowModal);
+ msgMsg.setStyleSheet("background: #0A0533;");
+ msgMsg.exec();
+}
+
PageFeedback::PageFeedback(QWidget* parent) : AbstractPage(parent)
{
initPage();
netManager = NULL;
+ GenerateSpecs();
}
--- a/QTfrontend/ui/page/pagefeedback.h Tue Dec 25 01:13:07 2012 +0100
+++ b/QTfrontend/ui/page/pagefeedback.h Tue Dec 25 02:30:00 2012 +0100
@@ -34,6 +34,8 @@
void LoadCaptchaImage();
QPushButton * BtnSend;
+ QPushButton * BtnViewInfo;
+ QCheckBox * CheckSendSpecs;
QLineEdit * summary;
QTextBrowser * description;
QLabel * info;
@@ -45,12 +47,15 @@
QLineEdit * captcha_code;
QLineEdit * email;
int captchaID;
+ QString specs;
private slots:
virtual void NetReply(QNetworkReply*);
+ virtual void ShowSpecs();
private:
+ void GenerateSpecs();
QLayout * bodyLayoutDefinition();
QLayout * footerLayoutDefinition();
QNetworkAccessManager * GetNetManager();