I started to move stuff around, c'mon, hate on meee. PS: if your (clean) build is broken - let me know)
authorsheepluva
Wed, 28 Sep 2011 19:27:56 +0200
changeset 6060 fdfc01419815
parent 6059 ddf020d0941a
child 6061 15b4b485a1c5
I started to move stuff around, c'mon, hate on meee. PS: if your (clean) build is broken - let me know)
QTfrontend/CMakeLists.txt
QTfrontend/SquareLabel.cpp
QTfrontend/SquareLabel.h
QTfrontend/about.cpp
QTfrontend/about.h
QTfrontend/ammoSchemeModel.cpp
QTfrontend/ammoSchemeModel.h
QTfrontend/bgwidget.cpp
QTfrontend/bgwidget.h
QTfrontend/chatwidget.cpp
QTfrontend/chatwidget.h
QTfrontend/databrowser.cpp
QTfrontend/databrowser.h
QTfrontend/drawmapwidget.cpp
QTfrontend/drawmapwidget.h
QTfrontend/fpsedit.cpp
QTfrontend/fpsedit.h
QTfrontend/frameTeam.cpp
QTfrontend/frameTeam.h
QTfrontend/gamecfgwidget.cpp
QTfrontend/gamecfgwidget.h
QTfrontend/hats.cpp
QTfrontend/hats.h
QTfrontend/hedgehogerWidget.cpp
QTfrontend/hedgehogerWidget.h
QTfrontend/hwmap.cpp
QTfrontend/hwmap.h
QTfrontend/igbox.cpp
QTfrontend/igbox.h
QTfrontend/input_ip.cpp
QTfrontend/input_ip.h
QTfrontend/itemNum.cpp
QTfrontend/itemNum.h
QTfrontend/misc.cpp
QTfrontend/misc.h
QTfrontend/namegen.cpp
QTfrontend/namegen.h
QTfrontend/net/hwmap.cpp
QTfrontend/net/hwmap.h
QTfrontend/net/netregister.cpp
QTfrontend/net/netregister.h
QTfrontend/net/netserver.cpp
QTfrontend/net/netserver.h
QTfrontend/net/netudpserver.cpp
QTfrontend/net/netudpserver.h
QTfrontend/net/netudpwidget.cpp
QTfrontend/net/netudpwidget.h
QTfrontend/net/newnetclient.cpp
QTfrontend/net/newnetclient.h
QTfrontend/net/proto.cpp
QTfrontend/net/proto.h
QTfrontend/net/tcpBase.cpp
QTfrontend/net/tcpBase.h
QTfrontend/netregister.cpp
QTfrontend/netregister.h
QTfrontend/netserver.cpp
QTfrontend/netserver.h
QTfrontend/netserverslist.cpp
QTfrontend/netserverslist.h
QTfrontend/netudpserver.cpp
QTfrontend/netudpserver.h
QTfrontend/netudpwidget.cpp
QTfrontend/netudpwidget.h
QTfrontend/newnetclient.cpp
QTfrontend/newnetclient.h
QTfrontend/pageadmin.cpp
QTfrontend/pageadmin.h
QTfrontend/pagecampaign.cpp
QTfrontend/pagecampaign.h
QTfrontend/pageconnecting.cpp
QTfrontend/pageconnecting.h
QTfrontend/pagedata.cpp
QTfrontend/pagedata.h
QTfrontend/pagedrawmap.cpp
QTfrontend/pagedrawmap.h
QTfrontend/pageeditteam.cpp
QTfrontend/pageeditteam.h
QTfrontend/pagegamestats.cpp
QTfrontend/pagegamestats.h
QTfrontend/pageinfo.cpp
QTfrontend/pageinfo.h
QTfrontend/pageingame.cpp
QTfrontend/pageingame.h
QTfrontend/pagemain.cpp
QTfrontend/pagemain.h
QTfrontend/pagemultiplayer.cpp
QTfrontend/pagemultiplayer.h
QTfrontend/pagenet.cpp
QTfrontend/pagenet.h
QTfrontend/pagenetgame.cpp
QTfrontend/pagenetgame.h
QTfrontend/pagenetserver.cpp
QTfrontend/pagenetserver.h
QTfrontend/pagenettype.cpp
QTfrontend/pagenettype.h
QTfrontend/pageoptions.cpp
QTfrontend/pageoptions.h
QTfrontend/pageplayrecord.cpp
QTfrontend/pageplayrecord.h
QTfrontend/pageroomslist.cpp
QTfrontend/pageroomslist.h
QTfrontend/pagescheme.cpp
QTfrontend/pagescheme.h
QTfrontend/pageselectweapon.cpp
QTfrontend/pageselectweapon.h
QTfrontend/pagesingleplayer.cpp
QTfrontend/pagesingleplayer.h
QTfrontend/pagetraining.cpp
QTfrontend/pagetraining.h
QTfrontend/proto.cpp
QTfrontend/proto.h
QTfrontend/qaspectratiolayout.cpp
QTfrontend/qaspectratiolayout.h
QTfrontend/selectWeapon.cpp
QTfrontend/selectWeapon.h
QTfrontend/tcpBase.cpp
QTfrontend/tcpBase.h
QTfrontend/team.cpp
QTfrontend/teamselect.cpp
QTfrontend/teamselect.h
QTfrontend/teamselhelper.cpp
QTfrontend/teamselhelper.h
QTfrontend/themesmodel.cpp
QTfrontend/themesmodel.h
QTfrontend/togglebutton.cpp
QTfrontend/togglebutton.h
QTfrontend/ui/dialog/input_ip.cpp
QTfrontend/ui/dialog/input_ip.h
QTfrontend/ui/model/ammoSchemeModel.cpp
QTfrontend/ui/model/ammoSchemeModel.h
QTfrontend/ui/model/hats.cpp
QTfrontend/ui/model/hats.h
QTfrontend/ui/model/netserverslist.cpp
QTfrontend/ui/model/netserverslist.h
QTfrontend/ui/model/themesmodel.cpp
QTfrontend/ui/model/themesmodel.h
QTfrontend/ui/page/pageadmin.cpp
QTfrontend/ui/page/pageadmin.h
QTfrontend/ui/page/pagecampaign.cpp
QTfrontend/ui/page/pagecampaign.h
QTfrontend/ui/page/pageconnecting.cpp
QTfrontend/ui/page/pageconnecting.h
QTfrontend/ui/page/pagedata.cpp
QTfrontend/ui/page/pagedata.h
QTfrontend/ui/page/pagedrawmap.cpp
QTfrontend/ui/page/pagedrawmap.h
QTfrontend/ui/page/pageeditteam.cpp
QTfrontend/ui/page/pageeditteam.h
QTfrontend/ui/page/pagegamestats.cpp
QTfrontend/ui/page/pagegamestats.h
QTfrontend/ui/page/pageinfo.cpp
QTfrontend/ui/page/pageinfo.h
QTfrontend/ui/page/pageingame.cpp
QTfrontend/ui/page/pageingame.h
QTfrontend/ui/page/pagemain.cpp
QTfrontend/ui/page/pagemain.h
QTfrontend/ui/page/pagemultiplayer.cpp
QTfrontend/ui/page/pagemultiplayer.h
QTfrontend/ui/page/pagenet.cpp
QTfrontend/ui/page/pagenet.h
QTfrontend/ui/page/pagenetgame.cpp
QTfrontend/ui/page/pagenetgame.h
QTfrontend/ui/page/pagenetserver.cpp
QTfrontend/ui/page/pagenetserver.h
QTfrontend/ui/page/pagenettype.cpp
QTfrontend/ui/page/pagenettype.h
QTfrontend/ui/page/pageoptions.cpp
QTfrontend/ui/page/pageoptions.h
QTfrontend/ui/page/pageplayrecord.cpp
QTfrontend/ui/page/pageplayrecord.h
QTfrontend/ui/page/pageroomslist.cpp
QTfrontend/ui/page/pageroomslist.h
QTfrontend/ui/page/pagescheme.cpp
QTfrontend/ui/page/pagescheme.h
QTfrontend/ui/page/pageselectweapon.cpp
QTfrontend/ui/page/pageselectweapon.h
QTfrontend/ui/page/pagesingleplayer.cpp
QTfrontend/ui/page/pagesingleplayer.h
QTfrontend/ui/page/pagetraining.cpp
QTfrontend/ui/page/pagetraining.h
QTfrontend/ui/qaspectratiolayout.cpp
QTfrontend/ui/qaspectratiolayout.h
QTfrontend/ui/widget/SquareLabel.cpp
QTfrontend/ui/widget/SquareLabel.h
QTfrontend/ui/widget/about.cpp
QTfrontend/ui/widget/about.h
QTfrontend/ui/widget/bgwidget.cpp
QTfrontend/ui/widget/bgwidget.h
QTfrontend/ui/widget/chatwidget.cpp
QTfrontend/ui/widget/chatwidget.h
QTfrontend/ui/widget/databrowser.cpp
QTfrontend/ui/widget/databrowser.h
QTfrontend/ui/widget/drawmapwidget.cpp
QTfrontend/ui/widget/drawmapwidget.h
QTfrontend/ui/widget/fpsedit.cpp
QTfrontend/ui/widget/fpsedit.h
QTfrontend/ui/widget/frameTeam.cpp
QTfrontend/ui/widget/frameTeam.h
QTfrontend/ui/widget/gamecfgwidget.cpp
QTfrontend/ui/widget/gamecfgwidget.h
QTfrontend/ui/widget/hedgehogerWidget.cpp
QTfrontend/ui/widget/hedgehogerWidget.h
QTfrontend/ui/widget/igbox.cpp
QTfrontend/ui/widget/igbox.h
QTfrontend/ui/widget/itemNum.cpp
QTfrontend/ui/widget/itemNum.h
QTfrontend/ui/widget/misc.cpp
QTfrontend/ui/widget/misc.h
QTfrontend/ui/widget/selectWeapon.cpp
QTfrontend/ui/widget/selectWeapon.h
QTfrontend/ui/widget/teamselect.cpp
QTfrontend/ui/widget/teamselect.h
QTfrontend/ui/widget/teamselhelper.cpp
QTfrontend/ui/widget/teamselhelper.h
QTfrontend/ui/widget/togglebutton.cpp
QTfrontend/ui/widget/togglebutton.h
QTfrontend/ui/widget/vertScrollArea.cpp
QTfrontend/ui/widget/vertScrollArea.h
QTfrontend/ui/widget/weaponItem.cpp
QTfrontend/ui/widget/weaponItem.h
QTfrontend/util/namegen.cpp
QTfrontend/util/namegen.h
QTfrontend/vertScrollArea.cpp
QTfrontend/vertScrollArea.h
QTfrontend/weaponItem.cpp
QTfrontend/weaponItem.h
--- a/QTfrontend/CMakeLists.txt	Wed Sep 28 06:24:10 2011 +0200
+++ b/QTfrontend/CMakeLists.txt	Wed Sep 28 19:27:56 2011 +0200
@@ -28,6 +28,13 @@
 find_package(SDL_mixer REQUIRED)
 
 include_directories(.)
+include_directories(${CMAKE_CURRENT_SOURCE_DIR}/net)
+include_directories(${CMAKE_CURRENT_SOURCE_DIR}/ui)
+include_directories(${CMAKE_CURRENT_SOURCE_DIR}/ui/dialog)
+include_directories(${CMAKE_CURRENT_SOURCE_DIR}/ui/page)
+include_directories(${CMAKE_CURRENT_SOURCE_DIR}/ui/model)
+include_directories(${CMAKE_CURRENT_SOURCE_DIR}/ui/widget)
+include_directories(${CMAKE_CURRENT_SOURCE_DIR}/util)
 include_directories(${SDL_INCLUDE_DIR})
 include_directories(${SDLMIXER_INCLUDE_DIR})
 include_directories(${CMAKE_SOURCE_DIR}/misc/quazip)
@@ -57,77 +64,28 @@
 
 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/hwconsts.cpp.in ${CMAKE_CURRENT_BINARY_DIR}/hwconsts.cpp)
 
