1
0
Fork 0
mirror of https://github.com/OpenMW/openmw.git synced 2025-06-25 15:11:33 +00:00

Dynamically build the attribute selection dialog

This commit is contained in:
Evil Eye 2023-06-18 19:55:33 +02:00
parent ea2cedb5ea
commit 75f0ad4e95
4 changed files with 18 additions and 18 deletions

View file

@ -749,24 +749,29 @@ namespace MWGui
center(); center();
const auto& store = MWBase::Environment::get().getWorld()->getStore().get<ESM::Attribute>(); const auto& store = MWBase::Environment::get().getWorld()->getStore().get<ESM::Attribute>();
MyGUI::ScrollView* attributes;
getWidget(attributes, "Attributes");
MyGUI::IntCoord coord{ 0, 0, attributes->getWidth(), 18 };
for (const ESM::Attribute& attribute : store) for (const ESM::Attribute& attribute : store)
{ {
Widgets::MWAttributePtr widget; auto* widget
char theIndex = '0' + attribute.mId; = attributes->createWidget<Widgets::MWAttribute>("MW_StatNameButtonC", coord, MyGUI::Align::Default);
coord.top += coord.height;
getWidget(widget, std::string("Attribute").append(1, theIndex));
widget->setAttributeId(attribute.mId); widget->setAttributeId(attribute.mId);
widget->eventClicked += MyGUI::newDelegate(this, &SelectAttributeDialog::onAttributeClicked); widget->eventClicked += MyGUI::newDelegate(this, &SelectAttributeDialog::onAttributeClicked);
ToolTips::createAttributeToolTip(widget, widget->getAttributeId()); ToolTips::createAttributeToolTip(widget, attribute.mId);
} }
attributes->setVisibleVScroll(false);
attributes->setCanvasSize(MyGUI::IntSize(attributes->getWidth(), std::max(attributes->getHeight(), coord.top)));
attributes->setVisibleVScroll(true);
attributes->setViewOffset(MyGUI::IntPoint());
MyGUI::Button* cancelButton; MyGUI::Button* cancelButton;
getWidget(cancelButton, "CancelButton"); getWidget(cancelButton, "CancelButton");
cancelButton->eventMouseButtonClick += MyGUI::newDelegate(this, &SelectAttributeDialog::onCancelClicked); cancelButton->eventMouseButtonClick += MyGUI::newDelegate(this, &SelectAttributeDialog::onCancelClicked);
} }
SelectAttributeDialog::~SelectAttributeDialog() {}
// widget controls // widget controls
void SelectAttributeDialog::onAttributeClicked(Widgets::MWAttributePtr _sender) void SelectAttributeDialog::onAttributeClicked(Widgets::MWAttributePtr _sender)

View file

@ -184,7 +184,7 @@ namespace MWGui
{ {
public: public:
SelectAttributeDialog(); SelectAttributeDialog();
~SelectAttributeDialog(); ~SelectAttributeDialog() override = default;
bool exit() override; bool exit() override;

View file

@ -46,7 +46,7 @@ namespace MWGui
const MWWorld::ESMStore& store = *MWBase::Environment::get().getESMStore(); const MWWorld::ESMStore& store = *MWBase::Environment::get().getESMStore();
MyGUI::Widget* attributeView = getWidget("AttributeView"); MyGUI::Widget* attributeView = getWidget("AttributeView");
MyGUI::IntCoord coord{ 0, 0, 204, 144 }; MyGUI::IntCoord coord{ 0, 0, 204, 18 };
const MyGUI::Align align = MyGUI::Align::Left | MyGUI::Align::Top | MyGUI::Align::HStretch; const MyGUI::Align align = MyGUI::Align::Left | MyGUI::Align::Top | MyGUI::Align::HStretch;
for (const ESM::Attribute& attribute : store.get<ESM::Attribute>()) for (const ESM::Attribute& attribute : store.get<ESM::Attribute>())
{ {
@ -56,7 +56,7 @@ namespace MWGui
box->setUserString("Caption_AttributeName", attribute.mName); box->setUserString("Caption_AttributeName", attribute.mName);
box->setUserString("Caption_AttributeDescription", attribute.mDescription); box->setUserString("Caption_AttributeDescription", attribute.mDescription);
box->setUserString("ImageTexture_AttributeImage", attribute.mIcon); box->setUserString("ImageTexture_AttributeImage", attribute.mIcon);
coord.top += 18; coord.top += coord.height;
auto* name = box->createWidget<MyGUI::TextBox>("SandText", { 0, 0, 160, 18 }, align); auto* name = box->createWidget<MyGUI::TextBox>("SandText", { 0, 0, 160, 18 }, align);
name->setNeedMouseFocus(false); name->setNeedMouseFocus(false);
name->setCaption(attribute.mName); name->setCaption(attribute.mName);

View file

@ -10,14 +10,9 @@
</Widget> </Widget>
<!-- Attribute list --> <!-- Attribute list -->
<Widget type="MWAttribute" skin="MW_StatNameButtonC" position="0 28 216 18" name="Attribute0" align="Left Top"/> <Widget type="ScrollView" skin="MW_ScrollView" position="0 28 216 172" name="Attributes" align="Left Top">
<Widget type="MWAttribute" skin="MW_StatNameButtonC" position="0 46 216 18" name="Attribute1" align="Left Top"/> <Property key="CanvasAlign" value="Left"/>
<Widget type="MWAttribute" skin="MW_StatNameButtonC" position="0 64 216 18" name="Attribute2" align="Left Top"/> </Widget>
<Widget type="MWAttribute" skin="MW_StatNameButtonC" position="0 82 216 18" name="Attribute3" align="Left Top"/>
<Widget type="MWAttribute" skin="MW_StatNameButtonC" position="0 100 216 18" name="Attribute4" align="Left Top"/>
<Widget type="MWAttribute" skin="MW_StatNameButtonC" position="0 118 216 18" name="Attribute5" align="Left Top"/>
<Widget type="MWAttribute" skin="MW_StatNameButtonC" position="0 136 216 18" name="Attribute6" align="Left Top"/>
<Widget type="MWAttribute" skin="MW_StatNameButtonC" position="0 154 216 18" name="Attribute7" align="Left Top"/>
<!-- Dialog buttons --> <!-- Dialog buttons -->
<Widget type="HBox" position="0 175 216 28"> <Widget type="HBox" position="0 175 216 28">