# HG changeset patch # User unc0rr # Date 1358712446 -14400 # Node ID 2784b2610b5c01c687946381a78af666a331e390 # Parent fbc6e7602e0517a8371470794089d3c2bb85dcb0# Parent 286823b10f355f7b15b454b4eeed43f38a368eea Merge diff -r fbc6e7602e05 -r 2784b2610b5c QTfrontend/hwform.cpp --- a/QTfrontend/hwform.cpp Sat Jan 19 21:51:41 2013 +0400 +++ b/QTfrontend/hwform.cpp Mon Jan 21 00:07:26 2013 +0400 @@ -1336,75 +1336,77 @@ QString nickname = config->value("net/nick", "").toString(); QString password; - if (nickname.isEmpty() || hash.isEmpty()) { //if something from login is missing, start dialog loop - + //if something from login is missing, start dialog loop + if (nickname.isEmpty() || hash.isEmpty()) + { while (nickname.isEmpty() || (hash.isEmpty() && temphash.isEmpty())) //while a nickname, or both hashes are missing { - //open dialog + //open dialog HWPasswordDialog * pwDialog = new HWPasswordDialog(this); // make the "new account" button dialog open a browser with the registration page connect(pwDialog->pbNewAccount, SIGNAL(clicked()), this, SLOT(openRegistrationPage())); pwDialog->cbSave->setChecked(config->value("net/savepassword", true).toBool()); - //if nickname is present, put it into the field - if (!nickname.isEmpty()) { - pwDialog->leNickname->setText(nickname); - pwDialog->lePassword->setFocus(); - } + //if nickname is present, put it into the field + if (!nickname.isEmpty()) { + pwDialog->leNickname->setText(nickname); + pwDialog->lePassword->setFocus(); + } + + //if dialog close, create an error message + if (pwDialog->exec() != QDialog::Accepted) { + delete pwDialog; + GoBack(); + return; + } + + //set nick and pass from the dialog + nickname = pwDialog->leNickname->text(); + password = pwDialog->lePassword->text(); - //if dialog close, create an error message - if (pwDialog->exec() != QDialog::Accepted) { - delete pwDialog; - GoBack(); - return; - } + //check the nickname variable + if (nickname.isEmpty()) { + int retry = RetryDialog(tr("Hedgewars - Empty nickname"), tr("No nickname supplied.")); + GoBack(); + delete pwDialog; + if (retry) { + NetConnectOfficialServer(); + } + return; + } + + if (!password.isEmpty()) { + //calculate temphash and set it into config + temphash = QCryptographicHash::hash(password.toUtf8(), QCryptographicHash::Md5).toHex(); + config->setTempHash(temphash); - //set nick and pass from the dialog - nickname = pwDialog->leNickname->text(); - password = pwDialog->lePassword->text(); + //if user wants to save password + bool save = pwDialog->cbSave->isChecked(); + config->setValue("net/savepassword", save); + if (save) // user wants to save password + { + ui.pageOptions->CBSavePassword->setChecked(true); + config->setPasswordHash(temphash); + } + } + else { + delete pwDialog; + config->setValue("net/nick", nickname); + config->updNetNick(); + config->clearPasswordHash(); + break; + } - //check the nickname variable - if (nickname.isEmpty()) { - int retry = RetryDialog(tr("Hedgewars - Empty nickname"), tr("No nickname supplied.")); - GoBack(); delete pwDialog; - if (retry) { - NetConnectOfficialServer(); - } - return; - } - if (!password.isEmpty()) { - //calculate temphash and set it into config - temphash = QCryptographicHash::hash(password.toUtf8(), QCryptographicHash::Md5).toHex(); - config->setTempHash(temphash); - - //if user wants to save password - bool save = pwDialog->cbSave->isChecked(); - config->setValue("net/savepassword", save); - if (save) // user wants to save password - { - config->setPasswordHash(temphash); - } - } - else { - delete pwDialog; + //update nickname config->setValue("net/nick", nickname); config->updNetNick(); - config->clearPasswordHash(); - break; - } - delete pwDialog; - - //update nickname - config->setValue("net/nick", nickname); - config->updNetNick(); - - //and all the variables - hash = config->passwordHash(); - temphash = config->tempHash(); - nickname = config->value("net/nick", "").toString(); + //and all the variables + hash = config->passwordHash(); + temphash = config->tempHash(); + nickname = config->value("net/nick", "").toString(); } } diff -r fbc6e7602e05 -r 2784b2610b5c QTfrontend/main.cpp --- a/QTfrontend/main.cpp Sat Jan 19 21:51:41 2013 +0400 +++ b/QTfrontend/main.cpp Mon Jan 21 00:07:26 2013 +0400 @@ -46,6 +46,11 @@ #include #endif +// Program resources +#ifdef __APPLE__ +static CocoaInitializer * cocoaInit = NULL; +#endif +static FileEngineHandler * engine = NULL; //Determines the day of easter in year //from http://aa.usno.navy.mil/faq/docs/easter.php,adapted to C/C++ @@ -124,26 +129,31 @@ return true; } +// Guaranteed to be the last thing ran in the application's life time. +// Closes resources that need to exist as long as possible. +void closeResources(void) +{ #ifdef __APPLE__ -static CocoaInitializer *cocoaInit = NULL; -// Function to be called at end of program's termination on OS X to release -// the NSAutoReleasePool contained within the CocoaInitializer. -void releaseCocoaPool(void) -{ if (cocoaInit != NULL) { delete cocoaInit; cocoaInit = NULL; } +#endif + if (engine != NULL) + { + delete engine; + engine = NULL; + } } -#endif int main(int argc, char *argv[]) { + // Since we're calling this first, closeResources() will be the last thing called after main() returns. + atexit(closeResources); + #ifdef __APPLE__ - // This creates the autoreleasepool that prevents leaking, and destroys it only on exit - cocoaInit = new CocoaInitializer(); - atexit(releaseCocoaPool); + cocoaInit = new CocoaInitializer(); // Creates the autoreleasepool preventing cocoa object leaks on OS X. #endif #ifndef _WIN32 @@ -165,7 +175,7 @@ splash->show(); #endif - FileEngineHandler engine(argv[0]); + engine = new FileEngineHandler(argv[0]); app.setAttribute(Qt::AA_DontShowIconsInMenus,false); @@ -280,11 +290,11 @@ } // setup PhysFS - engine.mount(datadir->absolutePath()); - engine.mount(cfgdir->absolutePath() + "/Data"); - engine.mount(cfgdir->absolutePath()); - engine.setWriteDir(cfgdir->absolutePath()); - engine.mountPacks(); + engine->mount(datadir->absolutePath()); + engine->mount(cfgdir->absolutePath() + "/Data"); + engine->mount(cfgdir->absolutePath()); + engine->setWriteDir(cfgdir->absolutePath()); + engine->mountPacks(); checkForFile("physfs://hedgewars.ini"); diff -r fbc6e7602e05 -r 2784b2610b5c QTfrontend/res/css/qt.css --- a/QTfrontend/res/css/qt.css Sat Jan 19 21:51:41 2013 +0400 +++ b/QTfrontend/res/css/qt.css Mon Jan 21 00:07:26 2013 +0400 @@ -309,4 +309,8 @@ #hatList::item:selected { background-color: #150A61; +} + +QDialogButtonBox QPushButton { +padding: 3px 5px; } \ No newline at end of file diff -r fbc6e7602e05 -r 2784b2610b5c QTfrontend/res/html/about.html --- a/QTfrontend/res/html/about.html Sat Jan 19 21:51:41 2013 +0400 +++ b/QTfrontend/res/html/about.html Mon Jan 21 00:07:26 2013 +0400 @@ -90,13 +90,5 @@ Natasha Korotaeva <layout@pisem.net>
Adam Higerd (aka ahigerd at FreeNode)

