QTfrontend/hwform.h
author valnut
Sat, 14 Jan 2012 05:05:53 +0100
changeset 6561 b2165583cdf5
parent 6477 ad5741c252b9
child 6572 0d0af531c1c7
permissions -rw-r--r--
GCI task: feedback is important

/*
 * Hedgewars, a free turn based strategy game
 * Copyright (c) 2005-2011 Andrey Korotaev <unC0Rr@gmail.com>
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; version 2 of the License
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
 */

#ifndef HWFORM_H
#define HWFORM_H

#include <QMainWindow>
#include <QStack>
#include <QTime>
#include <QPointer>
#include <QPropertyAnimation>
#include <QUrl>
#include <QNetworkReply>
#include <QNetworkRequest>
#include <QNetworkAccessManager>

#include "netserver.h"
#include "game.h"
#include "ui_hwform.h"
#include "SDLInteraction.h"
#include "bgwidget.h"

#ifdef __APPLE__
#include "InstallController.h"
#endif

class HWGame;
class HWTeam;
class HWNamegen;
class HWNewNet;
class GameUIConfig;
class HWNetRegisterServer;
class QCloseEvent;
class AmmoSchemeModel;
class QSettings;
class QSignalMapper;

extern bool frontendEffects;
extern QString playerHash;

class HWForm : public QMainWindow
{
    Q_OBJECT

public:
    HWForm(QWidget *parent = 0, QString styleSheet = "");
    Ui_HWForm ui;
    GameUIConfig * config;
    QSettings * gameSettings; // Same file GameUIConfig points to but without the baggage.  Needs sync() calls if you want to get GameUIConfig changes though
    void updateXfire();
    void PlayDemoQuick(const QString & demofilename);
    void exit();
    void setButtonDescription(QString desc);
    void backDescription();

private slots:
    void GoToSaves();
    void GoToDemos();
    void GoToNet();
    void GoToSelectWeapon();
    void GoToSelectWeaponSet(int index);
    void GoToSelectNewWeapon();
    void GoToScheme(int index);
    void GoToEditScheme();
    void GoToNewScheme();
    void GoToPage(int id);
    void GoBack();
    void OpenSnapshotFolder();
    QString getDemoArguments();
    void AssociateFiles();
    void btnExitPressed();
    void IntermediateSetup();
    void NewTeam();
    void EditTeam(const QString & teamName);
    void AfterTeamEdit();
    void DeleteTeam(const QString & teamName);
    void DeleteScheme();
    void DeleteWeaponSet();
    void SimpleGame();
    void PlayDemo();
    void startTraining(const QString&);
    void StartCampaign();
    void NetConnect();
    void NetConnectServer(const QString & host, quint16 port);
    void NetConnectOfficialServer();
    void NetStartServer();
    void NetDisconnect();
    void NetConnected();
    void NetError(const QString & errmsg);
    void NetWarning(const QString & wrnmsg);
    void NetGameEnter();
    void NetPassword(const QString & nick);
    void NetNickTaken(const QString & nick);
    void NetAuthFailed();
    void NetTeamAccepted(const QString& team);
    void AddNetTeam(const HWTeam& team);
    void RemoveNetTeam(const HWTeam& team);
    void StartMPGame();
    void GameStateChanged(GameState gameState);
    void ForcedDisconnect(const QString & reason);
    void ShowErrorMessage(const QString &);
    void GetRecord(bool isDemo, const QByteArray & record);
    void CreateNetGame();
    void UpdateWeapons();
    void onFrontendFullscreen(bool value);
    void Music(bool checked);
    void UpdateCampaignPage(int index);
    //Starts the transmission process for the feedback
    void SendFeedback();
    //Make a xml representation of the issue to be created
    bool CreateIssueXml();
    //Called the first time when receiving authorization token from google,
    //second time when receiving the response after posting the issue
    void finishedSlot(QNetworkReply* reply);
    //Filter the auth token from the reply from google
    bool getAuthToken(QString str);

    void NetGameChangeStatus(bool isMaster);
    void NetGameMaster();
    void NetGameSlave();

    void AsyncNetServerStart();
    void NetLeftRoom(const QString & reason);
    void selectFirstNetScheme();
    
    void saveDemoWithCustomName();

private:
    void _NetConnect(const QString & hostName, quint16 port, QString nick);
    void UpdateTeamsLists(const QStringList* editable_teams=0);
    void CreateGame(GameCFGWidget * gamecfg, TeamSelWidget* pTeamSelWidget, QString ammo);
    void closeEvent(QCloseEvent *event);
    void CustomizePalettes();
    void resizeEvent(QResizeEvent * event);
    //void keyReleaseEvent(QKeyEvent *event);
    
    enum PageIDs {
        ID_PAGE_SETUP_TEAM      =  0,
        ID_PAGE_SETUP           =  1,
        ID_PAGE_MULTIPLAYER     =  2,
        ID_PAGE_DEMOS           =  3,
        ID_PAGE_NET             =  4,
        ID_PAGE_NETGAME         =  5,
        ID_PAGE_INFO            =  6,
        ID_PAGE_MAIN            =  7,
        ID_PAGE_GAMESTATS       =  8,
        ID_PAGE_SINGLEPLAYER    =  9,
        ID_PAGE_TRAINING        = 10,
        ID_PAGE_SELECTWEAPON    = 11,
        ID_PAGE_NETSERVER       = 12,
        ID_PAGE_INGAME          = 13,
        ID_PAGE_ROOMSLIST       = 14,
        ID_PAGE_CONNECTING      = 15,
        ID_PAGE_SCHEME          = 16,
        ID_PAGE_ADMIN           = 17,
        ID_PAGE_NETTYPE         = 18,
        ID_PAGE_CAMPAIGN        = 19,
        ID_PAGE_DRAWMAP         = 20,
        ID_PAGE_DATADOWNLOAD    = 21,
        ID_PAGE_FEEDBACK        = 22
        };
    QPointer<HWGame> game;
    QPointer<HWNetServer> pnetserver;
    QPointer<HWNetRegisterServer> pRegisterServer;
    QPointer<HWTeam> editedTeam;
    QPointer<HWNewNet> hwnet;
    HWNamegen * namegen;
    AmmoSchemeModel * ammoSchemeModel;
    QStack<int> PagesStack;
    QTime eggTimer;
    BGWidget * wBackground;
    QSignalMapper * pageSwitchMapper;
    QByteArray m_lastDemo;
    QNetworkAccessManager * nam;
    QString issueXml;
    QString authToken;

    QPropertyAnimation *animationNewSlide;
    QPropertyAnimation *animationOldSlide;
    QPropertyAnimation *animationNewOpacity;
    QPropertyAnimation *animationOldOpacity;

#ifdef __APPLE__
    InstallController * panel;
#endif

    void OnPageShown(quint8 id, quint8 lastid=0);
};

#endif