+file(GLOB NetCpp ${CMAKE_CURRENT_SOURCE_DIR} net/*.cpp)
+file(GLOB_RECURSE UIcpp ${CMAKE_CURRENT_SOURCE_DIR} ui/*.cpp)
+file(GLOB UtilCpp ${CMAKE_CURRENT_SOURCE_DIR} util/*.cpp)
+
 set(hwfr_src
-    HWApplication.cpp
-    game.cpp
-    main.cpp
-    hwform.cpp
-    team.cpp
-    namegen.cpp
-    teamselect.cpp
-    teamselhelper.cpp
-    frameTeam.cpp
-    vertScrollArea.cpp
-    gameuiconfig.cpp
-    ui_hwform.cpp
-    gamecfgwidget.cpp
+    ${NetCpp}
+    ${UIcpp}
+    ${UtilCpp}
     AbstractPage.cpp
-    pagemain.cpp
-    pageeditteam.cpp
-    pagemultiplayer.cpp
-    pageoptions.cpp
-    pagenet.cpp
-    pagenetserver.cpp
-    pagenetgame.cpp
-    pageinfo.cpp
-    pagedata.cpp
-    pagesingleplayer.cpp
-    pagetraining.cpp
-    pagecampaign.cpp
-    pageselectweapon.cpp
-    pageingame.cpp
-    pageroomslist.cpp
-    pageconnecting.cpp
-    pagescheme.cpp
-    pagegamestats.cpp
-    pageplayrecord.cpp
-    pageadmin.cpp
-    pagenettype.cpp
-    pagedrawmap.cpp
-    SquareLabel.cpp
-    hats.cpp
-    hedgehogerWidget.cpp
-    hwmap.cpp
+    achievements.cpp
+    binds.cpp
+    drawmapscene.cpp
+    game.cpp
+    gameuiconfig.cpp
+    HWApplication.cpp
+    hwform.cpp
+    main.cpp
     mapContainer.cpp
-    tcpBase.cpp
-    about.cpp
-    proto.cpp
-    fpsedit.cpp
-    netserver.cpp
-    newnetclient.cpp
-    netudpserver.cpp
-    netudpwidget.cpp
-    netregister.cpp
-    netserverslist.cpp
-    chatwidget.cpp
-    binds.cpp
     SDLs.cpp
+    team.cpp
+    ui_hwform.cpp
     ${CMAKE_CURRENT_BINARY_DIR}/hwconsts.cpp
-    selectWeapon.cpp
-    itemNum.cpp
-    input_ip.cpp
-    igbox.cpp
-    weaponItem.cpp
-    misc.cpp
-    ammoSchemeModel.cpp
-    togglebutton.cpp
-    bgwidget.cpp
-    achievements.cpp
-    qaspectratiolayout.cpp
-    drawmapwidget.cpp
-    drawmapscene.cpp
-    themesmodel.cpp
-    databrowser.cpp
     )
 
 #xfire integration
@@ -146,77 +104,33 @@
     set(hwfr_src ${hwfr_src} hedgewars.rc)
 endif(MINGW)
 
+file(GLOB NetHdr ${CMAKE_CURRENT_SOURCE_DIR} net/*.h)
+file(GLOB_RECURSE UIhdr ${CMAKE_CURRENT_SOURCE_DIR} ui/*.h)
+file(GLOB UtilHdr ${CMAKE_CURRENT_SOURCE_DIR} util/*.h)
+
+
 set(hwfr_moc_hdrs
-    HWApplication.h
-    game.h
-    hats.h
-    hwform.h
-    teamselect.h
-    teamselhelper.h
-    frameTeam.h
-    vertScrollArea.h
-    gameuiconfig.h
-    gamecfgwidget.h
+    ${NetHdr}
+    ${UIhdr}
     AbstractPage.h
-    pagenet.h
-    pagemultiplayer.h
-    pagenetserver.h
-    pageingame.h
-    pagetraining.h
-    pageeditteam.h
-    pageoptions.h
-    pagemain.h
-    pageinfo.h
-    pagedata.h
-    pagesingleplayer.h
-    pagenettype.h
-    pageconnecting.h
-    pagedrawmap.h
-    pagecampaign.h
-    pagenetgame.h
-    pageroomslist.h
-    pagegamestats.h
-    pageadmin.h
-    pagescheme.h
-    pageselectweapon.h
-    pageplayrecord.h
-    SquareLabel.h
-    hedgehogerWidget.h
-    hwmap.h
+    drawmapscene.h
+    game.h
+    gameuiconfig.h
+    HWApplication.h
+    hwform.h
     mapContainer.h
-    tcpBase.h
-    about.h
-    proto.h
-    fpsedit.h
-    netserver.h
-    newnetclient.h
-    netudpserver.h
-    netudpwidget.h
-    netregister.h
-    netserverslist.h
-    chatwidget.h
     SDLs.h
-    selectWeapon.h
-    itemNum.h
-    input_ip.h
-    igbox.h
-    weaponItem.h
-    misc.h
-    ammoSchemeModel.h
-    togglebutton.h
-    bgwidget.h
-    qaspectratiolayout.h
-    drawmapwidget.h
-    drawmapscene.h
-    themesmodel.h
-    databrowser.h
     )
 
 set(hwfr_hdrs
+    ${UtilHdr}
+    team.h
+    achievements.h
     binds.h
     ui_hwform.h
     KB.h
     hwconsts.h
+    sdlkeys.h
     )
 
 set(hwfr_rez hedgewars.qrc)
--- a/QTfrontend/SquareLabel.cpp	Wed Sep 28 06:24:10 2011 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,50 +0,0 @@
-/*
- * Hedgewars, a free turn based strategy game
- * Copyright (c) 2006-2011 Andrey Korotaev <unC0Rr@gmail.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <QPaintEvent>
-#include <QPainter>
-#include "SquareLabel.h"
-#include "hwform.h"
-
-SquareLabel::SquareLabel(QWidget * parent) :
-    QWidget(parent)
-{
-    if(frontendEffects) setAttribute(Qt::WA_PaintOnScreen, true);
-}
-
-void SquareLabel::paintEvent(QPaintEvent * event)
-{
-    Q_UNUSED(event);
-
-    QPainter painter(this);
-    int pixsize;
-    if (width() > height()) {
-        pixsize = height();
-        painter.translate((width() - pixsize) / 2, 0);
-    } else {
-        pixsize = width();
-        painter.translate(0, (height() - pixsize) / 2);
-    }
-    painter.drawPixmap(0, 0, pixsize, pixsize, pixmap.scaled(pixsize, pixsize, Qt::KeepAspectRatio));
-}
-
-void SquareLabel::setPixmap(const QPixmap & pixmap)
-{
-    this->pixmap = pixmap;
-    repaint();
-}
--- a/QTfrontend/SquareLabel.h	Wed Sep 28 06:24:10 2011 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,41 +0,0 @@
-/*
- * Hedgewars, a free turn based strategy game
- * Copyright (c) 2006-2011 Andrey Korotaev <unC0Rr@gmail.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#ifndef _SQUARELABEL_H
-#define _SQUARELABEL_H
-
-#include <QWidget>
-#include <QPixmap>
-
-class SquareLabel : public QWidget
-{
-    Q_OBJECT
-
-public:
-    SquareLabel(QWidget * parent = 0);
-
-    void setPixmap(const QPixmap & pixmap);
-protected:
-    virtual void paintEvent(QPaintEvent * event);
-
-private:
-    QPixmap pixmap;
-
-};
-
-#endif // _SQUARELABEL_H
--- a/QTfrontend/about.cpp	Wed Sep 28 06:24:10 2011 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,146 +0,0 @@
-/*
- * Hedgewars, a free turn based strategy game
- * Copyright (c) 2006-2011 Andrey Korotaev <unC0Rr@gmail.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <QGridLayout>
-#include <QLabel>
-#include <QTextBrowser>
-#include "about.h"
-#include "hwconsts.h"
-
-About::About(QWidget * parent) :
-  QWidget(parent)
-{
-    QGridLayout *mainLayout = new QGridLayout(this);
-
-    QLabel *imageLabel = new QLabel;
-    QImage image(":/res/Hedgehog.png");
-    imageLabel->setPixmap(QPixmap::fromImage(image));
-    imageLabel->setScaledContents(true);
-    imageLabel->setMinimumWidth(2.8);
-    imageLabel->setMaximumWidth(280);
-    imageLabel->setMinimumHeight(30);
-    imageLabel->setMaximumHeight(300);
-
-    mainLayout->addWidget(imageLabel, 0, 0, 2, 1);
-
-    QLabel *lbl1 = new QLabel(this);
-    lbl1->setOpenExternalLinks(true);
-    lbl1->setText(
-            "<style type=\"text/css\">"
-            "a { color: #ffcc00; }"
-//            "a:hover { color: yellow; }"
-            "</style>"
-            "<div align=\"center\"><h1>Hedgewars</h1>"
-            "<h3>" + QLabel::tr("Version") + " " + *cVersionString + "</h3>"
-            "<p><a href=\"http://www.hedgewars.org/\">http://www.hedgewars.org/</a></p><br>" +
-            QLabel::tr("This program is distributed under the GNU General Public License") +
-            "</div>"
-            );
-    lbl1->setWordWrap(true);
-    mainLayout->addWidget(lbl1, 0, 1);
-
-    QTextBrowser *lbl2 = new QTextBrowser(this);
-
-    lbl2->setOpenExternalLinks(true);
-    lbl2->setText(
-            "<style type=\"text/css\">"
-            "a { color: #ffcc00; }"
-//            "a:hover { color: yellow; }"
-            "</style>" +
-            QString("<h2>") +
-            QLabel::tr("Developers:") +
-            "</h2><p>"
-            "Engine, frontend, net server: Andrey Korotaev &lt;<a href=\"mailto:unC0Rr@gmail.com\">unC0Rr@gmail.com</a>&gt;<br>"
-            "Many frontend improvements: Igor Ulyanov &lt;<a href=\"mailto:disinbox@gmail.com\">disinbox@gmail.com</a>&gt;<br>"
-            "Many engine and frontend improvements: Derek Pomery &lt;<a href=\"mailto:nemo@m8y.org\">nemo@m8y.org</a>&gt;<br>"
-            "Drill rocket, Ballgun, RC Plane weapons: Martin Boze &lt;<a href=\"mailto:afffect@gmail.com\">afffect@gmail.com</a>&gt;<br>"
-            "Mine number and time game settings: David A. Cuadrado &lt;<a href=\"mailto:krawek@gmail.com\">krawek@gmail.com</a>&gt;<br>"
-            "Frontend improvements: Martin Minarik &lt;<a href=\"mailto:ttsmj@pokec.sk\">ttsmj@pokec.sk</a>&gt;<br>"
-            "Frontend improvements: Kristian Lehmann &lt;<a href=\"mailto:email@thexception.net\">email@thexception.net</a>&gt;<br>"
-            "Mac OS X/iPhone port, OpenGL-ES conversion: Vittorio Giovara &lt;<a href=\"mailto:vittorio.giovara@gmail.com\">vittorio.giovara@gmail.com</a>&gt;<br>"
-            "Many engine and frontend improvements (and bugs): Richard Karolyi &lt;<a href=\"mailto:sheepluva@" "ercatec.net\">sheepluva@" "ercatec.net</a>&gt;<br>"
-            "Gamepad and Lua integration: Mario Liebisch &lt;<a href=\"mailto:mario.liebisch@gmail.com\">mario.liebisch@gmail.com</a>&gt;<br>"
-            "Many engine improvements and graphics: Carlos Vives &lt;<a href=\"mailto:mail@carlosvives.es\">mail@carlosvives.es</a>&gt;<br>"
-            "Maze maps: Henning K&uuml;hn &lt;<a href=\"mailto:prg@cooco.de\">prg@cooco.de</a>&gt;<br>"
-            "Engine and frontend improvements: Henrik Rostedt &lt;<a href=\"mailto:henrik.rostedt@gmail.com\">henrik.rostedt@gmail.com</a>&gt;<br>"
-            "Lua game modes and missions: John Lambert &lt;<a href=\"mailto:redgrinner@gmail.com\">redgrinner@gmail.com</a>&gt;<br>"
-            "Frontend improvements: Mayur Pawashe &lt;<a href=\"mailto:zorgiepoo@gmail.com\">zorgiepoo@gmail.com</a>&gt;<br>"
-            "Android port: Richard Deurwaarder &lt;<a href=\"mailto:xeli@xelification.com\">xeli@xelification.com</a>&gt;<br>"
-            "</p><h2>" +
-
-            QLabel::tr("Art:") + "</h2>"
-            + QString::fromUtf8(
-            "<p>John Dum &lt;<a href=\"mailto:fizzy@gmail.com\">fizzy@gmail.com</a>&gt;"
-            "<br>"
-            "Joshua Frese &lt;<a href=\"mailto:joshfrese@gmail.com\">joshfrese@gmail.com</a>&gt;"
-            "<br>"
-            "Stanko Tadić &lt;<a href=\"mailto:stanko@mfhinc.net\">stanko@mfhinc.net</a>&gt;"
-            "<br>"
-            "Julien Koesten &lt;<a href=\"mailto:julienkoesten@aol.com\">julienkoesten@aol.com</a>&gt;"
-            "<br>"
-            "Joshua O'Sullivan &lt;<a href=\"mailto:coheedftw@hotmail.co.uk\">coheedftw@hotmail.co.uk</a>&gt;"
-            "<br>"
-            "Nils Lück &lt;<a href=\"mailto:nils.luck.design@gmail.com\">nils.luck.design@gmail.com</a>&gt;"
-            "<br>"
-            "Guillaume Englert &lt;<a href=\"mailto:genglert@hybird.org\">genglert@hybird.org</a>&gt;"
-            "<br>"
-            "Hats: Trey Perry &lt;<a href=\"mailto:tx.perry.j@gmail.com\">tx.perry.j@gmail.com</a>&gt;"
-            "</p><h2>") +
-            QLabel::tr("Sounds:") + "</h2>"
-            "Hedgehogs voice: Stephen Alexander &lt;<a href=\"mailto:ArmagonNo1@gmail.com\">ArmagonNo1@gmail.com</a>&gt;"
-            "<br>"
-            "John Dum &lt;<a href=\"mailto:fizzy@gmail.com\">fizzy@gmail.com</a>&gt;"
-            "<br>"
-            "Jonatan Nilsson &lt;<a href=\"mailto:jonatanfan@gmail.com\">jonatanfan@gmail.com</a>&gt;"
-            "<br>"
-            "Daniel Martin &lt;<a href=\"mailto:elhombresinremedio@gmail.com\">elhombresinremedio@gmail.com</a>&gt;"
-            "</p><h2>" +
-
-            QLabel::tr("Translations:") + "</h2><p>"
-            + QString::fromUtf8(
-            "Brazilian Portuguese: Romulo Fernandes Machado &lt;<a href=\"mailto:abra185@gmail.com\">abra185@gmail.com</a>&gt;<br>"
-            "Bulgarian: Svetoslav Stefanov<br>"
-            "Czech: Petr Řezáček &lt;<a href=\"mailto:rezacek@gmail.com\">rezacek@gmail.com</a>&gt;<br>"
-            "Chinese: Jie Luo &lt;<a href=\"mailto:lililjlj@gmail.com\">lililjlj@gmail.com</a>&gt;<br>"
-            "English: Andrey Korotaev &lt;<a href=\"mailto:unC0Rr@gmail.com\">unC0Rr@gmail.com</a>&gt;<br>"
-            "Finnish: Nina Kuisma &lt;<a href=\"mailto:ninnnu@gmail.com\">ninnnu@gmail.com</a>&gt;<br>"
-            "French: Antoine Turmel &lt;<a href=\"mailto:geekshadow@gmail.com\">geekshadow@gmail.com</a>&gt;<br>"
-            "German: Peter Hüwe &lt;<a href=\"mailto:PeterHuewe@gmx.de\">PeterHuewe@gmx.de</a>&gt;, Mario Liebisch &lt;<a href=\"mailto:mario.liebisch@gmail.com\">mario.liebisch@gmail.com</a>&gt;, Richard Karolyi &lt;<a href=\"mailto:sheepluva@" "ercatec.net\">sheepluva@" "ercatec.net</a>&gt;<br>"
-            "Greek: &lt;<a href=\"mailto:talos_kriti@yahoo.gr\">talos_kriti@yahoo.gr</a>&gt;<br>"
-            "Italian: Luca Bonora &lt;<a href=\"mailto:bonora.luca@gmail.com\">bonora.luca@gmail.com</a>&gt;, Marco Bresciani<br>"
-            "Japanese: ADAM Etienne &lt;<a href=\"mailto:etienne.adam@gmail.com\">etienne.adam@gmail.com</a>&gt;<br>"
-            "Korean: Anthony Bellew &lt;<a href=\"mailto:webmaster@anthonybellew.com\">webmaster@anthonybellew.com</a>&gt;<br>"
-            "Lithuanian: Lukas Urbonas &lt;<a href=\"mailto:lukasu08@gmail.com\">lukasu08@gmail.com</a>&gt;<br>"
-            "Polish: Maciej Mroziński &lt;<a href=\"mailto:mynick2@o2.pl\">mynick2@o2.pl</a>&gt;, Wojciech Latkowski &lt;<a href=\"mailto:magik17l@gmail.com\">magik17l@gmail.com</a>&gt;, Piotr Mitana, Maciej Górny<br>"
-            "Portuguese: Fábio Canário &lt;<a href=\"mailto:inufabie@gmail.com\">inufabie@gmail.com</a>&gt;<br>"
-            "Russian: Andrey Korotaev &lt;<a href=\"mailto:unC0Rr@gmail.com\">unC0Rr@gmail.com</a>&gt;<br>"
-            "Slovak: Jose Riha<br>"
-            "Spanish: Carlos Vives &lt;<a href=\"mailto:mail@carlosvives.es\">mail@carlosvives.es</a>&gt;<br>"
-            "Swedish: Niklas Grahn &lt;<a href=\"mailto:raewolusjoon@yaoo.com\">raewolusjoon@yaoo.com</a>&gt;, Henrik Rostedt &lt;<a href=\"mailto:henrik.rostedt@gmail.com\">henrik.rostedt@gmail.com</a>&gt;<br>"
-            "Ukrainian: Eugene V. Lyubimkin &lt;<a href=\"mailto:jackyf.devel@gmail.com\">jackyf.devel@gmail.com</a>&gt;, Igor Paliychuk &lt;<a href=\"mailto:mansonigor@gmail.com\">mansonigor@gmail.com</a>&gt;, Eugene Sakara &lt;<a href=\"mailto:eresid@gmail.com\">eresid@gmail.com</a>&gt;"
-            "</p><h2>") +
-
-            QLabel::tr("Special thanks:") + "</h2><p>"
-            "Aleksey Andreev &lt;<a href=\"mailto:blaknayabr@gmail.com\">blaknayabr@gmail.com</a>&gt;<br>"
-            "Aleksander Rudalev &lt;<a href=\"mailto:alexv@pomorsu.ru\">alexv@pomorsu.ru</a>&gt;<br>"
-            "Natasha Korotaeva &lt;<a href=\"mailto:layout@pisem.net\">layout@pisem.net</a>&gt;<br>"
-            "Adam Higerd (aka ahigerd at FreeNode)"
-            "</p>"
-            );
-    mainLayout->addWidget(lbl2, 1, 1);
-}
--- a/QTfrontend/about.h	Wed Sep 28 06:24:10 2011 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,33 +0,0 @@
-/*
- * Hedgewars, a free turn based strategy game
- * Copyright (c) 2006-2011 Andrey Korotaev <unC0Rr@gmail.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#ifndef _ABOUT_H
-#define _ABOUT_H
-
-#include <QWidget>
-
-
-class About : public QWidget
-{
-    Q_OBJECT
-
-public:
-    About(QWidget * parent = 0);
-};
-
-#endif // _ABOUT_H
--- a/QTfrontend/ammoSchemeModel.cpp	Wed Sep 28 06:24:10 2011 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,786 +0,0 @@
-/*
- * Hedgewars, a free turn based strategy game
- * Copyright (c) 2005-2011 Andrey Korotaev <unC0Rr@gmail.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <QDebug>
-#include <QModelIndex>
-
-#include "ammoSchemeModel.h"
-#include "hwconsts.h"
-
-QList<QVariant> defaultScheme = QList<QVariant>()
-        << QVariant("Default")     // name           0
-        << QVariant(false)         // fortsmode      1
-        << QVariant(false)         // team divide    2
-        << QVariant(false)         // solid land     3
-        << QVariant(false)         // border         4
-        << QVariant(false)         // low gravity    5
-        << QVariant(false)         // laser sight    6
-        << QVariant(false)         // invulnerable   7
-        << QVariant(false)         // reset health   8
-        << QVariant(false)         // vampiric       9
-        << QVariant(false)         // karma          10
-        << QVariant(false)         // artillery      11
-        << QVariant(true)          // random order   12
-        << QVariant(false)         // king           13
-        << QVariant(false)         // place hog      14
-        << QVariant(false)         // shared ammo    15
-        << QVariant(false)         // disable girders 16
-        << QVariant(false)         // disable land objects 17
-        << QVariant(false)         // AI survival    18
-        << QVariant(false)         // inf. attack    19
-        << QVariant(false)         // reset weps     20
-        << QVariant(false)         // per hog ammo   21
-        << QVariant(false)         // no wind        22
-        << QVariant(false)         // more wind      23
-        << QVariant(false)         // tag team       24
-        << QVariant(false)         // bottom border  25
-        << QVariant(100)           // damage modfier 26
-        << QVariant(45)            // turn time      27
-        << QVariant(100)           // init health    28
-        << QVariant(15)            // sudden death   29
-        << QVariant(5)             // case prob      30
-        << QVariant(3)             // mines time     31
-        << QVariant(4)             // mines number   32
-        << QVariant(0)             // mine dud pct   33
-        << QVariant(2)             // explosives     34
-        << QVariant(35)            // health case pct 35
-        << QVariant(25)            // health case amt 36
-        << QVariant(47)            // water rise amt 37
-        << QVariant(5)             // health dec amt 38
-        << QVariant(100)           // rope modfier   39
-        << QVariant(100)           // get away time  40
-        ;
-
-AmmoSchemeModel::AmmoSchemeModel(QObject* parent, const QString & fileName) :
-    QAbstractTableModel(parent),
-    fileConfig(fileName, QSettings::IniFormat)
-{
-    predefSchemesNames = QStringList()
-        << "Default"
-        << "Pro Mode"
-        << "Shoppa"
-        << "Clean Slate"
-        << "Minefield"
-        << "Barrel Mayhem"
-        << "Tunnel Hogs"
-        << "Fort Mode"
-        << "Timeless"
-        << "Thinking with Portals"
-        << "King Mode"
-        ;
-
-    numberOfDefaultSchemes = predefSchemesNames.size();
-
-    spNames = QStringList()
-        << "name"                //  0
-        << "fortsmode"           //  1
-        << "divteams"            //  2
-        << "solidland"           //  3
-        << "border"              //  4
-        << "lowgrav"             //  5
-        << "laser"               //  6
-        << "invulnerability"     //  7
-        << "resethealth"         //  8
-        << "vampiric"            //  9
-        << "karma"               // 10
-        << "artillery"           // 11
-        << "randomorder"         // 12
-        << "king"                // 13
-        << "placehog"            // 14
-        << "sharedammo"          // 15
-        << "disablegirders"      // 16
-        << "disablelandobjects"  // 17
-        << "aisurvival"          // 18
-        << "infattack"           // 19
-        << "resetweps"           // 20
-        << "perhogammo"          // 21
-        << "disablewind"         // 22
-        << "morewind"            // 23
-        << "tagteam"             // 24
-        << "bottomborder"        // 25
-        << "damagefactor"        // 26
-        << "turntime"            // 27
-        << "health"              // 28
-        << "suddendeath"         // 29
-        << "caseprobability"     // 30
-        << "minestime"           // 31
-        << "minesnum"            // 32
-        << "minedudpct"          // 33
-        << "explosives"          // 34
-        << "healthprobability"   // 35
-        << "healthcaseamount"    // 36
-        << "waterrise"           // 37
-        << "healthdecrease"      // 38
-        << "ropepct"             // 39
-        << "getawaytime"         // 40
-        ;
-
-    QList<QVariant> proMode;
-    proMode
-        << predefSchemesNames[1]   // name           0
-        << QVariant(false)         // fortsmode      1
-        << QVariant(false)         // team divide    2
-        << QVariant(false)         // solid land     3
-        << QVariant(false)         // border         4
-        << QVariant(false)         // low gravity    5
-        << QVariant(false)         // laser sight    6
-        << QVariant(false)         // invulnerable   7
-        << QVariant(false)         // reset health   8
-        << QVariant(false)         // vampiric       9
-        << QVariant(false)         // karma          10
-        << QVariant(false)         // artillery      11
-        << QVariant(true)          // random order   12
-        << QVariant(false)         // king           13
-        << QVariant(false)         // place hog      14
-        << QVariant(true)          // shared ammo    15
-        << QVariant(false)         // disable girders 16
-        << QVariant(false)         // disable land objects 17
-        << QVariant(false)         // AI survival    18
-        << QVariant(false)         // inf. attack    19
-        << QVariant(false)         // reset weps     20
-        << QVariant(false)         // per hog ammo   21
-        << QVariant(false)         // no wind        22
-        << QVariant(false)         // more wind      23
-        << QVariant(false)         // tag team       24
-        << QVariant(false)         // bottom border  25
-        << QVariant(100)           // damage modfier 26
-        << QVariant(15)            // turn time      27
-        << QVariant(100)           // init health    28
-        << QVariant(15)            // sudden death   29
-        << QVariant(0)             // case prob      30
-        << QVariant(3)             // mines time     31
-        << QVariant(0)             // mines number   32
-        << QVariant(0)             // mine dud pct   33
-        << QVariant(2)             // explosives     34
-        << QVariant(35)            // health case pct 35
-        << QVariant(25)            // health case amt 36
-        << QVariant(47)            // water rise amt 37
-        << QVariant(5)             // health dec amt 38
-        << QVariant(100)           // rope modfier   39
-        << QVariant(100)           // get away time  40
-        ;
-
-    QList<QVariant> shoppa;
-    shoppa
-        << predefSchemesNames[2]   // name           0
-        << QVariant(false)         // fortsmode      1
-        << QVariant(false)         // team divide    2
-        << QVariant(true)          // solid land     3
-        << QVariant(true)          // border         4
-        << QVariant(false)         // low gravity    5
-        << QVariant(false)         // laser sight    6
-        << QVariant(false)         // invulnerable   7
-        << QVariant(false)         // reset health   8
-        << QVariant(false)         // vampiric       9
-        << QVariant(false)         // karma          10
-        << QVariant(false)         // artillery      11
-        << QVariant(true)          // random order   12
-        << QVariant(false)         // king           13
-        << QVariant(false)         // place hog      14
-        << QVariant(true)          // shared ammo    15
-        << QVariant(true)          // disable girders 16
-        << QVariant(false)         // disable land objects 17
-        << QVariant(false)         // AI survival    18
-        << QVariant(false)         // inf. attack    19
-        << QVariant(true)          // reset weps     20
-        << QVariant(false)         // per hog ammo   21
-        << QVariant(false)         // no wind        22
-        << QVariant(false)         // more wind      23
-        << QVariant(false)         // tag team       24
-        << QVariant(false)         // bottom border  25
-        << QVariant(100)           // damage modfier 26
-        << QVariant(30)            // turn time      27
-        << QVariant(100)           // init health    28
-        << QVariant(50)            // sudden death   29
-        << QVariant(1)             // case prob      30
-        << QVariant(3)             // mines time     31
-        << QVariant(0)             // mines number   32
-        << QVariant(0)             // mine dud pct   33
-        << QVariant(0)             // explosives     34
-        << QVariant(0)             // health case pct 35
-        << QVariant(25)            // health case amt 36
-        << QVariant(47)            // water rise amt 37
-        << QVariant(5)             // health dec amt 38
-        << QVariant(100)           // rope modfier   39
-        << QVariant(100)           // get away time  40
-        ;
-
-    QList<QVariant> cleanslate;
-    cleanslate
-        << predefSchemesNames[3]   // name           0
-        << QVariant(false)         // fortsmode      1
-        << QVariant(false)         // team divide    2
-        << QVariant(false)         // solid land     3
-        << QVariant(false)         // border         4
-        << QVariant(false)         // low gravity    5
-        << QVariant(false)         // laser sight    6
-        << QVariant(false)         // invulnerable   7
-        << QVariant(true)          // reset health   8
-        << QVariant(false)         // vampiric       9
-        << QVariant(false)         // karma          10
-        << QVariant(false)         // artillery      11
-        << QVariant(true)          // random order   12
-        << QVariant(false)         // king           13
-        << QVariant(false)         // place hog      14
-        << QVariant(false)         // shared ammo    15
-        << QVariant(false)         // disable girders 16
-        << QVariant(false)         // disable land objects 17
-        << QVariant(false)         // AI survival    18
-        << QVariant(true)          // inf. attack    19
-        << QVariant(true)          // reset weps     20
-        << QVariant(false)         // per hog ammo   21
-        << QVariant(false)         // no wind        22
-        << QVariant(false)         // more wind      23
-        << QVariant(false)         // tag team       24
-        << QVariant(false)         // bottom border  25
-        << QVariant(100)           // damage modfier 26
-        << QVariant(45)            // turn time      27
-        << QVariant(100)           // init health    28
-        << QVariant(15)            // sudden death   29
-        << QVariant(5)             // case prob      30
-        << QVariant(3)             // mines time     31
-        << QVariant(4)             // mines number   32
-        << QVariant(0)             // mine dud pct   33
-        << QVariant(2)             // explosives     34
-        << QVariant(35)            // health case pct 35
-        << QVariant(25)            // health case amt 36
-        << QVariant(47)            // water rise amt 37
-        << QVariant(5)             // health dec amt 38
-        << QVariant(100)           // rope modfier   39
-        << QVariant(100)           // get away time  40
-        ;
-
-    QList<QVariant> minefield;
-    minefield
-        << predefSchemesNames[4]   // name           0
-        << QVariant(false)         // fortsmode      1
-        << QVariant(false)         // team divide    2
-        << QVariant(false)         // solid land     3
-        << QVariant(false)         // border         4
-        << QVariant(false)         // low gravity    5
-        << QVariant(false)         // laser sight    6
-        << QVariant(false)         // invulnerable   7
-        << QVariant(false)         // reset health   8
-        << QVariant(false)         // vampiric       9
-        << QVariant(false)         // karma          10
-        << QVariant(false)         // artillery      11
-        << QVariant(true)          // random order   12
-        << QVariant(false)         // king           13
-        << QVariant(false)         // place hog      14
-        << QVariant(true)          // shared ammo    15
-        << QVariant(true)          // disable girders 16
-        << QVariant(false)         // disable land objects 17
-        << QVariant(false)         // AI survival    18
-        << QVariant(false)         // inf. attack    19
-        << QVariant(false)         // reset weps     20
-        << QVariant(false)         // per hog ammo   21
-        << QVariant(false)         // no wind        22
-        << QVariant(false)         // more wind      23
-        << QVariant(false)         // tag team       24
-        << QVariant(false)         // bottom border  25
-        << QVariant(100)           // damage modfier 26
-        << QVariant(30)            // turn time      27
-        << QVariant(50)            // init health    28
-        << QVariant(15)            // sudden death   29
-        << QVariant(0)             // case prob      30
-        << QVariant(0)             // mines time     31
-        << QVariant(80)            // mines number   32
-        << QVariant(0)             // mine dud pct   33
-        << QVariant(0)             // explosives     34
-        << QVariant(35)            // health case pct 35
-        << QVariant(25)            // health case amt 36
-        << QVariant(47)            // water rise amt 37
-        << QVariant(5)             // health dec amt 38
-        << QVariant(100)           // rope modfier   39
-        << QVariant(100)           // get away time  40
-        ;
-
-    QList<QVariant> barrelmayhem;
-    barrelmayhem
-        << predefSchemesNames[5]   // name           0
-        << QVariant(false)         // fortsmode      1
-        << QVariant(false)         // team divide    2
-        << QVariant(false)         // solid land     3
-        << QVariant(false)         // border         4
-        << QVariant(false)         // low gravity    5
-        << QVariant(false)         // laser sight    6
-        << QVariant(false)         // invulnerable   7
-        << QVariant(false)         // reset health   8
-        << QVariant(false)         // vampiric       9
-        << QVariant(false)         // karma          10
-        << QVariant(false)         // artillery      11
-        << QVariant(true)          // random order   12
-        << QVariant(false)         // king           13
-        << QVariant(false)         // place hog      14
-        << QVariant(true)          // shared ammo    15
-        << QVariant(false)         // disable girders 16
-        << QVariant(false)         // disable land objects 17
-        << QVariant(false)         // AI survival    18
-        << QVariant(false)         // inf. attack    19
-        << QVariant(false)         // reset weps     20
-        << QVariant(false)         // per hog ammo   21
-        << QVariant(false)         // no wind        22
-        << QVariant(false)         // more wind      23
-        << QVariant(false)         // tag team       24
-        << QVariant(false)         // bottom border  25
-        << QVariant(100)           // damage modfier 26
-        << QVariant(30)            // turn time      27
-        << QVariant(100)           // init health    28
-        << QVariant(15)            // sudden death   29
-        << QVariant(0)             // case prob      30
-        << QVariant(0)             // mines time     31
-        << QVariant(0)             // mines number   32
-        << QVariant(0)             // mine dud pct   33
-        << QVariant(80)            // explosives     34
-        << QVariant(35)            // health case pct 35
-        << QVariant(25)            // health case amt 36
-        << QVariant(47)            // water rise amt 37
-        << QVariant(5)             // health dec amt 38
-        << QVariant(100)           // rope modfier   39
-        << QVariant(100)           // get away time  40
-        ;
-
-    QList<QVariant> tunnelhogs;
-    tunnelhogs
-        << predefSchemesNames[6]   // name           0
-        << QVariant(false)         // fortsmode      1
-        << QVariant(false)         // team divide    2
-        << QVariant(false)         // solid land     3
-        << QVariant(true)          // border         4
-        << QVariant(false)         // low gravity    5
-        << QVariant(false)         // laser sight    6
-        << QVariant(false)         // invulnerable   7
-        << QVariant(false)         // reset health   8
-        << QVariant(false)         // vampiric       9
-        << QVariant(false)         // karma          10
-        << QVariant(false)         // artillery      11
-        << QVariant(true)          // random order   12
-        << QVariant(false)         // king           13
-        << QVariant(false)         // place hog      14
-        << QVariant(true)          // shared ammo    15
-        << QVariant(true)          // disable girders 16
-        << QVariant(true)          // disable land objects 17
-        << QVariant(false)         // AI survival    18
-        << QVariant(false)         // inf. attack    19
-        << QVariant(false)         // reset weps     20
-        << QVariant(false)         // per hog ammo   21
-        << QVariant(false)         // no wind        22
-        << QVariant(false)         // more wind      23
-        << QVariant(false)         // tag team       24
-        << QVariant(false)         // bottom border  25
-        << QVariant(100)           // damage modfier 26
-        << QVariant(30)            // turn time      27
-        << QVariant(100)           // init health    28
-        << QVariant(15)            // sudden death   29
-        << QVariant(5)             // case prob      30
-        << QVariant(3)             // mines time     31
-        << QVariant(10)            // mines number   32
-        << QVariant(10)            // mine dud pct   33
-        << QVariant(10)            // explosives     34
-        << QVariant(35)            // health case pct 35
-        << QVariant(25)            // health case amt 36
-        << QVariant(47)            // water rise amt 37
-        << QVariant(5)             // health dec amt 38
-        << QVariant(100)           // rope modfier   39
-        << QVariant(100)           // get away time  40
-        ;
-
-    QList<QVariant> forts;
-    forts
-        << predefSchemesNames[7]   // name           0
-        << QVariant(true)          // fortsmode      1
-        << QVariant(true)          // team divide    2
-        << QVariant(false)         // solid land     3
-        << QVariant(false)         // border         4
-        << QVariant(true)          // low gravity    5
-        << QVariant(false)         // laser sight    6
-        << QVariant(false)         // invulnerable   7
-        << QVariant(false)         // reset health   8
-        << QVariant(false)         // vampiric       9
-        << QVariant(false)         // karma          10
-        << QVariant(false)         // artillery      11
-        << QVariant(true)          // random order   12
-        << QVariant(false)         // king           13
-        << QVariant(false)         // place hog      14
-        << QVariant(false)         // shared ammo    15
-        << QVariant(false)         // disable girders 16
-        << QVariant(false)         // disable land objects 17
-        << QVariant(false)         // AI survival    18
-        << QVariant(false)         // inf. attack    19
-        << QVariant(false)         // reset weps     20
-        << QVariant(false)         // per hog ammo   21
-        << QVariant(false)         // no wind        22
-        << QVariant(false)         // more wind      23
-        << QVariant(false)         // tag team       24
-        << QVariant(false)         // bottom border  25
-        << QVariant(100)           // damage modfier 26
-        << QVariant(45)            // turn time      27
-        << QVariant(100)           // init health    28
-        << QVariant(15)            // sudden death   29
-        << QVariant(5)             // case prob      30
-        << QVariant(3)             // mines time     31
-        << QVariant(0)             // mines number   32
-        << QVariant(0)             // mine dud pct   33
-        << QVariant(0)             // explosives     34
-        << QVariant(35)            // health case pct 35
-        << QVariant(25)            // health case amt 36
-        << QVariant(47)            // water rise amt 37
-        << QVariant(5)             // health dec amt 38
-        << QVariant(100)           // rope modfier   39
-        << QVariant(100)           // get away time  40
-        ;
-
-    QList<QVariant> timeless;
-    timeless
-        << predefSchemesNames[8]   // name           0
-        << QVariant(false)         // fortsmode      1
-        << QVariant(false)         // team divide    2
-        << QVariant(false)         // solid land     3
-        << QVariant(false)         // border         4
-        << QVariant(false)         // low gravity    5
-        << QVariant(false)         // laser sight    6
-        << QVariant(false)         // invulnerable   7
-        << QVariant(false)         // reset health   8
-        << QVariant(false)         // vampiric       9
-        << QVariant(false)         // karma          10
-        << QVariant(false)         // artillery      11
-        << QVariant(true)          // random order   12
-        << QVariant(false)         // king           13
-        << QVariant(false)         // place hog      14
-        << QVariant(false)         // shared ammo    15
-        << QVariant(false)         // disable girders 16
-        << QVariant(false)         // disable land objects 17
-        << QVariant(false)         // AI survival    18
-        << QVariant(false)         // inf. attack    19
-        << QVariant(false)         // reset weps     20
-        << QVariant(true)          // per hog ammo   21
-        << QVariant(false)         // no wind        22
-        << QVariant(false)         // more wind      23
-        << QVariant(false)         // tag team       24
-        << QVariant(false)         // bottom border  25
-        << QVariant(100)           // damage modfier 26
-        << QVariant(9999)          // turn time      27
-        << QVariant(100)           // init health    28
-        << QVariant(15)            // sudden death   29
-        << QVariant(5)             // case prob      30
-        << QVariant(3)             // mines time     31
-        << QVariant(5)             // mines number   32
-        << QVariant(10)            // mine dud pct   33
-        << QVariant(2)             // explosives     34
-        << QVariant(35)            // health case pct 35
-        << QVariant(30)            // health case amt 36
-        << QVariant(0)             // water rise amt 37
-        << QVariant(0)             // health dec amt 38
-        << QVariant(100)           // rope modfier   39
-        << QVariant(100)           // get away time  40
-        ;
-
-    QList<QVariant> thinkingportals;
-    thinkingportals
-        << predefSchemesNames[9]   // name           0
-        << QVariant(false)         // fortsmode      1
-        << QVariant(false)         // team divide    2
-        << QVariant(false)         // solid land     3
-        << QVariant(false)         // border         4
-        << QVariant(false)         // low gravity    5
-        << QVariant(false)         // laser sight    6
-        << QVariant(false)         // invulnerable   7
-        << QVariant(false)         // reset health   8
-        << QVariant(false)         // vampiric       9
-        << QVariant(false)         // karma          10
-        << QVariant(true)          // artillery      11
-        << QVariant(true)          // random order   12
-        << QVariant(false)         // king           13
-        << QVariant(false)         // place hog      14
-        << QVariant(false)         // shared ammo    15
-        << QVariant(false)         // disable girders 16
-        << QVariant(false)         // disable land objects 17
-        << QVariant(false)         // AI survival    18
-        << QVariant(false)         // inf. attack    19
-        << QVariant(false)         // reset weps     20
-        << QVariant(false)         // per hog ammo   21
-        << QVariant(false)         // no wind        22
-        << QVariant(false)         // more wind      23
-        << QVariant(false)         // tag team       24
-        << QVariant(false)         // bottom border  25
-        << QVariant(100)           // damage modfier 26
-        << QVariant(45)            // turn time      27
-        << QVariant(100)           // init health    28
-        << QVariant(15)            // sudden death   29
-        << QVariant(2)             // case prob      30
-        << QVariant(3)             // mines time     31
-        << QVariant(5)             // mines number   32
-        << QVariant(0)             // mine dud pct   33
-        << QVariant(5)             // explosives     34
-        << QVariant(25)            // health case pct 35
-        << QVariant(25)            // health case amt 36
-        << QVariant(47)            // water rise amt 37
-        << QVariant(5)             // health dec amt 38
-        << QVariant(100)           // rope modfier   39
-        << QVariant(100)           // get away time  40
-        ;
-
-    QList<QVariant> kingmode;
-    kingmode
-        << predefSchemesNames[10]  // name           0
-        << QVariant(false)         // fortsmode      1
-        << QVariant(false)         // team divide    2
-        << QVariant(false)         // solid land     3
-        << QVariant(false)         // border         4
-        << QVariant(false)         // low gravity    5
-        << QVariant(false)         // laser sight    6
-        << QVariant(false)         // invulnerable   7
-        << QVariant(false)         // reset health   8
-        << QVariant(false)         // vampiric       9
-        << QVariant(false)         // karma          10
-        << QVariant(false)         // artillery      11
-        << QVariant(true)          // random order   12
-        << QVariant(true)          // king           13
-        << QVariant(false)         // place hog      14
-        << QVariant(false)         // shared ammo    15
-        << QVariant(false)         // disable girders 16
-        << QVariant(false)         // disable land objects 17
-        << QVariant(false)         // AI survival    18
-        << QVariant(false)         // inf. attack    19
-        << QVariant(false)         // reset weps     20
-        << QVariant(false)         // per hog ammo   21
-        << QVariant(false)         // no wind        22
-        << QVariant(false)         // more wind      23
-        << QVariant(false)         // tag team       24
-        << QVariant(false)         // bottom border  25
-        << QVariant(100)           // damage modfier 26
-        << QVariant(45)            // turn time      27
-        << QVariant(100)           // init health    28
-        << QVariant(15)            // sudden death   29
-        << QVariant(5)             // case prob      30
-        << QVariant(3)             // mines time     31
-        << QVariant(4)             // mines number   32
-        << QVariant(0)             // mine dud pct   33
-        << QVariant(2)             // explosives     34
-        << QVariant(35)            // health case pct 35
-        << QVariant(25)            // health case amt 36
-        << QVariant(47)            // water rise amt 37
-        << QVariant(5)             // health dec amt 38
-        << QVariant(100)           // rope modfier   39
-        << QVariant(100)           // get away time  40
-        ;
-
-
-    schemes.append(defaultScheme);
-    schemes.append(proMode);
-    schemes.append(shoppa);
-    schemes.append(cleanslate);
-    schemes.append(minefield);
-    schemes.append(barrelmayhem);
-    schemes.append(tunnelhogs);
-    schemes.append(forts);
-    schemes.append(timeless);
-    schemes.append(thinkingportals);
-    schemes.append(kingmode);
-
-
-    int size = fileConfig.beginReadArray("schemes");
-    for (int i = 0; i < size; ++i) {
-        fileConfig.setArrayIndex(i);
-
-        if (!predefSchemesNames.contains(fileConfig.value(spNames[0]).toString()))
-        {
-            QList<QVariant> scheme;
-
-            for (int k = 0; k < spNames.size(); ++k)
-                scheme << fileConfig.value(spNames[k], defaultScheme[k]);
-
-            schemes.append(scheme);
-        }
-    }
-    fileConfig.endArray();
-}
-
-QVariant AmmoSchemeModel::headerData(int section, Qt::Orientation orientation, int role) const
-{
-    Q_UNUSED(section);
-    Q_UNUSED(orientation);
-    Q_UNUSED(role);
-
-    return QVariant();
-}
-
-int AmmoSchemeModel::rowCount(const QModelIndex &parent) const
-{
-    if (parent.isValid())
-        return 0;
-    else
-        return schemes.size();
-}
-
-int AmmoSchemeModel::columnCount(const QModelIndex & parent) const
-{
-    if (parent.isValid())
-        return 0;
-    else
-        return defaultScheme.size();
-}
-
-Qt::ItemFlags AmmoSchemeModel::flags(const QModelIndex & index) const
-{
-    Q_UNUSED(index);
-
-    return
-        Qt::ItemIsEnabled
-        | Qt::ItemIsSelectable
-        | Qt::ItemIsEditable;
-}
-
-bool AmmoSchemeModel::setData(const QModelIndex & index, const QVariant & value, int role)
-{
-    if (!index.isValid() || index.row() < numberOfDefaultSchemes
-        || index.row() >= schemes.size()
-        || index.column() >= defaultScheme.size()
-        || role != Qt::EditRole)
-        return false;
-
-    schemes[index.row()][index.column()] = value;
-
-    emit dataChanged(index, index);
-    return true;
-}
-
-bool AmmoSchemeModel::insertRows(int row, int count, const QModelIndex & parent)
-{
-    Q_UNUSED(count);
-
-    beginInsertRows(parent, schemes.size(), schemes.size());
-
-    if (row == -1)
-    {
-        QList<QVariant> newScheme = defaultScheme;
-        newScheme[0] = QVariant(tr("new"));
-        schemes.insert(schemes.size(), newScheme);
-    }
-    else
-    {
-        QList<QVariant> newScheme = schemes[row];
-        newScheme[0] = QVariant(tr("copy of") + " " + newScheme[0].toString());
-        schemes.insert(schemes.size(), newScheme);
-    }
-
-    endInsertRows();
-
-    return true;
-}
-
-bool AmmoSchemeModel::removeRows(int row, int count, const QModelIndex & parent)
-{
-    if(count != 1
-        || row < numberOfDefaultSchemes
-        || row >= schemes.size())
-        return false;
-
-    beginRemoveRows(parent, row, row);
-
-    schemes.removeAt(row);
-
-    endRemoveRows();
-
-    return true;
-}
-
-QVariant AmmoSchemeModel::data(const QModelIndex &index, int role) const
-{
-    if (!index.isValid() || index.row() < 0
-        || index.row() >= schemes.size()
-        || index.column() >= defaultScheme.size()
-        || (role != Qt::EditRole && role != Qt::DisplayRole)
-        )
-        return QVariant();
-
-    return schemes[index.row()][index.column()];
-}
-
-void AmmoSchemeModel::Save()
-{
-    fileConfig.beginWriteArray("schemes", schemes.size() - numberOfDefaultSchemes);
-
-    for (int i = 0; i < schemes.size() - numberOfDefaultSchemes; ++i) {
-        fileConfig.setArrayIndex(i);
-
-        QList<QVariant> scheme = schemes[i + numberOfDefaultSchemes];
-
-        for (int k = 0; k < scheme.size(); ++k)
-            fileConfig.setValue(spNames[k], scheme[k]);
-    }
-    fileConfig.endArray();
-}
-
-
-NetAmmoSchemeModel::NetAmmoSchemeModel(QObject * parent) :
-    QAbstractTableModel(parent)
-{
-    netScheme = defaultScheme;
-}
-
-QVariant NetAmmoSchemeModel::headerData(int section, Qt::Orientation orientation, int role) const
-{
-    Q_UNUSED(section);
-    Q_UNUSED(orientation);
-    Q_UNUSED(role);
-
-    return QVariant();
-}
-
-int NetAmmoSchemeModel::rowCount(const QModelIndex & parent) const
-{
-    if (parent.isValid())
-        return 0;
-    else
-        return 1;
-}
-
-int NetAmmoSchemeModel::columnCount(const QModelIndex & parent) const
-{
-    if (parent.isValid())
-        return 0;
-    else
-        return defaultScheme.size();
-}
-
-QVariant NetAmmoSchemeModel::data(const QModelIndex &index, int role) const
-{
-    if (!index.isValid() || index.row() < 0
-        || index.row() > 1
-        || index.column() >= defaultScheme.size()
-        || (role != Qt::EditRole && role != Qt::DisplayRole)
-        )
-        return QVariant();
-
-    return netScheme[index.column()];
-}
-
-void NetAmmoSchemeModel::setNetSchemeConfig(QStringList & cfg)
-{
-    if(cfg.size() != netScheme.size())
-    {
-        qWarning("Incorrect scheme cfg size");
-        return;
-    }
-
-    for(int i = 0; i < cfg.size(); ++i)
-        netScheme[i] = QVariant(cfg[i]);
-
-    reset();
-}
--- a/QTfrontend/ammoSchemeModel.h	Wed Sep 28 06:24:10 2011 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,79 +0,0 @@
-/*
- * Hedgewars, a free turn based strategy game
- * Copyright (c) 2005-2011 Andrey Korotaev <unC0Rr@gmail.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#ifndef _AMMO_SCHEME_MODEL_INCLUDED
-#define _AMMO_SCHEME_MODEL_INCLUDED
-
-#include <QSettings>
-#include <QAbstractTableModel>
-#include <QStringList>
-#include <QList>
-
-class AmmoSchemeModel : public QAbstractTableModel
-{
-    Q_OBJECT
-
-public:
-    AmmoSchemeModel(QObject * parent, const QString & fileName);
-
-    QVariant headerData(int section, Qt::Orientation orientation, int role) const;
-    int rowCount(const QModelIndex & parent) const;
-    int columnCount(const QModelIndex & parent) const;
-    Qt::ItemFlags flags(const QModelIndex & index) const;
-    bool setData(const QModelIndex & index, const QVariant & value, int role = Qt::EditRole);
-    bool insertRows(int row, int count, const QModelIndex & parent = QModelIndex());
-    bool removeRows(int row, int count, const QModelIndex & parent = QModelIndex());
-    QVariant data(const QModelIndex &index, int role) const;
-
-    int numberOfDefaultSchemes;
-    QStringList predefSchemesNames;
-    QStringList spNames;
-
-public slots:
-    void Save();
-
-signals:
-    void dataChanged(const QModelIndex & topLeft, const QModelIndex & bottomRight);
-
-protected:
-    QList< QList<QVariant> > schemes;
-
-private:
-    QSettings fileConfig;
-};
-
-class NetAmmoSchemeModel : public QAbstractTableModel
-{
-    Q_OBJECT
-
-public:
-    NetAmmoSchemeModel(QObject * parent);
-
-    QVariant headerData(int section, Qt::Orientation orientation, int role) const;
-    int rowCount(const QModelIndex & parent) const;
-    int columnCount(const QModelIndex & parent) const;
-    QVariant data(const QModelIndex &index, int role) const;
-
-public slots:
-    void setNetSchemeConfig(QStringList & cfg);
-
-private:
-    QList<QVariant> netScheme;
-};
-
-#endif // _AMMO_SCHEME_MODEL_INCLUDED
--- a/QTfrontend/bgwidget.cpp	Wed Sep 28 06:24:10 2011 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,143 +0,0 @@
-/*
- * Hedgewars, a free turn based strategy game
- * Copyright (c) 2009 Kristian Lehmann <email@thexception.net>
- * Copyright (c) 2009-2011 Andrey Korotaev <unC0Rr@gmail.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include "bgwidget.h"
-
-SpritePosition::SpritePosition(QWidget * parent, int sh)
-{
-    wParent = parent;
-    iSpriteHeight = sh;
-    reset();
-}
-
-SpritePosition::~SpritePosition()
-{
-}
-
-void SpritePosition::move()
-{
-    fX += fXMov;
-    fY += fYMov;
-    iAngle += 4;
-    if (iAngle >= 360) iAngle = 0;
-    if (fY > wParent->height()) reset();
-}
-
-void SpritePosition::reset()
-{
-    fY = -1 * iSpriteHeight;
-    fX = (qrand() % ((int)(wParent->width() * 1.5))) - wParent->width()/2;
-    fYMov = ((qrand() % 400)+300) / 100.0f;
-    fXMov = fYMov * 0.2f+((qrand()%100)/100.0f * 0.6f); //so between 0.2 and 0.6, or 0.5 +/- 0.3
-    iAngle = qrand() % 360;
-}
-
-QPoint SpritePosition::pos()
-{
-    return QPoint((int)fX,(int)fY);
-}
-
-int SpritePosition::getAngle()
-{
-    return iAngle;
-}
-
-void SpritePosition::init()
-{
-    fY = qrand() % (wParent->height() + 1);
-    fX = qrand() % (wParent->width() + 1);
-}
-
-BGWidget::BGWidget(QWidget * parent) : QWidget(parent)
-{
-    setAttribute(Qt::WA_NoSystemBackground, true);
-    sprite.load(":/res/Star.png");
-
-    setAutoFillBackground(false);
-
-    for (int i = 0; i < SPRITE_MAX; i++) spritePositions[i] = new SpritePosition(this, sprite.height());
-
-    for (int i = 0; i < 360; i++)
-    {
-        rotatedSprites[i] = new QImage(sprite.width(), sprite.height(), QImage::Format_ARGB32);
-        rotatedSprites[i]->fill(0);
-
-        QPoint translate(sprite.width()/2, sprite.height()/2);
-
-        QPainter p;
-        p.begin(rotatedSprites[i]);
-    //  p.setRenderHint(QPainter::Antialiasing);
-        p.setRenderHint(QPainter::SmoothPixmapTransform);
-        p.translate(translate.x(), translate.y());
-        p.rotate(i);
-        p.translate(-1*translate.x(), -1*translate.y());
-        p.drawImage(0, 0, sprite);
-    }
-
-    timerAnimation = new QTimer();
-    connect(timerAnimation, SIGNAL(timeout()), this, SLOT(animate()));
-    timerAnimation->setInterval(ANIMATION_INTERVAL);
-}
-
-BGWidget::~BGWidget()
-{
-    for (int i = 0; i < SPRITE_MAX; i++) delete spritePositions[i];
-    for (int i = 0; i < 360; i++) delete rotatedSprites[i];
-    delete timerAnimation;
-}
-
-void BGWidget::paintEvent(QPaintEvent *event)
-{
-    Q_UNUSED(event);
-
-    QPainter p;
-    p.begin(this);
-    //p.setRenderHint(QPainter::Antialiasing);
-    for (int i = 0; i < SPRITE_MAX; i++)
-    {
-        QPoint point = spritePositions[i]->pos();
-        p.drawImage(point.x(), point.y(), *rotatedSprites[spritePositions[i]->getAngle()]);
-    }
-    p.end();
-}
-
-void BGWidget::animate()
-{
-    for (int i = 0; i < SPRITE_MAX; i++)
-    {
-        // bottom edge of star *seems* clipped, but in fact, if I switch to just plain old repaint()/update() it is still clipped - artifact of transform?  As for 5, is arbitrary number. 4 was noticeably clipping, 5 seemed same as update() - I assume extra room is due to rotation and value really should be calculated proportional to width/height
-        update(spritePositions[i]->pos().x(),spritePositions[i]->pos().y(), sprite.width()+5, sprite.height()+5);
-        spritePositions[i]->move();
-    }
-}
-
-void BGWidget::startAnimation()
-{
-    timerAnimation->start();
-}
-
-void BGWidget::stopAnimation()
-{
-    timerAnimation->stop();
-}
-
-void BGWidget::init()
-{
-    for (int i = 0; i < SPRITE_MAX; i++) spritePositions[i]->init();
-}
--- a/QTfrontend/bgwidget.h	Wed Sep 28 06:24:10 2011 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,76 +0,0 @@
-/*
- * Hedgewars, a free turn based strategy game
- * Copyright (c) 2009 Kristian Lehmann <email@thexception.net>
- * Copyright (c) 2009-2011 Andrey Korotaev <unC0Rr@gmail.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#ifndef BGWIDGET_H
-#define BGWIDGET_H
-
-#include <QWidget>
-//#include <QGLWidget>
-#include <QPainter>
-#include <QTimer>
-#include <QPaintEvent>
-#include <QTime>
-#include <QPoint>
-
-#define SPRITE_MAX 12
-
-#define ANIMATION_INTERVAL 40
-
-class SpritePosition
-{
-public:
-    SpritePosition(QWidget * parent, int sh);
-    ~SpritePosition();
-private:
-    float fX;
-    float fY;
-    float fXMov;
-    float fYMov;
-    int iAngle;
-    QWidget * wParent;
-    int iSpriteHeight;
-public:
-    void move();
-    void reset();
-    QPoint pos();
-    int getAngle();
-    void init();
-};
-
-class BGWidget : public QWidget
-{
-    Q_OBJECT
-public:
-    BGWidget(QWidget * parent);
-    ~BGWidget();
-    void startAnimation();
-    void stopAnimation();
-    void init();
-private:
-    QImage sprite;
-    QTimer * timerAnimation;
-    SpritePosition * spritePositions[SPRITE_MAX];
-    QImage * rotatedSprites[360];
-protected:
-    void paintEvent(QPaintEvent * event);
-private slots:
-    void animate();
-};
-
-#endif // BGWIDGET_H
--- a/QTfrontend/chatwidget.cpp	Wed Sep 28 06:24:10 2011 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,584 +0,0 @@
-/*
- * Hedgewars, a free turn based strategy game
- * Copyright (c) 2007 Igor Ulyanov <iulyanov@gmail.com>
- * Copyright (c) 2007-2011 Andrey Korotaev <unC0Rr@gmail.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <QDesktopServices>
-#include <QTextBrowser>
-#include <QLineEdit>
-#include <QAction>
-#include <QTextDocument>
-#include <QDir>
-#include <QSettings>
-#include <QFile>
-#include <QTextStream>
-#include <QMenu>
-#include <QCursor>
-#include <QScrollBar>
-#include <QItemSelectionModel>
-#include <QStringList>
-
-#include "hwconsts.h"
-#include "SDLs.h"
-#include "gameuiconfig.h"
-#include "chatwidget.h"
-
-ListWidgetNickItem::ListWidgetNickItem(const QString& nick, bool isFriend, bool isIgnored) : QListWidgetItem(nick)
-{
-    this->aFriend = isFriend;
-    this->isIgnored = isIgnored;
-}
-
-void ListWidgetNickItem::setFriend(bool isFriend)
-{
-    this->aFriend = isFriend;
-}
-
-void ListWidgetNickItem::setIgnored(bool isIgnored)
-{
-    this->isIgnored = isIgnored;
-}
-
-bool ListWidgetNickItem::isFriend()
-{
-    return aFriend;
-}
-
-bool ListWidgetNickItem::ignored()
-{
-    return isIgnored;
-}
-
-bool ListWidgetNickItem::operator< (const QListWidgetItem & other) const
-{
-    // case in-sensitive comparison of the associated strings
-    // chars that are no letters are sorted at the end of the list
-
-    ListWidgetNickItem otherNick = const_cast<ListWidgetNickItem &>(dynamic_cast<const ListWidgetNickItem &>(other));
-
-    // ignored always down
-    if (isIgnored != otherNick.ignored())
-        return !isIgnored;
-
-    // friends always up
-    if (aFriend != otherNick.isFriend())
-        return aFriend;
-
-    QString txt1 = text().toLower();
-    QString txt2 = other.text().toLower();
-
-    bool firstIsShorter = (txt1.size() < txt2.size());
-    int len = firstIsShorter?txt1.size():txt2.size();
-
-    for (int i = 0; i < len; i++)
-    {
-        if (txt1[i] == txt2[i])
-            continue;
-        if (txt1[i].isLetter() != txt2[i].isLetter())
-            return txt1[i].isLetter();
-        return (txt1[i] < txt2[i]);
-    }
-
-    return firstIsShorter;
-}
-
-const char* HWChatWidget::STYLE = 
-"\
-a { color:#c8c8ff; }\
-.nick { text-decoration: none; }\
-.UserChat .nick { color:#ffec20; }\
-.FriendChat { color: #08e008; }\
-.FriendChat .nick { color: #20ff20; }\
-.UserJoin { color: #c0c0c0; }\
-.UserJoin .nick { color: #d0d0d0; }\
-.FriendJoin { color: #c0e0c0; }\
-.FriendJoin .nick { color: #d0f0d0; }\
-.UserAction { color: #ff80ff; }\
-.UserAction .nick { color: #ffa0ff; }\
-.FriendAction { color: #ff00ff; }\
-.FriendAction .nick { color: #ff30ff; }\
-.Error { color: #ff0000 }\
-.Warning { color: #ff8000 }\
-.Notice { color: #fefefe }\
-";
-
-HWChatWidget::HWChatWidget(QWidget* parent, QSettings * gameSettings, SDLInteraction * sdli, bool notify) :
-  QWidget(parent),
-  mainLayout(this)
-{
-    this->gameSettings = gameSettings;
-    this->sdli = sdli;
-    this->notify = notify;
-    if(notify && gameSettings->value("frontend/sound", true).toBool()) {
-        QFile tmpfile;
-        sdli->SDLMusicInit();
-        for(int i=0;i<4;i++) {
-            tmpfile.setFileName(cfgdir->absolutePath() + "/Data/Sounds/voices/Classic/Hello.ogg");
-            if (tmpfile.exists()) sound[i] = Mix_LoadWAV(QFileInfo(tmpfile).absoluteFilePath().toLocal8Bit().constData());
-            else sound[i] = Mix_LoadWAV(QString(datadir->absolutePath() + 
-                "/Sounds/voices/Classic/Hello.ogg").toLocal8Bit().constData());
-        }
-    }
-
-    mainLayout.setSpacing(1);
-    mainLayout.setMargin(1);
-    mainLayout.setSizeConstraint(QLayout::SetMinimumSize);
-    mainLayout.setColumnStretch(0, 76);
-    mainLayout.setColumnStretch(1, 24);
-
-    chatEditLine = new QLineEdit(this);
-    chatEditLine->setMaxLength(300);
-    connect(chatEditLine, SIGNAL(returnPressed()), this, SLOT(returnPressed()));
-
-    mainLayout.addWidget(chatEditLine, 2, 0);
-
-    chatText = new QTextBrowser(this);
-    chatText->document()->setDefaultStyleSheet(STYLE);
-    chatText->setMinimumHeight(20);
-    chatText->setMinimumWidth(10);
-    chatText->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
-    chatText->setOpenLinks(false);
-    connect(chatText, SIGNAL(anchorClicked(const QUrl&)),
-        this, SLOT(linkClicked(const QUrl&)));
-    mainLayout.addWidget(chatText, 0, 0, 2, 1);
-
-    chatNicks = new QListWidget(this);
-    chatNicks->setMinimumHeight(10);
-    chatNicks->setMinimumWidth(10);
-    chatNicks->setSortingEnabled(true);
-    chatNicks->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
-    chatNicks->setContextMenuPolicy(Qt::ActionsContextMenu);
-    connect(chatNicks, SIGNAL(itemDoubleClicked(QListWidgetItem *)),
-        this, SLOT(chatNickDoubleClicked(QListWidgetItem *)));
-    connect(chatNicks, SIGNAL(currentRowChanged(int)),
-        this, SLOT(chatNickSelected(int)));
-
-    mainLayout.addWidget(chatNicks, 0, 1, 3, 1);
-
-    acInfo = new QAction(QAction::tr("Info"), chatNicks);
-    acInfo->setIcon(QIcon(":/res/info.png"));
-    connect(acInfo, SIGNAL(triggered(bool)), this, SLOT(onInfo()));
-    acKick = new QAction(QAction::tr("Kick"), chatNicks);
-    acKick->setIcon(QIcon(":/res/kick.png"));
-    connect(acKick, SIGNAL(triggered(bool)), this, SLOT(onKick()));
-    acBan = new QAction(QAction::tr("Ban"), chatNicks);
-    acBan->setIcon(QIcon(":/res/ban.png"));
-    connect(acBan, SIGNAL(triggered(bool)), this, SLOT(onBan()));
-    acFollow = new QAction(QAction::tr("Follow"), chatNicks);
-    acFollow->setIcon(QIcon(":/res/follow.png"));
-    connect(acFollow, SIGNAL(triggered(bool)), this, SLOT(onFollow()));
-    acIgnore = new QAction(QAction::tr("Ignore"), chatNicks);
-    acIgnore->setIcon(QIcon(":/res/ignore.png"));
-    connect(acIgnore, SIGNAL(triggered(bool)), this, SLOT(onIgnore()));
-    acFriend = new QAction(QAction::tr("Add friend"), chatNicks);
-    acFriend->setIcon(QIcon(":/res/addfriend.png"));
-    connect(acFriend, SIGNAL(triggered(bool)), this, SLOT(onFriend()));
-
-    chatNicks->insertAction(0, acFriend);
-    chatNicks->insertAction(0, acInfo);
-    chatNicks->insertAction(0, acIgnore);
-
-    showReady = false;
-    setShowFollow(true);
-}
-
-void HWChatWidget::linkClicked(const QUrl & link)
-{
-    if (link.scheme() == "http")
-        QDesktopServices::openUrl(link);
-    if (link.scheme() == "hwnick")
-    {
-        // decode nick
-        const QString& nick = QString::fromUtf8(QByteArray::fromBase64(link.encodedQuery()));
-        QList<QListWidgetItem *> items = chatNicks->findItems(nick, Qt::MatchExactly);
-        if (items.size() < 1)
-            return;
-        QMenu * popup = new QMenu(this);
-        // selecting an item will automatically scroll there, so let's save old position
-        QScrollBar * scrollBar = chatNicks->verticalScrollBar();
-        int oldScrollPos = scrollBar->sliderPosition();
-        // select the nick which we want to see the actions for
-        chatNicks->setCurrentItem(items[0], QItemSelectionModel::Clear);
-        // selecting an item will automatically scroll there, so let's save old position
-        scrollBar->setSliderPosition(oldScrollPos);
-        // load actions
-        popup->addActions(chatNicks->actions());
-        // display menu popup at mouse cursor position
-        popup->popup(QCursor::pos());
-    }
-}
-
-void HWChatWidget::setShowFollow(bool enabled)
-{
-    if (enabled) {
-        if (!(chatNicks->actions().contains(acFollow)))
-            chatNicks->insertAction(acFriend, acFollow);
-    }
-    else {
-        if (chatNicks->actions().contains(acFollow))
-            chatNicks->removeAction(acFollow);
-    }
-}
-
-void HWChatWidget::loadList(QStringList & list, const QString & file)
-{
-    list.clear();
-    QFile txt(cfgdir->absolutePath() + "/" + file);
-    if(!txt.open(QIODevice::ReadOnly))
-        return;
-    QTextStream stream(&txt);
-    stream.setCodec("UTF-8");
-
-    while(!stream.atEnd())
-    {
-        QString str = stream.readLine();
-        if(str.startsWith(";") || str.length() == 0)
-            continue;
-        list << str.trimmed();
-    }
-    //readd once we require newer Qt than 4.4
-    //list.removeDuplicates();
-    txt.close();
-}
-
-void HWChatWidget::saveList(QStringList & list, const QString & file)
-{
-    QFile txt(cfgdir->absolutePath() + "/" + file);
-    if(!txt.open(QIODevice::WriteOnly | QIODevice::Truncate))
-        return;
-    QTextStream stream(&txt);
-    stream.setCodec("UTF-8");
-
-    stream << "; this list is used by Hedgewars - do not edit it unless you know what you're doing!" << endl;
-    for(int i = 0; i < list.size(); i++)
-        stream << list[i] << endl;
-    txt.close();
-}
-
-void HWChatWidget::updateNickItem(QListWidgetItem *nickItem)
-{
-    QString nick = nickItem->text();
-    ListWidgetNickItem * item = dynamic_cast<ListWidgetNickItem*>(nickItem);
-
-    item->setFriend(friendsList.contains(nick, Qt::CaseInsensitive));
-    item->setIgnored(ignoreList.contains(nick, Qt::CaseInsensitive));
-
-    if(item->ignored())
-    {
-        item->setIcon(QIcon(showReady ? (item->data(Qt::UserRole).toBool() ? ":/res/chat_ignore_on.png" : ":/res/chat_ignore_off.png") : ":/res/chat_ignore.png"));
-        item->setForeground(Qt::gray);
-    }
-    else if(item->isFriend())
-    {
-        item->setIcon(QIcon(showReady ? (item->data(Qt::UserRole).toBool() ? ":/res/chat_friend_on.png" : ":/res/chat_friend_off.png") : ":/res/chat_friend.png"));
-        item->setForeground(Qt::green);
-    }
-    else
-    {
-        item->setIcon(QIcon(showReady ? (item->data(Qt::UserRole).toBool() ? ":/res/chat_default_on.png" : ":/res/chat_default_off.png") : ":/res/chat_default.png"));
-        item->setForeground(QBrush(QColor(0xff, 0xcc, 0x00)));
-    }
-}
-
-void HWChatWidget::updateNickItems()
-{
-    for(int i = 0; i < chatNicks->count(); i++)
-        updateNickItem(chatNicks->item(i));
-
-    chatNicks->sortItems();
-}
-
-void HWChatWidget::loadLists(const QString & nick)
-{
-    loadList(ignoreList, nick.toLower() + "_ignore.txt");
-    loadList(friendsList, nick.toLower() + "_friends.txt");
-    updateNickItems();
-}
-
-void HWChatWidget::saveLists(const QString & nick)
-{
-    saveList(ignoreList, nick.toLower() + "_ignore.txt");
-    saveList(friendsList, nick.toLower() + "_friends.txt");
-}
-
-void HWChatWidget::returnPressed()
-{
-    QStringList lines = chatEditLine->text().split('\n');
-    chatEditLine->clear();
-    foreach (const QString &line, lines)
-        emit chatLine(line);
-}
-
-
-void HWChatWidget::onChatString(const QString& str)
-{
-    onChatString("", str);
-}
-
-const QRegExp HWChatWidget::URLREGEXP = QRegExp("(http://)?(www\\.)?(hedgewars\\.org(/[^ ]*)?)");
-
-void HWChatWidget::onChatString(const QString& nick, const QString& str)
-{
-    bool isFriend = false;
-
-    if (!nick.isEmpty()) {
-        // don't show chat lines that are from ignored nicks
-        if (ignoreList.contains(nick, Qt::CaseInsensitive))
-            return;
-        // friends will get special treatment, of course
-        isFriend = friendsList.contains(nick, Qt::CaseInsensitive);
-    }
-
-    QString formattedStr = Qt::escape(str.mid(1));
-    // make hedgewars.org urls actual links
-    formattedStr = formattedStr.replace(URLREGEXP, "<a href=\"http://\\3\">\\3</a>");
-
-    // "link" nick, but before that encode it in base64 to make sure it can't intefere with html/url syntax
-    // the nick is put as querystring as putting it as host would convert it to it's lower case variant
-    if(!nick.isEmpty())
-        formattedStr.replace("|nick|",QString("<a href=\"hwnick://?%1\" class=\"nick\">%2</a>").arg(QString(nick.toUtf8().toBase64())).arg(nick));
-
-    QString cssClass("UserChat");
-
-    // check first character for color code and set color properly
-    switch (str[0].toAscii()) {
-        case 3:
-            cssClass = (isFriend ? "FriendJoin" : "UserJoin");
-            break;
-        case 2:
-            cssClass = (isFriend ? "FriendAction" : "UserAction");
-            break;
-        default:
-            if (isFriend)
-                cssClass = "FriendChat";
-    }
-
-    addLine(cssClass,formattedStr);
-}
-
-void HWChatWidget::addLine(const QString& cssClass, QString line)
-{
-    if (chatStrings.size() > 250)
-        chatStrings.removeFirst();
-
-    line = QString("<span class=\"%2\">%1</span>").arg(line).arg(cssClass);
-
-    chatStrings.append(line);
-
-    chatText->setHtml(chatStrings.join("<br>"));
-
-    chatText->moveCursor(QTextCursor::End);
-}
-
-void HWChatWidget::onServerMessage(const QString& str)
-{
-    if (chatStrings.size() > 250)
-        chatStrings.removeFirst();
-
-    chatStrings.append("<hr>" + str + "<hr>");
-
-    chatText->setHtml(chatStrings.join("<br>"));
-
-    chatText->moveCursor(QTextCursor::End);
-}
-
-void HWChatWidget::nickAdded(const QString& nick, bool notifyNick)
-{
-    QListWidgetItem * item = new ListWidgetNickItem(nick, friendsList.contains(nick, Qt::CaseInsensitive), ignoreList.contains(nick, Qt::CaseInsensitive));
-    updateNickItem(item);
-    chatNicks->addItem(item);
-
-    emit nickCountUpdate(chatNicks->count());
-
-    if(notifyNick && notify && gameSettings->value("frontend/sound", true).toBool()) {
-       Mix_PlayChannel(-1, sound[rand()%4], 0);
-    }
-}
-
-void HWChatWidget::nickRemoved(const QString& nick)
-{
-    foreach(QListWidgetItem * item, chatNicks->findItems(nick, Qt::MatchExactly))
-        chatNicks->takeItem(chatNicks->row(item));
-
-    emit nickCountUpdate(chatNicks->count());
-}
-
-void HWChatWidget::clear()
-{
-    chatText->clear();
-    chatStrings.clear();
-    chatNicks->clear();
-}
-
-void HWChatWidget::onKick()
-{
-    QListWidgetItem * curritem = chatNicks->currentItem();
-    if (curritem)
-        emit kick(curritem->text());
-}
-
-void HWChatWidget::onBan()
-{
-    QListWidgetItem * curritem = chatNicks->currentItem();
-    if (curritem)
-        emit ban(curritem->text());
-}
-
-void HWChatWidget::onInfo()
-{
-    QListWidgetItem * curritem = chatNicks->currentItem();
-    if (curritem)
-        emit info(curritem->text());
-}
-
-void HWChatWidget::onFollow()
-{
-    QListWidgetItem * curritem = chatNicks->currentItem();
-    if (curritem)
-        emit follow(curritem->text());
-}
-
-void HWChatWidget::onIgnore()
-{
-    QListWidgetItem * curritem = chatNicks->currentItem();
-    if(!curritem)
-        return;
-
-    if(ignoreList.contains(curritem->text(), Qt::CaseInsensitive)) // already on list - remove him
-    {
-        ignoreList.removeAll(curritem->text().toLower());
-        onChatString(HWChatWidget::tr("%1 *** %2 has been removed from your ignore list").arg('\x03').arg(curritem->text()));
-    }
-    else // not on list - add
-    {
-        // don't consider ignored people friends
-        if(friendsList.contains(curritem->text(), Qt::CaseInsensitive))
-            emit onFriend();
-
-        // scroll down on first ignore added so that people see where that nick went to
-        if (ignoreList.isEmpty())
-            chatNicks->scrollToBottom();
-
-        ignoreList << curritem->text().toLower();
-        onChatString(HWChatWidget::tr("%1 *** %2 has been added to your ignore list").arg('\x03').arg(curritem->text()));
-    }
-    updateNickItem(curritem); // update icon/sort order/etc
-    chatNicks->sortItems();
-    chatNickSelected(0); // update context menu
-}
-
-void HWChatWidget::onFriend()
-{
-    QListWidgetItem * curritem = chatNicks->currentItem();
-    if(!curritem)
-        return;
-
-    if(friendsList.contains(curritem->text(), Qt::CaseInsensitive)) // already on list - remove him
-    {
-        friendsList.removeAll(curritem->text().toLower());
-        onChatString(HWChatWidget::tr("%1 *** %2 has been removed from your friends list").arg('\x03').arg(curritem->text()));
-    }
-    else // not on list - add
-    {
-        // don't ignore the new friend
-        if(ignoreList.contains(curritem->text(), Qt::CaseInsensitive))
-            emit onIgnore();
-
-        // scroll up on first friend added so that people see where that nick went to
-        if (friendsList.isEmpty())
-            chatNicks->scrollToTop();
-
-        friendsList << curritem->text().toLower();
-        onChatString(HWChatWidget::tr("%1 *** %2 has been added to your friends list").arg('\x03').arg(curritem->text()));
-    }
-    updateNickItem(curritem); // update icon/sort order/etc
-    chatNicks->sortItems();
-    chatNickSelected(0); // update context menu
-}
-
-void HWChatWidget::chatNickDoubleClicked(QListWidgetItem * item)
-{
-    Q_UNUSED(item);
-
-    QList<QAction *> actions = chatNicks->actions();
-    actions.first()->activate(QAction::Trigger);
-}
-
-void HWChatWidget::chatNickSelected(int index)
-{
-    Q_UNUSED(index);
-
-    QListWidgetItem* item = chatNicks->currentItem();
-    if (!item)
-        return;
-
-    // update context menu labels according to possible action
-    if(ignoreList.contains(item->text(), Qt::CaseInsensitive))
-    {
-        acIgnore->setText(QAction::tr("Unignore"));
-        acIgnore->setIcon(QIcon(":/res/unignore.png"));
-    }
-    else
-    {
-        acIgnore->setText(QAction::tr("Ignore"));
-        acIgnore->setIcon(QIcon(":/res/ignore.png"));
-    }
-
-    if(friendsList.contains(item->text(), Qt::CaseInsensitive))
-    {
-        acFriend->setText(QAction::tr("Remove friend"));
-        acFriend->setIcon(QIcon(":/res/remfriend.png"));
-    }
-    else
-    {
-        acFriend->setText(QAction::tr("Add friend"));
-        acFriend->setIcon(QIcon(":/res/addfriend.png"));
-    }
-}
-
-void HWChatWidget::setShowReady(bool s)
-{
-    showReady = s;
-}
-
-void HWChatWidget::setReadyStatus(const QString & nick, bool isReady)
-{
-    QList<QListWidgetItem *> items = chatNicks->findItems(nick, Qt::MatchExactly);
-    if (items.size() != 1)
-    {
-        qWarning("Bug: cannot find user in chat");
-        return;
-    }
-
-    items[0]->setData(Qt::UserRole, isReady); // bulb status
-    updateNickItem(items[0]);
-
-    // ensure we're still showing the status bulbs
-    showReady = true;
-}
-
-void HWChatWidget::adminAccess(bool b)
-{
-    chatNicks->removeAction(acKick);
-    chatNicks->removeAction(acBan);
-
-    if(b)
-    {
-        chatNicks->insertAction(0, acKick);
-//      chatNicks->insertAction(0, acBan);
-    }
-}
--- a/QTfrontend/chatwidget.h	Wed Sep 28 06:24:10 2011 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,124 +0,0 @@
-/*
- * Hedgewars, a free turn based strategy game
- * Copyright (c) 2007 Igor Ulyanov <iulyanov@gmail.com>
- * Copyright (c) 2007-2011 Andrey Korotaev <unC0Rr@gmail.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#ifndef _CHAT_WIDGET_INCLUDED
-#define _CHAT_WIDGET_INCLUDED
-
-#include <QWidget>
-#include <QListWidget>
-#include <QString>
-#include <QGridLayout>
-#include <QRegExp>
-
-#include "SDLs.h"
-
-class ListWidgetNickItem;
-class QTextBrowser;
-class QLineEdit;
-class QListWidget;
-class QSettings;
-class SDLInteraction;
-
-// this class is for custom nick sorting
-class ListWidgetNickItem : public QListWidgetItem
-{
-public:
-  ListWidgetNickItem(const QString& nick, bool isFriend, bool isIgnored);
-  bool operator<(const QListWidgetItem & other) const;
-  void setFriend(bool isFriend);
-  void setIgnored(bool isIgnored);
-  bool isFriend();
-  bool ignored();
-
-private:
-  bool aFriend;
-  bool isIgnored;
-};
-
-class HWChatWidget : public QWidget
-{
-  Q_OBJECT
-
- public:
-  HWChatWidget(QWidget* parent, QSettings * gameSettings, SDLInteraction * sdli, bool notify);
-  void loadLists(const QString & nick);
-  void saveLists(const QString & nick);
-  void setShowReady(bool s);
-  void setShowFollow(bool enabled);
-  void addLine(const QString & cssClass, QString line);
-  static const char* STYLE;
-  QStringList ignoreList, friendsList;
-
-private:
-  void loadList(QStringList & list, const QString & file);
-  void saveList(QStringList & list, const QString & file);
-  void updateNickItem(QListWidgetItem *item);
-  void updateNickItems();
-  static const QRegExp URLREGEXP;
-
- public slots:
-  void onChatString(const QString& str);
-  void onChatString(const QString& nick, const QString& str);
-  void onServerMessage(const QString& str);
-  void nickAdded(const QString& nick, bool notifyNick);
-  void nickRemoved(const QString& nick);
-  void clear();
-  void setReadyStatus(const QString & nick, bool isReady);
-  void adminAccess(bool);
-
- signals:
-  void chatLine(const QString& str);
-  void kick(const QString & str);
-  void ban(const QString & str);
-  void info(const QString & str);
-  void follow(const QString &);
-  void nickCountUpdate(int cnt);
-
- private:
-  QGridLayout mainLayout;
-  QTextBrowser* chatText;
-  QStringList chatStrings;
-  QListWidget* chatNicks;
-  QLineEdit* chatEditLine;
-  QAction * acInfo;
-  QAction * acKick;
-  QAction * acBan;
-  QAction * acFollow;
-  QAction * acIgnore;
-  QAction * acFriend;
-  QSettings * gameSettings;
-  SDLInteraction * sdli;
-  Mix_Chunk *sound[4];
-  bool notify;
-  bool showReady;
-
- private slots:
-  void returnPressed();
-  void onBan();
-  void onKick();
-  void onInfo();
-  void onFollow();
-  void onIgnore();
-  void onFriend();
-  void chatNickDoubleClicked(QListWidgetItem * item);
-  void chatNickSelected(int index);
-  void linkClicked(const QUrl & link);
-};
-
-#endif // _CHAT_WIDGET_INCLUDED
--- a/QTfrontend/databrowser.cpp	Wed Sep 28 06:24:10 2011 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,57 +0,0 @@
-#include <QNetworkAccessManager>
-#include <QNetworkRequest>
-#include <QNetworkReply>
-#include <QDebug>
-#include <QUrl>
-
-#include "databrowser.h"
-
-const QNetworkRequest::Attribute typeAttribute = (QNetworkRequest::Attribute)(QNetworkRequest::User + 1);
-const QNetworkRequest::Attribute urlAttribute = (QNetworkRequest::Attribute)(QNetworkRequest::User + 2);
-
-DataBrowser::DataBrowser(QWidget *parent) :
-    QTextBrowser(parent)
-{
-
-    manager = new QNetworkAccessManager(this);
-}
-
-QVariant DataBrowser::loadResource(int type, const QUrl & name)
-{
-    if(type == QTextDocument::ImageResource || type == QTextDocument::StyleSheetResource)
-    {
-        if(resources.contains(name.toString()))
-        {
-            return resources.take(name.toString());
-        }
-        else
-            if(!requestedResources.contains(name.toString()))
-            {
-                qDebug() << "Requesting resource" << name.toString();
-                requestedResources.insert(name.toString());
-
-                QNetworkRequest newRequest(QUrl("http://www.hedgewars.org" + name.toString()));
-                newRequest.setAttribute(typeAttribute, type);
-                newRequest.setAttribute(urlAttribute, name);
-
-                QNetworkReply *reply = manager->get(newRequest);
-                connect(reply, SIGNAL(finished()), this, SLOT(resourceDownloaded()));
-            }
-    }
-
-    return QVariant();
-}
-
-void DataBrowser::resourceDownloaded()
-{
-    QNetworkReply * reply = qobject_cast<QNetworkReply *>(sender());
-
-    if(reply)
-    {
-        int type = reply->request().attribute(typeAttribute).toInt();
-        QUrl url = reply->request().attribute(urlAttribute).toUrl();
-        resources.insert(url.toString(), reply->readAll());
-        document()->addResource(type, reply->request().url(), QVariant());
-        update();
-    }
-}
--- a/QTfrontend/databrowser.h	Wed Sep 28 06:24:10 2011 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,33 +0,0 @@
-#ifndef DATABROWSER_H
-#define DATABROWSER_H
-
-#include <QTextBrowser>
-#include <QSet>
-
-class QNetworkAccessManager;
-
-class DataBrowser : public QTextBrowser
-{
-    Q_OBJECT
-public:
-    explicit DataBrowser(QWidget *parent = 0);
-
-signals:
-
-public slots:
-
-private:
-    QNetworkAccessManager *manager;
-    
-    // hash and set of QString instead of QUrl to support Qt versions 
-    // older than 4.7 (those have no support for qHash(const QUrl &))
-    QHash<QString, QByteArray> resources;
-    QSet<QString> requestedResources;
-
-    QVariant loadResource(int type, const QUrl & name);
-
-private slots:
-    void resourceDownloaded();
-};
-
-#endif // DATABROWSER_H
--- a/QTfrontend/drawmapwidget.cpp	Wed Sep 28 06:24:10 2011 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,106 +0,0 @@
-/*
- * Hedgewars, a free turn based strategy game
- * Copyright (c) 2011 Andrey Korotaev <unC0Rr@gmail.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <QFile>
-#include <QMessageBox>
-#include <QEvent>
-
-#include "drawmapwidget.h"
-
-DrawMapWidget::DrawMapWidget(QWidget *parent) :
-    QWidget(parent),
-    ui(new Ui::DrawMapWidget)
-{
-    ui->setupUi(this);
-
-    m_scene = 0;
-}
-
-DrawMapWidget::~DrawMapWidget()
-{
-    delete ui;
-}
-
-void DrawMapWidget::changeEvent(QEvent *e)
-{
-    QWidget::changeEvent(e);
-    switch (e->type()) {
-    case QEvent::LanguageChange:
-        ui->retranslateUi(this);
-        break;
-    default:
-        break;
-    }
-}
-
-void DrawMapWidget::setScene(DrawMapScene * scene)
-{
-    ui->graphicsView->setScene(scene);
-    m_scene = scene;
-}
-
-void DrawMapWidget::resizeEvent(QResizeEvent * event)
-{
-    Q_UNUSED(event);
-
-    if(ui->graphicsView && ui->graphicsView->scene())
-        ui->graphicsView->fitInView(ui->graphicsView->scene()->sceneRect(), Qt::KeepAspectRatio);
-}
-
-void DrawMapWidget::showEvent(QShowEvent * event)
-{
-    Q_UNUSED(event);
-
-    resizeEvent(0);
-}
-
-void DrawMapWidget::undo()
-{
-    if(m_scene) m_scene->undo();
-}
-
-void DrawMapWidget::clear()
-{
-    if(m_scene) m_scene->clearMap();
-}
-
-void DrawMapWidget::save(const QString & fileName)
-{
-    if(m_scene)
-    {
-        QFile file(fileName);
-
-        if(!file.open(QIODevice::WriteOnly))
-            QMessageBox::warning(this, tr("File error"), tr("Cannot open file '%1' for writing").arg(fileName));
-        else
-            file.write(qCompress(m_scene->encode()).toBase64());
-    }
-}
-
-void DrawMapWidget::load(const QString & fileName)
-{
-    if(m_scene)
-    {
-        QFile f(fileName);
-
-        if(!f.open(QIODevice::ReadOnly))
-            QMessageBox::warning(this, tr("File error"), tr("Cannot read file '%1'").arg(fileName));
-        else
-            m_scene->decode(qUncompress(QByteArray::fromBase64(f.readAll())));
-    }
-}
--- a/QTfrontend/drawmapwidget.h	Wed Sep 28 06:24:10 2011 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,86 +0,0 @@
-/*
- * Hedgewars, a free turn based strategy game
- * Copyright (c) 2011 Andrey Korotaev <unC0Rr@gmail.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#ifndef DRAWMAPWIDGET_H
-#define DRAWMAPWIDGET_H
-
-#include <QWidget>
-#include <QHBoxLayout>
-#include <QPushButton>
-#include <QGraphicsView>
-
-#include "qaspectratiolayout.h"
-#include "drawmapscene.h"
-
-namespace Ui {
-    class Ui_DrawMapWidget
-    {
-    public:
-        QGraphicsView *graphicsView;
-
-        void setupUi(QWidget *drawMapWidget)
-        {
-            QAspectRatioLayout * arLayout = new QAspectRatioLayout(drawMapWidget);
-            arLayout->setMargin(0);
-
-            graphicsView = new QGraphicsView(drawMapWidget);
-            arLayout->addWidget(graphicsView);
-
-            retranslateUi(drawMapWidget);
-
-            QMetaObject::connectSlotsByName(drawMapWidget);
-        } // setupUi
-
-        void retranslateUi(QWidget *drawMapWidget)
-        {
-            Q_UNUSED(drawMapWidget);
-        } // retranslateUi
-
-    };
-
-    class DrawMapWidget: public Ui_DrawMapWidget {};
-}
-
-class DrawMapWidget : public QWidget
-{
-    Q_OBJECT
-
-public:
-    explicit DrawMapWidget(QWidget *parent = 0);
-    ~DrawMapWidget();
-
-    void setScene(DrawMapScene * scene);
-
-public slots:
-    void undo();
-    void clear();
-    void save(const QString & fileName);
-    void load(const QString & fileName);
-
-protected:
-    void changeEvent(QEvent *e);
-    virtual void resizeEvent(QResizeEvent * event);
-    virtual void showEvent(QShowEvent * event);
-
-private:
-    Ui::DrawMapWidget *ui;
-
-    DrawMapScene * m_scene;
-};
-
-#endif // DRAWMAPWIDGET_H
--- a/QTfrontend/fpsedit.cpp	Wed Sep 28 06:24:10 2011 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,31 +0,0 @@
-/*
- * Hedgewars, a free turn based strategy game
- * Copyright (c) 2006-2011 Andrey Korotaev <unC0Rr@gmail.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include "fpsedit.h"
-
-FPSEdit::FPSEdit(QWidget * parent) :
-    QSpinBox(parent)
-{
-    setRange(1, 34);
-    setValue(27);
-}
-
-QString FPSEdit::textFromValue(int value) const
-{
-    return QString::number(1000 / (35 - value));
-}
--- a/QTfrontend/fpsedit.h	Wed Sep 28 06:24:10 2011 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,35 +0,0 @@
-/*
- * Hedgewars, a free turn based strategy game
- * Copyright (c) 2006-2011 Andrey Korotaev <unC0Rr@gmail.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#ifndef _FPSEDIT_H
-#define _FPSEDIT_H
-
-#include <QSpinBox>
-
-class FPSEdit : public QSpinBox
-{
-    Q_OBJECT
-
-public:
-    FPSEdit(QWidget * parent = 0);
-
-protected:
-     QString textFromValue (int value) const;
-};
-
-#endif // _FPSEDIT_H
--- a/QTfrontend/frameTeam.cpp	Wed Sep 28 06:24:10 2011 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,128 +0,0 @@
-/*
- * Hedgewars, a free turn based strategy game
- * Copyright (c) 2006-2007 Igor Ulyanov <iulyanov@gmail.com>
- * Copyright (c) 2007-2011 Andrey Korotaev <unC0Rr@gmail.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <QResizeEvent>
-#include <QCoreApplication>
-#include <QPalette>
-
-#include "frameTeam.h"
-#include "teamselhelper.h"
-#include "hwconsts.h"
-
-FrameTeams::FrameTeams(QWidget* parent) :
-  QFrame(parent), maxHedgehogsPerGame(48), overallHedgehogs(0), mainLayout(this), nonInteractive(false)
-{
-    QPalette newPalette = palette();
-    newPalette.setColor(QPalette::Window, QColor(0x00, 0x00, 0x00));
-    setPalette(newPalette);
-    setAutoFillBackground(true);
-
-    mainLayout.setSpacing(1);
-    mainLayout.setContentsMargins(4, 4, 4, 4);
-
-    int i = 0;
-    while(colors[i] != 0)
-        availableColors.push_back(QColor(colors[i++]));
-
-    resetColors();
-}
-
-void FrameTeams::setInteractivity(bool interactive)
-{
-    nonInteractive = !interactive;
-    for(tmapTeamToWidget::iterator it=teamToWidget.begin(); it!=teamToWidget.end(); ++it) {
-        TeamShowWidget* pts = dynamic_cast<TeamShowWidget*>(it.value());
-        if(!pts) throw;
-        pts->setInteractivity(interactive);
-    }
-}
-
-void FrameTeams::resetColors()
-{
-  currentColor=availableColors.end() - 1; // ensure next color is the first one
-}
-
-QColor FrameTeams::getNextColor() const
-{
-  QList<QColor>::ConstIterator nextColor=currentColor;
-  ++nextColor;
-  if (nextColor==availableColors.end()) nextColor=availableColors.begin();
-  return *nextColor;
-}
-
-void FrameTeams::addTeam(HWTeam team, bool willPlay)
-{
-  TeamShowWidget* pTeamShowWidget = new TeamShowWidget(team, willPlay, this);
-  if(nonInteractive) pTeamShowWidget->setInteractivity(false);
-//  int hght=teamToWidget.empty() ? 0 : teamToWidget.begin()->second->size().height();
-  mainLayout.addWidget(pTeamShowWidget);
-  teamToWidget.insert(team, pTeamShowWidget);
-  QResizeEvent* pevent=new QResizeEvent(parentWidget()->size(), parentWidget()->size());
-  QCoreApplication::postEvent(parentWidget(), pevent);
-}
-
-void FrameTeams::removeTeam(HWTeam team)
-{
-  tmapTeamToWidget::iterator it=teamToWidget.find(team);
-  if(it==teamToWidget.end()) return;
-  mainLayout.removeWidget(it.value());
-  it.value()->deleteLater();
-  teamToWidget.erase(it);
-}
-
-void FrameTeams::resetTeams()
-{
-  for(tmapTeamToWidget::iterator it=teamToWidget.begin(); it!=teamToWidget.end(); ) {
-    mainLayout.removeWidget(it.value());
-    it.value()->deleteLater();
-    teamToWidget.erase(it++);
-  }
-}
-
-void FrameTeams::setHHNum(const HWTeam& team)
-{
-  TeamShowWidget* pTeamShowWidget = dynamic_cast<TeamShowWidget*>(getTeamWidget(team));
-  if(!pTeamShowWidget) return;
-  pTeamShowWidget->setHHNum(team.numHedgehogs());
-}
-
-void FrameTeams::setTeamColor(const HWTeam& team)
-{
-  TeamShowWidget* pTeamShowWidget = dynamic_cast<TeamShowWidget*>(getTeamWidget(team));
-  if(!pTeamShowWidget) return;
-  pTeamShowWidget->changeTeamColor(team.color());
-}
-
-QWidget* FrameTeams::getTeamWidget(HWTeam team)
-{
-//qDebug() << "FrameTeams::getTeamWidget getNetID() = " << team.getNetID();
-  tmapTeamToWidget::iterator it=teamToWidget.find(team);
-  QWidget* ret = it!=teamToWidget.end() ? it.value() : 0;
-  return ret;
-}
-
-bool FrameTeams::isFullTeams() const
-{
-  return overallHedgehogs==maxHedgehogsPerGame;
-}
-
-void FrameTeams::emitTeamColorChanged(const HWTeam& team)
-{
-  emit teamColorChanged(team);
-}
--- a/QTfrontend/frameTeam.h	Wed Sep 28 06:24:10 2011 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,68 +0,0 @@
-/*
- * Hedgewars, a free turn based strategy game
- * Copyright (c) 2006-2007 Igor Ulyanov <iulyanov@gmail.com>
- * Copyright (c) 2007-2011 Andrey Korotaev <unC0Rr@gmail.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#ifndef _FRAME_TEAM_INCLUDED
-#define _FRAME_TEAM_INCLUDED
-
-#include <QFrame>
-#include <QList>
-#include <QColor>
-
-#include "teamselect.h"
-
-class FrameTeams : public QFrame
-{
-  Q_OBJECT
-
- friend class CHedgehogerWidget;
- friend class TeamShowWidget;
-
- public:
-  FrameTeams(QWidget* parent=0);
-  QWidget* getTeamWidget(HWTeam team);
-  bool isFullTeams() const;
-  void resetColors();
-  void resetTeams();
-  void setHHNum(const HWTeam& team);
-  void setTeamColor(const HWTeam& team);
-  void setInteractivity(bool interactive);
-  QColor getNextColor() const;
-
- signals:
-  void teamColorChanged(const HWTeam&);
-
- public slots:
-  void addTeam(HWTeam team, bool willPlay);
-  void removeTeam(HWTeam team);
-
- private:
-  const int maxHedgehogsPerGame;
-  int overallHedgehogs;
-  QList<QColor> availableColors;
-  QList<QColor>::Iterator currentColor;
-
-  void emitTeamColorChanged(const HWTeam& team);
-
-  QVBoxLayout mainLayout;
-  typedef QMap<HWTeam, QWidget*> tmapTeamToWidget;
-  tmapTeamToWidget teamToWidget;
-  bool nonInteractive;
-};
-
-#endif // _FRAME_TAM_INCLUDED
--- a/QTfrontend/gamecfgwidget.cpp	Wed Sep 28 06:24:10 2011 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,573 +0,0 @@
-/*
- * Hedgewars, a free turn based strategy game
- * Copyright (c) 2006-2011 Andrey Korotaev <unC0Rr@gmail.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <QResizeEvent>
-#include <QGroupBox>
-#include <QCheckBox>
-#include <QGridLayout>
-#include <QSpinBox>
-#include <QLabel>
-#include <QMessageBox>
-#include <QTableView>
-#include <QPushButton>
-
-#include "gamecfgwidget.h"
-#include "igbox.h"
-#include "hwconsts.h"
-#include "ammoSchemeModel.h"
-#include "proto.h"
-
-GameCFGWidget::GameCFGWidget(QWidget* parent) :
-  QGroupBox(parent)
-  , mainLayout(this)
-  , seedRegexp("\\{[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\\}")
-{
-    mainLayout.setMargin(0);
-//  mainLayout.setSizeConstraint(QLayout::SetMinimumSize);
-
-    pMapContainer = new HWMapContainer(this);
-    mainLayout.addWidget(pMapContainer, 0, 0);
-
-    IconedGroupBox *GBoxOptions = new IconedGroupBox(this);
-    GBoxOptions->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
-    mainLayout.addWidget(GBoxOptions, 1, 0);
-
-    QGridLayout *GBoxOptionsLayout = new QGridLayout(GBoxOptions);
-
-    GBoxOptions->setTitle(tr("Game Options"));
-    GBoxOptionsLayout->addWidget(new QLabel(QLabel::tr("Style"), GBoxOptions), 1, 0);
-
-    Scripts = new QComboBox(GBoxOptions);
-    GBoxOptionsLayout->addWidget(Scripts, 1, 1);
-
-    Scripts->addItem("Normal");
-    Scripts->insertSeparator(1);
-
-    for (int i = 0; i < scriptList->size(); ++i) {
-        QString script = (*scriptList)[i].remove(".lua", Qt::CaseInsensitive);
-        QList<QVariant> scriptInfo;
-        scriptInfo.push_back(script);
-        QFile scriptCfgFile;
-        scriptCfgFile.setFileName(QString("%1/Data/Scripts/Multiplayer/%2.cfg").arg(cfgdir->absolutePath()).arg(script));
-        if (!scriptCfgFile.exists()) scriptCfgFile.setFileName(QString("%1/Scripts/Multiplayer/%2.cfg").arg(datadir->absolutePath()).arg(script));
-        if (scriptCfgFile.exists() && scriptCfgFile.open(QFile::ReadOnly)) {
-            QString scheme;
-            QString weapons;
-            QTextStream input(&scriptCfgFile);
-            input >> scheme;
-            input >> weapons;
-            if (scheme.isEmpty())
-                scheme = "locked";
-            scheme.replace("_", " ");
-            if (weapons.isEmpty())
-                weapons = "locked";
-            weapons.replace("_", " ");
-            scriptInfo.push_back(scheme);
-            scriptInfo.push_back(weapons);
-            scriptCfgFile.close();
-        }
-        else
-        {
-            scriptInfo.push_back("locked");
-            scriptInfo.push_back("locked");
-        }
-        Scripts->addItem(script.replace("_", " "), scriptInfo);
-    }
-
-    connect(Scripts, SIGNAL(currentIndexChanged(int)), this, SLOT(scriptChanged(int)));
-
-    QWidget *SchemeWidget = new QWidget(GBoxOptions);
-    GBoxOptionsLayout->addWidget(SchemeWidget, 2, 0, 1, 2);
-
-    QGridLayout *SchemeWidgetLayout = new QGridLayout(SchemeWidget);
-    SchemeWidgetLayout->setMargin(0);
-
-    GameSchemes = new QComboBox(SchemeWidget);
-    SchemeWidgetLayout->addWidget(GameSchemes, 0, 2);
-    connect(GameSchemes, SIGNAL(currentIndexChanged(int)), this, SLOT(schemeChanged(int)));
-
-    SchemeWidgetLayout->addWidget(new QLabel(QLabel::tr("Scheme"), SchemeWidget), 0, 0);
-
-    QPixmap pmEdit(":/res/edit.png");
-    
-    QPushButton * goToSchemePage = new QPushButton(SchemeWidget);
-    goToSchemePage->setToolTip(tr("Edit schemes"));
-    goToSchemePage->setIconSize(pmEdit.size());
-    goToSchemePage->setIcon(pmEdit);
-    goToSchemePage->setMaximumWidth(pmEdit.width() + 6);
-    SchemeWidgetLayout->addWidget(goToSchemePage, 0, 3);
-    connect(goToSchemePage, SIGNAL(clicked()), this, SLOT(jumpToSchemes()));
-
-    SchemeWidgetLayout->addWidget(new QLabel(QLabel::tr("Weapons"), SchemeWidget), 1, 0);
-
-    WeaponsName = new QComboBox(SchemeWidget);
-    SchemeWidgetLayout->addWidget(WeaponsName, 1, 2);
-
-    connect(WeaponsName, SIGNAL(currentIndexChanged(int)), this, SLOT(ammoChanged(int)));
-
-    QPushButton * goToWeaponPage = new QPushButton(SchemeWidget);
-    goToWeaponPage->setToolTip(tr("Edit weapons"));
-    goToWeaponPage->setIconSize(pmEdit.size());
-    goToWeaponPage->setIcon(pmEdit);
-    goToWeaponPage->setMaximumWidth(pmEdit.width() + 6);
-    SchemeWidgetLayout->addWidget(goToWeaponPage, 1, 3);
-    connect(goToWeaponPage, SIGNAL(clicked()), this, SLOT(jumpToWeapons()));
-
-    bindEntries = new QCheckBox(SchemeWidget);
-    bindEntries->setToolTip(tr("When this option is enabled selecting a game scheme will auto-select a weapon"));
-    bindEntries->setChecked(true);
-    bindEntries->setMaximumWidth(42);
-    bindEntries->setStyleSheet( "QCheckBox::indicator:checked   { image: url(\":/res/lock.png\"); }"
-                                "QCheckBox::indicator:unchecked { image: url(\":/res/unlock.png\");   }" );
-    SchemeWidgetLayout->addWidget(bindEntries, 0, 1, 0, 1, Qt::AlignVCenter);
-
-    connect(pMapContainer, SIGNAL(seedChanged(const QString &)), this, SLOT(seedChanged(const QString &)));
-    connect(pMapContainer, SIGNAL(mapChanged(const QString &)), this, SLOT(mapChanged(const QString &)));
-    connect(pMapContainer, SIGNAL(mapgenChanged(MapGenerator)), this, SLOT(mapgenChanged(MapGenerator)));
-    connect(pMapContainer, SIGNAL(mazeSizeChanged(int)), this, SLOT(maze_sizeChanged(int)));
-    connect(pMapContainer, SIGNAL(themeChanged(const QString &)), this, SLOT(themeChanged(const QString &)));
-    connect(pMapContainer, SIGNAL(newTemplateFilter(int)), this, SLOT(templateFilterChanged(int)));
-    connect(pMapContainer, SIGNAL(drawMapRequested()), this, SIGNAL(goToDrawMap()));
-    connect(pMapContainer, SIGNAL(drawnMapChanged(const QByteArray &)), this, SLOT(onDrawnMapChanged(const QByteArray &)));
-}
-
-void GameCFGWidget::jumpToSchemes()
-{
-    emit goToSchemes(GameSchemes->currentIndex());
-}
-
-void GameCFGWidget::jumpToWeapons()
-{
-    emit goToWeapons(WeaponsName->currentIndex());
-}
-
-QVariant GameCFGWidget::schemeData(int column) const
-{
-    return GameSchemes->model()->data(GameSchemes->model()->index(GameSchemes->currentIndex(), column));
-}
-
-quint32 GameCFGWidget::getGameFlags() const
-{
-    quint32 result = 0;
-
-    if (schemeData(1).toBool())
-        result |= 0x00001000;       // fort
-    if (schemeData(2).toBool())
-        result |= 0x00000010;       // divide teams
-    if (schemeData(3).toBool())
-        result |= 0x00000004;       // solid land
-    if (schemeData(4).toBool())
-        result |= 0x00000008;       // border
-    if (schemeData(5).toBool())
-        result |= 0x00000020;       // low gravity
-    if (schemeData(6).toBool())
-        result |= 0x00000040;       // laser sight
-    if (schemeData(7).toBool())
-        result |= 0x00000080;       // invulnerable
-    if (schemeData(8).toBool())
-        result |= 0x00000100;       // mines
-    if (schemeData(9).toBool())
-        result |= 0x00000200;       // vampirism
-    if (schemeData(10).toBool())
-        result |= 0x00000400;       // karma
-    if (schemeData(11).toBool())
-        result |= 0x00000800;       // artillery
-    if (schemeData(12).toBool())
-        result |= 0x00002000;       // random
-    if (schemeData(13).toBool())
-        result |= 0x00004000;       // king
-    if (schemeData(14).toBool())
-        result |= 0x00008000;       // place hogs
-    if (schemeData(15).toBool())
-        result |= 0x00010000;       // shared ammo
-    if (schemeData(16).toBool())
-        result |= 0x00020000;       // disable girders
-    if (schemeData(17).toBool())
-        result |= 0x00040000;       // disable land obj
-    if (schemeData(18).toBool())
-        result |= 0x00080000;       // ai survival
-    if (schemeData(19).toBool())
-        result |= 0x00100000;       // infinite attacks
-    if (schemeData(20).toBool())
-        result |= 0x00200000;       // reset weaps
-    if (schemeData(21).toBool())
-        result |= 0x00400000;       // per hog ammo
-    if (schemeData(22).toBool())
-        result |= 0x00800000;       // no wind
-    if (schemeData(23).toBool())
-        result |= 0x01000000;       // more wind
-    if (schemeData(24).toBool())
-        result |= 0x02000000;       // tag team
-    if (schemeData(25).toBool())
-        result |= 0x04000000;       // bottom border
-
-    return result;
-}
-
-quint32 GameCFGWidget::getInitHealth() const
-{
-    return schemeData(28).toInt();
-}
-
-QByteArray GameCFGWidget::getFullConfig() const
-{
-    QList<QByteArray> bcfg;
-    int mapgen = pMapContainer->get_mapgen();
-
-    QString currentMap = pMapContainer->getCurrentMap();
-    if (currentMap.size() > 0)
-    {
-        bcfg << QString("emap " + currentMap).toUtf8();
-        if(pMapContainer->getCurrentIsMission())
-            bcfg << QString("escript Maps/%1/map.lua").arg(currentMap).toUtf8();
-    }
-    bcfg << QString("etheme " + pMapContainer->getCurrentTheme()).toUtf8();
-
-    if (Scripts->currentIndex() > 0)
-    {
-        bcfg << QString("escript Scripts/Multiplayer/%1.lua").arg(Scripts->itemData(Scripts->currentIndex()).toList()[0].toString()).toUtf8();
-    }
-
-    bcfg << QString("eseed " + pMapContainer->getCurrentSeed()).toUtf8();
-    bcfg << QString("e$gmflags %1").arg(getGameFlags()).toUtf8();
-    bcfg << QString("e$damagepct %1").arg(schemeData(26).toInt()).toUtf8();
-    bcfg << QString("e$turntime %1").arg(schemeData(27).toInt() * 1000).toUtf8();
-    bcfg << QString("e$sd_turns %1").arg(schemeData(29).toInt()).toUtf8();
-    bcfg << QString("e$casefreq %1").arg(schemeData(30).toInt()).toUtf8();
-    bcfg << QString("e$minestime %1").arg(schemeData(31).toInt() * 1000).toUtf8();
-    bcfg << QString("e$minesnum %1").arg(schemeData(32).toInt()).toUtf8();
-    bcfg << QString("e$minedudpct %1").arg(schemeData(33).toInt()).toUtf8();
-    bcfg << QString("e$explosives %1").arg(schemeData(34).toInt()).toUtf8();
-    bcfg << QString("e$healthprob %1").arg(schemeData(35).toInt()).toUtf8();
-    bcfg << QString("e$hcaseamount %1").arg(schemeData(36).toInt()).toUtf8();
-    bcfg << QString("e$waterrise %1").arg(schemeData(37).toInt()).toUtf8();
-    bcfg << QString("e$healthdec %1").arg(schemeData(38).toInt()).toUtf8();
-    bcfg << QString("e$ropepct %1").arg(schemeData(39).toInt()).toUtf8();
-    bcfg << QString("e$getawaytime %1").arg(schemeData(40).toInt()).toUtf8();
-    bcfg << QString("e$template_filter %1").arg(pMapContainer->getTemplateFilter()).toUtf8();
-    bcfg << QString("e$mapgen %1").arg(mapgen).toUtf8();
-
-    switch (mapgen)
-    {
-        case MAPGEN_MAZE:
-            bcfg << QString("e$maze_size %1").arg(pMapContainer->getMazeSize()).toUtf8();
-            break;
-
-        case MAPGEN_DRAWN:
-        {
-            QByteArray data = pMapContainer->getDrawnMapData();
-            while(data.size() > 0)
-            {
-                QByteArray tmp = data;
-                tmp.truncate(200);
-                tmp.prepend("edraw ");
-                bcfg << tmp;
-                data.remove(0, 200);
-            }
-            break;
-        }
-        default: ;
-    }
-
-    QByteArray result;
-
-    foreach(QByteArray ba, bcfg)
-        HWProto::addByteArrayToBuffer(result, ba);
-
-    return result;
-}
-
-void GameCFGWidget::setNetAmmo(const QString& name, const QString& ammo)
-{
-    bool illegal = ammo.size() != cDefaultAmmoStore->size();
-    if (illegal)
-        QMessageBox::critical(this, tr("Error"), tr("Illegal ammo scheme"));
-
-    int pos = WeaponsName->findText(name);
-    if ((pos == -1) || illegal) { // prevent from overriding schemes with bad ones
-        WeaponsName->addItem(name, ammo);
-        WeaponsName->setCurrentIndex(WeaponsName->count() - 1);
-    } else {
-        WeaponsName->setItemData(pos, ammo);
-        WeaponsName->setCurrentIndex(pos);
-    }
-}
-
-void GameCFGWidget::fullNetConfig()
-{
-    ammoChanged(WeaponsName->currentIndex());
-
-    seedChanged(pMapContainer->getCurrentSeed());
-    templateFilterChanged(pMapContainer->getTemplateFilter());
-    themeChanged(pMapContainer->getCurrentTheme());
-
-    schemeChanged(GameSchemes->currentIndex());
-    scriptChanged(Scripts->currentIndex());
-
-    mapgenChanged(pMapContainer->get_mapgen());
-    maze_sizeChanged(pMapContainer->getMazeSize());
-
-    // map must be the last
-    QString map = pMapContainer->getCurrentMap();
-    if (map.size())
-        mapChanged(map);
-}
-
-void GameCFGWidget::setParam(const QString & param, const QStringList & slValue)
-{
-    if (slValue.size() == 1)
-    {
-        QString value = slValue[0];
-        if (param == "MAP") {
-            pMapContainer->setMap(value);
-            return;
-        }
-        if (param == "SEED") {
-            pMapContainer->setSeed(value);
-            if (!seedRegexp.exactMatch(value)) {
-                pMapContainer->seedEdit->setVisible(true);
-                }
-            return;
-        }
-        if (param == "THEME") {
-            pMapContainer->setTheme(value);
-            return;
-        }
-        if (param == "TEMPLATE") {
-            pMapContainer->setTemplateFilter(value.toUInt());
-            return;
-        }
-        if (param == "MAPGEN") {
-            pMapContainer->setMapgen((MapGenerator)value.toUInt());
-            return;
-        }
-        if (param == "MAZE_SIZE") {
-            pMapContainer->setMazeSize(value.toUInt());
-            return;
-        }
-        if (param == "SCRIPT") {
-            Scripts->setCurrentIndex(Scripts->findText(value));
-            return;
-        }
-        if (param == "DRAWNMAP") {
-            pMapContainer->setDrawnMapData(qUncompress(QByteArray::fromBase64(slValue[0].toLatin1())));
-            return;
-        }
-    }
-
-    if (slValue.size() == 2)
-    {
-        if (param == "AMMO") {
-            setNetAmmo(slValue[0], slValue[1]);
-            return;
-        }
-    }
-
-    if (slValue.size() == 5)
-    {
-        if (param == "FULLMAPCONFIG")
-        {
-            QString seed = slValue[3];
-            if (!seedRegexp.exactMatch(seed))
-                pMapContainer->seedEdit->setVisible(true);
-
-            pMapContainer->setAllMapParameters(
-                    slValue[0],
-                    (MapGenerator)slValue[1].toUInt(),
-                    slValue[2].toUInt(),
-                    seed,
-                    slValue[4].toUInt()
-                    );
-            return;
-        }
-    }
-
-    qWarning("Got bad config param from net");
-}
-
-void GameCFGWidget::ammoChanged(int index)
-{
-    if (index >= 0) {
-        emit paramChanged(
-            "AMMO",
-            QStringList() << WeaponsName->itemText(index) << WeaponsName->itemData(index).toString()
-        );
-    }
-}
-
-void GameCFGWidget::mapChanged(const QString & value)
-{
-    if(isEnabled() && pMapContainer->getCurrentIsMission())
-    {
-        Scripts->setEnabled(false);
-        Scripts->setCurrentIndex(0);
-
-        if (pMapContainer->getCurrentScheme() == "locked")
-        {
-            GameSchemes->setEnabled(false);
-            GameSchemes->setCurrentIndex(GameSchemes->findText("Default"));
-        }
-        else
-        {
-            GameSchemes->setEnabled(true);
-            int num = GameSchemes->findText(pMapContainer->getCurrentScheme());
-            if (num != -1)
-                GameSchemes->setCurrentIndex(num);
-            else
-                GameSchemes->setCurrentIndex(GameSchemes->findText("Default"));
-        }
-
-        if (pMapContainer->getCurrentWeapons() == "locked")
-        {
-            WeaponsName->setEnabled(false);
-            WeaponsName->setCurrentIndex(WeaponsName->findText("Default"));
-        }
-        else
-        {
-            WeaponsName->setEnabled(true);
-            int num = WeaponsName->findText(pMapContainer->getCurrentWeapons());
-            if (num != -1)
-                WeaponsName->setCurrentIndex(num);
-            else
-                WeaponsName->setCurrentIndex(WeaponsName->findText("Default"));
-        }
-
-        if (pMapContainer->getCurrentScheme() != "locked" && pMapContainer->getCurrentWeapons() != "locked")
-            bindEntries->setEnabled(true);
-        else
-            bindEntries->setEnabled(false);
-    }
-    else
-    {
-        Scripts->setEnabled(true);
-        GameSchemes->setEnabled(true);
-        WeaponsName->setEnabled(true);
-        bindEntries->setEnabled(true);
-    }
-    emit paramChanged("MAP", QStringList(value));
-}
-
-void GameCFGWidget::templateFilterChanged(int value)
-{
-    emit paramChanged("TEMPLATE", QStringList(QString::number(value)));
-}
-
-void GameCFGWidget::seedChanged(const QString & value)
-{
-    emit paramChanged("SEED", QStringList(value));
-}
-
-void GameCFGWidget::themeChanged(const QString & value)
-{
-    emit paramChanged("THEME", QStringList(value));
-}
-
-void GameCFGWidget::schemeChanged(int index)
-{
-    QStringList sl;
-
-    int size = GameSchemes->model()->columnCount();
-    for(int i = 0; i < size; ++i)
-        sl << schemeData(i).toString();
-
-    emit paramChanged("SCHEME", sl);
-
-    if (isEnabled() && bindEntries->isEnabled() && bindEntries->isChecked()) {
-        QString schemeName = GameSchemes->itemText(index);
-        for (int i = 0; i < WeaponsName->count(); i++) {
-             QString weapName = WeaponsName->itemText(i);
-             int res = QString::compare(weapName, schemeName, Qt::CaseSensitive);
-             if (0 == res) {
-                 WeaponsName->setCurrentIndex(i);
-                 emit ammoChanged(i);
-                 break;
-             }
-        }
-    }
-}
-
-void GameCFGWidget::scriptChanged(int index)
-{
-    if(isEnabled() && index > 0)
-    {
-        QString scheme = Scripts->itemData(Scripts->currentIndex()).toList()[1].toString();
-        QString weapons = Scripts->itemData(Scripts->currentIndex()).toList()[2].toString();
-
-        if (scheme == "locked")
-        {
-            GameSchemes->setEnabled(false);
-            GameSchemes->setCurrentIndex(GameSchemes->findText("Default"));
-        }
-        else
-        {
-            GameSchemes->setEnabled(true);
-            int num = GameSchemes->findText(scheme);
-            if (num != -1)
-                GameSchemes->setCurrentIndex(num);
-            else
-                GameSchemes->setCurrentIndex(GameSchemes->findText("Default"));
-        }
-
-        if (weapons == "locked")
-        {
-            WeaponsName->setEnabled(false);
-            WeaponsName->setCurrentIndex(WeaponsName->findText("Default"));
-        }
-        else
-        {
-            WeaponsName->setEnabled(true);
-            int num = WeaponsName->findText(weapons);
-            if (num != -1)
-                WeaponsName->setCurrentIndex(num);
-            else
-                WeaponsName->setCurrentIndex(WeaponsName->findText("Default"));
-        }
-
-        if (scheme != "locked" && weapons != "locked")
-            bindEntries->setEnabled(true);
-        else
-            bindEntries->setEnabled(false);
-    }
-    else
-    {
-        GameSchemes->setEnabled(true);
-        WeaponsName->setEnabled(true);
-        bindEntries->setEnabled(true);
-    }
-    emit paramChanged("SCRIPT", QStringList(Scripts->itemText(index)));
-}
-
-void GameCFGWidget::mapgenChanged(MapGenerator m)
-{
-    emit paramChanged("MAPGEN", QStringList(QString::number(m)));
-}
-
-void GameCFGWidget::maze_sizeChanged(int s)
-{
-    emit paramChanged("MAZE_SIZE", QStringList(QString::number(s)));
-}
-
-void GameCFGWidget::resendSchemeData()
-{
-    schemeChanged(GameSchemes->currentIndex());
-}
-
-void GameCFGWidget::onDrawnMapChanged(const QByteArray & data)
-{
-    emit paramChanged("DRAWNMAP", QStringList(qCompress(data, 9).toBase64()));
-}
--- a/QTfrontend/gamecfgwidget.h	Wed Sep 28 06:24:10 2011 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,87 +0,0 @@
-/*
- * Hedgewars, a free turn based strategy game
- * Copyright (c) 2006-2011 Andrey Korotaev <unC0Rr@gmail.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#ifndef GAMECONFIGWIDGET_H
-#define GAMECONFIGWIDGET_H
-
-#include <QWidget>
-#include <QStringList>
-#include <QGroupBox>
-#include <QSpinBox>
-#include <QRegExp>
-
-#include "mapContainer.h"
-
-class QCheckBox;
-class QVBoxLayout;
-class QLabel;
-class QTableView;
-
-class GameCFGWidget : public QGroupBox
-{
-    Q_OBJECT
-
-public:
-    GameCFGWidget(QWidget* parent);
-    quint32 getGameFlags() const;
-    quint32 getInitHealth() const;
-    QByteArray getFullConfig() const;
-    QComboBox * Scripts;
-    QComboBox * GameSchemes;
-    QComboBox * WeaponsName;
-    HWMapContainer* pMapContainer;
-    QTableView * tv;
-    QVariant schemeData(int column) const;
-
-public slots:
-    void setParam(const QString & param, const QStringList & value);
-    void fullNetConfig();
-    void resendSchemeData();
-
-signals:
-    void paramChanged(const QString & param, const QStringList & value);
-    void goToSchemes(int);
-    void goToWeapons(int);
-    void goToDrawMap();
-
-private slots:
-    void ammoChanged(int index);
-    void mapChanged(const QString &);
-    void templateFilterChanged(int);
-    void seedChanged(const QString &);
-    void themeChanged(const QString &);
-    void schemeChanged(int);
-    void scriptChanged(int);
-    void jumpToSchemes();
-    void jumpToWeapons();
-    void mapgenChanged(MapGenerator m);
-    void maze_sizeChanged(int s);
-    void onDrawnMapChanged(const QByteArray & data);
-
-private:
-    QGridLayout mainLayout;
-    QCheckBox * bindEntries;
-    QString curNetAmmoName;
-    QString curNetAmmo;
-    QRegExp seedRegexp;
-
-    void setNetAmmo(const QString& name, const QString& ammo);
-
-};
-
-#endif // GAMECONFIGWIDGET_H
--- a/QTfrontend/hats.cpp	Wed Sep 28 06:24:10 2011 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,142 +0,0 @@
-/*
- * Hedgewars, a free turn based strategy game
- * Copyright (c) 2008-2011 Andrey Korotaev <unC0Rr@gmail.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <QDir>
-#include <QPixmap>
-#include <QPainter>
-#include "hwconsts.h"
-#include "hwform.h"
-#include "hats.h"
-
-HatsModel::HatsModel(QObject* parent) :
-  QAbstractListModel(parent)
-{
-    QFile hhfile;
-    hhfile.setFileName(cfgdir->absolutePath() + "/Data/Graphics/Hedgehog/Idle.png");
-    if (!hhfile.exists()) hhfile.setFileName(datadir->absolutePath() + "/Graphics/Hedgehog/Idle.png");
-    QPixmap hhpix = QPixmap(QFileInfo(hhfile).absoluteFilePath()).copy(0, 0, 32, 32);
-
-    QDir tmpdir;
-    tmpdir.cd(cfgdir->absolutePath());
-    tmpdir.cd("Data");
-    tmpdir.cd("Graphics");
-    tmpdir.cd("Hats");
-
-    tmpdir.setFilter(QDir::Files);
-
-    QStringList userhatsList = tmpdir.entryList(QStringList("*.png"));
-    for (QStringList::Iterator it = userhatsList.begin(); it != userhatsList.end(); ++it )
-    {
-        QString str = QString(*it).replace(QRegExp("^(.*)\\.png"), "\\1");
-        QPixmap pix(cfgdir->absolutePath() + "/Data/Graphics/Hats/" + str + ".png");
-
-        QPixmap tmppix(32, 37);
-        tmppix.fill(QColor(Qt::transparent));
-
-        QPainter painter(&tmppix);
-        painter.drawPixmap(QPoint(0, 5), hhpix);
-        painter.drawPixmap(QPoint(0, 0), pix.copy(0, 0, 32, 32));
-        if(pix.width() > 32)
-            painter.drawPixmap(QPoint(0, 0), pix.copy(32, 0, 32, 32));
-        painter.end();
-
-        hats.append(qMakePair(str, QIcon(tmppix)));
-    }
-
-    tmpdir.cd(datadir->absolutePath());
-    tmpdir.cd("Graphics");
-    tmpdir.cd("Hats");
-
-    QStringList hatsList = tmpdir.entryList(QStringList("*.png"));
-    for (QStringList::Iterator it = hatsList.begin(); it != hatsList.end(); ++it )
-    {
-        if (userhatsList.contains(*it,Qt::CaseInsensitive)) continue;
-        QString str = (*it).replace(QRegExp("^(.*)\\.png"), "\\1");
-        QPixmap pix(datadir->absolutePath() + "/Graphics/Hats/" + str + ".png");
-
-        QPixmap tmppix(32, 37);
-        tmppix.fill(QColor(Qt::transparent));
-
-        QPainter painter(&tmppix);
-        painter.drawPixmap(QPoint(0, 5), hhpix);
-        painter.drawPixmap(QPoint(0, 0), pix.copy(0, 0, 32, 32));
-        if(pix.width() > 32)
-            painter.drawPixmap(QPoint(0, 0), pix.copy(32, 0, 32, 32));
-        painter.end();
-
-        hats.append(qMakePair(str, QIcon(tmppix)));
-    }
-    // Reserved hats
-    tmpdir.cd("Reserved");
-    hatsList = tmpdir.entryList(QStringList(playerHash+"*.png"));
-    for (QStringList::Iterator it = hatsList.begin(); it != hatsList.end(); ++it )
-    {
-        QString str = (*it).replace(QRegExp("^(.*)\\.png"), "\\1");
-        QPixmap pix(datadir->absolutePath() + "/Graphics/Hats/Reserved/" + str + ".png");
-
-        QPixmap tmppix(32, 37);
-        tmppix.fill(QColor(Qt::transparent));
-
-        QPainter painter(&tmppix);
-        painter.drawPixmap(QPoint(0, 5), hhpix);
-        painter.drawPixmap(QPoint(0, 0), pix.copy(0, 0, 32, 32));
-        painter.end();
-
-        hats.append(qMakePair("Reserved "+str.remove(0,32), QIcon(tmppix)));
-    }
-}
-
-QVariant HatsModel::headerData(int section,
-            Qt::Orientation orientation, int role) const
-{
-    Q_UNUSED(section);
-    Q_UNUSED(orientation);
-    Q_UNUSED(role);
-
-    return QVariant();
-}
-
-int HatsModel::rowCount(const QModelIndex &parent) const
-{
-    if (parent.isValid())
-        return 0;
-    else
-        return hats.size();
-}
-
-/*int HatsModel::columnCount(const QModelIndex & parent) const
-{
-    if (parent.isValid())
-        return 0;
-    else
-        return 2;
-}
-*/
-QVariant HatsModel::data(const QModelIndex &index,
-                         int role) const
-{
-    if (!index.isValid() || index.row() < 0
-        || index.row() >= hats.size()
-        || (role != Qt::DisplayRole && role != Qt::DecorationRole))
-        return QVariant();
-
-    if (role == Qt::DisplayRole)
-        return hats.at(index.row()).first;
-    else // role == Qt::DecorationRole
-        return hats.at(index.row()).second;
-}
--- a/QTfrontend/hats.h	Wed Sep 28 06:24:10 2011 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,44 +0,0 @@
-/*
- * Hedgewars, a free turn based strategy game
- * Copyright (c) 2008-2011 Andrey Korotaev <unC0Rr@gmail.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#ifndef _HATS_INCLUDED
-#define _HATS_INCLUDED
-
-#include <QAbstractListModel>
-#include <QStringList>
-#include <QVector>
-#include <QPair>
-#include <QIcon>
-
-class HatsModel : public QAbstractListModel
-{
-    Q_OBJECT
-
-public:
-    HatsModel(QObject *parent = 0);
-
-    QVariant headerData(int section, Qt::Orientation orientation, int role) const;
-    int rowCount(const QModelIndex & parent) const;
-    //int columnCount(const QModelIndex & parent) const;
-
-    QVariant data(const QModelIndex &index, int role) const;
-protected:
-    QVector<QPair<QString, QIcon> > hats;
-};
-
-#endif // _HATS_INCLUDED
--- a/QTfrontend/hedgehogerWidget.cpp	Wed Sep 28 06:24:10 2011 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,76 +0,0 @@
-/*
- * Hedgewars, a free turn based strategy game
- * Copyright (c) 2006-2008 Ulyanov Igor <iulyanov@gmail.com>
- * Copyright (c) 2008-2011 Andrey Korotaev <unC0Rr@gmail.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include "hedgehogerWidget.h"
-
-#include "frameTeam.h"
-
-CHedgehogerWidget::CHedgehogerWidget(const QImage& im, const QImage& img, QWidget * parent) :
-    ItemNum(im, img, parent, 1)
-{
-  // TODO: maxHedgehogsPerGame doesn't reset properly and won't match map limits for now
-  /*if(parent) {
-    pOurFrameTeams = dynamic_cast<FrameTeams*>(parent->parentWidget());
-  }
-  if(pOurFrameTeams->overallHedgehogs + 4 > pOurFrameTeams->maxHedgehogsPerGame) {
-    numItems = pOurFrameTeams->maxHedgehogsPerGame - pOurFrameTeams->overallHedgehogs;
-  } else numItems = 4;
-  pOurFrameTeams->overallHedgehogs += numItems;*/
-}
-
-void CHedgehogerWidget::incItems()
-{
-  //if (pOurFrameTeams->overallHedgehogs < pOurFrameTeams->maxHedgehogsPerGame) {
-    numItems++;
-    //pOurFrameTeams->overallHedgehogs++;
-    emit hedgehogsNumChanged();
-  //}
-}
-
-void CHedgehogerWidget::decItems()
-{
-  numItems--;
-  //pOurFrameTeams->overallHedgehogs--;
-  emit hedgehogsNumChanged();
-}
-
-CHedgehogerWidget::~CHedgehogerWidget()
-{
-  // TODO: not called?
-  //pOurFrameTeams->overallHedgehogs-=numItems;
-}
-
-void CHedgehogerWidget::setNonInteractive()
-{
-  nonInteractive=true;
-}
-
-void CHedgehogerWidget::setHHNum(unsigned int num)
-{
-  /*unsigned int diff = num - numItems;
-  numItems += diff;
-  pOurFrameTeams->overallHedgehogs += diff;*/
-  numItems = num;
-  repaint();
-}
-
-unsigned char CHedgehogerWidget::getHedgehogsNum() const
-{
-  return numItems;
-}
--- a/QTfrontend/hedgehogerWidget.h	Wed Sep 28 06:24:10 2011 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,50 +0,0 @@
-/*
- * Hedgewars, a free turn based strategy game
- * Copyright (c) 2006-2007 Ulyanov Igor <iulyanov@gmail.com>
- * Copyright (c) 2007-2011 Andrey Korotaev <unC0Rr@gmail.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#ifndef _HEDGEHOGER_WIDGET
-#define _HEDGEHOGER_WIDGET
-
-#include "itemNum.h"
-
-class FrameTeams;
-
-class CHedgehogerWidget : public ItemNum
-{
-  Q_OBJECT
-
- public:
-  CHedgehogerWidget(const QImage& im, const QImage& img, QWidget * parent);
-  virtual ~CHedgehogerWidget();
-  unsigned char getHedgehogsNum() const;
-  void setHHNum (unsigned int num);
-  void setNonInteractive();
-
- signals:
-  void hedgehogsNumChanged();
-
- protected:
-  virtual void incItems();
-  virtual void decItems();
-
- private:
-  CHedgehogerWidget();
-  FrameTeams* pOurFrameTeams;
-};
-
-#endif // _HEDGEHOGER_WIDGET
--- a/QTfrontend/hwmap.cpp	Wed Sep 28 06:24:10 2011 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,91 +0,0 @@
-/*
- * Hedgewars, a free turn based strategy game
- * Copyright (c) 2006-2007 Ulyanov Igor <iulyanov@gmail.com>
- * Copyright (c) 2007-2011 Andrey Korotaev <unC0Rr@gmail.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include "hwconsts.h"
-#include "hwmap.h"
-
-HWMap::HWMap() :
-  TCPBase(false)
-{
-}
-
-HWMap::~HWMap()
-{
-}
-
-void HWMap::getImage(const QString & seed, int filter, MapGenerator mapgen, int maze_size, const QByteArray & drawMapData)
-{
-    m_seed = seed;
-    templateFilter = filter;
-    m_mapgen = mapgen;
-    m_maze_size = maze_size;
-    if(mapgen == MAPGEN_DRAWN) m_drawMapData = drawMapData;
-    Start();
-}
-
-QStringList HWMap::getArguments()
-{
-    QStringList arguments;
-    arguments << cfgdir->absolutePath();
-    arguments << QString("%1").arg(ipc_port);
-    arguments << "landpreview";
-    return arguments;
-}
-
-void HWMap::onClientDisconnect()
-{
-    if (readbuffer.size() == 128 * 32 + 1)
-    {
-        quint8 *buf = (quint8*) readbuffer.constData();
-        QImage im(buf, 256, 128, QImage::Format_Mono);
-        im.setNumColors(2);
-        emit HHLimitReceived(buf[128 * 32]);
-        emit ImageReceived(im);
-    }
-}
-
-void HWMap::SendToClientFirst()
-{
-    SendIPC(QString("eseed %1").arg(m_seed).toUtf8());
-    SendIPC(QString("e$template_filter %1").arg(templateFilter).toUtf8());
-    SendIPC(QString("e$mapgen %1").arg(m_mapgen).toUtf8());
-
-    switch (m_mapgen)
-    {
-        case MAPGEN_MAZE:
-            SendIPC(QString("e$maze_size %1").arg(m_maze_size).toUtf8());
-            break;
-
-        case MAPGEN_DRAWN:
-        {
-            QByteArray data = m_drawMapData;
-            while(data.size() > 0)
-            {
-                QByteArray tmp = data;
-                tmp.truncate(200);
-                SendIPC("edraw " + tmp);
-                data.remove(0, 200);
-            }
-            break;
-        }
-        default: ;
-    }
-
-    SendIPC("!");
-}
--- a/QTfrontend/hwmap.h	Wed Sep 28 06:24:10 2011 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,65 +0,0 @@
-/*
- * Hedgewars, a free turn based strategy game
- * Copyright (c) 2006 Igor Ulyanov <iulyanov@gmail.com>
- * Copyright (c) 2006-2011 Andrey Korotaev <unC0Rr@gmail.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#ifndef _HWMAP_INCLUDED
-#define _HWMAP_INCLUDED
-
-#include <QByteArray>
-#include <QString>
-#include <QImage>
-
-#include "tcpBase.h"
-
-enum MapGenerator
-{
-    MAPGEN_REGULAR,
-    MAPGEN_MAZE,
-    MAPGEN_DRAWN,
-    MAPGEN_MAP
-};
-
-class HWMap : public TCPBase
-{
-  Q_OBJECT
-
- public:
-  HWMap();
-  virtual ~HWMap();
-  void getImage(const QString & seed, int templateFilter, MapGenerator mapgen, int maze_size, const QByteArray & drawMapData);
-
- protected:
-  virtual QStringList getArguments();
-  virtual void onClientDisconnect();
-  virtual void SendToClientFirst();
-
- signals:
-  void ImageReceived(const QImage newImage);
-  void HHLimitReceived(int hhLimit);
-
- private:
-  QString m_seed;
-  int templateFilter;
-  MapGenerator m_mapgen;
-  int m_maze_size;
-  QByteArray m_drawMapData;
-
- private slots:
-};
-
-#endif // _HWMAP_INCLUDED
--- a/QTfrontend/igbox.cpp	Wed Sep 28 06:24:10 2011 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,79 +0,0 @@
-/*
- * Hedgewars, a free turn based strategy game
- * Copyright (c) 2008-2011 Andrey Korotaev <unC0Rr@gmail.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <QPainter>
-#include <QPoint>
-#include <QStylePainter>
-#include <QStyleOptionGroupBox>
-
-#include "igbox.h"
-
-IconedGroupBox::IconedGroupBox(QWidget * parent)
-    : QGroupBox(parent)
-{
-// Has issues with border-radius on children
-//    setAttribute(Qt::WA_PaintOnScreen, true);
-    titleLeftPadding = 49;
-    contentTopPadding = 15;
-}
-
-void IconedGroupBox::setIcon(const QIcon & icon)
-{
-    if (this->icon.isNull())
-        setStyleSheet(QString(
-            "IconedGroupBox{"
-                "margin-top: 46px;"
-                "margin-left: 12px;"
-                "padding: %1px 2px 5px 2px;"
-                "}"
-            "IconedGroupBox::title{"
-                "subcontrol-origin: margin;"
-                "subcontrol-position: top left;"
-                "padding-left: %2px;"
-                "padding-top: %1px;"
-                "text-align: left;"
-                "}"
-                ).arg(contentTopPadding).arg(titleLeftPadding)
-        );
-
-    this->icon = icon;
-    repaint();
-}
-
-void IconedGroupBox::paintEvent(QPaintEvent * event)
-{
-    Q_UNUSED(event);
-
-    QStylePainter painter(this);
-
-    QStyleOptionGroupBox option;
-    initStyleOption(&option);
-    painter.drawComplexControl(QStyle::CC_GroupBox, option);
-
-    icon.paint(&painter, QRect(QPoint(0, 0), icon.actualSize(size())));
-}
-
-void IconedGroupBox::setTitleTextPadding(int px)
-{
-    titleLeftPadding = px;
-}
-
-void IconedGroupBox::setContentTopPadding(int px)
-{
-    contentTopPadding = px;
-}
--- a/QTfrontend/igbox.h	Wed Sep 28 06:24:10 2011 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,44 +0,0 @@
-/*
- * Hedgewars, a free turn based strategy game
- * Copyright (c) 2008-2011 Andrey Korotaev <unC0Rr@gmail.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#ifndef _IGBOX_H
-#define _IGBOX_H
-
-#include <QGroupBox>
-#include <QIcon>
-
-class IconedGroupBox : public QGroupBox
-{
-    Q_OBJECT
-
-public:
-    IconedGroupBox(QWidget * parent = 0);
-
-    void setIcon(const QIcon & icon);
-    void setTitleTextPadding(int px);
-    void setContentTopPadding(int px);
-protected:
-    virtual void paintEvent(QPaintEvent * event);
-
-private:
-    QIcon icon;
-    int titleLeftPadding;
-    int contentTopPadding;
-};
-
-#endif // _IGBOX_H
--- a/QTfrontend/input_ip.cpp	Wed Sep 28 06:24:10 2011 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,68 +0,0 @@
-/*
- * Hedgewars, a free turn based strategy game
- * Copyright (c) 2007-2011 Andrey Korotaev <unC0Rr@gmail.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <QLineEdit>
-#include <QSpinBox>
-#include <QPushButton>
-#include <QGridLayout>
-#include <QLabel>
-
-#include "input_ip.h"
-
-HWHostPortDialog::HWHostPortDialog(QWidget* parent) : QDialog(parent)
-{
-    QGridLayout * layout = new QGridLayout(this);
-
-    QLabel * lbHost = new QLabel(this);
-    lbHost->setText(QLabel::tr("Host:"));
-    layout->addWidget(lbHost, 0, 0);
-
-    QLabel * lbPort = new QLabel(this);
-    lbPort->setText(QLabel::tr("Port:"));
-    layout->addWidget(lbPort, 1, 0);
-
-    leHost = new QLineEdit(this);
-    layout->addWidget(leHost, 0, 1, 1, 2);
-
-    sbPort = new QSpinBox(this);
-    sbPort->setMinimum(0);
-    sbPort->setMaximum(65535);
-    layout->addWidget(sbPort, 1, 1, 1, 2);
-
-    pbDefault = new QPushButton(this);
-    pbDefault->setText(QPushButton::tr("default"));
-    layout->addWidget(pbDefault, 1, 3);
-
-    pbOK = new QPushButton(this);
-    pbOK->setText(QPushButton::tr("OK"));
-    pbOK->setDefault(true);
-    layout->addWidget(pbOK, 3, 1);
-
-    pbCancel = new QPushButton(this);
-    pbCancel->setText(QPushButton::tr("Cancel"));
-    layout->addWidget(pbCancel, 3, 2);
-
-    connect(pbOK, SIGNAL(clicked()), this, SLOT(accept()));
-    connect(pbCancel, SIGNAL(clicked()), this, SLOT(reject()));
-    connect(pbDefault, SIGNAL(clicked()), this, SLOT(setDefaultPort()));
-}
-
-void HWHostPortDialog::setDefaultPort()
-{
-    sbPort->setValue(46631);
-}
--- a/QTfrontend/input_ip.h	Wed Sep 28 06:24:10 2011 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,49 +0,0 @@
-/*
- * Hedgewars, a free turn based strategy game
- * Copyright (c) 2007-2011 Andrey Korotaev <unC0Rr@gmail.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-
-#ifndef INPUT_IP_H
-#define INPUT_IP_H
-
-#include <QDialog>
-#include <QHostAddress>
-
-class QLineEdit;
-class QSpinBox;
-class QPushButton;
-
-class HWHostPortDialog : public QDialog
-{
-    Q_OBJECT
-public:
-    HWHostPortDialog(QWidget* parent = 0);
-
-    QLineEdit* leHost;
-    QSpinBox* sbPort;
-
-private:
-    QPushButton* pbOK;
-    QPushButton* pbCancel;
-    QPushButton * pbDefault;
-
-private slots:
-    void setDefaultPort();
-};
-
-
-#endif // INPUT_IP_H
--- a/QTfrontend/itemNum.cpp	Wed Sep 28 06:24:10 2011 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,114 +0,0 @@
-/*
- * Hedgewars, a free turn based strategy game
- * Copyright (c) 2006-2011 Igor Ulyanov <iulyanov@gmail.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include "itemNum.h"
-#include "hwform.h"
-
-#include <QMouseEvent>
-#include <QPainter>
-
-ItemNum::ItemNum(const QImage& im, const QImage& img, QWidget * parent, unsigned char min, unsigned char max) :
-  QFrame(parent), m_im(im), m_img(img), infinityState(false), nonInteractive(false), minItems(min), maxItems(max),
-  numItems(min+2 >= max ? min : min+2)
-{
-    enabled = true;
-    if(frontendEffects) setAttribute(Qt::WA_PaintOnScreen, true);
-}
-
-ItemNum::~ItemNum()
-{
-}
-
-void ItemNum::mousePressEvent ( QMouseEvent * event )
-{
-  if(nonInteractive) return;
-  if(event->button()==Qt::LeftButton && enabled) {
-    event->accept();
-    if((infinityState && numItems <= maxItems) || (!infinityState && numItems < maxItems)) {
-      incItems();
-    } else {
-      numItems = minItems+1;
-      // appears there's an emit in there
-      decItems();
-    }
-  } else if (event->button()==Qt::RightButton && enabled) {
-    event->accept();
-    if(numItems > minItems) {
-      decItems();
-    } else {
-      numItems = maxItems+(infinityState?0:-1);
-      incItems();
-    }
-  } else {
-    event->ignore();
-    return;
-  }
-  repaint();
-}
-
-QSize ItemNum::sizeHint () const
-{
-  return QSize((maxItems+1)*12, 32);
-}
-
-void ItemNum::paintEvent(QPaintEvent* event)
-{
-  Q_UNUSED(event);
-
-  QPainter painter(this);
-
-  if (numItems==maxItems+1) {
-    QRect target(0, 0, 100, 32);
-    if (enabled) {
-        painter.drawImage(target, QImage(":/res/infinity.png"));
-    } else {
-        painter.drawImage(target, QImage(":/res/infinitygrey.png"));
-    }
-  } else {
-    for(int i=0; i<numItems; i++) {
-      QRect target(11 * i, i % 2, 25, 35);
-      if (enabled) {
-        painter.drawImage(target, m_im);
-      } else {
-        painter.drawImage(target, m_img);
-      }
-    }
-  }
-}
-
-unsigned char ItemNum::getItemsNum() const
-{
-  return numItems;
-}
-
-void ItemNum::setItemsNum(const unsigned char num)
-{
-  numItems=num;
-  repaint();
-}
-
-void ItemNum::setInfinityState(bool value)
-{
-  infinityState=value;
-}
-
-void ItemNum::setEnabled(bool value)
-{
-  enabled=value;
-  repaint();
-}
--- a/QTfrontend/itemNum.h	Wed Sep 28 06:24:10 2011 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,60 +0,0 @@
-/*
- * Hedgewars, a free turn based strategy game
- * Copyright (c) 2006-2011 Igor Ulyanov <iulyanov@gmail.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <QFrame>
-#include <QImage>
-
-#ifndef _ITEM_NUM_INCLUDED
-#define _ITEM_NUM_INCLUDED
-
-class ItemNum : public QFrame
-{
-  Q_OBJECT
-
-  public:
-    void setInfinityState(bool value);
-    void setEnabled(bool value);
-    unsigned char getItemsNum() const;
-    void setItemsNum(const unsigned char num);
-
-  private:
-    QImage m_im;
-    QImage m_img;
-    bool infinityState;
-    bool enabled;
-
-  protected:
-    ItemNum(const QImage& im, const QImage& img, QWidget * parent, unsigned char min=2, unsigned char max=8);
-    virtual QSize sizeHint () const;
-    virtual ~ItemNum()=0;
-
-    bool nonInteractive;
-    unsigned char minItems;
-    unsigned char maxItems;
-    unsigned char numItems;
-
-    // from QWidget
-    virtual void mousePressEvent ( QMouseEvent * event );
-    virtual void paintEvent(QPaintEvent* event);
-
-    // to be implemented in child
-    virtual void incItems()=0;
-    virtual void decItems()=0;
-};
-
-#endif // _ITEM_NUM_INCLUDED
--- a/QTfrontend/misc.cpp	Wed Sep 28 06:24:10 2011 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,19 +0,0 @@
-/*
- * Hedgewars, a free turn based strategy game
- * Copyright (c) 2005-2011 Andrey Korotaev <unC0Rr@gmail.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include "misc.h"
--- a/QTfrontend/misc.h	Wed Sep 28 06:24:10 2011 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,46 +0,0 @@
-/*
- * Hedgewars, a free turn based strategy game
- * Copyright (c) 2005-2011 Andrey Korotaev <unC0Rr@gmail.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#ifndef _MISC_H
-#define _MISC_H
-
-
-#include <QObject>
-#include <QSpinBox>
-
-class FreqSpinBox : public QSpinBox
-{
-    Q_OBJECT
-
-public:
-    FreqSpinBox(QWidget* parent) : QSpinBox(parent)
-    {
-
-    }
-
-    QString textFromValue(int value) const
-    {
-        if (!value)
-            return tr("Never");
-        else
-            return tr("Every %1 turn", "", value).arg(value);
-    }
-};
-
-
-#endif // _MISC_H
--- a/QTfrontend/namegen.cpp	Wed Sep 28 06:24:10 2011 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,285 +0,0 @@
-/*
- * Hedgewars, a free turn based strategy game
- * Copyright (c) 2009 Martin Minarik <ttsmj@pokec.sk>
- * Copyright (c) 2009-2011 Andrey Korotaev <unC0Rr@gmail.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <QFile>
-#include <QTextStream>
-#include <QStringList>
-#include <QLineEdit>
-#include "namegen.h"
-#include "hwform.h"
-#include "hwconsts.h"
-
-
-HWNamegen::HWNamegen() {}
-
-QList<QStringList> HWNamegen::TypesTeamnames;
-QList<QStringList> HWNamegen::TypesHatnames;
-bool HWNamegen::typesAvailable = false;
-
-
-void HWNamegen::teamRandomNames(HWTeam & team, const bool changeteamname)
-{
-    // load types if not already loaded
-    if (!typesAvailable)
-        if (!loadTypes())
-            return; // abort if loading failed
-
-    // abort if there are no hat types
-    if (TypesHatnames.size() <= 0)
-        return;
-
-    // the hat will influence which names the hogs get
-    int kind = (rand()%(TypesHatnames.size()));
-
-    // pick team name based on hat
-    if (changeteamname)
-    {
-        if (TypesTeamnames[kind].size() > 0)
-            team.setName(TypesTeamnames[kind][rand()%(TypesTeamnames[kind].size())]);
-
-        team.setGrave(getRandomGrave());
-        team.setFort(getRandomFort());
-        team.setVoicepack("Default");
-    }
-
-    QStringList dicts;
-    QStringList dict;
-
-    if ((TypesHatnames[kind].size()) <= 0)
-    {
-        dicts = dictsForHat(team.hedgehog(0).Hat);
-        dict  = dictContents(dicts[rand()%(dicts.size())]);
-    }
-
-    for(int i = 0; i < HEDGEHOGS_PER_TEAM; i++)
-    {
-        if ((TypesHatnames[kind].size()) > 0)
-        {
-            HWHog hh = team.hedgehog(i);
-            hh.Hat = TypesHatnames[kind][rand()%(TypesHatnames[kind].size())];
-            team.setHedgehog(i,hh);
-        }
-
-        // there is a chance that this hog has the same hat as the previous one
-        // let's reuse the hat-specific dict in this case
-        if ((i == 0) or (team.hedgehog(i).Hat != team.hedgehog(i-1).Hat))
-        {
-            dicts = dictsForHat(team.hedgehog(i).Hat);
-            dict  = dictContents(dicts[rand()%(dicts.size())]);
-        }
-
-        // give each hedgehog a random name
-        HWNamegen::teamRandomName(team,i,dict);
-    }
-
-}
-
-void HWNamegen::teamRandomName(HWTeam & team, const int HedgehogNumber)
-{
-    QStringList dicts = dictsForHat(team.hedgehog(HedgehogNumber).Hat);
-
-    QStringList dict = dictContents(dicts[rand()%(dicts.size())]);
-
-    teamRandomName(team, HedgehogNumber, dict);
-}
-
-void HWNamegen::teamRandomName(HWTeam & team, const int HedgehogNumber, const QStringList & dict)
-{
-    QStringList namesDict = dict;
-
-    for(int i = 0; i < HEDGEHOGS_PER_TEAM; i++)
-    {
-        namesDict.removeOne(team.hedgehog(i).Name);
-    }
-
-    // if our dict doesn't have any new names we'll have to use duplicates
-    if (namesDict.size() < 1)
-        namesDict = dict;
-
-    HWHog hh = team.hedgehog(HedgehogNumber);
-
-    hh.Name = namesDict[rand()%(namesDict.size())];
-
-    team.setHedgehog(HedgehogNumber, hh);
-}
-
-QStringList HWNamegen::dictContents(const QString filename)
-{
-    QStringList list;
-
-    QFile file;
-
-    // find .cfg to load the names from
-    file.setFileName(QString("%1/Data/Names/%2.txt").arg(cfgdir->absolutePath()).arg(filename));
-    if (!file.exists())
-        file.setFileName(QString("%1/Names/%2.txt").arg(datadir->absolutePath()).arg(filename));
-
-    if (file.open(QIODevice::ReadOnly | QIODevice::Text))
-    {
-
-        QTextStream in(&file);
-        while (!in.atEnd())
-        {
-            QString line = in.readLine();
-            if(!line.isEmpty())
-                list.append(line);
-        }
-    }
-
-    if (list.size() == 0)
-         list.append(filename);
-
-    return list;
-}
-
-
-QStringList HWNamegen::dictsForHat(const QString hatname)
-{
-    QStringList list;
-
-    QFile file;
-
-    // find .cfg to load the names from
-    file.setFileName(QString("%1/Data/Names/%2.cfg").arg(cfgdir->absolutePath()).arg(hatname));
-    if (!file.exists())
-        file.setFileName(QString("%1/Names/%2.cfg").arg(datadir->absolutePath()).arg(hatname));
-
-
-    if (file.open(QIODevice::ReadOnly | QIODevice::Text))
-    {
-        QTextStream in(&file);
-        while (!in.atEnd())
-        {
-            QString line = in.readLine();
-            if(!line.isEmpty())
-                list.append(line);
-        }
-    }
-
-    if (list.size() == 0)
-         list.append(QString("generic"));
-
-    return list;
-}
-
-// loades types from ini files. returns true on success.
-bool HWNamegen::loadTypes()
-{
-    QFile file;
-
-    // find .cfg to load the names from
-    file.setFileName(QString("%1/Data/Names/types.ini").arg(cfgdir->absolutePath()));
-    if (!file.exists())
-        file.setFileName(QString("%1/Names/types.ini").arg(datadir->absolutePath()));
-
-
-    if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
-        return false;
-
-    int counter = 0; //counter starts with 0 (teamnames mode)
-    TypesTeamnames.append(QStringList());
-    TypesHatnames.append(QStringList());
-
-    QTextStream in(&file);
-    while (!in.atEnd())
-    {
-        QString line = in.readLine();
-        if (line == QString("#####"))
-        {
-            counter++; //toggle mode (teamnames || hats)
-            if ((counter%2) == 0)
-            {
-                TypesTeamnames.append(QStringList());
-                TypesHatnames.append(QStringList());
-            }
-        }
-        else if ((line == QString("*****")) || (line == QString("*END*")))
-        {
-            typesAvailable = true;
-            return true; // bye bye
-        }
-        else
-        {
-            if ((counter%2) == 0)
-            {
-                // even => teamnames mode
-                TypesTeamnames[(counter/2)].append(line);
-            }
-            else
-            {
-                // odd => hats mode
-                TypesHatnames[((counter-1)/2)].append(line);
-            }
-        }
-    }
-
-    typesAvailable = true;
-    return true;
-}
-
-
-
-QString HWNamegen::getRandomGrave()
-{
-    QStringList Graves;
-
-    //list all available Graves
-    QDir tmpdir;
-    tmpdir.cd(cfgdir->absolutePath());
-    tmpdir.cd("Data/Graphics/Graves");
-    tmpdir.setFilter(QDir::Files);
-    Graves.append(tmpdir.entryList(QStringList("*.png")).replaceInStrings(QRegExp("^(.*)\\.png"), "\\1"));
-
-    tmpdir.cd(datadir->absolutePath());
-    tmpdir.cd("Graphics/Graves");
-    tmpdir.setFilter(QDir::Files);
-    QStringList tmpList = tmpdir.entryList(QStringList("*.png")).replaceInStrings(QRegExp("^(.*)\\.png"), "\\1");
-    for (QStringList::Iterator it = tmpList.begin(); it != tmpList.end(); ++it) 
-        if (!Graves.contains(*it,Qt::CaseInsensitive)) Graves.append(*it);
-
-    if(Graves.size()==0)
-    {
-        //do some serious error handling
-        return "Error";
-    }
-
-    //pick a random grave
-    return Graves[rand()%(Graves.size())];
-}
-
-QString HWNamegen::getRandomFort()
-{
-    QStringList Forts;
-
-    //list all available Forts
-    QDir tmpdir;
-    tmpdir.cd(datadir->absolutePath());
-    tmpdir.cd("Forts");
-    tmpdir.setFilter(QDir::Files);
-    Forts.append(tmpdir.entryList(QStringList("*L.png")).replaceInStrings(QRegExp("^(.*)L\\.png"), "\\1"));
-
-    if(Forts.size()==0)
-    {
-        //do some serious error handling
-        return "Error";
-    }
-
-    //pick a random fort
-    return Forts[rand()%(Forts.size())];
-}
--- a/QTfrontend/namegen.h	Wed Sep 28 06:24:10 2011 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,53 +0,0 @@
-/*
- * Hedgewars, a free turn based strategy game
- * Copyright (c) 2009 Martin Minarik <ttsmj@pokec.sk>
- * Copyright (c) 2009-2011 Andrey Korotaev <unC0Rr@gmail.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#ifndef NAMEGEN_H
-#define NAMEGEN_H
-
-#include <QString>
-
-class HWForm;
-class HWTeam;
-
-class HWNamegen
-{
-public:
-
-    static void teamRandomName(HWTeam & team, const int HedgehogNumber);
-    static void teamRandomNames(HWTeam & team, const bool changeteamname);
-
-private:
-        HWNamegen();
-
-        static QList<QStringList> TypesTeamnames;
-        static QList<QStringList> TypesHatnames;
-        static bool typesAvailable;
-
-        static bool loadTypes();
-        static QStringList dictContents(const QString filename);
-        static QStringList dictsForHat(const QString hatname);
-
-        static QString getRandomGrave();
-        static QString getRandomFort();
-        static void teamRandomName(HWTeam & team, const int HedgehogNumber, const QStringList & dict);
-};
-
-
-
-#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/QTfrontend/net/hwmap.cpp	Wed Sep 28 19:27:56 2011 +0200
@@ -0,0 +1,91 @@
+/*
+ * Hedgewars, a free turn based strategy game
+ * Copyright (c) 2006-2007 Ulyanov Igor <iulyanov@gmail.com>
+ * Copyright (c) 2007-2011 Andrey Korotaev <unC0Rr@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+ */
+
+#include "hwconsts.h"
+#include "hwmap.h"
+
+HWMap::HWMap() :
+  TCPBase(false)
+{
+}
+
+HWMap::~HWMap()
+{
+}
+
+void HWMap::getImage(const QString & seed, int filter, MapGenerator mapgen, int maze_size, const QByteArray & drawMapData)
+{
+    m_seed = seed;
+    templateFilter = filter;
+    m_mapgen = mapgen;
+    m_maze_size = maze_size;
+    if(mapgen == MAPGEN_DRAWN) m_drawMapData = drawMapData;
+    Start();
+}
+
+QStringList HWMap::getArguments()
+{
+    QStringList arguments;
+    arguments << cfgdir->absolutePath();
+    arguments << QString("%1").arg(ipc_port);
+    arguments << "landpreview";
+    return arguments;
+}
+
+void HWMap::onClientDisconnect()
+{
+    if (readbuffer.size() == 128 * 32 + 1)
+    {
+        quint8 *buf = (quint8*) readbuffer.constData();
+        QImage im(buf, 256, 128, QImage::Format_Mono);
+        im.setNumColors(2);
+        emit HHLimitReceived(buf[128 * 32]);
+        emit ImageReceived(im);
+    }
+}
+
+void HWMap::SendToClientFirst()
+{
+    SendIPC(QString("eseed %1").arg(m_seed).toUtf8());
+    SendIPC(QString("e$template_filter %1").arg(templateFilter).toUtf8());
+    SendIPC(QString("e$mapgen %1").arg(m_mapgen).toUtf8());
+
+    switch (m_mapgen)
+    {
+        case MAPGEN_MAZE:
+            SendIPC(QString("e$maze_size %1").arg(m_maze_size).toUtf8());
+            break;
+
+        case MAPGEN_DRAWN:
+        {
+            QByteArray data = m_drawMapData;
+            while(data.size() > 0)
+            {
+                QByteArray tmp = data;
+                tmp.truncate(200);
+                SendIPC("edraw " + tmp);
+                data.remove(0, 200);
+            }
+            break;
+        }
+        default: ;
+    }
+
+    SendIPC("!");
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/QTfrontend/net/hwmap.h	Wed Sep 28 19:27:56 2011 +0200
@@ -0,0 +1,65 @@
+/*
+ * Hedgewars, a free turn based strategy game
+ * Copyright (c) 2006 Igor Ulyanov <iulyanov@gmail.com>
+ * Copyright (c) 2006-2011 Andrey Korotaev <unC0Rr@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+ */
+
+#ifndef _HWMAP_INCLUDED
+#define _HWMAP_INCLUDED
+
+#include <QByteArray>
+#include <QString>
+#include <QImage>
+
+#include "tcpBase.h"
+
+enum MapGenerator
+{
+    MAPGEN_REGULAR,
+    MAPGEN_MAZE,
+    MAPGEN_DRAWN,
+    MAPGEN_MAP
+};
+
+class HWMap : public TCPBase
+{
+  Q_OBJECT
+
+ public:
+  HWMap();
+  virtual ~HWMap();
+  void getImage(const QString & seed, int templateFilter, MapGenerator mapgen, int maze_size, const QByteArray & drawMapData);
+
+ protected:
+  virtual QStringList getArguments();
+  virtual void onClientDisconnect();
+  virtual void SendToClientFirst();
+
+ signals:
+  void ImageReceived(const QImage newImage);
+  void HHLimitReceived(int hhLimit);
+
+ private:
+  QString m_seed;
+  int templateFilter;
+  MapGenerator m_mapgen;
+  int m_maze_size;
+  QByteArray m_drawMapData;
+
+ private slots:
+};
+
+#endif // _HWMAP_INCLUDED
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/QTfrontend/net/netregister.cpp	Wed Sep 28 19:27:56 2011 +0200
@@ -0,0 +1,31 @@
+/*
+ * Hedgewars, a free turn based strategy game
+ * Copyright (c) 2007-2011 Andrey Korotaev <unC0Rr@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+ */
+
+#include "netregister.h"
+
+HWNetRegisterServer::HWNetRegisterServer(QObject *parent, const QString & descr, quint16 port) :
+  QObject(parent)
+{
+    Q_UNUSED(descr);
+    Q_UNUSED(port);
+}
+
+void HWNetRegisterServer::unregister()
+{
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/QTfrontend/net/netregister.h	Wed Sep 28 19:27:56 2011 +0200
@@ -0,0 +1,35 @@
+/*
+ * Hedgewars, a free turn based strategy game
+ * Copyright (c) 2007-2011 Andrey Korotaev <unC0Rr@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+ */
+
+#ifndef _NET_REGISTER_INCLUDED
+#define _NET_REGISTER_INCLUDED
+
+#include <QObject>
+
+class HWNetRegisterServer : public QObject
+{
+    Q_OBJECT
+
+public:
+    HWNetRegisterServer(QObject *parent, const QString & descr, quint16 port);
+
+public slots:
+    virtual void unregister();
+};
+
+#endif // _NET_REGISTER_INCLUDED
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/QTfrontend/net/netserver.cpp	Wed Sep 28 19:27:56 2011 +0200
@@ -0,0 +1,52 @@
+/*
+ * Hedgewars, a free turn based strategy game
+ * Copyright (c) 2006-2008 Igor Ulyanov <iulyanov@gmail.com>
+ * Copyright (c) 2008-2011 Andrey Korotaev <unC0Rr@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+ */
+
+#include <QMessageBox>
+
+#include "hwconsts.h"
+#include "netserver.h"
+
+HWNetServer::~HWNetServer()
+{
+    StopServer();
+}
+
+bool HWNetServer::StartServer(quint16 port)
+{
+    ds_port = port;
+
+    QStringList params;
+    params << QString("--port=%1").arg(port);
+    params << "--dedicated=False";
+
+    process.start(bindir->absolutePath() + "/hedgewars-server", params);
+
+    return process.waitForStarted(5000);
+}
+
+void HWNetServer::StopServer()
+{
+    process.close();
+}
+
+
+quint16 HWNetServer::getRunningPort() const
+{
+  return ds_port;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/QTfrontend/net/netserver.h	Wed Sep 28 19:27:56 2011 +0200
@@ -0,0 +1,42 @@
+/*
+ * Hedgewars, a free turn based strategy game
+ * Copyright (c) 2006-2008 Igor Ulyanov <iulyanov@gmail.com>
+ * Copyright (c) 2008-2011 Andrey Korotaev <unC0Rr@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+ */
+
+#ifndef _NETSERVER_INCLUDED
+#define _NETSERVER_INCLUDED
+
+#include <QObject>
+#include <QProcess>
+
+class HWNetServer : public QObject
+{
+    Q_OBJECT
+
+public:
+    ~HWNetServer();
+    bool StartServer(quint16 port);
+    void StopServer();
+    QString getRunningHostName() const;
+    quint16 getRunningPort() const;
+
+private:
+    quint16 ds_port;
+    QProcess process;
+};
+
+#endif // _NETSERVER_INCLUDED
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/QTfrontend/net/netudpserver.cpp	Wed Sep 28 19:27:56 2011 +0200
@@ -0,0 +1,51 @@
+/*
+ * Hedgewars, a free turn based strategy game
+ * Copyright (c) 2007-2008 Igor Ulyanov <iulyanov@gmail.com>
+ * Copyright (c) 2008-2011 Andrey Korotaev <unC0Rr@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+ */
+
+#include <QUdpSocket>
+
+#include "netudpserver.h"
+
+HWNetUdpServer::HWNetUdpServer(QObject *parent, const QString & descr, quint16 port) :
+  HWNetRegisterServer(parent, descr, port),
+  m_descr(descr)
+{
+  pUdpSocket = new QUdpSocket(this);
+  pUdpSocket->bind(46631);
+  connect(pUdpSocket, SIGNAL(readyRead()), this, SLOT(onClientRead()));
+}
+
+void HWNetUdpServer::onClientRead()
+{
+  while (pUdpSocket->hasPendingDatagrams()) {
+    QByteArray datagram;
+    datagram.resize(pUdpSocket->pendingDatagramSize());
+    QHostAddress clientAddr;
+    quint16 clientPort;
+    pUdpSocket->readDatagram(datagram.data(), datagram.size(), &clientAddr, &clientPort);
+    if(datagram.startsWith("hedgewars client")) {
+      // send answer to client
+      pUdpSocket->writeDatagram(QString("hedgewars server\n%1").arg(m_descr).toUtf8(), clientAddr, clientPort);
+    }
+  }
+}
+
+void HWNetUdpServer::unregister()
+{
+  deleteLater();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/QTfrontend/net/netudpserver.h	Wed Sep 28 19:27:56 2011 +0200
@@ -0,0 +1,46 @@
+/*
+ * Hedgewars, a free turn based strategy game
+ * Copyright (c) 2007-2008 Igor Ulyanov <iulyanov@gmail.com>
+ * Copyright (c) 2008-2011 Andrey Korotaev <unC0Rr@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+ */
+
+#ifndef _NET_UDPSERVER_INCLUDED
+#define _NET_UDPSERVER_INCLUDED
+
+#include <QObject>
+#include "netregister.h"
+
+class QUdpSocket;
+
+class HWNetUdpServer : public HWNetRegisterServer
+{
+  Q_OBJECT
+
+ public:
+  HWNetUdpServer(QObject *parent, const QString & descr, quint16 port);
+
+ public slots:
+  void unregister();
+
+ private slots:
+  void onClientRead();
+
+ private:
+  QUdpSocket* pUdpSocket;
+  QString m_descr;
+};
+
+#endif // _NET_UDPSERVER_INCLUDED
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/QTfrontend/net/netudpwidget.cpp	Wed Sep 28 19:27:56 2011 +0200
@@ -0,0 +1,72 @@
+/*
+ * Hedgewars, a free turn based strategy game
+ * Copyright (c) 2007 Igor Ulyanov <iulyanov@gmail.com>
+ * Copyright (c) 2007-2011 Andrey Korotaev <unC0Rr@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+ */
+
+#include <QUdpSocket>
+
+#include "netudpwidget.h"
+
+HWNetUdpModel::HWNetUdpModel(QObject* parent) :
+  HWNetServersModel(parent)
+{
+    pUdpSocket = new QUdpSocket(this);
+
+    pUdpSocket->bind();
+    connect(pUdpSocket, SIGNAL(readyRead()), this, SLOT(onClientRead()));
+}
+
+void HWNetUdpModel::updateList()
+{
+    games.clear();
+
+    reset();
+
+    pUdpSocket->writeDatagram("hedgewars client", QHostAddress::Broadcast, 46631);
+}
+
+void HWNetUdpModel::onClientRead()
+{
+    while (pUdpSocket->hasPendingDatagrams()) {
+        QByteArray datagram;
+        datagram.resize(pUdpSocket->pendingDatagramSize());
+        QHostAddress clientAddr;
+        quint16 clientPort;
+
+        pUdpSocket->readDatagram(datagram.data(), datagram.size(), &clientAddr, &clientPort);
+
+        QString packet = QString::fromUtf8(datagram.data());
+        if(packet.startsWith("hedgewars server")) {
+            QStringList sl;
+            sl << packet.remove(0, 17) << clientAddr.toString() << "46631";
+            games.append(sl);
+        }
+    }
+
+    reset();
+}
+
+QVariant HWNetUdpModel::data(const QModelIndex &index,
+                             int role) const
+{
+    if (!index.isValid() || index.row() < 0
+        || index.row() >= games.size()
+        || role != Qt::DisplayRole)
+    return QVariant();
+
+    return games[index.row()][index.column()];
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/QTfrontend/net/netudpwidget.h	Wed Sep 28 19:27:56 2011 +0200
@@ -0,0 +1,46 @@
+/*
+ * Hedgewars, a free turn based strategy game
+ * Copyright (c) 2007 Igor Ulyanov <iulyanov@gmail.com>
+ * Copyright (c) 2007-2011 Andrey Korotaev <unC0Rr@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+ */
+
+#ifndef _NET_UDPWIDGET_INCLUDED
+#define _NET_UDPWIDGET_INCLUDED
+
+#include "netserverslist.h"
+
+class QUdpSocket;
+
+class HWNetUdpModel : public HWNetServersModel
+{
+  Q_OBJECT
+
+public:
+    HWNetUdpModel(QObject *parent = 0);
+
+    QVariant data(const QModelIndex &index, int role) const;
+
+public slots:
+    void updateList();
+
+private slots:
+    void onClientRead();
+
+private:
+    QUdpSocket* pUdpSocket;
+};
+
+#endif // _NET_UDPWIDGET_INCLUDED
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/QTfrontend/net/newnetclient.cpp	Wed Sep 28 19:27:56 2011 +0200
@@ -0,0 +1,790 @@
+/*
+ * Hedgewars, a free turn based strategy game
+ * Copyright (c) 2006-2008 Igor Ulyanov <iulyanov@gmail.com>
+ * Copyright (c) 2008-2011 Andrey Korotaev <unC0Rr@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+ */
+
+#include <QDebug>
+#include <QInputDialog>
+#include <QCryptographicHash>
+
+#include "hwconsts.h"
+#include "newnetclient.h"
+#include "proto.h"
+#include "game.h"
+#include "misc.h"
+/* only to get the ignoreList from the chat widget */
+#include "hwform.h"
+#include "chatwidget.h"
+
+char delimeter='\n';
+
+HWNewNet::HWNewNet() :
+  isChief(false),
+  m_game_connected(false),
+  loginStep(0),
+  netClientState(Disconnected)
+{
+// socket stuff
+    connect(&NetSocket, SIGNAL(readyRead()), this, SLOT(ClientRead()));
+    connect(&NetSocket, SIGNAL(connected()), this, SLOT(OnConnect()));
+    connect(&NetSocket, SIGNAL(disconnected()), this, SLOT(OnDisconnect()));
+    connect(&NetSocket, SIGNAL(error(QAbstractSocket::SocketError)), this,
+            SLOT(displayError(QAbstractSocket::SocketError)));
+}
+
+HWNewNet::~HWNewNet()
+{
+    if (m_game_connected)
+    {
+        RawSendNet(QString("QUIT%1%2").arg(delimeter).arg("User quit"));
+        emit disconnected(tr("User quit"));
+    }
+    NetSocket.flush();
+}
+
+void HWNewNet::Connect(const QString & hostName, quint16 port, const QString & nick)
+{
+    netClientState = Connecting;
+    mynick = nick;
+    myhost = hostName + QString(":%1").arg(port);
+    NetSocket.connectToHost(hostName, port);
+}
+
+void HWNewNet::Disconnect()
+{
+    if (m_game_connected)
+        RawSendNet(QString("QUIT%1%2").arg(delimeter).arg("User quit"));
+    m_game_connected = false;
+
+    NetSocket.disconnectFromHost();
+}
+
+void HWNewNet::CreateRoom(const QString & room)
+{
+    if(netClientState != InLobby)
+    {
+        qWarning("Illegal try to create room!");
+        return;
+    }
+
+    myroom = room;
+
+    RawSendNet(QString("CREATE_ROOM%1%2").arg(delimeter).arg(room));
+    isChief = true;
+}
+
+void HWNewNet::JoinRoom(const QString & room)
+{
+    if(netClientState != InLobby)
+    {
+        qWarning("Illegal try to join room!");
+        return;
+    }
+
+    myroom = room;
+
+    RawSendNet(QString("JOIN_ROOM%1%2").arg(delimeter).arg(room));
+    isChief = false;
+}
+
+void HWNewNet::AddTeam(const HWTeam & team)
+{
+    QString cmd = QString("ADD_TEAM") + delimeter +
+         team.name() + delimeter +
+         team.color().name() + delimeter +
+         team.grave() + delimeter +
+         team.fort() + delimeter +
+         team.voicepack() + delimeter +
+         team.flag() + delimeter +
+         QString::number(team.difficulty());
+
+    for(int i = 0; i < HEDGEHOGS_PER_TEAM; ++i)
+    {
+        cmd.append(delimeter);
+        cmd.append(team.hedgehog(i).Name);
+        cmd.append(delimeter);
+        cmd.append(team.hedgehog(i).Hat);
+    }
+    RawSendNet(cmd);
+}
+
+void HWNewNet::RemoveTeam(const HWTeam & team)
+{
+    RawSendNet(QString("REMOVE_TEAM") + delimeter + team.name());
+}
+
+void HWNewNet::NewNick(const QString & nick)
+{
+    RawSendNet(QString("NICK%1%2").arg(delimeter).arg(nick));
+}
+
+void HWNewNet::ToggleReady()
+{
+  RawSendNet(QString("TOGGLE_READY"));
+}
+
+void HWNewNet::SendNet(const QByteArray & buf)
+{
+  QString msg = QString(buf.toBase64());
+
+  RawSendNet(QString("EM%1%2").arg(delimeter).arg(msg));
+}
+
+void HWNewNet::RawSendNet(const QString & str)
+{
+  RawSendNet(str.toUtf8());
+}
+
+void HWNewNet::RawSendNet(const QByteArray & buf)
+{
+    qDebug() << "Client: " << QString(buf).split("\n");
+    NetSocket.write(buf);
+    NetSocket.write("\n\n", 2);
+}
+
+void HWNewNet::ClientRead()
+{
+    while (NetSocket.canReadLine()) {
+        QString s = QString::fromUtf8(NetSocket.readLine());
+        if (s.endsWith('\n')) s.chop(1);
+
+        if (s.size() == 0) {
+            ParseCmd(cmdbuf);
+            cmdbuf.clear();
+        } else
+            cmdbuf << s;
+    }
+}
+
+void HWNewNet::OnConnect()
+{
+    netClientState = Connected;
+}
+
+void HWNewNet::OnDisconnect()
+{
+    netClientState = Disconnected;
+    if(m_game_connected) emit disconnected("");
+    m_game_connected = false;
+}
+
+void HWNewNet::displayError(QAbstractSocket::SocketError socketError)
+{
+    m_game_connected = false;
+
+    switch (socketError) {
+        case QAbstractSocket::RemoteHostClosedError:
+            break;
+        case QAbstractSocket::HostNotFoundError:
+            emit disconnected(tr("The host was not found. Please check the host name and port settings."));
+            break;
+        case QAbstractSocket::ConnectionRefusedError:
+            emit disconnected(tr("Connection refused"));
+            break;
+        default:
+            emit disconnected(NetSocket.errorString());
+        }
+}
+
+void HWNewNet::SendPasswordHash(const QString & hash)
+{
+    RawSendNet(QString("PASSWORD%1%2").arg(delimeter).arg(hash));
+}
+
+void HWNewNet::ParseCmd(const QStringList & lst)
+{
+  qDebug() << "Server: " << lst;
+
+    if(!lst.size())
+    {
+        qWarning("Net client: Bad message");
+        return;
+    }
+
+    if (lst[0] == "NICK")
+    {
+        mynick = lst[1];
+        return ;
+    }
+
+    if (lst[0] == "PROTO")
+        return ;
+
+    if (lst[0] == "ERROR") {
+        if (lst.size() == 2)
+            emit Error(lst[1]);
+        else
+            emit Error("Unknown error");
+        return;
+    }
+
+    if (lst[0] == "WARNING") {
+        if (lst.size() == 2)
+            emit Warning(lst[1]);
+        else
+            emit Warning("Unknown warning");
+        return;
+    }
+
+    if (lst[0] == "CONNECTED") {
+        if(lst.size() < 3 || lst[2].toInt() < cMinServerVersion)
+        {
+            // TODO: Warn user, disconnect
+            qWarning() << "Server too old";
+        }
+
+        RawSendNet(QString("NICK%1%2").arg(delimeter).arg(mynick));
+        RawSendNet(QString("PROTO%1%2").arg(delimeter).arg(*cProtoVer));
+        netClientState = Connected;
+        m_game_connected = true;
+        emit adminAccess(false);
+        return;
+    }
+
+    if (lst[0] == "PING") {
+        if (lst.size() > 1)
+            RawSendNet(QString("PONG%1%2").arg(delimeter).arg(lst[1]));
+        else
+            RawSendNet(QString("PONG"));
+        return;
+    }
+
+    if (lst[0] == "ROOMS") {
+        QStringList tmp = lst;
+        tmp.removeFirst();
+        emit roomsList(tmp);
+        return;
+    }
+
+    if (lst[0] == "SERVER_MESSAGE") {
+        if(lst.size() < 2)
+        {
+            qWarning("Net: Empty SERVERMESSAGE message");
+            return;
+        }
+        emit serverMessage(lst[1]);
+        return;
+    }
+
+    if (lst[0] == "CHAT") {
+        if(lst.size() < 3)
+        {
+            qWarning("Net: Empty CHAT message");
+            return;
+        }
+        if (netClientState == InLobby)
+            emit chatStringLobby(lst[1], HWProto::formatChatMsgForFrontend(lst[2]));
+        else
+            emit chatStringFromNet(HWProto::formatChatMsg(lst[1], lst[2]));
+        return;
+    }
+
+    if (lst[0] == "INFO") {
+        if(lst.size() < 5)
+        {
+            qWarning("Net: Malformed INFO message");
+            return;
+        }
+        QStringList tmp = lst;
+        tmp.removeFirst();
+        if (netClientState == InLobby)
+            emit chatStringLobby(tmp.join("\n").prepend('\x01'));
+        else
+            emit chatStringFromNet(tmp.join("\n").prepend('\x01'));
+        return;
+    }
+
+    if (lst[0] == "SERVER_VARS") {
+        QStringList tmp = lst;
+        tmp.removeFirst();
+        while (tmp.size() >= 2)
+        {
+            if(tmp[0] == "MOTD_NEW") emit serverMessageNew(tmp[1]);
+            else if(tmp[0] == "MOTD_OLD") emit serverMessageOld(tmp[1]);
+            else if(tmp[0] == "LATEST_PROTO") emit latestProtocolVar(tmp[1].toInt());
+
+            tmp.removeFirst();
+            tmp.removeFirst();
+        }
+        return;
+    }
+
+    if (lst[0] == "CLIENT_FLAGS")
+    {
+        if(lst.size() < 3 || lst[1].size() < 2)
+        {
+            qWarning("Net: Malformed CLIENT_FLAGS message");
+            return;
+        }
+
+        QString flags = lst[1];
+        bool setFlag = flags[0] == '+';
+
+        while(flags.size() > 1)
+        {
+            flags.remove(0, 1);
+            char c = flags[0].toAscii();
+
+            switch(c)
+            {
+            case 'r':
+                {
+                    for(int i = 2; i < lst.size(); ++i)
+                    {
+                        if (lst[i] == mynick)
+                            emit setMyReadyStatus(setFlag);
+                        emit setReadyStatus(lst[i], setFlag);
+                    }
+                }
+            }
+        }
+
+        return;
+    }
+
+    if (lst[0] == "ADD_TEAM") {
+        if(lst.size() != 24)
+        {
+            qWarning("Net: Bad ADDTEAM message");
+            return;
+        }
+        QStringList tmp = lst;
+        tmp.removeFirst();
+        emit AddNetTeam(tmp);
+        return;
+    }
+
+    if (lst[0] == "REMOVE_TEAM") {
+        if(lst.size() != 2)
+        {
+            qWarning("Net: Bad REMOVETEAM message");
+            return;
+        }
+        emit RemoveNetTeam(HWTeam(lst[1]));
+        return;
+    }
+
+    if(lst[0] == "ROOMABANDONED") {
+        netClientState = InLobby;
+        emit LeftRoom(tr("Room destroyed"));
+        return;
+    }
+
+    if(lst[0] == "KICKED") {
+        netClientState = InLobby;
+        emit LeftRoom(tr("You got kicked"));
+        return;
+    }
+
+    if(lst[0] == "JOINED") {
+        if(lst.size() < 2)
+        {
+            qWarning("Net: Bad JOINED message");
+            return;
+        }
+
+        for(int i = 1; i < lst.size(); ++i)
+        {
+            if (lst[i] == mynick)
+            {
+                netClientState = InRoom;
+                emit EnteredGame();
+                emit roomMaster(isChief);
+                if (isChief)
+                    emit configAsked();
+            }
+
+            emit nickAdded(lst[i], isChief && (lst[i] != mynick));
+            emit chatStringFromNet(tr("%1 *** %2 has joined the room").arg('\x03').arg(lst[i]));
+        }
+        return;
+    }
+
+    if(lst[0] == "LOBBY:JOINED") {
+        if(lst.size() < 2)
+        {
+            qWarning("Net: Bad JOINED message");
+            return;
+        }
+
+        for(int i = 1; i < lst.size(); ++i)
+        {
+            if (lst[i] == mynick)
+            {
+                netClientState = InLobby;
+                RawSendNet(QString("LIST"));
+                emit connected();
+            }
+
+            emit nickAddedLobby(lst[i], false);
+            emit chatStringLobby(lst[i], tr("%1 *** %2 has joined").arg('\x03').arg("|nick|"));
+        }
+        return;
+    }
+
+    if(lst[0] == "LEFT") {
+        if(lst.size() < 2)
+        {
+            qWarning("Net: Bad LEFT message");
+            return;
+        }
+        emit nickRemoved(lst[1]);
+        if (lst.size() < 3)
+            emit chatStringFromNet(tr("%1 *** %2 has left").arg('\x03').arg(lst[1]));
+        else
+            emit chatStringFromNet(tr("%1 *** %2 has left (%3)").arg('\x03').arg(lst[1], lst[2]));
+        return;
+    }
+
+    if(lst[0] == "ROOM") {
+        if(lst.size() < 2)
+        {
+            qWarning("Net: Bad ROOM message");
+            return;
+        }
+        RawSendNet(QString("LIST"));
+        return;
+    }
+
+    if(lst[0] == "LOBBY:LEFT") {
+        if(lst.size() < 2)
+        {
+            qWarning("Net: Bad LOBBY:LEFT message");
+            return;
+        }
+        emit nickRemovedLobby(lst[1]);
+        if (lst.size() < 3)
+            emit chatStringLobby(tr("%1 *** %2 has left").arg('\x03').arg(lst[1]));
+        else
+            emit chatStringLobby(tr("%1 *** %2 has left (%3)").arg('\x03').arg(lst[1], lst[2]));
+        return;
+    }
+
+    if (lst[0] == "RUN_GAME") {
+        netClientState = InGame;
+        emit AskForRunGame();
+        return;
+    }
+
+    if (lst[0] == "ASKPASSWORD") {
+        emit AskForPassword(mynick);
+        return;
+    }
+
+    if (lst[0] == "NOTICE") {
+        if(lst.size() < 2)
+        {
+            qWarning("Net: Bad NOTICE message");
+            return;
+        }
+
+        bool ok;
+        int n = lst[1].toInt(&ok);
+        if(!ok)
+        {
+            qWarning("Net: Bad NOTICE message");
+            return;
+        }
+
+        handleNotice(n);
+
+        return;
+    }
+
+    if (lst[0] == "TEAM_ACCEPTED") {
+        if (lst.size() != 2)
+        {
+            qWarning("Net: Bad TEAM_ACCEPTED message");
+            return;
+        }
+        emit TeamAccepted(lst[1]);
+        return;
+    }
+
+
+    if (lst[0] == "CFG") {
+        if(lst.size() < 3)
+        {
+            qWarning("Net: Bad CFG message");
+            return;
+        }
+        QStringList tmp = lst;
+        tmp.removeFirst();
+        tmp.removeFirst();
+        if (lst[1] == "SCHEME")
+            emit netSchemeConfig(tmp);
+        else
+            emit paramChanged(lst[1], tmp);
+        return;
+    }
+
+    if (lst[0] == "HH_NUM") {
+        if (lst.size() != 3)
+        {
+            qWarning("Net: Bad TEAM_ACCEPTED message");
+            return;
+        }
+        HWTeam tmptm(lst[1]);
+        tmptm.setNumHedgehogs(lst[2].toUInt());
+        emit hhnumChanged(tmptm);
+        return;
+    }
+
+    if (lst[0] == "TEAM_COLOR") {
+        if (lst.size() != 3)
+        {
+            qWarning("Net: Bad TEAM_COLOR message");
+            return;
+        }
+        HWTeam tmptm(lst[1]);
+        tmptm.setColor(QColor(lst[2]));
+        emit teamColorChanged(tmptm);
+        return;
+    }
+
+    if (lst[0] == "EM") {
+        if(lst.size() < 2)
+        {
+            qWarning("Net: Bad EM message");
+            return;
+        }
+        for(int i = 1; i < lst.size(); ++i)
+        {
+            QByteArray em = QByteArray::fromBase64(lst[i].toAscii());
+            emit FromNet(em);
+        }
+        return;
+    }
+
+    if (lst[0] == "BYE") {
+        if (lst.size() < 2)
+        {
+            qWarning("Net: Bad BYE message");
+            return;
+        }
+        if (lst[1] == "Authentication failed")
+        {
+            emit AuthFailed();
+        }
+        m_game_connected = false;
+        Disconnect();
+        emit disconnected(lst[1]);
+        return;
+    }
+
+
+    if (lst[0] == "ADMIN_ACCESS") {
+        emit adminAccess(true);
+        return;
+    }
+
+    if (lst[0] == "ROOM_CONTROL_ACCESS") {
+        if (lst.size() < 2)
+        {
+            qWarning("Net: Bad ROOM_CONTROL_ACCESS message");
+            return;
+        }
+        isChief = (lst[1] != "0");
+        emit roomMaster(isChief);
+        return;
+    }
+
+    qWarning() << "Net: Unknown message:" << lst;
+}
+
+void HWNewNet::onHedgehogsNumChanged(const HWTeam& team)
+{
+    if (isChief)
+    RawSendNet(QString("HH_NUM%1%2%1%3")
+            .arg(delimeter)
+            .arg(team.name())
+            .arg(team.numHedgehogs()));
+}
+
+void HWNewNet::onTeamColorChanged(const HWTeam& team)
+{
+    if (isChief)
+    RawSendNet(QString("TEAM_COLOR%1%2%1%3")
+            .arg(delimeter)
+            .arg(team.name())
+            .arg(team.color().name()));
+}
+
+void HWNewNet::onParamChanged(const QString & param, const QStringList & value)
+{
+    if (isChief)
+        RawSendNet(
+                QString("CFG%1%2%1%3")
+                    .arg(delimeter)
+                    .arg(param)
+                    .arg(value.join(QString(delimeter)))
+                );
+}
+
+void HWNewNet::chatLineToNet(const QString& str)
+{
+    if(str != "") {
+        RawSendNet(QString("CHAT") + delimeter + str);
+        emit(chatStringFromMe(HWProto::formatChatMsg(mynick, str)));
+    }
+}
+
+void HWNewNet::chatLineToLobby(const QString& str)
+{
+    if(str != "") {
+        RawSendNet(QString("CHAT") + delimeter + str);
+        emit(chatStringFromMeLobby(HWProto::formatChatMsg(mynick, str)));
+    }
+}
+
+void HWNewNet::SendTeamMessage(const QString& str)
+{
+    RawSendNet(QString("TEAMCHAT") + delimeter + str);
+}
+
+void HWNewNet::askRoomsList()
+{
+    if(netClientState != InLobby)
+    {
+        qWarning("Illegal try to get rooms list!");
+        return;
+    }
+    RawSendNet(QString("LIST"));
+}
+
+HWNewNet::ClientState HWNewNet::clientState()
+{
+    return netClientState;
+}
+
+QString HWNewNet::getNick()
+{
+    return mynick;
+}
+
+QString HWNewNet::getRoom()
+{
+    return myroom;
+}
+
+QString HWNewNet::getHost()
+{
+    return myhost;
+}
+
+bool HWNewNet::isRoomChief()
+{
+    return isChief;
+}
+
+void HWNewNet::gameFinished(bool correctly)
+{
+    if (netClientState == InGame) netClientState = InRoom;
+    RawSendNet(QString("ROUNDFINISHED%1%2").arg(delimeter).arg(correctly ? "1" : "0"));
+}
+
+void HWNewNet::banPlayer(const QString & nick)
+{
+    RawSendNet(QString("BAN%1%2").arg(delimeter).arg(nick));
+}
+
+void HWNewNet::kickPlayer(const QString & nick)
+{
+    RawSendNet(QString("KICK%1%2").arg(delimeter).arg(nick));
+}
+
+void HWNewNet::infoPlayer(const QString & nick)
+{
+    RawSendNet(QString("INFO%1%2").arg(delimeter).arg(nick));
+}
+
+void HWNewNet::followPlayer(const QString & nick)
+{
+    if (!isInRoom()) {
+        RawSendNet(QString("FOLLOW%1%2").arg(delimeter).arg(nick));
+        isChief = false;
+    }
+}
+
+void HWNewNet::startGame()
+{
+    RawSendNet(QString("START_GAME"));
+}
+
+void HWNewNet::updateRoomName(const QString & name)
+{
+    RawSendNet(QString("ROOM_NAME%1%2").arg(delimeter).arg(name));
+}
+
+
+void HWNewNet::toggleRestrictJoins()
+{
+    RawSendNet(QString("TOGGLE_RESTRICT_JOINS"));
+}
+
+void HWNewNet::toggleRestrictTeamAdds()
+{
+    RawSendNet(QString("TOGGLE_RESTRICT_TEAMS"));
+}
+
+void HWNewNet::clearAccountsCache()
+{
+    RawSendNet(QString("CLEAR_ACCOUNTS_CACHE"));
+}
+
+void HWNewNet::partRoom()
+{
+    netClientState = InLobby;
+    RawSendNet(QString("PART"));
+}
+
+bool HWNewNet::isInRoom()
+{
+    return netClientState >= InRoom;
+}
+
+void HWNewNet::setServerMessageNew(const QString & msg)
+{
+    RawSendNet(QString("SET_SERVER_VAR%1MOTD_NEW%1%2").arg(delimeter).arg(msg));
+}
+
+void HWNewNet::setServerMessageOld(const QString & msg)
+{
+    RawSendNet(QString("SET_SERVER_VAR%1MOTD_OLD%1%2").arg(delimeter).arg(msg));
+}
+
+void HWNewNet::setLatestProtocolVar(int proto)
+{
+    RawSendNet(QString("SET_SERVER_VAR%1LATEST_PROTO%1%2").arg(delimeter).arg(proto));
+}
+
+void HWNewNet::askServerVars()
+{
+    RawSendNet(QString("GET_SERVER_VAR"));
+}
+
+void HWNewNet::handleNotice(int n)
+{
+    switch(n)
+    {
+        case 0:
+        {
+            emit NickTaken(mynick);
+            break;
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/QTfrontend/net/newnetclient.h	Wed Sep 28 19:27:56 2011 +0200
@@ -0,0 +1,177 @@
+/*
+ * Hedgewars, a free turn based strategy game
+ * Copyright (c) 2006-2008 Igor Ulyanov <iulyanov@gmail.com>
+ * Copyright (c) 2008-2011 Andrey Korotaev <unC0Rr@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+ */
+
+#ifndef _NEW_NETCLIENT_INCLUDED
+#define _NEW_NETCLIENT_INCLUDED
+
+#include <QObject>
+#include <QString>
+#include <QTcpSocket>
+#include <QMap>
+
+#include "team.h"
+#include "game.h" // for GameState
+
+class GameUIConfig;
+class GameCFGWidget;
+class TeamSelWidget;
+
+extern char delimeter;
+
+class HWNewNet : public QObject
+{
+  Q_OBJECT
+
+ public:
+  enum ClientState { Disconnected, Connecting, Connected, InLobby, InRoom, InGame };
+
+  HWNewNet();
+  ~HWNewNet();
+  void Connect(const QString & hostName, quint16 port, const QString & nick);
+  void Disconnect();
+  void SendPasswordHash(const QString & hash);
+  void NewNick(const QString & nick);
+  bool isRoomChief();
+  bool isInRoom();
+  ClientState clientState();
+  QString getNick();
+  QString getRoom();
+  QString getHost();
+
+ private:
+  bool isChief;
+  QString mynick;
+  QString myroom;
+  QString myhost;
+  QTcpSocket NetSocket;
+  QString seed;
+  bool m_game_connected;
+
+  template <typename T>
+  void SendCfgStrNet(T a) {
+    QByteArray strmsg;
+    strmsg.append(a);
+    quint8 sz = strmsg.size();
+    QByteArray enginemsg = QByteArray((char *)&sz, 1) + strmsg;
+    QString _msg = delimeter + QString(enginemsg.toBase64());
+    RawSendNet(_msg);
+  }
+
+  template <typename T>
+  void SendCfgStrLoc(T a) {
+    QByteArray strmsg;
+    strmsg.append(QString(a).toUtf8());
+    quint8 sz = strmsg.size();
+    QByteArray enginemsg = QByteArray((char *)&sz, 1) + strmsg;
+    emit FromNet(enginemsg);
+  }
+
+  QStringList cmdbuf;
+
+  void RawSendNet(const QString & buf);
+  void RawSendNet(const QByteArray & buf);
+  void ParseCmd(const QStringList & lst);
+  void handleNotice(int n);
+
+  int loginStep;
+  ClientState netClientState;
+
+ signals:
+  void AskForRunGame();
+  void connected();
+  void disconnected(const QString & reason);
+  void Error(const QString & errmsg);
+  void Warning(const QString & wrnmsg);
+  void AskForPassword(const QString & nick);
+  void NickTaken(const QString & nick);
+  void AuthFailed();
+  void EnteredGame();
+  void LeftRoom(const QString & reason);
+  void nickAdded(const QString& nick, bool notifyNick);
+  void nickRemoved(const QString& nick);
+  void nickAddedLobby(const QString& nick, bool notifyNick);
+  void nickRemovedLobby(const QString& nick);
+  void FromNet(const QByteArray & buf);
+  void adminAccess(bool);
+  void roomMaster(bool);
+
+  void netSchemeConfig(QStringList &);
+  void paramChanged(const QString & param, const QStringList & value);
+  void configAsked();
+
+  void TeamAccepted(const QString&);
+  void AddNetTeam(const HWTeam&);
+  void RemoveNetTeam(const HWTeam&);
+  void hhnumChanged(const HWTeam&);
+  void teamColorChanged(const HWTeam&);
+  void chatStringLobby(const QString&);
+  void chatStringLobby(const QString&, const QString&);
+  void chatStringFromNet(const QString&);
+  void chatStringFromMe(const QString&);
+  void chatStringFromMeLobby(const QString&);
+
+  void roomsList(const QStringList&);
+  void serverMessage(const QString &);
+  void serverMessageNew(const QString &);
+  void serverMessageOld(const QString &);
+  void latestProtocolVar(int);
+
+  void setReadyStatus(const QString & nick, bool isReady);
+  void setMyReadyStatus(bool isReady);
+
+ public slots:
+  void ToggleReady();
+  void chatLineToNet(const QString& str);
+  void chatLineToLobby(const QString& str);
+  void SendTeamMessage(const QString& str);
+  void SendNet(const QByteArray & buf);
+  void AddTeam(const HWTeam & team);
+  void RemoveTeam(const HWTeam& team);
+  void onHedgehogsNumChanged(const HWTeam& team);
+  void onTeamColorChanged(const HWTeam& team);
+  void onParamChanged(const QString & param, const QStringList & value);
+
+  void setServerMessageNew(const QString &);
+  void setServerMessageOld(const QString &);
+  void setLatestProtocolVar(int proto);
+  void askServerVars();
+
+  void JoinRoom(const QString & room);
+  void CreateRoom(const QString & room);
+  void updateRoomName(const QString &);
+  void askRoomsList();
+  void gameFinished(bool correcly);
+  void banPlayer(const QString &);
+  void kickPlayer(const QString &);
+  void infoPlayer(const QString &);
+  void followPlayer(const QString &);
+  void startGame();
+  void toggleRestrictJoins();
+  void toggleRestrictTeamAdds();
+  void partRoom();
+  void clearAccountsCache();
+
+ private slots:
+  void ClientRead();
+  void OnConnect();
+  void OnDisconnect();
+  void displayError(QAbstractSocket::SocketError socketError); 
+};
+
+#endif // _NEW_NETCLIENT_INCLUDED
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/QTfrontend/net/proto.cpp	Wed Sep 28 19:27:56 2011 +0200
@@ -0,0 +1,59 @@
+/*
+ * Hedgewars, a free turn based strategy game
+ * Copyright (c) 2006-2011 Andrey Korotaev <unC0Rr@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+ */
+
+#include "proto.h"
+
+HWProto::HWProto()
+{
+
+}
+
+QByteArray & HWProto::addByteArrayToBuffer(QByteArray & buf, const QByteArray & msg)
+{
+    QByteArray bmsg = msg;
+    bmsg = bmsg.left(250);
+    quint8 sz = bmsg.size();
+    buf.append(QByteArray((char *)&sz, 1));
+    buf.append(bmsg);
+    return buf;
+}
+
+QByteArray & HWProto::addStringToBuffer(QByteArray & buf, const QString & string)
+{
+    return addByteArrayToBuffer(buf, string.toUtf8());
+}
+
+QByteArray & HWProto::addStringListToBuffer(QByteArray & buf, const QStringList & strList)
+{
+    for (int i = 0; i < strList.size(); i++)
+        addStringToBuffer(buf, strList[i]);
+    return buf;
+}
+
+QString HWProto::formatChatMsgForFrontend(const QString & msg)
+{
+    return formatChatMsg("|nick|", msg);
+}
+
+QString HWProto::formatChatMsg(const QString & nick, const QString & msg)
+{
+    if(msg.left(4) == "/me ")
+        return QString("\x02* %1 %2").arg(nick).arg(msg.mid(4));
+    else
+        return QString("\x01%1: %2").arg(nick).arg(msg);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/QTfrontend/net/proto.h	Wed Sep 28 19:27:56 2011 +0200
@@ -0,0 +1,40 @@
+/*
+ * Hedgewars, a free turn based strategy game
+ * Copyright (c) 2006-2011 Andrey Korotaev <unC0Rr@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+ */
+
+#ifndef _PROTO_H
+#define _PROTO_H
+
+#include <QByteArray>
+#include <QString>
+#include <QStringList>
+
+
+class HWProto : public QObject
+{
+    Q_OBJECT
+
+public:
+    HWProto();
+    static QByteArray & addStringToBuffer(QByteArray & buf, const QString & string);
+    static QByteArray & addByteArrayToBuffer(QByteArray & buf, const QByteArray & msg);
+    static QByteArray & addStringListToBuffer(QByteArray & buf, const QStringList & strList);
+    static QString formatChatMsg(const QString & nick, const QString & msg);
+    static QString formatChatMsgForFrontend(const QString & msg);
+};
+
+#endif // _PROTO_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/QTfrontend/net/tcpBase.cpp	Wed Sep 28 19:27:56 2011 +0200
@@ -0,0 +1,166 @@
+/*
+ * Hedgewars, a free turn based strategy game
+ * Copyright (c) 2006-2007 Igor Ulyanov <iulyanov@gmail.com>
+ * Copyright (c) 2007-2011 Andrey Korotaev <unC0Rr@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+ */
+
+#include "tcpBase.h"
+
+#include <QMessageBox>
+#include <QList>
+
+#include <QImage>
+
+#include "hwconsts.h"
+
+QList<TCPBase*> srvsList;
+QPointer<QTcpServer> TCPBase::IPCServer(0);
+
+TCPBase::~TCPBase()
+{
+}
+
+TCPBase::TCPBase(bool demoMode) :
+  m_isDemoMode(demoMode),
+  IPCSocket(0)
+{
+  if(!IPCServer) {
+    IPCServer = new QTcpServer(0);
+    IPCServer->setMaxPendingConnections(1);
+    if (!IPCServer->listen(QHostAddress::LocalHost)) {
+      QMessageBox::critical(0, tr("Error"),
+                tr("Unable to start the server: %1.")
+                .arg(IPCServer->errorString()));
+      exit(0); // FIXME - should be graceful exit here
+    }
+  }
+  ipc_port=IPCServer->serverPort();
+}
+
+void TCPBase::NewConnection()
+{
+  if(IPCSocket) {
+    // connection should be already finished
+    return;
+  }
+  disconnect(IPCServer, SIGNAL(newConnection()), this, SLOT(NewConnection()));
+  IPCSocket = IPCServer->nextPendingConnection();
+  if(!IPCSocket) return;
+  connect(IPCSocket, SIGNAL(disconnected()), this, SLOT(ClientDisconnect()));
+  connect(IPCSocket, SIGNAL(readyRead()), this, SLOT(ClientRead()));
+  SendToClientFirst();
+}
+
+void TCPBase::RealStart()
+{
+  connect(IPCServer, SIGNAL(newConnection()), this, SLOT(NewConnection()));
+  IPCSocket = 0;
+
+  QProcess * process;
+  process = new QProcess;
+  connect(process, SIGNAL(error(QProcess::ProcessError)), this, SLOT(StartProcessError(QProcess::ProcessError)));
+  QStringList arguments=getArguments();
+
+  // redirect everything written on stdout/stderr
+  if(isDevBuild)
+    process->setProcessChannelMode(QProcess::ForwardedChannels);
+  process->start(bindir->absolutePath() + "/hwengine", arguments);
+}
+
+void TCPBase::ClientDisconnect()
+{
+  disconnect(IPCSocket, SIGNAL(readyRead()), this, SLOT(ClientRead()));
+  onClientDisconnect();
+
+  if(srvsList.size()==1) srvsList.pop_front();
+  emit isReadyNow();
+  IPCSocket->deleteLater();
+  deleteLater();
+}
+
+void TCPBase::ClientRead()
+{
+  QByteArray readed=IPCSocket->readAll();
+  if(readed.isEmpty()) return;
+  readbuffer.append(readed);
+  onClientRead();
+}
+
+void TCPBase::StartProcessError(QProcess::ProcessError error)
+{
+  QMessageBox::critical(0, tr("Error"),
+            tr("Unable to run engine: %1 (")
+            .arg(error) + bindir->absolutePath() + "/hwengine)");
+}
+
+void TCPBase::tcpServerReady()
+{
+  disconnect(srvsList.takeFirst(), SIGNAL(isReadyNow()), this, SLOT(tcpServerReady()));
+
+  RealStart();
+}
+
+void TCPBase::Start()
+{
+  if(srvsList.isEmpty()) {
+    srvsList.push_back(this);
+  } else {
+    connect(srvsList.back(), SIGNAL(isReadyNow()), this, SLOT(tcpServerReady()));
+    srvsList.push_back(this);
+    return;
+  }
+
+  RealStart();
+}
+
+void TCPBase::onClientRead()
+{
+}
+
+void TCPBase::onClientDisconnect()
+{
+}
+
+void TCPBase::SendToClientFirst()
+{
+}
+
+void TCPBase::SendIPC(const QByteArray & buf)
+{
+    if (buf.size() > MAXMSGCHARS) return;
+    quint8 len = buf.size();
+    RawSendIPC(QByteArray::fromRawData((char *)&len, 1) + buf);
+}
+
+void TCPBase::RawSendIPC(const QByteArray & buf)
+{
+    if (!IPCSocket)
+    {
+        toSendBuf += buf;
+    } else
+    {
+        if (toSendBuf.size() > 0)
+        {
+            IPCSocket->write(toSendBuf);
+            if(m_isDemoMode) demo.append(toSendBuf);
+            toSendBuf.clear();
+        }
+        if(!buf.isEmpty()) {
+          IPCSocket->write(buf);
+          if(m_isDemoMode) demo.append(buf);
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/QTfrontend/net/tcpBase.h	Wed Sep 28 19:27:56 2011 +0200
@@ -0,0 +1,81 @@
+/*
+ * Hedgewars, a free turn based strategy game
+ * Copyright (c) 2006-2007 Igor Ulyanov <iulyanov@gmail.com>
+ * Copyright (c) 2007-2011 Andrey Korotaev <unC0Rr@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+ */
+
+#ifndef _TCPBASE_INCLUDED
+#define _TCPBASE_INCLUDED
+
+#include <QObject>
+#include <QTcpServer>
+#include <QTcpSocket>
+#include <QByteArray>
+#include <QString>
+#include <QDir>
+#include <QProcess>
+#include <QPointer>
+
+#include <QImage>
+
+#define MAXMSGCHARS 255
+
+class TCPBase : public QObject
+{
+  Q_OBJECT
+
+ public:
+  TCPBase(bool demoMode);
+  virtual ~TCPBase();
+
+ signals:
+  void isReadyNow();
+
+ protected:
+  quint16 ipc_port;
+
+  void Start();
+
+  QByteArray readbuffer;
+
+  QByteArray toSendBuf;
+  QByteArray demo;
+
+  void SendIPC(const QByteArray & buf);
+  void RawSendIPC(const QByteArray & buf);
+
+  virtual QStringList getArguments()=0;
+  virtual void onClientRead();
+  virtual void onClientDisconnect();
+  virtual void SendToClientFirst();
+
+ private:
+  static QPointer<QTcpServer> IPCServer;
+
+  bool m_isDemoMode;
+  void RealStart();
+  QPointer<QTcpSocket> IPCSocket;
+
+ private slots:
+  void NewConnection();
+  void ClientDisconnect();
+  void ClientRead();
+  void StartProcessError(QProcess::ProcessError error);
+
+  void tcpServerReady();
+};
+
+#endif // _TCPBASE_INCLUDED
--- a/QTfrontend/netregister.cpp	Wed Sep 28 06:24:10 2011 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,31 +0,0 @@
-/*
- * Hedgewars, a free turn based strategy game
- * Copyright (c) 2007-2011 Andrey Korotaev <unC0Rr@gmail.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include "netregister.h"
-
-HWNetRegisterServer::HWNetRegisterServer(QObject *parent, const QString & descr, quint16 port) :
-  QObject(parent)
-{
-    Q_UNUSED(descr);
-    Q_UNUSED(port);
-}
-
-void HWNetRegisterServer::unregister()
-{
-
-}
--- a/QTfrontend/netregister.h	Wed Sep 28 06:24:10 2011 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,35 +0,0 @@
-/*
- * Hedgewars, a free turn based strategy game
- * Copyright (c) 2007-2011 Andrey Korotaev <unC0Rr@gmail.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#ifndef _NET_REGISTER_INCLUDED
-#define _NET_REGISTER_INCLUDED
-
-#include <QObject>
-
-class HWNetRegisterServer : public QObject
-{
-    Q_OBJECT
-
-public:
-    HWNetRegisterServer(QObject *parent, const QString & descr, quint16 port);
-
-public slots:
-    virtual void unregister();
-};
-
-#endif // _NET_REGISTER_INCLUDED
--- a/QTfrontend/netserver.cpp	Wed Sep 28 06:24:10 2011 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,52 +0,0 @@
-/*
- * Hedgewars, a free turn based strategy game
- * Copyright (c) 2006-2008 Igor Ulyanov <iulyanov@gmail.com>
- * Copyright (c) 2008-2011 Andrey Korotaev <unC0Rr@gmail.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <QMessageBox>
-
-#include "hwconsts.h"
-#include "netserver.h"
-
-HWNetServer::~HWNetServer()
-{
-    StopServer();
-}
-
-bool HWNetServer::StartServer(quint16 port)
-{
-    ds_port = port;
-
-    QStringList params;
-    params << QString("--port=%1").arg(port);
-    params << "--dedicated=False";
-
-    process.start(bindir->absolutePath() + "/hedgewars-server", params);
-
-    return process.waitForStarted(5000);
-}
-
-void HWNetServer::StopServer()
-{
-    process.close();
-}
-
-
-quint16 HWNetServer::getRunningPort() const
-{
-  return ds_port;
-}
--- a/QTfrontend/netserver.h	Wed Sep 28 06:24:10 2011 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,42 +0,0 @@
-/*
- * Hedgewars, a free turn based strategy game
- * Copyright (c) 2006-2008 Igor Ulyanov <iulyanov@gmail.com>
- * Copyright (c) 2008-2011 Andrey Korotaev <unC0Rr@gmail.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#ifndef _NETSERVER_INCLUDED
-#define _NETSERVER_INCLUDED
-
-#include <QObject>
-#include <QProcess>
-
-class HWNetServer : public QObject
-{
-    Q_OBJECT
-
-public:
-    ~HWNetServer();
-    bool StartServer(quint16 port);
-    void StopServer();
-    QString getRunningHostName() const;
-    quint16 getRunningPort() const;
-
-private:
-    quint16 ds_port;
-    QProcess process;
-};
-
-#endif // _NETSERVER_INCLUDED
--- a/QTfrontend/netserverslist.cpp	Wed Sep 28 06:24:10 2011 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,68 +0,0 @@
-/*
- * Hedgewars, a free turn based strategy game
- * Copyright (c) 2007-2011 Andrey Korotaev <unC0Rr@gmail.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <QUdpSocket>
-#include <QListWidget>
-
-#include "netserverslist.h"
-
-HWNetServersModel::HWNetServersModel(QObject* parent) :
-  QAbstractTableModel(parent)
-{
-
-}
-
-void HWNetServersModel::updateList()
-{
-
-}
-
-QVariant HWNetServersModel::headerData(int section,
-            Qt::Orientation orientation, int role) const
-{
-    if (role != Qt::DisplayRole)
-        return QVariant();
-
-    if (orientation == Qt::Horizontal)
-    {
-        switch (section)
-        {
-            case 0: return tr("Title");
-            case 1: return tr("IP");
-            case 2: return tr("Port");
-            default: return QVariant();
-        }
-    } else
-        return QString("%1").arg(section + 1);
-}
-
-int HWNetServersModel::rowCount(const QModelIndex &parent) const
-{
-    if (parent.isValid())
-        return 0;
-    else
-        return games.size();
-}
-
-int HWNetServersModel::columnCount(const QModelIndex & parent) const
-{
-    if (parent.isValid())
-        return 0;
-    else
-        return 3;
-}
--- a/QTfrontend/netserverslist.h	Wed Sep 28 06:24:10 2011 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,43 +0,0 @@
-/*
- * Hedgewars, a free turn based strategy game
- * Copyright (c) 2007-2011 Andrey Korotaev <unC0Rr@gmail.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#ifndef _NET_SERVERSLIST_INCLUDED
-#define _NET_SERVERSLIST_INCLUDED
-
-#include <QAbstractTableModel>
-#include <QStringList>
-
-class HWNetServersModel : public QAbstractTableModel
-{
-    Q_OBJECT
-
-public:
-    HWNetServersModel(QObject *parent = 0);
-
-    QVariant headerData(int section, Qt::Orientation orientation, int role) const;
-    int rowCount(const QModelIndex & parent) const;
-    int columnCount(const QModelIndex & parent) const;
-
-public slots:
-    virtual void updateList();
-
-protected:
-    QList<QStringList> games;
-};
-
-#endif // _NET_SERVERSLIST_INCLUDED
--- a/QTfrontend/netudpserver.cpp	Wed Sep 28 06:24:10 2011 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,51 +0,0 @@
-/*
- * Hedgewars, a free turn based strategy game
- * Copyright (c) 2007-2008 Igor Ulyanov <iulyanov@gmail.com>
- * Copyright (c) 2008-2011 Andrey Korotaev <unC0Rr@gmail.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <QUdpSocket>
-
-#include "netudpserver.h"
-
-HWNetUdpServer::HWNetUdpServer(QObject *parent, const QString & descr, quint16 port) :
-  HWNetRegisterServer(parent, descr, port),
-  m_descr(descr)
-{
-  pUdpSocket = new QUdpSocket(this);
-  pUdpSocket->bind(46631);
-  connect(pUdpSocket, SIGNAL(readyRead()), this, SLOT(onClientRead()));
-}
-
-void HWNetUdpServer::onClientRead()
-{
-  while (pUdpSocket->hasPendingDatagrams()) {
-    QByteArray datagram;
-    datagram.resize(pUdpSocket->pendingDatagramSize());
-    QHostAddress clientAddr;
-    quint16 clientPort;
-    pUdpSocket->readDatagram(datagram.data(), datagram.size(), &clientAddr, &clientPort);
-    if(datagram.startsWith("hedgewars client")) {
-      // send answer to client
-      pUdpSocket->writeDatagram(QString("hedgewars server\n%1").arg(m_descr).toUtf8(), clientAddr, clientPort);
-    }
-  }
-}
-
-void HWNetUdpServer::unregister()
-{
-  deleteLater();
-}
--- a/QTfrontend/netudpserver.h	Wed Sep 28 06:24:10 2011 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,46 +0,0 @@
-/*
- * Hedgewars, a free turn based strategy game
- * Copyright (c) 2007-2008 Igor Ulyanov <iulyanov@gmail.com>
- * Copyright (c) 2008-2011 Andrey Korotaev <unC0Rr@gmail.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#ifndef _NET_UDPSERVER_INCLUDED
-#define _NET_UDPSERVER_INCLUDED
-
-#include <QObject>
-#include "netregister.h"
-
-class QUdpSocket;
-
-class HWNetUdpServer : public HWNetRegisterServer
-{
-  Q_OBJECT
-
- public:
-  HWNetUdpServer(QObject *parent, const QString & descr, quint16 port);
-
- public slots:
-  void unregister();
-
- private slots:
-  void onClientRead();
-
- private:
-  QUdpSocket* pUdpSocket;
-  QString m_descr;
-};
-
-#endif // _NET_UDPSERVER_INCLUDED
--- a/QTfrontend/netudpwidget.cpp	Wed Sep 28 06:24:10 2011 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,72 +0,0 @@
-/*
- * Hedgewars, a free turn based strategy game
- * Copyright (c) 2007 Igor Ulyanov <iulyanov@gmail.com>
- * Copyright (c) 2007-2011 Andrey Korotaev <unC0Rr@gmail.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <QUdpSocket>
-
-#include "netudpwidget.h"
-
-HWNetUdpModel::HWNetUdpModel(QObject* parent) :
-  HWNetServersModel(parent)
-{
-    pUdpSocket = new QUdpSocket(this);
-
-    pUdpSocket->bind();
-    connect(pUdpSocket, SIGNAL(readyRead()), this, SLOT(onClientRead()));
-}
-
-void HWNetUdpModel::updateList()
-{
-    games.clear();
-
-    reset();
-
-    pUdpSocket->writeDatagram("hedgewars client", QHostAddress::Broadcast, 46631);
-}
-
-void HWNetUdpModel::onClientRead()
-{
-    while (pUdpSocket->hasPendingDatagrams()) {
-        QByteArray datagram;
-        datagram.resize(pUdpSocket->pendingDatagramSize());
-        QHostAddress clientAddr;
-        quint16 clientPort;
-
-        pUdpSocket->readDatagram(datagram.data(), datagram.size(), &clientAddr, &clientPort);
-
-        QString packet = QString::fromUtf8(datagram.data());
-        if(packet.startsWith("hedgewars server")) {
-            QStringList sl;
-            sl << packet.remove(0, 17) << clientAddr.toString() << "46631";
-            games.append(sl);
-        }
-    }
-
-    reset();
-}
-
-QVariant HWNetUdpModel::data(const QModelIndex &index,
-                             int role) const
-{
-    if (!index.isValid() || index.row() < 0
-        || index.row() >= games.size()
-        || role != Qt::DisplayRole)
-    return QVariant();
-
-    return games[index.row()][index.column()];
-}
--- a/QTfrontend/netudpwidget.h	Wed Sep 28 06:24:10 2011 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,46 +0,0 @@
-/*
- * Hedgewars, a free turn based strategy game
- * Copyright (c) 2007 Igor Ulyanov <iulyanov@gmail.com>
- * Copyright (c) 2007-2011 Andrey Korotaev <unC0Rr@gmail.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#ifndef _NET_UDPWIDGET_INCLUDED
-#define _NET_UDPWIDGET_INCLUDED
-
-#include "netserverslist.h"
-
-class QUdpSocket;
-
-class HWNetUdpModel : public HWNetServersModel
-{
-  Q_OBJECT
-
-public:
-    HWNetUdpModel(QObject *parent = 0);
-
-    QVariant data(const QModelIndex &index, int role) const;
-
-public slots:
-    void updateList();
-
-private slots:
-    void onClientRead();
-
-private:
-    QUdpSocket* pUdpSocket;
-};
-
-#endif // _NET_UDPWIDGET_INCLUDED
--- a/QTfrontend/newnetclient.cpp	Wed Sep 28 06:24:10 2011 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,791 +0,0 @@
-/*
- * Hedgewars, a free turn based strategy game
- * Copyright (c) 2006-2008 Igor Ulyanov <iulyanov@gmail.com>
- * Copyright (c) 2008-2011 Andrey Korotaev <unC0Rr@gmail.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <QDebug>
-#include <QInputDialog>
-#include <QCryptographicHash>
-
-#include "hwconsts.h"
-#include "newnetclient.h"
-#include "proto.h"
-#include "game.h"
-#include "misc.h"
-/* only to get the ignoreList from the chat widget */
-#include "hwform.h"
-#include "pageroomslist.h"
-#include "chatwidget.h"
-
-char delimeter='\n';
-
-HWNewNet::HWNewNet() :
-  isChief(false),
-  m_game_connected(false),
-  loginStep(0),
-  netClientState(Disconnected)
-{
-// socket stuff
-    connect(&NetSocket, SIGNAL(readyRead()), this, SLOT(ClientRead()));
-    connect(&NetSocket, SIGNAL(connected()), this, SLOT(OnConnect()));
-    connect(&NetSocket, SIGNAL(disconnected()), this, SLOT(OnDisconnect()));
-    connect(&NetSocket, SIGNAL(error(QAbstractSocket::SocketError)), this,
-            SLOT(displayError(QAbstractSocket::SocketError)));
-}
-
-HWNewNet::~HWNewNet()
-{
-    if (m_game_connected)
-    {
-        RawSendNet(QString("QUIT%1%2").arg(delimeter).arg("User quit"));
-        emit disconnected(tr("User quit"));
-    }
-    NetSocket.flush();
-}
-
-void HWNewNet::Connect(const QString & hostName, quint16 port, const QString & nick)
-{
-    netClientState = Connecting;
-    mynick = nick;
-    myhost = hostName + QString(":%1").arg(port);
-    NetSocket.connectToHost(hostName, port);
-}
-
-void HWNewNet::Disconnect()
-{
-    if (m_game_connected)
-        RawSendNet(QString("QUIT%1%2").arg(delimeter).arg("User quit"));
-    m_game_connected = false;
-
-    NetSocket.disconnectFromHost();
-}
-
-void HWNewNet::CreateRoom(const QString & room)
-{
-    if(netClientState != InLobby)
-    {
-        qWarning("Illegal try to create room!");
-        return;
-    }
-
-    myroom = room;
-
-    RawSendNet(QString("CREATE_ROOM%1%2").arg(delimeter).arg(room));
-    isChief = true;
-}
-
-void HWNewNet::JoinRoom(const QString & room)
-{
-    if(netClientState != InLobby)
-    {
-        qWarning("Illegal try to join room!");
-        return;
-    }
-
-    myroom = room;
-
-    RawSendNet(QString("JOIN_ROOM%1%2").arg(delimeter).arg(room));
-    isChief = false;
-}
-
-void HWNewNet::AddTeam(const HWTeam & team)
-{
-    QString cmd = QString("ADD_TEAM") + delimeter +
-         team.name() + delimeter +
-         team.color().name() + delimeter +
-         team.grave() + delimeter +
-         team.fort() + delimeter +
-         team.voicepack() + delimeter +
-         team.flag() + delimeter +
-         QString::number(team.difficulty());
-
-    for(int i = 0; i < HEDGEHOGS_PER_TEAM; ++i)
-    {
-        cmd.append(delimeter);
-        cmd.append(team.hedgehog(i).Name);
-        cmd.append(delimeter);
-        cmd.append(team.hedgehog(i).Hat);
-    }
-    RawSendNet(cmd);
-}
-
-void HWNewNet::RemoveTeam(const HWTeam & team)
-{
-    RawSendNet(QString("REMOVE_TEAM") + delimeter + team.name());
-}
-
-void HWNewNet::NewNick(const QString & nick)
-{
-    RawSendNet(QString("NICK%1%2").arg(delimeter).arg(nick));
-}
-
-void HWNewNet::ToggleReady()
-{
-  RawSendNet(QString("TOGGLE_READY"));
-}
-
-void HWNewNet::SendNet(const QByteArray & buf)
-{
-  QString msg = QString(buf.toBase64());
-
-  RawSendNet(QString("EM%1%2").arg(delimeter).arg(msg));
-}
-
-void HWNewNet::RawSendNet(const QString & str)
-{
-  RawSendNet(str.toUtf8());
-}
-
-void HWNewNet::RawSendNet(const QByteArray & buf)
-{
-    qDebug() << "Client: " << QString(buf).split("\n");
-    NetSocket.write(buf);
-    NetSocket.write("\n\n", 2);
-}
-
-void HWNewNet::ClientRead()
-{
-    while (NetSocket.canReadLine()) {
-        QString s = QString::fromUtf8(NetSocket.readLine());
-        if (s.endsWith('\n')) s.chop(1);
-
-        if (s.size() == 0) {
-            ParseCmd(cmdbuf);
-            cmdbuf.clear();
-        } else
-            cmdbuf << s;
-    }
-}
-
-void HWNewNet::OnConnect()
-{
-    netClientState = Connected;
-}
-
-void HWNewNet::OnDisconnect()
-{
-    netClientState = Disconnected;
-    if(m_game_connected) emit disconnected("");
-    m_game_connected = false;
-}
-
-void HWNewNet::displayError(QAbstractSocket::SocketError socketError)
-{
-    m_game_connected = false;
-
-    switch (socketError) {
-        case QAbstractSocket::RemoteHostClosedError:
-            break;
-        case QAbstractSocket::HostNotFoundError:
-            emit disconnected(tr("The host was not found. Please check the host name and port settings."));
-            break;
-        case QAbstractSocket::ConnectionRefusedError:
-            emit disconnected(tr("Connection refused"));
-            break;
-        default:
-            emit disconnected(NetSocket.errorString());
-        }
-}
-
-void HWNewNet::SendPasswordHash(const QString & hash)
-{
-    RawSendNet(QString("PASSWORD%1%2").arg(delimeter).arg(hash));
-}
-
-void HWNewNet::ParseCmd(const QStringList & lst)
-{
-  qDebug() << "Server: " << lst;
-
-    if(!lst.size())
-    {
-        qWarning("Net client: Bad message");
-        return;
-    }
-
-    if (lst[0] == "NICK")
-    {
-        mynick = lst[1];
-        return ;
-    }
-
-    if (lst[0] == "PROTO")
-        return ;
-
-    if (lst[0] == "ERROR") {
-        if (lst.size() == 2)
-            emit Error(lst[1]);
-        else
-            emit Error("Unknown error");
-        return;
-    }
-
-    if (lst[0] == "WARNING") {
-        if (lst.size() == 2)
-            emit Warning(lst[1]);
-        else
-            emit Warning("Unknown warning");
-        return;
-    }
-
-    if (lst[0] == "CONNECTED") {
-        if(lst.size() < 3 || lst[2].toInt() < cMinServerVersion)
-        {
-            // TODO: Warn user, disconnect
-            qWarning() << "Server too old";
-        }
-
-        RawSendNet(QString("NICK%1%2").arg(delimeter).arg(mynick));
-        RawSendNet(QString("PROTO%1%2").arg(delimeter).arg(*cProtoVer));
-        netClientState = Connected;
-        m_game_connected = true;
-        emit adminAccess(false);
-        return;
-    }
-
-    if (lst[0] == "PING") {
-        if (lst.size() > 1)
-            RawSendNet(QString("PONG%1%2").arg(delimeter).arg(lst[1]));
-        else
-            RawSendNet(QString("PONG"));
-        return;
-    }
-
-    if (lst[0] == "ROOMS") {
-        QStringList tmp = lst;
-        tmp.removeFirst();
-        emit roomsList(tmp);
-        return;
-    }
-
-    if (lst[0] == "SERVER_MESSAGE") {
-        if(lst.size() < 2)
-        {
-            qWarning("Net: Empty SERVERMESSAGE message");
-            return;
-        }
-        emit serverMessage(lst[1]);
-        return;
-    }
-
-    if (lst[0] == "CHAT") {
-        if(lst.size() < 3)
-        {
-            qWarning("Net: Empty CHAT message");
-            return;
-        }
-        if (netClientState == InLobby)
-            emit chatStringLobby(lst[1], HWProto::formatChatMsgForFrontend(lst[2]));
-        else
-            emit chatStringFromNet(HWProto::formatChatMsg(lst[1], lst[2]));
-        return;
-    }
-
-    if (lst[0] == "INFO") {
-        if(lst.size() < 5)
-        {
-            qWarning("Net: Malformed INFO message");
-            return;
-        }
-        QStringList tmp = lst;
-        tmp.removeFirst();
-        if (netClientState == InLobby)
-            emit chatStringLobby(tmp.join("\n").prepend('\x01'));
-        else
-            emit chatStringFromNet(tmp.join("\n").prepend('\x01'));
-        return;
-    }
-
-    if (lst[0] == "SERVER_VARS") {
-        QStringList tmp = lst;
-        tmp.removeFirst();
-        while (tmp.size() >= 2)
-        {
-            if(tmp[0] == "MOTD_NEW") emit serverMessageNew(tmp[1]);
-            else if(tmp[0] == "MOTD_OLD") emit serverMessageOld(tmp[1]);
-            else if(tmp[0] == "LATEST_PROTO") emit latestProtocolVar(tmp[1].toInt());
-
-            tmp.removeFirst();
-            tmp.removeFirst();
-        }
-        return;
-    }
-
-    if (lst[0] == "CLIENT_FLAGS")
-    {
-        if(lst.size() < 3 || lst[1].size() < 2)
-        {
-            qWarning("Net: Malformed CLIENT_FLAGS message");
-            return;
-        }
-
-        QString flags = lst[1];
-        bool setFlag = flags[0] == '+';
-
-        while(flags.size() > 1)
-        {
-            flags.remove(0, 1);
-            char c = flags[0].toAscii();
-
-            switch(c)
-            {
-            case 'r':
-                {
-                    for(int i = 2; i < lst.size(); ++i)
-                    {
-                        if (lst[i] == mynick)
-                            emit setMyReadyStatus(setFlag);
-                        emit setReadyStatus(lst[i], setFlag);
-                    }
-                }
-            }
-        }
-
-        return;
-    }
-
-    if (lst[0] == "ADD_TEAM") {
-        if(lst.size() != 24)
-        {
-            qWarning("Net: Bad ADDTEAM message");
-            return;
-        }
-        QStringList tmp = lst;
-        tmp.removeFirst();
-        emit AddNetTeam(tmp);
-        return;
-    }
-
-    if (lst[0] == "REMOVE_TEAM") {
-        if(lst.size() != 2)
-        {
-            qWarning("Net: Bad REMOVETEAM message");
-            return;
-        }
-        emit RemoveNetTeam(HWTeam(lst[1]));
-        return;
-    }
-
-    if(lst[0] == "ROOMABANDONED") {
-        netClientState = InLobby;
-        emit LeftRoom(tr("Room destroyed"));
-        return;
-    }
-
-    if(lst[0] == "KICKED") {
-        netClientState = InLobby;
-        emit LeftRoom(tr("You got kicked"));
-        return;
-    }
-
-    if(lst[0] == "JOINED") {
-        if(lst.size() < 2)
-        {
-            qWarning("Net: Bad JOINED message");
-            return;
-        }
-
-        for(int i = 1; i < lst.size(); ++i)
-        {
-            if (lst[i] == mynick)
-            {
-                netClientState = InRoom;
-                emit EnteredGame();
-                emit roomMaster(isChief);
-                if (isChief)
-                    emit configAsked();
-            }
-
-            emit nickAdded(lst[i], isChief && (lst[i] != mynick));
-            emit chatStringFromNet(tr("%1 *** %2 has joined the room").arg('\x03').arg(lst[i]));
-        }
-        return;
-    }
-
-    if(lst[0] == "LOBBY:JOINED") {
-        if(lst.size() < 2)
-        {
-            qWarning("Net: Bad JOINED message");
-            return;
-        }
-
-        for(int i = 1; i < lst.size(); ++i)
-        {
-            if (lst[i] == mynick)
-            {
-                netClientState = InLobby;
-                RawSendNet(QString("LIST"));
-                emit connected();
-            }
-
-            emit nickAddedLobby(lst[i], false);
-            emit chatStringLobby(lst[i], tr("%1 *** %2 has joined").arg('\x03').arg("|nick|"));
-        }
-        return;
-    }
-
-    if(lst[0] == "LEFT") {
-        if(lst.size() < 2)
-        {
-            qWarning("Net: Bad LEFT message");
-            return;
-        }
-        emit nickRemoved(lst[1]);
-        if (lst.size() < 3)
-            emit chatStringFromNet(tr("%1 *** %2 has left").arg('\x03').arg(lst[1]));
-        else
-            emit chatStringFromNet(tr("%1 *** %2 has left (%3)").arg('\x03').arg(lst[1], lst[2]));
-        return;
-    }
-
-    if(lst[0] == "ROOM") {
-        if(lst.size() < 2)
-        {
-            qWarning("Net: Bad ROOM message");
-            return;
-        }
-        RawSendNet(QString("LIST"));
-        return;
-    }
-
-    if(lst[0] == "LOBBY:LEFT") {
-        if(lst.size() < 2)
-        {
-            qWarning("Net: Bad LOBBY:LEFT message");
-            return;
-        }
-        emit nickRemovedLobby(lst[1]);
-        if (lst.size() < 3)
-            emit chatStringLobby(tr("%1 *** %2 has left").arg('\x03').arg(lst[1]));
-        else
-            emit chatStringLobby(tr("%1 *** %2 has left (%3)").arg('\x03').arg(lst[1], lst[2]));
-        return;
-    }
-
-    if (lst[0] == "RUN_GAME") {
-        netClientState = InGame;
-        emit AskForRunGame();
-        return;
-    }
-
-    if (lst[0] == "ASKPASSWORD") {
-        emit AskForPassword(mynick);
-        return;
-    }
-
-    if (lst[0] == "NOTICE") {
-        if(lst.size() < 2)
-        {
-            qWarning("Net: Bad NOTICE message");
-            return;
-        }
-
-        bool ok;
-        int n = lst[1].toInt(&ok);
-        if(!ok)
-        {
-            qWarning("Net: Bad NOTICE message");
-            return;
-        }
-
-        handleNotice(n);
-
-        return;
-    }
-
-    if (lst[0] == "TEAM_ACCEPTED") {
-        if (lst.size() != 2)
-        {
-            qWarning("Net: Bad TEAM_ACCEPTED message");
-            return;
-        }
-        emit TeamAccepted(lst[1]);
-        return;
-    }
-
-
-    if (lst[0] == "CFG") {
-        if(lst.size() < 3)
-        {
-            qWarning("Net: Bad CFG message");
-            return;
-        }
-        QStringList tmp = lst;
-        tmp.removeFirst();
-        tmp.removeFirst();
-        if (lst[1] == "SCHEME")
-            emit netSchemeConfig(tmp);
-        else
-            emit paramChanged(lst[1], tmp);
-        return;
-    }
-
-    if (lst[0] == "HH_NUM") {
-        if (lst.size() != 3)
-        {
-            qWarning("Net: Bad TEAM_ACCEPTED message");
-            return;
-        }
-        HWTeam tmptm(lst[1]);
-        tmptm.setNumHedgehogs(lst[2].toUInt());
-        emit hhnumChanged(tmptm);
-        return;
-    }
-
-    if (lst[0] == "TEAM_COLOR") {
-        if (lst.size() != 3)
-        {
-            qWarning("Net: Bad TEAM_COLOR message");
-            return;
-        }
-        HWTeam tmptm(lst[1]);
-        tmptm.setColor(QColor(lst[2]));
-        emit teamColorChanged(tmptm);
-        return;
-    }
-
-    if (lst[0] == "EM") {
-        if(lst.size() < 2)
-        {
-            qWarning("Net: Bad EM message");
-            return;
-        }
-        for(int i = 1; i < lst.size(); ++i)
-        {
-            QByteArray em = QByteArray::fromBase64(lst[i].toAscii());
-            emit FromNet(em);
-        }
-        return;
-    }
-
-    if (lst[0] == "BYE") {
-        if (lst.size() < 2)
-        {
-            qWarning("Net: Bad BYE message");
-            return;
-        }
-        if (lst[1] == "Authentication failed")
-        {
-            emit AuthFailed();
-        }
-        m_game_connected = false;
-        Disconnect();
-        emit disconnected(lst[1]);
-        return;
-    }
-
-
-    if (lst[0] == "ADMIN_ACCESS") {
-        emit adminAccess(true);
-        return;
-    }
-
-    if (lst[0] == "ROOM_CONTROL_ACCESS") {
-        if (lst.size() < 2)
-        {
-            qWarning("Net: Bad ROOM_CONTROL_ACCESS message");
-            return;
-        }
-        isChief = (lst[1] != "0");
-        emit roomMaster(isChief);
-        return;
-    }
-
-    qWarning() << "Net: Unknown message:" << lst;
-}
-
-void HWNewNet::onHedgehogsNumChanged(const HWTeam& team)
-{
-    if (isChief)
-    RawSendNet(QString("HH_NUM%1%2%1%3")
-            .arg(delimeter)
-            .arg(team.name())
-            .arg(team.numHedgehogs()));
-}
-
-void HWNewNet::onTeamColorChanged(const HWTeam& team)
-{
-    if (isChief)
-    RawSendNet(QString("TEAM_COLOR%1%2%1%3")
-            .arg(delimeter)
-            .arg(team.name())
-            .arg(team.color().name()));
-}
-
-void HWNewNet::onParamChanged(const QString & param, const QStringList & value)
-{
-    if (isChief)
-        RawSendNet(
-                QString("CFG%1%2%1%3")
-                    .arg(delimeter)
-                    .arg(param)
-                    .arg(value.join(QString(delimeter)))
-                );
-}
-
-void HWNewNet::chatLineToNet(const QString& str)
-{
-    if(str != "") {
-        RawSendNet(QString("CHAT") + delimeter + str);
-        emit(chatStringFromMe(HWProto::formatChatMsg(mynick, str)));
-    }
-}
-
-void HWNewNet::chatLineToLobby(const QString& str)
-{
-    if(str != "") {
-        RawSendNet(QString("CHAT") + delimeter + str);
-        emit(chatStringFromMeLobby(HWProto::formatChatMsg(mynick, str)));
-    }
-}
-
-void HWNewNet::SendTeamMessage(const QString& str)
-{
-    RawSendNet(QString("TEAMCHAT") + delimeter + str);
-}
-
-void HWNewNet::askRoomsList()
-{
-    if(netClientState != InLobby)
-    {
-        qWarning("Illegal try to get rooms list!");
-        return;
-    }
-    RawSendNet(QString("LIST"));
-}
-
-HWNewNet::ClientState HWNewNet::clientState()
-{
-    return netClientState;
-}
-
-QString HWNewNet::getNick()
-{
-    return mynick;
-}
-
-QString HWNewNet::getRoom()
-{
-    return myroom;
-}
-
-QString HWNewNet::getHost()
-{
-    return myhost;
-}
-
-bool HWNewNet::isRoomChief()
-{
-    return isChief;
-}
-
-void HWNewNet::gameFinished(bool correctly)
-{
-    if (netClientState == InGame) netClientState = InRoom;
-    RawSendNet(QString("ROUNDFINISHED%1%2").arg(delimeter).arg(correctly ? "1" : "0"));
-}
-
-void HWNewNet::banPlayer(const QString & nick)
-{
-    RawSendNet(QString("BAN%1%2").arg(delimeter).arg(nick));
-}
-
-void HWNewNet::kickPlayer(const QString & nick)
-{
-    RawSendNet(QString("KICK%1%2").arg(delimeter).arg(nick));
-}
-
-void HWNewNet::infoPlayer(const QString & nick)
-{
-    RawSendNet(QString("INFO%1%2").arg(delimeter).arg(nick));
-}
-
-void HWNewNet::followPlayer(const QString & nick)
-{
-    if (!isInRoom()) {
-        RawSendNet(QString("FOLLOW%1%2").arg(delimeter).arg(nick));
-        isChief = false;
-    }
-}
-
-void HWNewNet::startGame()
-{
-    RawSendNet(QString("START_GAME"));
-}
-
-void HWNewNet::updateRoomName(const QString & name)
-{
-    RawSendNet(QString("ROOM_NAME%1%2").arg(delimeter).arg(name));
-}
-
-
-void HWNewNet::toggleRestrictJoins()
-{
-    RawSendNet(QString("TOGGLE_RESTRICT_JOINS"));
-}
-
-void HWNewNet::toggleRestrictTeamAdds()
-{
-    RawSendNet(QString("TOGGLE_RESTRICT_TEAMS"));
-}
-
-void HWNewNet::clearAccountsCache()
-{
-    RawSendNet(QString("CLEAR_ACCOUNTS_CACHE"));
-}
-
-void HWNewNet::partRoom()
-{
-    netClientState = InLobby;
-    RawSendNet(QString("PART"));
-}
-
-bool HWNewNet::isInRoom()
-{
-    return netClientState >= InRoom;
-}
-
-void HWNewNet::setServerMessageNew(const QString & msg)
-{
-    RawSendNet(QString("SET_SERVER_VAR%1MOTD_NEW%1%2").arg(delimeter).arg(msg));
-}
-
-void HWNewNet::setServerMessageOld(const QString & msg)
-{
-    RawSendNet(QString("SET_SERVER_VAR%1MOTD_OLD%1%2").arg(delimeter).arg(msg));
-}
-
-void HWNewNet::setLatestProtocolVar(int proto)
-{
-    RawSendNet(QString("SET_SERVER_VAR%1LATEST_PROTO%1%2").arg(delimeter).arg(proto));
-}
-
-void HWNewNet::askServerVars()
-{
-    RawSendNet(QString("GET_SERVER_VAR"));
-}
-
-void HWNewNet::handleNotice(int n)
-{
-    switch(n)
-    {
-        case 0:
-        {
-            emit NickTaken(mynick);
-            break;
-        }
-    }
-}
--- a/QTfrontend/newnetclient.h	Wed Sep 28 06:24:10 2011 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,177 +0,0 @@
-/*
- * Hedgewars, a free turn based strategy game
- * Copyright (c) 2006-2008 Igor Ulyanov <iulyanov@gmail.com>
- * Copyright (c) 2008-2011 Andrey Korotaev <unC0Rr@gmail.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#ifndef _NEW_NETCLIENT_INCLUDED
-#define _NEW_NETCLIENT_INCLUDED
-
-#include <QObject>
-#include <QString>
-#include <QTcpSocket>
-#include <QMap>
-
-#include "team.h"
-#include "game.h" // for GameState
-
-class GameUIConfig;
-class GameCFGWidget;
-class TeamSelWidget;
-
-extern char delimeter;
-
-class HWNewNet : public QObject
-{
-  Q_OBJECT
-
- public:
-  enum ClientState { Disconnected, Connecting, Connected, InLobby, InRoom, InGame };
-
-  HWNewNet();
-  ~HWNewNet();
-  void Connect(const QString & hostName, quint16 port, const QString & nick);
-  void Disconnect();
-  void SendPasswordHash(const QString & hash);
-  void NewNick(const QString & nick);
-  bool isRoomChief();
-  bool isInRoom();
-  ClientState clientState();
-  QString getNick();
-  QString getRoom();
-  QString getHost();
-
- private:
-  bool isChief;
-  QString mynick;
-  QString myroom;
-  QString myhost;
-  QTcpSocket NetSocket;
-  QString seed;
-  bool m_game_connected;
-
-  template <typename T>
-  void SendCfgStrNet(T a) {
-    QByteArray strmsg;
-    strmsg.append(a);
-    quint8 sz = strmsg.size();
-    QByteArray enginemsg = QByteArray((char *)&sz, 1) + strmsg;
-    QString _msg = delimeter + QString(enginemsg.toBase64());
-    RawSendNet(_msg);
-  }
-
-  template <typename T>
-  void SendCfgStrLoc(T a) {
-    QByteArray strmsg;
-    strmsg.append(QString(a).toUtf8());
-    quint8 sz = strmsg.size();
-    QByteArray enginemsg = QByteArray((char *)&sz, 1) + strmsg;
-    emit FromNet(enginemsg);
-  }
-
-  QStringList cmdbuf;
-
-  void RawSendNet(const QString & buf);
-  void RawSendNet(const QByteArray & buf);
-  void ParseCmd(const QStringList & lst);
-  void handleNotice(int n);
-
-  int loginStep;
-  ClientState netClientState;
-
- signals:
-  void AskForRunGame();
-  void connected();
-  void disconnected(const QString & reason);
-  void Error(const QString & errmsg);
-  void Warning(const QString & wrnmsg);
-  void AskForPassword(const QString & nick);
-  void NickTaken(const QString & nick);
-  void AuthFailed();
-  void EnteredGame();
-  void LeftRoom(const QString & reason);
-  void nickAdded(const QString& nick, bool notifyNick);
-  void nickRemoved(const QString& nick);
-  void nickAddedLobby(const QString& nick, bool notifyNick);
-  void nickRemovedLobby(const QString& nick);
-  void FromNet(const QByteArray & buf);
-  void adminAccess(bool);
-  void roomMaster(bool);
-
-  void netSchemeConfig(QStringList &);
-  void paramChanged(const QString & param, const QStringList & value);
-  void configAsked();
-
-  void TeamAccepted(const QString&);
-  void AddNetTeam(const HWTeam&);
-  void RemoveNetTeam(const HWTeam&);
-  void hhnumChanged(const HWTeam&);
-  void teamColorChanged(const HWTeam&);
-  void chatStringLobby(const QString&);
-  void chatStringLobby(const QString&, const QString&);
-  void chatStringFromNet(const QString&);
-  void chatStringFromMe(const QString&);
-  void chatStringFromMeLobby(const QString&);
-
-  void roomsList(const QStringList&);
-  void serverMessage(const QString &);
-  void serverMessageNew(const QString &);
-  void serverMessageOld(const QString &);
-  void latestProtocolVar(int);
-
-  void setReadyStatus(const QString & nick, bool isReady);
-  void setMyReadyStatus(bool isReady);
-
- public slots:
-  void ToggleReady();
-  void chatLineToNet(const QString& str);
-  void chatLineToLobby(const QString& str);
-  void SendTeamMessage(const QString& str);
-  void SendNet(const QByteArray & buf);
-  void AddTeam(const HWTeam & team);
-  void RemoveTeam(const HWTeam& team);
-  void onHedgehogsNumChanged(const HWTeam& team);
-  void onTeamColorChanged(const HWTeam& team);
-  void onParamChanged(const QString & param, const QStringList & value);
-
-  void setServerMessageNew(const QString &);
-  void setServerMessageOld(const QString &);
-  void setLatestProtocolVar(int proto);
-  void askServerVars();
-
-  void JoinRoom(const QString & room);
-  void CreateRoom(const QString & room);
-  void updateRoomName(const QString &);
-  void askRoomsList();
-  void gameFinished(bool correcly);
-  void banPlayer(const QString &);
-  void kickPlayer(const QString &);
-  void infoPlayer(const QString &);
-  void followPlayer(const QString &);
-  void startGame();
-  void toggleRestrictJoins();
-  void toggleRestrictTeamAdds();
-  void partRoom();
-  void clearAccountsCache();
-
- private slots:
-  void ClientRead();
-  void OnConnect();
-  void OnDisconnect();
-  void displayError(QAbstractSocket::SocketError socketError); 
-};
-
-#endif // _NEW_NETCLIENT_INCLUDED
--- a/QTfrontend/pageadmin.cpp	Wed Sep 28 06:24:10 2011 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,112 +0,0 @@
-/*
- * Hedgewars, a free turn based strategy game
- * Copyright (c) 2006-2011 Andrey Korotaev <unC0Rr@gmail.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <QGridLayout>
-#include <QLabel>
-#include <QLineEdit>
-#include <QSpinBox>
-#include <QPushButton>
-#include <QTextBrowser>
-
-#include "pageadmin.h"
-#include "chatwidget.h"
-
-QLayout * PageAdmin::bodyLayoutDefinition()
-{
-    QGridLayout * pageLayout = new QGridLayout();
-
-    // 0
-    pbAsk = addButton(tr("Fetch data"), pageLayout, 0, 0, 1, 3);
-    
-    // 1
-    QLabel * lblSMN = new QLabel(this);
-    lblSMN->setText(tr("Server message for latest version:"));
-    pageLayout->addWidget(lblSMN, 1, 0);
-
-    leServerMessageNew = new QLineEdit(this);
-    pageLayout->addWidget(leServerMessageNew, 1, 1);
-
-    // 2
-    QLabel * lblSMO = new QLabel(this);
-    lblSMO->setText(tr("Server message for previous versions:"));
-    pageLayout->addWidget(lblSMO, 2, 0);
-
-    leServerMessageOld = new QLineEdit(this);
-    pageLayout->addWidget(leServerMessageOld, 2, 1);
-
-    // 3
-    QLabel * lblP = new QLabel(this);
-    lblP->setText(tr("Latest version protocol number:"));
-    pageLayout->addWidget(lblP, 3, 0);
-
-    sbProtocol = new QSpinBox(this);
-    pageLayout->addWidget(sbProtocol, 3, 1);
-
-    // 4
-    QLabel * lblPreview = new QLabel(this);
-    lblPreview->setText(tr("MOTD preview:"));
-    pageLayout->addWidget(lblPreview, 4, 0);
-
-    tb = new QTextBrowser(this);
-    tb->setOpenExternalLinks(true);
-    tb->document()->setDefaultStyleSheet(HWChatWidget::STYLE);
-    pageLayout->addWidget(tb, 4, 1, 1, 2);
-    
-    // 5
-    pbClearAccountsCache = addButton(tr("Clear Accounts Cache"), pageLayout, 5, 0);
-    
-    // 6
-    pbSetSM = addButton(tr("Set data"), pageLayout, 6, 0, 1, 3);
-
-    return pageLayout;
-}
-
-void PageAdmin::connectSignals()
-{
-    connect(pbAsk, SIGNAL(clicked()), this, SIGNAL(askServerVars()));
-    connect(leServerMessageNew, SIGNAL(textEdited(const QString &)), tb, SLOT(setHtml(const QString &)));
-    connect(leServerMessageOld, SIGNAL(textEdited(const QString &)), tb, SLOT(setHtml(const QString &)));
-    connect(pbClearAccountsCache, SIGNAL(clicked()), this, SIGNAL(clearAccountsCache()));
-    connect(pbSetSM, SIGNAL(clicked()), this, SLOT(smChanged()));
-}
-
-PageAdmin::PageAdmin(QWidget* parent) : AbstractPage(parent)
-{
-    initPage();
-}
-
-void PageAdmin::smChanged()
-{
-    emit setServerMessageNew(leServerMessageNew->text());
-    emit setServerMessageOld(leServerMessageOld->text());
-    emit setProtocol(sbProtocol->value());
-}
-
-void PageAdmin::serverMessageNew(const QString & str)
-{
-    leServerMessageNew->setText(str);
-}
-
-void PageAdmin::serverMessageOld(const QString & str)
-{
-    leServerMessageOld->setText(str);
-}
-void PageAdmin::protocol(int proto)
-{
-    sbProtocol->setValue(proto);
-}
--- a/QTfrontend/pageadmin.h	Wed Sep 28 06:24:10 2011 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,60 +0,0 @@
-/*
- * Hedgewars, a free turn based strategy game
- * Copyright (c) 2006-2011 Andrey Korotaev <unC0Rr@gmail.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#ifndef PAGE_ADMIN_H
-#define PAGE_ADMIN_H
-
-#include "AbstractPage.h"
-
-class PageAdmin : public AbstractPage
-{
-    Q_OBJECT
-
-public:
-    PageAdmin(QWidget* parent = 0);
-
-public slots:
-    void serverMessageNew(const QString & str);
-    void serverMessageOld(const QString & str);
-    void protocol(int proto);
-
-signals:
-    void setServerMessageNew(const QString & str);
-    void setServerMessageOld(const QString & str);
-    void setProtocol(int proto);
-    void askServerVars();
-    void clearAccountsCache();
-
-protected:
-    QLayout * bodyLayoutDefinition();
-    void connectSignals();
-
-private:
-    QLineEdit * leServerMessageNew;
-    QLineEdit * leServerMessageOld;
-    QPushButton * pbSetSM;
-    QPushButton * pbAsk;
-    QSpinBox * sbProtocol;
-    QTextBrowser * tb;
-    QPushButton * pbClearAccountsCache;
-
-private slots:
-    void smChanged();
-};
-
-#endif
--- a/QTfrontend/pagecampaign.cpp	Wed Sep 28 06:24:10 2011 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,53 +0,0 @@
-/*
- * Hedgewars, a free turn based strategy game
- * Copyright (c) 2006-2011 Andrey Korotaev <unC0Rr@gmail.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <QGridLayout>
-#include <QPushButton>
-#include <QComboBox>
-
-#include "pagecampaign.h"
-
-QLayout * PageCampaign::bodyLayoutDefinition()
-{
-    QGridLayout * pageLayout = new QGridLayout();
-    pageLayout->setColumnStretch(0, 1);
-    pageLayout->setColumnStretch(1, 2);
-    pageLayout->setColumnStretch(2, 1);
-    pageLayout->setRowStretch(0, 1);
-    pageLayout->setRowStretch(3, 1);
-
-    CBSelect = new QComboBox(this);
-    CBTeam = new QComboBox(this);
-
-    pageLayout->addWidget(CBTeam, 1, 1);
-    pageLayout->addWidget(CBSelect, 2, 1);
-    
-    BtnStartCampaign = new QPushButton(this);
-    BtnStartCampaign->setFont(*font14);
-    BtnStartCampaign->setText(QPushButton::tr("Go!"));
-    pageLayout->addWidget(BtnStartCampaign, 2, 2);
-
-    return pageLayout;
-}
-
-PageCampaign::PageCampaign(QWidget* parent) : AbstractPage(parent)
-{
-    initPage();
-}
-
-
--- a/QTfrontend/pagecampaign.h	Wed Sep 28 06:24:10 2011 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,39 +0,0 @@
-/*
- * Hedgewars, a free turn based strategy game
- * Copyright (c) 2006-2011 Andrey Korotaev <unC0Rr@gmail.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#ifndef PAGE_CAMPAIGN_H
-#define PAGE_CAMPAIGN_H
-
-#include "AbstractPage.h"
-
-class PageCampaign : public AbstractPage
-{
-    Q_OBJECT
-
-public:
-    PageCampaign(QWidget* parent = 0);
-
-    QPushButton *BtnStartCampaign;
-    QComboBox   *CBSelect;
-    QComboBox   *CBTeam;
-
-protected:
-    QLayout * bodyLayoutDefinition();
-};
-
-#endif
--- a/QTfrontend/pageconnecting.cpp	Wed Sep 28 06:24:10 2011 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,43 +0,0 @@
-/*
- * Hedgewars, a free turn based strategy game
- * Copyright (c) 2006-2011 Andrey Korotaev <unC0Rr@gmail.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <QVBoxLayout>
-#include <QLabel>
-
-#include "pageconnecting.h"
-
-QLayout * PageConnecting::bodyLayoutDefinition()
-{
-    QVBoxLayout * pageLayout = new QVBoxLayout();
-
-    QLabel * lblConnecting = new QLabel(this);
-    lblConnecting->setText(tr("Connecting..."));
-    pageLayout->addWidget(lblConnecting);
-
-    return pageLayout;
-}
-
-void PageConnecting::connectSignals()
-{
-    connect(this, SIGNAL(goBack()), this, SIGNAL(cancelConnection()));
-}
-
-PageConnecting::PageConnecting(QWidget* parent) :  AbstractPage(parent)
-{
-    initPage();
-}
--- a/QTfrontend/pageconnecting.h	Wed Sep 28 06:24:10 2011 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,39 +0,0 @@
-/*
- * Hedgewars, a free turn based strategy game
- * Copyright (c) 2006-2011 Andrey Korotaev <unC0Rr@gmail.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#ifndef PAGE_CONNECTING_H
-#define PAGE_CONNECTING_H
-
-#include "AbstractPage.h"
-
-class PageConnecting : public AbstractPage
-{
-    Q_OBJECT
-
-public:
-    PageConnecting(QWidget* parent = 0);
-
-signals:
-    void cancelConnection();
-
-protected:
-    QLayout * bodyLayoutDefinition();
-    void connectSignals();
-};
-
-#endif
--- a/QTfrontend/pagedata.cpp	Wed Sep 28 06:24:10 2011 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,229 +0,0 @@
-/*
- * Hedgewars, a free turn based strategy game
- * Copyright (c) 2006-2011 Andrey Korotaev <unC0Rr@gmail.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <QGridLayout>
-#include <QPushButton>
-#include <QNetworkAccessManager>
-#include <QNetworkRequest>
-#include <QNetworkReply>
-#include <QFileInfo>
-#include <QFileDialog>
-#include <QDebug>
-#include <QProgressBar>
-#include <QBuffer>
-
-#include "pagedata.h"
-#include "databrowser.h"
-#include "hwconsts.h"
-
-#include "quazip.h"
-#include "quazipfile.h"
-
-QLayout * PageDataDownload::bodyLayoutDefinition()
-{
-    QGridLayout * pageLayout = new QGridLayout();
-    pageLayout->setColumnStretch(0, 1);
-    pageLayout->setColumnStretch(1, 1);
-    pageLayout->setColumnStretch(2, 1);
-
-    web = new DataBrowser(this);
-    pageLayout->addWidget(web, 0, 0, 1, 3);
-
-    progressBarsLayout = new QVBoxLayout();
-    pageLayout->addLayout(progressBarsLayout, 1, 0, 1, 3);
-    return pageLayout;
-}
-
-void PageDataDownload::connectSignals()
-{
-    connect(web, SIGNAL(anchorClicked(QUrl)), this, SLOT(request(const QUrl&)));
-}
-
-PageDataDownload::PageDataDownload(QWidget* parent) : AbstractPage(parent)
-{
-    initPage();
-
-    web->setOpenLinks(false);
-    fetchList();
-}
-
-void PageDataDownload::request(const QUrl &url)
-{
-    QUrl finalUrl;
-    if(url.host().isEmpty())
-        finalUrl = QUrl("http://www.hedgewars.org" + url.path());
-    else
-        finalUrl = url;
-
-    if(url.path().endsWith(".zip"))
-    {
-        qWarning() << "Download Request" << url.toString();
-        QString fileName = QFileInfo(url.toString()).fileName();
-
-        QNetworkRequest newRequest(finalUrl);
-        newRequest.setAttribute(QNetworkRequest::User, fileName);
-
-        QNetworkAccessManager *manager = new QNetworkAccessManager(this);
-        QNetworkReply *reply = manager->get(newRequest);
-        connect(reply, SIGNAL(finished()), this, SLOT(fileDownloaded()));
-        connect(reply, SIGNAL(downloadProgress(qint64, qint64)), this, SLOT(downloadProgress(qint64, qint64)));
-
-        QProgressBar *progressBar = new QProgressBar(this);
-        progressBarsLayout->addWidget(progressBar);
-        progressBars.insert(reply, progressBar);
-    } else
-    {
-        qWarning() << "Page Request" << url.toString();
-
-        QNetworkRequest newRequest(finalUrl);
-
-        QNetworkAccessManager *manager = new QNetworkAccessManager(this);
-        QNetworkReply *reply = manager->get(newRequest);
-        connect(reply, SIGNAL(finished()), this, SLOT(pageDownloaded()));
-    }
-}
-
-
-void PageDataDownload::pageDownloaded()
-{
-    QNetworkReply * reply = qobject_cast<QNetworkReply *>(sender());
-
-    if(reply)
-    {
-        QString html = QString::fromUtf8(reply->readAll());
-        int begin = html.indexOf("<!-- BEGIN -->");
-        int end = html.indexOf("<!-- END -->");
-        if(begin != -1 && begin < end)
-        {
-            html.truncate(end);
-            html.remove(0, begin);
-        }
-        web->setHtml(html);
-    }
-}
-
-void PageDataDownload::fileDownloaded()
-{
-    QNetworkReply * reply = qobject_cast<QNetworkReply *>(sender());
-
-    if(reply)
-    {
-        QByteArray fileContents = reply->readAll();
-        QProgressBar *progressBar = progressBars.value(reply, 0);
-
-        if(progressBar)
-        {
-            progressBars.remove(reply);
-            progressBar->deleteLater();
-        }
-
-        extractDataPack(&fileContents);
-    }
-}
-
-void PageDataDownload::downloadProgress(qint64 bytesRecieved, qint64 bytesTotal)
-{
-    QNetworkReply * reply = qobject_cast<QNetworkReply *>(sender());
-
-    if(reply)
-    {
-        QProgressBar *progressBar = progressBars.value(reply, 0);
-
-        if(progressBar)
-        {
-            progressBar->setValue(bytesRecieved);
-            progressBar->setMaximum(bytesTotal);
-        }
-    }
-}
-
-void PageDataDownload::fetchList()
-{
-    request(QUrl("http://hedgewars.org/content.html"));
-}
-
-bool PageDataDownload::extractDataPack(QByteArray * buf)
-{
-    QBuffer buffer;
-    buffer.setBuffer(buf);
-
-    QuaZip zip;
-    zip.setIoDevice(&buffer);
-    if(!zip.open(QuaZip::mdUnzip))
-    {
-      qWarning("testRead(): zip.open(): %d", zip.getZipError());
-      return false;
-    }
-
-    QuaZipFile file(&zip);
-
-    QDir extractDir(*cfgdir);
-    extractDir.cd("Data");
-
-    for(bool more = zip.goToFirstFile(); more; more = zip.goToNextFile())
-    {
-        if(!file.open(QIODevice::ReadOnly))
-        {
-            qWarning("file.open(): %d", file.getZipError());
-            return false;
-        }
-
-
-        QString fileName = file.getActualFileName();
-        QString filePath = extractDir.filePath(fileName);
-        if (fileName.endsWith("/"))
-        {
-            QFileInfo fi(filePath);
-            QDir().mkpath(fi.filePath());
-        } else
-        {
-            qDebug() << "Extracting" << filePath;
-            QFile out(filePath);
-            if(!out.open(QFile::WriteOnly))
-            {
-                qWarning() << "out.open():" << out.errorString();
-                return false;
-            }
-
-            out.write(file.readAll());
-
-            out.close();
-
-            if(file.getZipError() != UNZ_OK) {
-                qWarning("file.getFileName(): %d", file.getZipError());
-                return false;
-            }
-
-            if(!file.atEnd()) {
-                qWarning("read all but not EOF");
-                return false;
-            }
-        }
-
-        file.close();
-
-        if(file.getZipError()!=UNZ_OK) {
-            qWarning("file.close(): %d", file.getZipError());
-            return false;
-        }
-    }
-
-    zip.close();
-
-    return true;
-}
--- a/QTfrontend/pagedata.h	Wed Sep 28 06:24:10 2011 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,59 +0,0 @@
-/*
- * Hedgewars, a free turn based strategy game
- * Copyright (c) 2006-2011 Andrey Korotaev <unC0Rr@gmail.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#ifndef PAGE_DATA_H
-#define PAGE_DATA_H
-
-#include <QUrl>
-#include "AbstractPage.h"
-
-class DataBrowser;
-class QProgressBar;
-class QNetworkReply;
-class QVBoxLayout;
-
-class PageDataDownload : public AbstractPage
-{
-    Q_OBJECT
-
-public:
-    PageDataDownload(QWidget* parent = 0);
-
-public slots:
-    void fetchList();
-
-protected:
-    QLayout * bodyLayoutDefinition();
-    void connectSignals();
-
-private:
-    DataBrowser *web;
-    QHash<QNetworkReply*, QProgressBar *> progressBars;
-    QVBoxLayout *progressBarsLayout;
-
-    bool extractDataPack(QByteArray * buf);
-
-private slots:
-    void request(const QUrl &url);
-
-    void pageDownloaded();
-    void fileDownloaded();
-    void downloadProgress(qint64, qint64);
-};
-
-#endif
--- a/QTfrontend/pagedrawmap.cpp	Wed Sep 28 06:24:10 2011 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,69 +0,0 @@
-/*
- * Hedgewars, a free turn based strategy game
- * Copyright (c) 2006-2011 Andrey Korotaev <unC0Rr@gmail.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <QGridLayout>
-#include <QPushButton>
-#include <QFileDialog>
-
-#include "pagedrawmap.h"
-#include "drawmapwidget.h"
-
-
-QLayout * PageDrawMap::bodyLayoutDefinition()
-{
-    QGridLayout * pageLayout = new QGridLayout();
-
-    pbUndo = addButton(tr("Undo"), pageLayout, 0, 0);
-    pbClear = addButton(tr("Clear"), pageLayout, 1, 0);
-    pbLoad = addButton(tr("Load"), pageLayout, 2, 0);
-    pbSave = addButton(tr("Save"), pageLayout, 3, 0);
-
-    drawMapWidget = new DrawMapWidget(this);
-    pageLayout->addWidget(drawMapWidget, 0, 1, 5, 1);
-
-    return pageLayout;
-}
-
-void PageDrawMap::connectSignals()
-{
-    connect(pbUndo, SIGNAL(clicked()), drawMapWidget, SLOT(undo()));
-    connect(pbClear, SIGNAL(clicked()), drawMapWidget, SLOT(clear()));
-    connect(pbLoad, SIGNAL(clicked()), this, SLOT(load()));
-    connect(pbSave, SIGNAL(clicked()), this, SLOT(save()));
-}
-
-PageDrawMap::PageDrawMap(QWidget* parent) : AbstractPage(parent)
-{
-    initPage();
-}
-
-void PageDrawMap::load()
-{
-    QString fileName = QFileDialog::getOpenFileName(NULL, tr("Load drawn map"), ".", tr("Drawn Maps") + " (*.hwmap);;" + tr("All files") + " (*)");
-
-    if(!fileName.isEmpty())
-        drawMapWidget->load(fileName);
-}
-
-void PageDrawMap::save()
-{
-    QString fileName = QFileDialog::getSaveFileName(NULL, tr("Save drawn map"), ".", tr("Drawn Maps") + " (*.hwmap);;"