/
GameSetupPage.cpp
61 lines (46 loc) · 1.32 KB
/
GameSetupPage.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#include "GameSetupPage.h"
#include "itextstream.h"
#include "GameSetupPageIdTech.h"
#include <functional>
namespace ui
{
GameSetupPage::GameSetupPage(wxWindow* parent, const game::IGamePtr& game) :
wxPanel(parent, wxID_ANY),
_game(game)
{}
// Static instance
GameSetupPage::GameSetupPages GameSetupPage::_registeredPages;
void GameSetupPage::EnsureDefaultPages()
{
if (_registeredPages.empty())
{
_registeredPages[GameSetupPageIdTech::TYPE()] = [](wxWindow* parent, const game::IGamePtr& game)
{
return new GameSetupPageIdTech(parent, game);
};
}
}
GameSetupPage* GameSetupPage::CreatePageForGame(const game::IGamePtr& game, wxWindow* parent)
{
EnsureDefaultPages();
// Check the game setup dialog type, default to idTech generic
std::string type = GameSetupPageIdTech::TYPE();
xml::NodeList nodes = game->getLocalXPath("/gameSetup/dialog");
if (!nodes.empty())
{
std::string value = nodes[0].getAttributeValue("type");
if (!value.empty())
{
type = value;
}
}
GameSetupPages::const_iterator found = _registeredPages.find(type);
if (found != _registeredPages.end())
{
return found->second(parent, game);
}
rWarning() << "No Game Setup Page associated to type " << type <<
", will fall back to a generic idTech setup page." << std::endl;
return new GameSetupPageIdTech(parent, game);
}
}