mirror of
https://github.com/vcmi/vcmi.git
synced 2025-11-27 22:49:25 +02:00
Interface builder refactored
This commit is contained in:
@@ -57,7 +57,7 @@ void InterfaceObjectConfigurable::init(const JsonNode &config)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string InterfaceObjectConfigurable::buildText(const JsonNode & config) const
|
std::string InterfaceObjectConfigurable::readText(const JsonNode & config) const
|
||||||
{
|
{
|
||||||
if(config.isNull())
|
if(config.isNull())
|
||||||
return "";
|
return "";
|
||||||
@@ -69,145 +69,207 @@ std::string InterfaceObjectConfigurable::buildText(const JsonNode & config) cons
|
|||||||
return config.String();
|
return config.String();
|
||||||
}
|
}
|
||||||
|
|
||||||
std::shared_ptr<CIntObject> InterfaceObjectConfigurable::buildWidget(const JsonNode & config)
|
Point InterfaceObjectConfigurable::readPosition(const JsonNode & config) const
|
||||||
|
{
|
||||||
|
Point p;
|
||||||
|
p.x = config["x"].Integer();
|
||||||
|
p.y = config["y"].Integer();
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
|
||||||
|
ETextAlignment InterfaceObjectConfigurable::readTextAlignment(const JsonNode & config) const
|
||||||
|
{
|
||||||
|
if(!config.isNull())
|
||||||
|
{
|
||||||
|
if(config.String() == "center")
|
||||||
|
return ETextAlignment::CENTER;
|
||||||
|
if(config.String() == "left")
|
||||||
|
return ETextAlignment::TOPLEFT;
|
||||||
|
if(config.String() == "right")
|
||||||
|
return ETextAlignment::BOTTOMRIGHT;
|
||||||
|
}
|
||||||
|
return ETextAlignment::CENTER;
|
||||||
|
}
|
||||||
|
|
||||||
|
SDL_Color InterfaceObjectConfigurable::readColor(const JsonNode & config) const
|
||||||
|
{
|
||||||
|
if(!config.isNull())
|
||||||
|
{
|
||||||
|
if(config.String() == "yellow")
|
||||||
|
return Colors::YELLOW;
|
||||||
|
if(config.String() == "white")
|
||||||
|
return Colors::WHITE;
|
||||||
|
if(config.String() == "gold")
|
||||||
|
return Colors::METALLIC_GOLD;
|
||||||
|
if(config.String() == "green")
|
||||||
|
return Colors::GREEN;
|
||||||
|
if(config.String() == "orange")
|
||||||
|
return Colors::ORANGE;
|
||||||
|
if(config.String() == "bright-yellow")
|
||||||
|
return Colors::BRIGHT_YELLOW;
|
||||||
|
}
|
||||||
|
return Colors::DEFAULT_KEY_COLOR;
|
||||||
|
|
||||||
|
}
|
||||||
|
EFonts InterfaceObjectConfigurable::readFont(const JsonNode & config) const
|
||||||
|
{
|
||||||
|
if(!config.isNull())
|
||||||
|
{
|
||||||
|
if(config.String() == "big")
|
||||||
|
return EFonts::FONT_BIG;
|
||||||
|
if(config.String() == "medium")
|
||||||
|
return EFonts::FONT_MEDIUM;
|
||||||
|
if(config.String() == "small")
|
||||||
|
return EFonts::FONT_SMALL;
|
||||||
|
if(config.String() == "tiny")
|
||||||
|
return EFonts::FONT_TINY;
|
||||||
|
}
|
||||||
|
return EFonts::FONT_TIMES;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::pair<std::string, std::string> InterfaceObjectConfigurable::readHintText(const JsonNode & config) const
|
||||||
|
{
|
||||||
|
std::pair<std::string, std::string> result;
|
||||||
|
if(!config.isNull())
|
||||||
|
{
|
||||||
|
if(config.isNumber())
|
||||||
|
return CGI->generaltexth->zelp[config.Integer()];
|
||||||
|
|
||||||
|
if(config.getType() == JsonNode::JsonType::DATA_STRUCT)
|
||||||
|
{
|
||||||
|
result.first = config["hover"].String();
|
||||||
|
result.second = config["help"].String();
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
if(config.getType() == JsonNode::JsonType::DATA_STRING)
|
||||||
|
{
|
||||||
|
result.first = result.second = config.String();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::shared_ptr<CPicture> InterfaceObjectConfigurable::buildPicture(const JsonNode & config) const
|
||||||
|
{
|
||||||
|
auto image = readText(config["image"]);
|
||||||
|
auto position = readPosition(config["position"]);
|
||||||
|
return std::make_shared<CPicture>(image, position.x, position.y);
|
||||||
|
}
|
||||||
|
|
||||||
|
std::shared_ptr<CLabel> InterfaceObjectConfigurable::buildLabel(const JsonNode & config) const
|
||||||
|
{
|
||||||
|
auto font = readFont(config["font"]);
|
||||||
|
auto alignment = readTextAlignment(config["alignment"]);
|
||||||
|
auto color = readColor(config["color"]);
|
||||||
|
auto text = readText(config["text"]);
|
||||||
|
auto position = readPosition(config["position"]);
|
||||||
|
return std::make_shared<CLabel>(position.x, position.y, font, alignment, color, text);
|
||||||
|
}
|
||||||
|
|
||||||
|
std::shared_ptr<CToggleGroup> InterfaceObjectConfigurable::buildToggleGroup(const JsonNode & config) const
|
||||||
|
{
|
||||||
|
auto position = readPosition(config["position"]);
|
||||||
|
auto group = std::make_shared<CToggleGroup>(0);
|
||||||
|
group->pos += position;
|
||||||
|
if(!config["items"].isNull())
|
||||||
|
{
|
||||||
|
SObjectConstruction obj__i(group.get());
|
||||||
|
int itemIdx = -1;
|
||||||
|
for(const auto & item : config["items"].Vector())
|
||||||
|
{
|
||||||
|
itemIdx = item["index"].isNull() ? itemIdx + 1 : item["index"].Integer();
|
||||||
|
group->addToggle(itemIdx, std::dynamic_pointer_cast<CToggleBase>(buildWidget(item)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(!config["selected"].isNull())
|
||||||
|
group->setSelected(config["selected"].Integer());
|
||||||
|
if(!config["callback"].isNull())
|
||||||
|
group->addCallback(callbacks.at(config["callback"].String()));
|
||||||
|
return group;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::shared_ptr<CToggleButton> InterfaceObjectConfigurable::buildToggleButton(const JsonNode & config) const
|
||||||
|
{
|
||||||
|
auto position = readPosition(config["position"]);
|
||||||
|
auto image = config["image"].String();
|
||||||
|
auto zelp = readHintText(config["zelp"]);
|
||||||
|
auto button = std::make_shared<CToggleButton>(position, image, zelp);
|
||||||
|
if(!config["selected"].isNull())
|
||||||
|
button->setSelected(config["selected"].Bool());
|
||||||
|
if(!config["imageOrder"].isNull())
|
||||||
|
{
|
||||||
|
auto imgOrder = config["imageOrder"].Vector();
|
||||||
|
assert(imgOrder.size() >= 4);
|
||||||
|
button->setImageOrder(imgOrder[0].Integer(), imgOrder[1].Integer(), imgOrder[2].Integer(), imgOrder[3].Integer());
|
||||||
|
}
|
||||||
|
if(!config["callback"].isNull())
|
||||||
|
button->addCallback(callbacks.at(config["callback"].String()));
|
||||||
|
return button;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::shared_ptr<CButton> InterfaceObjectConfigurable::buildButton(const JsonNode & config) const
|
||||||
|
{
|
||||||
|
auto position = readPosition(config["position"]);
|
||||||
|
auto image = config["image"].String();
|
||||||
|
auto zelp = readHintText(config["zelp"]);
|
||||||
|
auto button = std::make_shared<CButton>(position, image, zelp);
|
||||||
|
if(!config["items"].isNull())
|
||||||
|
{
|
||||||
|
for(const auto & item : config["items"].Vector())
|
||||||
|
{
|
||||||
|
button->addOverlay(buildWidget(item));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(!config["callback"].isNull())
|
||||||
|
button->addCallback(std::bind(callbacks.at(config["callback"].String()), 0));
|
||||||
|
return button;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::shared_ptr<CLabelGroup> InterfaceObjectConfigurable::buildLabelGroup(const JsonNode & config) const
|
||||||
|
{
|
||||||
|
auto font = readFont(config["font"]);
|
||||||
|
auto alignment = readTextAlignment(config["alignment"]);
|
||||||
|
auto color = readColor(config["color"]);
|
||||||
|
auto group = std::make_shared<CLabelGroup>(font, alignment, color);
|
||||||
|
if(!config["items"].isNull())
|
||||||
|
{
|
||||||
|
for(const auto & item : config["items"].Vector())
|
||||||
|
{
|
||||||
|
auto position = readPosition(item["position"]);
|
||||||
|
auto text = readText(item["text"]);
|
||||||
|
group->add(position.x, position.y, text);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return group;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::shared_ptr<CIntObject> InterfaceObjectConfigurable::buildWidget(const JsonNode & config) const
|
||||||
{
|
{
|
||||||
assert(!config.isNull());
|
assert(!config.isNull());
|
||||||
auto type = config["type"].String();
|
auto type = config["type"].String();
|
||||||
|
|
||||||
int x = 0, y = 0;
|
|
||||||
if(!config["position"].isNull())
|
|
||||||
{
|
|
||||||
x = config["position"]["x"].Integer();
|
|
||||||
y = config["position"]["y"].Integer();
|
|
||||||
}
|
|
||||||
|
|
||||||
std::string image;
|
|
||||||
std::string text = buildText(config["text"]);
|
|
||||||
auto alignment = EAlignment::CENTER;
|
|
||||||
auto color = Colors::DEFAULT_KEY_COLOR;
|
|
||||||
auto font = EFonts::FONT_TIMES;
|
|
||||||
|
|
||||||
if(!config["image"].isNull())
|
|
||||||
image = config["image"].String();
|
|
||||||
if(!config["alignment"].isNull())
|
|
||||||
{
|
|
||||||
if(config["alignment"].String() == "left")
|
|
||||||
alignment = EAlignment::TOPLEFT;
|
|
||||||
if(config["alignment"].String() == "center")
|
|
||||||
alignment = EAlignment::CENTER;
|
|
||||||
if(config["alignment"].String() == "right")
|
|
||||||
alignment = EAlignment::BOTTOMRIGHT;
|
|
||||||
}
|
|
||||||
if(!config["color"].isNull())
|
|
||||||
{
|
|
||||||
if(config["color"].String() == "yellow")
|
|
||||||
color = Colors::YELLOW;
|
|
||||||
if(config["color"].String() == "white")
|
|
||||||
color = Colors::WHITE;
|
|
||||||
if(config["color"].String() == "gold")
|
|
||||||
color = Colors::METALLIC_GOLD;
|
|
||||||
if(config["color"].String() == "green")
|
|
||||||
color = Colors::GREEN;
|
|
||||||
if(config["color"].String() == "orange")
|
|
||||||
color = Colors::ORANGE;
|
|
||||||
if(config["color"].String() == "bright-yellow")
|
|
||||||
color = Colors::BRIGHT_YELLOW;
|
|
||||||
}
|
|
||||||
if(!config["font"].isNull())
|
|
||||||
{
|
|
||||||
if(config["font"].String() == "big")
|
|
||||||
font = EFonts::FONT_BIG;
|
|
||||||
if(config["font"].String() == "medium")
|
|
||||||
font = EFonts::FONT_MEDIUM;
|
|
||||||
if(config["font"].String() == "small")
|
|
||||||
font = EFonts::FONT_SMALL;
|
|
||||||
if(config["font"].String() == "tiny")
|
|
||||||
font = EFonts::FONT_TINY;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if(type == "picture")
|
if(type == "picture")
|
||||||
{
|
{
|
||||||
return std::make_shared<CPicture>(image, x, y);
|
return buildPicture(config);
|
||||||
}
|
}
|
||||||
if(type == "label")
|
if(type == "label")
|
||||||
{
|
{
|
||||||
return std::make_shared<CLabel>(x, y, font, alignment, color, text);
|
return buildLabel(config);
|
||||||
}
|
}
|
||||||
if(type == "toggleGroup")
|
if(type == "toggleGroup")
|
||||||
{
|
{
|
||||||
auto group = std::make_shared<CToggleGroup>(0);
|
return buildToggleGroup(config);
|
||||||
group->pos.x += x;
|
|
||||||
group->pos.y += y;
|
|
||||||
if(!config["items"].isNull())
|
|
||||||
{
|
|
||||||
SObjectConstruction obj__i(group.get());
|
|
||||||
int itemIdx = -1;
|
|
||||||
for(const auto & item : config["items"].Vector())
|
|
||||||
{
|
|
||||||
itemIdx = item["index"].isNull() ? itemIdx + 1 : item["index"].Integer();
|
|
||||||
group->addToggle(itemIdx, std::dynamic_pointer_cast<CToggleBase>(buildWidget(item)));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(!config["selected"].isNull())
|
|
||||||
group->setSelected(config["selected"].Integer());
|
|
||||||
if(!config["callback"].isNull())
|
|
||||||
group->addCallback(callbacks[config["callback"].String()]);
|
|
||||||
return group;
|
|
||||||
}
|
}
|
||||||
if(type == "toggleButton")
|
if(type == "toggleButton")
|
||||||
{
|
{
|
||||||
std::pair<std::string, std::string> zelp;
|
return buildToggleButton(config);
|
||||||
if(!config["zelp"].isNull())
|
|
||||||
zelp = CGI->generaltexth->zelp[config["zelp"].Integer()];
|
|
||||||
auto button = std::make_shared<CToggleButton>(Point(x, y), image, zelp);
|
|
||||||
if(!config["selected"].isNull())
|
|
||||||
button->setSelected(config["selected"].Bool());
|
|
||||||
if(!config["imageOrder"].isNull())
|
|
||||||
{
|
|
||||||
auto imgOrder = config["imageOrder"].Vector();
|
|
||||||
assert(imgOrder.size() >= 4);
|
|
||||||
button->setImageOrder(imgOrder[0].Integer(), imgOrder[1].Integer(), imgOrder[2].Integer(), imgOrder[3].Integer());
|
|
||||||
}
|
|
||||||
if(!config["callback"].isNull())
|
|
||||||
button->addCallback(callbacks[config["callback"].String()]);
|
|
||||||
return button;
|
|
||||||
}
|
}
|
||||||
if(type == "button")
|
if(type == "button")
|
||||||
{
|
{
|
||||||
std::pair<std::string, std::string> zelp;
|
return buildButton(config);
|
||||||
if(!config["zelp"].isNull())
|
|
||||||
zelp = CGI->generaltexth->zelp[config["zelp"].Integer()];
|
|
||||||
auto button = std::make_shared<CButton>(Point(x, y), image, zelp);
|
|
||||||
if(!config["items"].isNull())
|
|
||||||
{
|
|
||||||
for(const auto & item : config["items"].Vector())
|
|
||||||
{
|
|
||||||
button->addOverlay(buildWidget(item));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(!config["callback"].isNull())
|
|
||||||
button->addCallback(std::bind(callbacks[config["callback"].String()], 0));
|
|
||||||
return button;
|
|
||||||
}
|
}
|
||||||
if(type == "labelGroup")
|
if(type == "labelGroup")
|
||||||
{
|
{
|
||||||
auto group = std::make_shared<CLabelGroup>(font, alignment, color);
|
return buildLabelGroup(config);
|
||||||
if(!config["items"].isNull())
|
|
||||||
{
|
|
||||||
for(const auto & item : config["items"].Vector())
|
|
||||||
{
|
|
||||||
if(!item["position"].isNull())
|
|
||||||
{
|
|
||||||
x = item["position"]["x"].Integer();
|
|
||||||
y = item["position"]["y"].Integer();
|
|
||||||
}
|
|
||||||
if(!item["text"].isNull())
|
|
||||||
text = buildText(item["text"]);
|
|
||||||
group->add(x, y, text);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return group;
|
|
||||||
}
|
}
|
||||||
return std::shared_ptr<CIntObject>(nullptr);
|
return std::shared_ptr<CIntObject>(nullptr);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,6 +14,13 @@
|
|||||||
|
|
||||||
#include "../../lib/JsonNode.h"
|
#include "../../lib/JsonNode.h"
|
||||||
|
|
||||||
|
class CPicture;
|
||||||
|
class CLabel;
|
||||||
|
class CToggleGroup;
|
||||||
|
class CToggleButton;
|
||||||
|
class CButton;
|
||||||
|
class CLabelGroup;
|
||||||
|
|
||||||
class InterfaceObjectConfigurable: public CIntObject
|
class InterfaceObjectConfigurable: public CIntObject
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@@ -35,12 +42,29 @@ protected:
|
|||||||
return std::dynamic_pointer_cast<T>(iter->second);
|
return std::dynamic_pointer_cast<T>(iter->second);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private: //field deserializers
|
||||||
|
//basic serializers
|
||||||
|
Point readPosition(const JsonNode &) const;
|
||||||
|
ETextAlignment readTextAlignment(const JsonNode &) const;
|
||||||
|
SDL_Color readColor(const JsonNode &) const;
|
||||||
|
EFonts readFont(const JsonNode &) const;
|
||||||
|
std::string readText(const JsonNode &) const;
|
||||||
|
std::pair<std::string, std::string> readHintText(const JsonNode &) const;
|
||||||
|
|
||||||
|
//basic widgets
|
||||||
|
std::shared_ptr<CPicture> buildPicture(const JsonNode &) const;
|
||||||
|
std::shared_ptr<CLabel> buildLabel(const JsonNode &) const;
|
||||||
|
std::shared_ptr<CToggleGroup> buildToggleGroup(const JsonNode &) const;
|
||||||
|
std::shared_ptr<CToggleButton> buildToggleButton(const JsonNode &) const;
|
||||||
|
std::shared_ptr<CButton> buildButton(const JsonNode &) const;
|
||||||
|
std::shared_ptr<CLabelGroup> buildLabelGroup(const JsonNode &) const;
|
||||||
|
|
||||||
|
|
||||||
|
std::shared_ptr<CIntObject> buildWidget(const JsonNode & config) const;
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
std::map<std::string, std::shared_ptr<CIntObject>> widgets;
|
std::map<std::string, std::shared_ptr<CIntObject>> widgets;
|
||||||
std::map<std::string, std::function<void(int)>> callbacks;
|
std::map<std::string, std::function<void(int)>> callbacks;
|
||||||
|
|
||||||
std::shared_ptr<CIntObject> buildWidget(const JsonNode & config);
|
|
||||||
|
|
||||||
std::string buildText(const JsonNode & param) const;
|
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -100,9 +100,23 @@ RandomMapTab::RandomMapTab():
|
|||||||
//new callbacks available only from mod
|
//new callbacks available only from mod
|
||||||
addCallback("templateSelection", [&](int)
|
addCallback("templateSelection", [&](int)
|
||||||
{
|
{
|
||||||
GH.pushInt(std::make_shared<TemplatesDropBox>(this, int3{mapGenOptions->getWidth(), mapGenOptions->getHeight(), 1 + mapGenOptions->getHasTwoLevels()}));
|
GH.pushIntT<TemplatesDropBox>(this, int3{mapGenOptions->getWidth(), mapGenOptions->getHeight(), 1 + mapGenOptions->getHasTwoLevels()});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
addCallback("teamAlignments", [&](int)
|
||||||
|
{
|
||||||
|
GH.pushIntT<TeamAlignmentsWidget>(this);
|
||||||
|
});
|
||||||
|
|
||||||
|
for(auto road : VLC->terrainTypeHandler->roads())
|
||||||
|
{
|
||||||
|
std::string cbRoadType = "selectRoad_" + road.fileName;
|
||||||
|
addCallback(cbRoadType, [&](bool on)
|
||||||
|
{
|
||||||
|
//TODO: support road types
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
init(config);
|
init(config);
|
||||||
|
|
||||||
@@ -293,7 +307,7 @@ TemplatesDropBox::ListItem::ListItem(TemplatesDropBox * _dropBox, Point position
|
|||||||
dropBox(_dropBox)
|
dropBox(_dropBox)
|
||||||
{
|
{
|
||||||
OBJ_CONSTRUCTION;
|
OBJ_CONSTRUCTION;
|
||||||
labelName = std::make_shared<CLabel>(0, 0, FONT_SMALL, EAlignment::TOPLEFT, Colors::WHITE);
|
labelName = std::make_shared<CLabel>(0, 0, FONT_SMALL, ETextAlignment::TOPLEFT, Colors::WHITE);
|
||||||
labelName->setAutoRedraw(false);
|
labelName->setAutoRedraw(false);
|
||||||
|
|
||||||
hoverImage = std::make_shared<CPicture>("List10Sl", 0, 0);
|
hoverImage = std::make_shared<CPicture>("List10Sl", 0, 0);
|
||||||
@@ -352,6 +366,9 @@ TemplatesDropBox::TemplatesDropBox(RandomMapTab * randomMapTab, int3 size):
|
|||||||
curItems.insert(curItems.begin(), nullptr); //default template
|
curItems.insert(curItems.begin(), nullptr); //default template
|
||||||
|
|
||||||
OBJ_CONSTRUCTION;
|
OBJ_CONSTRUCTION;
|
||||||
|
pos = randomMapTab->pos.topLeft();
|
||||||
|
pos.w = randomMapTab->pos.w;
|
||||||
|
pos.h = randomMapTab->pos.h;
|
||||||
background = std::make_shared<CPicture>("List10Bk", 158, 76);
|
background = std::make_shared<CPicture>("List10Bk", 158, 76);
|
||||||
|
|
||||||
int positionsToShow = 10;
|
int positionsToShow = 10;
|
||||||
@@ -362,7 +379,6 @@ TemplatesDropBox::TemplatesDropBox(RandomMapTab * randomMapTab, int3 size):
|
|||||||
slider = std::make_shared<CSlider>(Point(212 + 158, 76), 252, std::bind(&TemplatesDropBox::sliderMove, this, _1), positionsToShow, (int)curItems.size(), 0, false, CSlider::BLUE);
|
slider = std::make_shared<CSlider>(Point(212 + 158, 76), 252, std::bind(&TemplatesDropBox::sliderMove, this, _1), positionsToShow, (int)curItems.size(), 0, false, CSlider::BLUE);
|
||||||
|
|
||||||
updateListItems();
|
updateListItems();
|
||||||
pos = background->pos;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void TemplatesDropBox::sliderMove(int slidPos)
|
void TemplatesDropBox::sliderMove(int slidPos)
|
||||||
@@ -410,3 +426,24 @@ void TemplatesDropBox::setTemplate(const CRmgTemplate * tmpl)
|
|||||||
assert(GH.topInt().get() == this);
|
assert(GH.topInt().get() == this);
|
||||||
GH.popInt(GH.topInt());
|
GH.popInt(GH.topInt());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TeamAlignmentsWidget::TeamAlignmentsWidget(RandomMapTab * randomMapTab):
|
||||||
|
CIntObject(),
|
||||||
|
randomMapTab(randomMapTab)
|
||||||
|
{
|
||||||
|
OBJ_CONSTRUCTION;
|
||||||
|
|
||||||
|
pos.w = 300;
|
||||||
|
pos.h = 300;
|
||||||
|
background = std::make_shared<CFilledTexture>("Bl3DCvex", pos);
|
||||||
|
center(pos);
|
||||||
|
|
||||||
|
buttonOk = std::make_shared<CButton>(Point(43, 240), "MUBCHCK.DEF", CGI->generaltexth->zelp[560], [](){});
|
||||||
|
buttonCancel = std::make_shared<CButton>(Point(193, 240), "MUBCANC.DEF", CGI->generaltexth->zelp[561], [&]()
|
||||||
|
{
|
||||||
|
assert(GH.topInt().get() == this);
|
||||||
|
GH.popInt(GH.topInt());
|
||||||
|
}, SDLK_ESCAPE);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|||||||
@@ -85,3 +85,18 @@ private:
|
|||||||
std::vector<const CRmgTemplate *> curItems;
|
std::vector<const CRmgTemplate *> curItems;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class TeamAlignmentsWidget: public CIntObject
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
TeamAlignmentsWidget(RandomMapTab * randomMapTab);
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
RandomMapTab * randomMapTab;
|
||||||
|
|
||||||
|
std::shared_ptr<CFilledTexture> background;
|
||||||
|
std::shared_ptr<CLabelGroup> labels;
|
||||||
|
std::shared_ptr<CButton> buttonOk, buttonCancel;
|
||||||
|
std::vector<std::shared_ptr<CToggleGroup>> teams;
|
||||||
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user