warzone2100/src/multiint.h

315 lines
8.9 KiB
C++

/*
This file is part of Warzone 2100.
Copyright (C) 1999-2004 Eidos Interactive
Copyright (C) 2005-2013 Warzone 2100 Project
Warzone 2100 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; either version 2 of the License, or
(at your option) any later version.
Warzone 2100 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 Warzone 2100; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
/** @file
* Interface defines/externs for warzone frontend.
*/
#ifndef __INCLUDED_SRC_MULTIINT_H__
#define __INCLUDED_SRC_MULTIINT_H__
#include "lib/netplay/netplay.h"
#include "lib/widget/widgbase.h"
#include "lib/widget/form.h"
#include <QtCore/QSignalMapper>
#define MAX_LEN_AI_NAME 40
#define AI_CUSTOM 127
#define AI_OPEN -2
#define AI_CLOSED -1
#define AI_NOT_FOUND -99
class MultibuttonWidget : public W_FORM
{
Q_OBJECT
public:
MultibuttonWidget(WIDGET *parent, int value = -1);
virtual void display(int xOffset, int yOffset);
virtual void geometryChanged();
void setLabel(char const *text);
void addButton(int value, Image image, Image imageHighlight, char const *tip);
void enable(bool enabled = true);
void disable() { enable(false); }
void setGap(int gap);
int currentValue() const { return currentValue_; }
signals:
void chosen(int);
public slots:
void choose(int value);
private:
void stateChanged();
protected:
W_LABEL *label;
std::vector<std::pair<W_BUTTON *, int> > buttons;
QSignalMapper *mapper;
int currentValue_;
bool disabled;
int gap_;
bool lockCurrent;
};
class MultichoiceWidget : public MultibuttonWidget
{
Q_OBJECT
public:
MultichoiceWidget(WIDGET *parent, int value = -1);
};
void readAIs(); ///< step 1, load AI definition files
void loadMultiScripts(); ///< step 2, load the actual AI scripts
const char *getAIName(int player); ///< only run this -after- readAIs() is called
int matchAIbyName(const char *name); ///< only run this -after- readAIs() is called
int getNextAIAssignment(const char *name);
extern LOBBY_ERROR_TYPES getLobbyError(void);
extern void setLobbyError(LOBBY_ERROR_TYPES error_type);
extern void runConnectionScreen (void);
extern bool startConnectionScreen (void);
extern void intProcessConnection (UDWORD id);
extern void runGameFind (void);
extern void startGameFind (void);
void updateLimitFlags(void);
extern void runMultiOptions (void);
extern bool startMultiOptions (bool bReenter);
extern void frontendMultiMessages (void);
bool addMultiBut(W_SCREEN *screen, UDWORD formid, UDWORD id, UDWORD x, UDWORD y, UDWORD width, UDWORD height, const char* tipres, UDWORD norm, UDWORD down, UDWORD hi, unsigned tc = MAX_PLAYERS);
bool changeColour(unsigned player, int col, bool isHost);
extern char sPlayer[128];
extern bool bHosted;
void kickPlayer(uint32_t player_id, const char *reason, LOBBY_ERROR_TYPES type);
void addPlayerBox(bool); // players (mid) box
void loadMapPreview(bool hideInterface);
// ////////////////////////////////////////////////////////////////
// CONNECTION SCREEN
#define CON_TYPESID_START 10105
#define CON_TYPESID_END 10128
#define CON_SETTINGS 10130
#define CON_SETTINGS_LABEL 10131
#define CON_SETTINGSX 220
#define CON_SETTINGSY 190
#define CON_SETTINGSWIDTH 200
#define CON_SETTINGSHEIGHT 100
#define CON_OK 10101
#define CON_OKX CON_SETTINGSWIDTH-MULTIOP_OKW*2-13
#define CON_OKY CON_SETTINGSHEIGHT-MULTIOP_OKH-3
#define CON_CANCEL 10102
#define CON_PHONE 10132
#define CON_PHONEX 20
#define CON_IP 10133
#define CON_IPX 20
#define CON_IPY 45
#define CON_IP_CANCEL 10134
//for clients
#define CON_PASSWORD 10139
#define CON_PASSWORDYES 10141
#define CON_PASSWORDNO 10142
// ////////////////////////////////////////////////////////////////
// GAME FIND SCREEN
#define GAMES_GAMESTART 10201
#define GAMES_GAMEEND GAMES_GAMESTART+20
#define GAMES_GAMEWIDTH 540
#define GAMES_GAMEHEIGHT 28
// We can have a max of 4 icons for status, current icon size if 36x25.
#define GAMES_STATUS_START 393
#define GAMES_GAMENAME_START 2
#define GAMES_MAPNAME_START 173
#define GAMES_MODNAME_START 173 + 6 // indent a bit
#define GAMES_PLAYERS_START 360
// ////////////////////////////////////////////////////////////////
// GAME OPTIONS SCREEN
#define MULTIOP_PLAYERS 10231
#define MULTIOP_PLAYERSX 360
#define MULTIOP_PLAYERSY 1
#define MULTIOP_PLAYER_START 10232 //list of players
#define MULTIOP_PLAYER_END 10249
#define MULTIOP_PLAYERSW 263
#define MULTIOP_PLAYERSH 364
#define MULTIOP_ROW_WIDTH 246
//Team chooser
#define MULTIOP_TEAMS_START 102310 //List of teams
#define MULTIOP_TEAMS_END 102341
#define MULTIOP_TEAMSWIDTH 29
#define MULTIOP_TEAMSHEIGHT 38
#define MULTIOP_TEAMCHOOSER_FORM 102800
#define MULTIOP_TEAMCHOOSER 102810
#define MULTIOP_TEAMCHOOSER_END 102841
#define MULTIOP_TEAMCHOOSER_KICK 10289
// 'Ready' button
#define MULTIOP_READY_FORM_ID 102900
#define MULTIOP_READY_START (MULTIOP_READY_FORM_ID + MAX_PLAYERS + 1)
#define MULTIOP_READY_END (MULTIOP_READY_START + MAX_PLAYERS - 1)
#define MULTIOP_READY_WIDTH 41
#define MULTIOP_READY_HEIGHT 38
#define MULTIOP_PLAYERWIDTH 245
#define MULTIOP_PLAYERHEIGHT 38
#define MULTIOP_OPTIONS 10250
#define MULTIOP_OPTIONSX 40
#define MULTIOP_OPTIONSY 1
#define MULTIOP_OPTIONSW 284
#define MULTIOP_OPTIONSH 364
#define MULTIOP_EDITBOXW 196
#define MULTIOP_EDITBOXH 30
#define MULTIOP_BLUEFORMW 226
#define MROW1 4
#define MROW2 MROW1+MULTIOP_EDITBOXH
#define MROW3 MROW2+MULTIOP_EDITBOXH
#define MROW4 MROW3+MULTIOP_EDITBOXH
#define MROW5 MROW4+38
#define MROW6 MROW5+29
#define MCOL0 50
#define MCOL1 (MCOL0+26+10) // rem 10 for 4 lines.
#define MCOL2 (MCOL1+38)
#define MCOL3 (MCOL2+38)
#define MCOL4 (MCOL3+38)
#define MULTIOP_PNAME_ICON 10252
#define MULTIOP_PNAME 10253
#define MULTIOP_GNAME_ICON 10254
#define MULTIOP_GNAME 10255
#define MULTIOP_MAP_ICON 10258
#define MULTIOP_MAP 10259
#define MULTIOP_MAP_MOD 21013 // Warning, do not use sequential numbers until code is fixed.
#define MULTIOP_REFRESH 10275
#define MULTIOP_HOST 10276
#define MULTIOP_HOSTX 5
#define MULTIOP_FILTER_TOGGLE 30277
#define MULTIOP_STRUCTLIMITS 21277 // we are using 10277 already
#define MULTIOP_CANCELX 6
#define MULTIOP_CANCELY 6
#define MULTIOP_CHATBOX 10278
#define MULTIOP_CHATBOXX MULTIOP_OPTIONSX
#define MULTIOP_CHATBOXY 364
#define MULTIOP_CHATBOXW ((MULTIOP_PLAYERSX+MULTIOP_PLAYERSW) - MULTIOP_OPTIONSX)
#define MULTIOP_CHATBOXH 115
#define MULTIOP_CONSOLEBOX 0x1A001 // TODO: these should be enums!
#define MULTIOP_CONSOLEBOXX MULTIOP_OPTIONSX
#define MULTIOP_CONSOLEBOXY 432
#define MULTIOP_CONSOLEBOXW ((MULTIOP_PLAYERSX + MULTIOP_PLAYERSW) - MULTIOP_OPTIONSX)
#define MULTIOP_CONSOLEBOXH 48
#define MULTIOP_CHATEDIT 10279
#define MULTIOP_CHATEDITX 4
#define MULTIOP_CHATEDITY MULTIOP_CHATBOXH-14
#define MULTIOP_CHATEDITW MULTIOP_CHATBOXW-8
#define MULTIOP_CHATEDITH 9
#define MULTIOP_COLCHOOSER_FORM 10280
#define MULTIOP_COLCHOOSER 102711 //10281
#define MULTIOP_COLCHOOSER_END 102742 //10288
#define MULTIOP_LIMIT 10292 // 2 for this (+label)
#define MULTIOP_GAMETYPE 10294
#define MULTIOP_POWER 10296
#define MULTIOP_ALLIANCES 10298
#define MULTIOP_BASETYPE 10300
#define MULTIOP_SKSLIDE 102842 //10313
#define MULTIOP_SKSLIDE_END 102873 //10320
#define MULTIOP_MAP_PREVIEW 920000
#define MULTIOP_PASSWORD 920010
#define MULTIOP_PASSWORD_BUT 920012
#define MULTIOP_PASSWORD_EDIT 920013
#define MULTIOP_NO_SOMETHING 10331
#define MULTIOP_NO_SOMETHINGX 3
#define MULTIOP_NO_SOMETHINGY MROW5
#define MULTIOP_COLOUR_START 10332
#define MULTIOP_COLOUR_END (MULTIOP_COLOUR_START + MAX_PLAYERS)
#define MULTIOP_COLOUR_WIDTH 31
#define MULTIOP_AI_FORM (MULTIOP_COLOUR_END + 1)
#define MULTIOP_AI_START (MULTIOP_AI_FORM + 1)
#define MULTIOP_AI_END (MULTIOP_AI_START * MAX_PLAYERS)
#define MULTIOP_AI_OPEN (MULTIOP_AI_END + 1)
#define MULTIOP_AI_CLOSED (MULTIOP_AI_END + 2)
#define MULTIOP_DIFFICULTY_INIT_START (MULTIOP_AI_END + 3)
#define MULTIOP_DIFFICULTY_INIT_END (MULTIOP_DIFFICULTY_INIT_START + MAX_PLAYERS)
#define MULTIOP_DIFFICULTY_CHOOSE_START (MULTIOP_DIFFICULTY_INIT_END + 1)
#define MULTIOP_DIFFICULTY_CHOOSE_END (MULTIOP_DIFFICULTY_CHOOSE_START + MAX_PLAYERS)
// ///////////////////////////////
// Many Button Variations..
#define CON_NAMEBOXWIDTH CON_SETTINGSWIDTH-CON_PHONEX
#define CON_NAMEBOXHEIGHT 15
#define MULTIOP_OKW 37
#define MULTIOP_OKH 24
#define MULTIOP_BUTW 35
#define MULTIOP_BUTH 24
#endif // __INCLUDED_SRC_MULTIINT_H__