# HG changeset patch
# User sheepluva
# Date 1317230876 -7200
# Node ID fdfc014198152d2353e24c15f2627aaa816a3a6f
# Parent ddf020d0941ac09069bbdcf6cee78af9f0ca9cd2
I started to move stuff around, c'mon, hate on meee. PS: if your (clean) build is broken - let me know)
diff -r ddf020d0941a -r fdfc01419815 QTfrontend/CMakeLists.txt
--- 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)
diff -r ddf020d0941a -r fdfc01419815 QTfrontend/SquareLabel.cpp
--- 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
- *
- * 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
-#include
-#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();
-}
diff -r ddf020d0941a -r fdfc01419815 QTfrontend/SquareLabel.h
--- 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
- *
- * 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
-#include
-
-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
diff -r ddf020d0941a -r fdfc01419815 QTfrontend/about.cpp
--- 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
- *
- * 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
-#include
-#include
-#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(
- ""
- "Hedgewars
"
- "
" + QLabel::tr("Version") + " " + *cVersionString + "
"
- "
http://www.hedgewars.org/
" +
- QLabel::tr("This program is distributed under the GNU General Public License") +
- "
"
- );
- lbl1->setWordWrap(true);
- mainLayout->addWidget(lbl1, 0, 1);
-
- QTextBrowser *lbl2 = new QTextBrowser(this);
-
- lbl2->setOpenExternalLinks(true);
- lbl2->setText(
- "" +
- QString("") +
- QLabel::tr("Developers:") +
- "
"
- "Engine, frontend, net server: Andrey Korotaev <unC0Rr@gmail.com>
"
- "Many frontend improvements: Igor Ulyanov <disinbox@gmail.com>
"
- "Many engine and frontend improvements: Derek Pomery <nemo@m8y.org>
"
- "Drill rocket, Ballgun, RC Plane weapons: Martin Boze <afffect@gmail.com>
"
- "Mine number and time game settings: David A. Cuadrado <krawek@gmail.com>
"
- "Frontend improvements: Martin Minarik <ttsmj@pokec.sk>
"
- "Frontend improvements: Kristian Lehmann <email@thexception.net>
"
- "Mac OS X/iPhone port, OpenGL-ES conversion: Vittorio Giovara <vittorio.giovara@gmail.com>
"
- "Many engine and frontend improvements (and bugs): Richard Karolyi <sheepluva@" "ercatec.net>
"
- "Gamepad and Lua integration: Mario Liebisch <mario.liebisch@gmail.com>
"
- "Many engine improvements and graphics: Carlos Vives <mail@carlosvives.es>
"
- "Maze maps: Henning Kühn <prg@cooco.de>
"
- "Engine and frontend improvements: Henrik Rostedt <henrik.rostedt@gmail.com>
"
- "Lua game modes and missions: John Lambert <redgrinner@gmail.com>
"
- "Frontend improvements: Mayur Pawashe <zorgiepoo@gmail.com>
"
- "Android port: Richard Deurwaarder <xeli@xelification.com>
"
- "
" +
-
- QLabel::tr("Art:") + "
"
- + QString::fromUtf8(
- "John Dum <fizzy@gmail.com>"
- "
"
- "Joshua Frese <joshfrese@gmail.com>"
- "
"
- "Stanko Tadić <stanko@mfhinc.net>"
- "
"
- "Julien Koesten <julienkoesten@aol.com>"
- "
"
- "Joshua O'Sullivan <coheedftw@hotmail.co.uk>"
- "
"
- "Nils Lück <nils.luck.design@gmail.com>"
- "
"
- "Guillaume Englert <genglert@hybird.org>"
- "
"
- "Hats: Trey Perry <tx.perry.j@gmail.com>"
- "
") +
- QLabel::tr("Sounds:") + "
"
- "Hedgehogs voice: Stephen Alexander <ArmagonNo1@gmail.com>"
- "
"
- "John Dum <fizzy@gmail.com>"
- "
"
- "Jonatan Nilsson <jonatanfan@gmail.com>"
- "
"
- "Daniel Martin <elhombresinremedio@gmail.com>"
- "
" +
-
- QLabel::tr("Translations:") + "
"
- + QString::fromUtf8(
- "Brazilian Portuguese: Romulo Fernandes Machado <abra185@gmail.com>
"
- "Bulgarian: Svetoslav Stefanov
"
- "Czech: Petr Řezáček <rezacek@gmail.com>
"
- "Chinese: Jie Luo <lililjlj@gmail.com>
"
- "English: Andrey Korotaev <unC0Rr@gmail.com>
"
- "Finnish: Nina Kuisma <ninnnu@gmail.com>
"
- "French: Antoine Turmel <geekshadow@gmail.com>
"
- "German: Peter Hüwe <PeterHuewe@gmx.de>, Mario Liebisch <mario.liebisch@gmail.com>, Richard Karolyi <sheepluva@" "ercatec.net>
"
- "Greek: <talos_kriti@yahoo.gr>
"
- "Italian: Luca Bonora <bonora.luca@gmail.com>, Marco Bresciani
"
- "Japanese: ADAM Etienne <etienne.adam@gmail.com>
"
- "Korean: Anthony Bellew <webmaster@anthonybellew.com>
"
- "Lithuanian: Lukas Urbonas <lukasu08@gmail.com>
"
- "Polish: Maciej Mroziński <mynick2@o2.pl>, Wojciech Latkowski <magik17l@gmail.com>, Piotr Mitana, Maciej Górny
"
- "Portuguese: Fábio Canário <inufabie@gmail.com>
"
- "Russian: Andrey Korotaev <unC0Rr@gmail.com>
"
- "Slovak: Jose Riha
"
- "Spanish: Carlos Vives <mail@carlosvives.es>
"
- "Swedish: Niklas Grahn <raewolusjoon@yaoo.com>, Henrik Rostedt <henrik.rostedt@gmail.com>
"
- "Ukrainian: Eugene V. Lyubimkin <jackyf.devel@gmail.com>, Igor Paliychuk <mansonigor@gmail.com>, Eugene Sakara <eresid@gmail.com>"
- "
") +
-
- QLabel::tr("Special thanks:") + "
"
- "Aleksey Andreev <blaknayabr@gmail.com>
"
- "Aleksander Rudalev <alexv@pomorsu.ru>
"
- "Natasha Korotaeva <layout@pisem.net>
"
- "Adam Higerd (aka ahigerd at FreeNode)"
- "
"
- );
- mainLayout->addWidget(lbl2, 1, 1);
-}
diff -r ddf020d0941a -r fdfc01419815 QTfrontend/about.h
--- 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
- *
- * 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
-
-
-class About : public QWidget
-{
- Q_OBJECT
-
-public:
- About(QWidget * parent = 0);
-};
-
-#endif // _ABOUT_H
diff -r ddf020d0941a -r fdfc01419815 QTfrontend/ammoSchemeModel.cpp
--- 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
- *
- * 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
-#include
-
-#include "ammoSchemeModel.h"
-#include "hwconsts.h"
-
-QList defaultScheme = QList()
- << 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 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 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 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 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 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 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 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 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 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 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 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 newScheme = defaultScheme;
- newScheme[0] = QVariant(tr("new"));
- schemes.insert(schemes.size(), newScheme);
- }
- else
- {
- QList 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 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();
-}
diff -r ddf020d0941a -r fdfc01419815 QTfrontend/ammoSchemeModel.h
--- 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
- *
- * 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
-#include
-#include
-#include
-
-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 > 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 netScheme;
-};
-
-#endif // _AMMO_SCHEME_MODEL_INCLUDED
diff -r ddf020d0941a -r fdfc01419815 QTfrontend/bgwidget.cpp
--- 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
- * Copyright (c) 2009-2011 Andrey Korotaev
- *
- * 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();
-}
diff -r ddf020d0941a -r fdfc01419815 QTfrontend/bgwidget.h
--- 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
- * Copyright (c) 2009-2011 Andrey Korotaev
- *
- * 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
-//#include
-#include
-#include
-#include
-#include
-#include
-
-#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
diff -r ddf020d0941a -r fdfc01419815 QTfrontend/chatwidget.cpp
--- 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
- * Copyright (c) 2007-2011 Andrey Korotaev
- *
- * 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
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-
-#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(dynamic_cast(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 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(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, "\\3");
-
- // "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("%2").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("%1").arg(line).arg(cssClass);
-
- chatStrings.append(line);
-
- chatText->setHtml(chatStrings.join("
"));
-
- chatText->moveCursor(QTextCursor::End);
-}
-
-void HWChatWidget::onServerMessage(const QString& str)
-{
- if (chatStrings.size() > 250)
- chatStrings.removeFirst();
-
- chatStrings.append("
" + str + "
");
-
- chatText->setHtml(chatStrings.join("
"));
-
- 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 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 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);
- }
-}
diff -r ddf020d0941a -r fdfc01419815 QTfrontend/chatwidget.h
--- 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
- * Copyright (c) 2007-2011 Andrey Korotaev
- *
- * 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
-#include
-#include
-#include
-#include
-
-#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
diff -r ddf020d0941a -r fdfc01419815 QTfrontend/databrowser.cpp
--- 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
-#include
-#include
-#include
-#include
-
-#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(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();
- }
-}
diff -r ddf020d0941a -r fdfc01419815 QTfrontend/databrowser.h
--- 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
-#include
-
-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 resources;
- QSet requestedResources;
-
- QVariant loadResource(int type, const QUrl & name);
-
-private slots:
- void resourceDownloaded();
-};
-
-#endif // DATABROWSER_H
diff -r ddf020d0941a -r fdfc01419815 QTfrontend/drawmapwidget.cpp
--- 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
- *
- * 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
-#include
-#include
-
-#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())));
- }
-}
diff -r ddf020d0941a -r fdfc01419815 QTfrontend/drawmapwidget.h
--- 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
- *
- * 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
-#include
-#include
-#include
-
-#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
diff -r ddf020d0941a -r fdfc01419815 QTfrontend/fpsedit.cpp
--- 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
- *
- * 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));
-}
diff -r ddf020d0941a -r fdfc01419815 QTfrontend/fpsedit.h
--- 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
- *
- * 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
-
-class FPSEdit : public QSpinBox
-{
- Q_OBJECT
-
-public:
- FPSEdit(QWidget * parent = 0);
-
-protected:
- QString textFromValue (int value) const;
-};
-
-#endif // _FPSEDIT_H
diff -r ddf020d0941a -r fdfc01419815 QTfrontend/frameTeam.cpp
--- 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
- * Copyright (c) 2007-2011 Andrey Korotaev
- *
- * 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
-#include
-#include
-
-#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(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::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(getTeamWidget(team));
- if(!pTeamShowWidget) return;
- pTeamShowWidget->setHHNum(team.numHedgehogs());
-}
-
-void FrameTeams::setTeamColor(const HWTeam& team)
-{
- TeamShowWidget* pTeamShowWidget = dynamic_cast(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);
-}
diff -r ddf020d0941a -r fdfc01419815 QTfrontend/frameTeam.h
--- 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
- * Copyright (c) 2007-2011 Andrey Korotaev
- *
- * 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
-#include
-#include
-
-#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 availableColors;
- QList::Iterator currentColor;
-
- void emitTeamColorChanged(const HWTeam& team);
-
- QVBoxLayout mainLayout;
- typedef QMap tmapTeamToWidget;
- tmapTeamToWidget teamToWidget;
- bool nonInteractive;
-};
-
-#endif // _FRAME_TAM_INCLUDED
diff -r ddf020d0941a -r fdfc01419815 QTfrontend/gamecfgwidget.cpp
--- 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
- *
- * 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
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-
-#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 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 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()));
-}
diff -r ddf020d0941a -r fdfc01419815 QTfrontend/gamecfgwidget.h
--- 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
- *
- * 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
-#include
-#include
-#include
-#include
-
-#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
diff -r ddf020d0941a -r fdfc01419815 QTfrontend/hats.cpp
--- 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
- *
- * 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
-#include
-#include
-#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;
-}
diff -r ddf020d0941a -r fdfc01419815 QTfrontend/hats.h
--- 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
- *
- * 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
-#include
-#include
-#include
-#include
-
-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 > hats;
-};
-
-#endif // _HATS_INCLUDED
diff -r ddf020d0941a -r fdfc01419815 QTfrontend/hedgehogerWidget.cpp
--- 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
- * Copyright (c) 2008-2011 Andrey Korotaev
- *
- * 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(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;
-}
diff -r ddf020d0941a -r fdfc01419815 QTfrontend/hedgehogerWidget.h
--- 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
- * Copyright (c) 2007-2011 Andrey Korotaev
- *
- * 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
diff -r ddf020d0941a -r fdfc01419815 QTfrontend/hwmap.cpp
--- 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
- * Copyright (c) 2007-2011 Andrey Korotaev
- *
- * 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("!");
-}
diff -r ddf020d0941a -r fdfc01419815 QTfrontend/hwmap.h
--- 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
- * Copyright (c) 2006-2011 Andrey Korotaev
- *
- * 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
-#include
-#include
-
-#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
diff -r ddf020d0941a -r fdfc01419815 QTfrontend/igbox.cpp
--- 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
- *
- * 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
-#include
-#include
-#include
-
-#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;
-}
diff -r ddf020d0941a -r fdfc01419815 QTfrontend/igbox.h
--- 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
- *
- * 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
-#include
-
-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
diff -r ddf020d0941a -r fdfc01419815 QTfrontend/input_ip.cpp
--- 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
- *
- * 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
-#include
-#include
-#include
-#include
-
-#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);
-}
diff -r ddf020d0941a -r fdfc01419815 QTfrontend/input_ip.h
--- 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
- *
- * 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
-#include
-
-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
diff -r ddf020d0941a -r fdfc01419815 QTfrontend/itemNum.cpp
--- 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
- *
- * 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
-#include
-
-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
- *
- * 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
-#include
-
-#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
diff -r ddf020d0941a -r fdfc01419815 QTfrontend/misc.cpp
--- 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
- *
- * 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"
diff -r ddf020d0941a -r fdfc01419815 QTfrontend/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
- *
- * 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
-#include
-
-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
diff -r ddf020d0941a -r fdfc01419815 QTfrontend/namegen.cpp
--- 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
- * Copyright (c) 2009-2011 Andrey Korotaev
- *
- * 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
-#include
-#include
-#include
-#include "namegen.h"
-#include "hwform.h"
-#include "hwconsts.h"
-
-
-HWNamegen::HWNamegen() {}
-
-QList HWNamegen::TypesTeamnames;
-QList 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())];
-}
diff -r ddf020d0941a -r fdfc01419815 QTfrontend/namegen.h
--- 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
- * Copyright (c) 2009-2011 Andrey Korotaev
- *
- * 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
-
-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 TypesTeamnames;
- static QList 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
diff -r ddf020d0941a -r fdfc01419815 QTfrontend/net/hwmap.cpp
--- /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
+ * Copyright (c) 2007-2011 Andrey Korotaev
+ *
+ * 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("!");
+}
diff -r ddf020d0941a -r fdfc01419815 QTfrontend/net/hwmap.h
--- /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
+ * Copyright (c) 2006-2011 Andrey Korotaev
+ *
+ * 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
+#include
+#include
+
+#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
diff -r ddf020d0941a -r fdfc01419815 QTfrontend/net/netregister.cpp
--- /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
+ *
+ * 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()
+{
+
+}
diff -r ddf020d0941a -r fdfc01419815 QTfrontend/net/netregister.h
--- /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
+ *
+ * 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
+
+class HWNetRegisterServer : public QObject
+{
+ Q_OBJECT
+
+public:
+ HWNetRegisterServer(QObject *parent, const QString & descr, quint16 port);
+
+public slots:
+ virtual void unregister();
+};
+
+#endif // _NET_REGISTER_INCLUDED
diff -r ddf020d0941a -r fdfc01419815 QTfrontend/net/netserver.cpp
--- /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
+ * Copyright (c) 2008-2011 Andrey Korotaev
+ *
+ * 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
+
+#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;
+}
diff -r ddf020d0941a -r fdfc01419815 QTfrontend/net/netserver.h
--- /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
+ * Copyright (c) 2008-2011 Andrey Korotaev
+ *
+ * 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
+#include
+
+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
diff -r ddf020d0941a -r fdfc01419815 QTfrontend/net/netudpserver.cpp
--- /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
+ * Copyright (c) 2008-2011 Andrey Korotaev
+ *
+ * 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
+
+#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();
+}
diff -r ddf020d0941a -r fdfc01419815 QTfrontend/net/netudpserver.h
--- /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
+ * Copyright (c) 2008-2011 Andrey Korotaev
+ *
+ * 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
+#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
diff -r ddf020d0941a -r fdfc01419815 QTfrontend/net/netudpwidget.cpp
--- /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
+ * Copyright (c) 2007-2011 Andrey Korotaev
+ *
+ * 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
+
+#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()];
+}
diff -r ddf020d0941a -r fdfc01419815 QTfrontend/net/netudpwidget.h
--- /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
+ * Copyright (c) 2007-2011 Andrey Korotaev
+ *
+ * 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
diff -r ddf020d0941a -r fdfc01419815 QTfrontend/net/newnetclient.cpp
--- /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
+ * Copyright (c) 2008-2011 Andrey Korotaev
+ *
+ * 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
+#include
+#include
+
+#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;
+ }
+ }
+}
diff -r ddf020d0941a -r fdfc01419815 QTfrontend/net/newnetclient.h
--- /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
+ * Copyright (c) 2008-2011 Andrey Korotaev
+ *
+ * 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
+#include
+#include
+#include
+
+#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
+ 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
+ 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
diff -r ddf020d0941a -r fdfc01419815 QTfrontend/net/proto.cpp
--- /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
+ *
+ * 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);
+}
diff -r ddf020d0941a -r fdfc01419815 QTfrontend/net/proto.h
--- /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
+ *
+ * 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
+#include
+#include
+
+
+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
diff -r ddf020d0941a -r fdfc01419815 QTfrontend/net/tcpBase.cpp
--- /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
+ * Copyright (c) 2007-2011 Andrey Korotaev
+ *
+ * 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
+#include
+
+#include
+
+#include "hwconsts.h"
+
+QList srvsList;
+QPointer 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);
+ }
+ }
+}
diff -r ddf020d0941a -r fdfc01419815 QTfrontend/net/tcpBase.h
--- /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
+ * Copyright (c) 2007-2011 Andrey Korotaev
+ *
+ * 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
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include
+
+#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 IPCServer;
+
+ bool m_isDemoMode;
+ void RealStart();
+ QPointer