- -

What we use:

- %COMPILER_A_OPEN%Compiler%COMPILER_A_CLOSE%: %COMPILER%
- SDL: %SDL%
- Qt version: %QT%
- PhysicsFS %PHYSFS%
- %LIBAV% -

diff -r fbc6e7602e05 -r 2784b2610b5c QTfrontend/ui/page/AbstractPage.cpp --- a/QTfrontend/ui/page/AbstractPage.cpp Sat Jan 19 21:51:41 2013 +0400 +++ b/QTfrontend/ui/page/AbstractPage.cpp Mon Jan 21 00:07:26 2013 +0400 @@ -40,27 +40,28 @@ void AbstractPage::initPage() { QGridLayout * pageLayout = new QGridLayout(this); + QHBoxLayout * bottomLeftLayout = new QHBoxLayout(); + pageLayout->addLayout(bottomLeftLayout, 1, 0); // stretch grid space for body and footer - pageLayout->setColumnStretch(0,0); - pageLayout->setColumnStretch(1,0); + pageLayout->setColumnStretch(0,1); + pageLayout->setColumnStretch(1,2); pageLayout->setColumnStretch(2,1); - pageLayout->setColumnStretch(3,0); pageLayout->setRowStretch(0,1); pageLayout->setRowStretch(1,0); // add back/exit button btnBack = formattedButton(":/res/Exit.png", true); btnBack->setWhatsThis(tr("Go back")); - pageLayout->addWidget(btnBack, 1, 0, 1, 1, Qt::AlignLeft | Qt::AlignBottom); + bottomLeftLayout->addWidget(btnBack, 0); // add body layout as defined by the subclass - pageLayout->addLayout(bodyLayoutDefinition(), 0, 0, 1, 4); + pageLayout->addLayout(bodyLayoutDefinition(), 0, 0, 1, 3); // add left footer layout QLayout * flld = footerLayoutLeftDefinition(); if (flld != NULL) - pageLayout->addLayout(flld, 1, 1); + bottomLeftLayout->addLayout(flld, 0); descLabel = new QLabel(); descLabel->setAlignment(Qt::AlignCenter); @@ -68,12 +69,15 @@ descLabel->setOpenExternalLinks(true); descLabel->setFixedHeight(50); descLabel->setStyleSheet("font-size: 16px"); - pageLayout->addWidget(descLabel, 1, 2); + bottomLeftLayout->addWidget(descLabel); + pageLayout->addWidget(descLabel, 1, 1); // add footer layout QLayout * fld = footerLayoutDefinition(); if (fld != NULL) - pageLayout->addLayout(fld, 1, 3); + pageLayout->addLayout(fld, 1, 2); + + bottomLeftLayout->addStretch(1); // connect signals connect(btnBack, SIGNAL(clicked()), this, SIGNAL(goBack())); diff -r fbc6e7602e05 -r 2784b2610b5c QTfrontend/ui/widget/about.cpp --- a/QTfrontend/ui/widget/about.cpp Sat Jan 19 21:51:41 2013 +0400 +++ b/QTfrontend/ui/widget/about.cpp Mon Jan 21 00:07:26 2013 +0400 @@ -46,6 +46,9 @@ { QGridLayout *mainLayout = new QGridLayout(this); + QVBoxLayout * leftLayout = new QVBoxLayout(); + mainLayout->addLayout(leftLayout, 0, 0, 2, 1); + QLabel *imageLabel = new QLabel; QImage image(":/res/Hedgehog.png"); imageLabel->setPixmap(QPixmap::fromImage(image)); @@ -55,7 +58,7 @@ imageLabel->setMinimumHeight(30); imageLabel->setMaximumHeight(300); - mainLayout->addWidget(imageLabel, 0, 0, 2, 1); + leftLayout->addWidget(imageLabel, 0, Qt::AlignHCenter); QLabel *lbl1 = new QLabel(this); lbl1->setOpenExternalLinks(true); @@ -66,63 +69,55 @@ "" "

Hedgewars

" "

" + QLabel::tr("Version") + " " + *cVersionString + "

" - "

http://www.hedgewars.org/


" + + "

http://www.hedgewars.org/

" + QLabel::tr("This program is distributed under the GNU General Public License v2") + "
" ); lbl1->setWordWrap(true); mainLayout->addWidget(lbl1, 0, 1); - QString html; - QFile file(":/res/html/about.html"); - if(!file.open(QIODevice::ReadOnly)) - QMessageBox::information(0, "Error loading about page", file.errorString()); - - QTextStream in(&file); + lbl2 = new QTextBrowser(this); + lbl2->setOpenExternalLinks(true); + QUrl localpage = QUrl::fromLocalFile(":/res/html/about.html"); + lbl2->setSource(localpage); //sets the source of the label from the file above + mainLayout->addWidget(lbl2, 1, 1); - while(!in.atEnd()) - html.append(in.readLine()); - - file.close(); - - /* Get information */ + /* Library information */ - QString compilerText, compilerOpen, compilerClose; - #ifdef __GNUC__ - compilerText = "GCC " + QString(__VERSION__) + "\n"; - compilerOpen = ""; - compilerClose = ""; - #else - compilerText = "Unknown\n"; - compilerOpen = compilerClose = ""; - #endif + QString libinfo = ""; - /* Add information */ +#ifdef __GNUC__ + libinfo.append(QString("Compiler: GCC %1
").arg(__VERSION__)); +#else + libinfo.append(QString("Compiler: Unknown
").arg(__VERSION__)); +#endif - html.replace("%COMPILER_A_OPEN%", compilerOpen); - html.replace("%COMPILER_A_CLOSE%", compilerClose); - html.replace("%COMPILER%", compilerText); - html.replace("%SDL%", QString("version: %1.%2.%3") + libinfo.append(QString("SDL version: %1.%2.%3
") .arg(SDL_MAJOR_VERSION) .arg(SDL_MINOR_VERSION) .arg(SDL_PATCHLEVEL)); - html.replace("%QT%", QT_VERSION_STR); + + libinfo.append(QString("Qt version: %1
").arg(QT_VERSION_STR)); + #ifdef VIDEOREC - html.replace("%LIBAV%", QString("Libav version: %1.%2.%3") + libinfo.append(QString("Libav version: %1.%2.%3
") .arg(LIBAVUTIL_VERSION_MAJOR) .arg(LIBAVUTIL_VERSION_MINOR) .arg(LIBAVUTIL_VERSION_MICRO)); #endif - html.replace("%PHYSFS%", QString("version: %1.%2.%3") + + libinfo.append(QString("PhysFS version: %1.%2.%3
") .arg(PHYSFS_VER_MAJOR) .arg(PHYSFS_VER_MINOR) .arg(PHYSFS_VER_PATCH)); - lbl2 = new QTextBrowser(this); - lbl2->setOpenExternalLinks(true); - lbl2->setHtml(html); - mainLayout->addWidget(lbl2, 1, 1); - + QLabel * lblLibInfo = new QLabel(); + lblLibInfo->setText(libinfo); + lblLibInfo->setWordWrap(true); + lblLibInfo->setMaximumWidth(280); + leftLayout->addWidget(lblLibInfo, 0, Qt::AlignTop | Qt::AlignHCenter); + leftLayout->addStretch(1); + setAcceptDrops(true); }