Merge remote branch 'jpn/dialouge'

actorid
Marc Zinnschlag 14 years ago
commit 2628b5143c

@ -43,6 +43,9 @@ set(GAMEGUI_HEADER
mwgui/review.hpp
mwgui/window_manager.hpp
mwgui/console.hpp
mwgui/dialogue.hpp
mwgui/dialogue_history.hpp
mwgui/window_base.hpp
)
set(GAMEGUI
mwgui/window_manager.cpp
@ -54,6 +57,9 @@ set(GAMEGUI
mwgui/birth.cpp
mwgui/class.cpp
mwgui/review.cpp
mwgui/dialogue.cpp
mwgui/dialogue_history.cpp
mwgui/window_base.cpp
)
source_group(apps\\openmw\\mwgui FILES ${GAMEGUI_HEADER} ${GAMEGUI})

@ -14,7 +14,7 @@
#include "../mwworld/world.hpp"
#include "../mwworld/refdata.hpp"
#include "../mwgui/window_manager.hpp"
#include "../mwinput/inputmanager.hpp"
#include <iostream>
@ -275,7 +275,7 @@ namespace MWDialogue
// TODO execute script
}
mEnvironment.mWindowManager->setMode (MWGui::GM_Dialogue);
mEnvironment.mInputManager->setGuiMode(MWGui::GM_Dialogue);
break;
}
}

@ -12,17 +12,10 @@ using namespace MWGui;
using namespace Widgets;
BirthDialog::BirthDialog(MWWorld::Environment& environment)
: Layout("openmw_chargen_birth_layout.xml")
, environment(environment)
: WindowBase("openmw_chargen_birth_layout.xml", environment)
{
// Centre dialog
MyGUI::IntSize gameWindowSize = environment.mWindowManager->getGui()->getViewSize();
MyGUI::IntCoord coord = mMainWidget->getCoord();
coord.left = (gameWindowSize.width - coord.width)/2;
coord.top = (gameWindowSize.height - coord.height)/2;
mMainWidget->setCoord(coord);
WindowManager *wm = environment.mWindowManager;
center();
getWidget(spellArea, "SpellArea");

@ -1,7 +1,7 @@
#ifndef MWGUI_BIRTH_H
#define MWGUI_BIRTH_H
#include <openengine/gui/layout.hpp>
#include "window_base.hpp"
namespace MWWorld
{
@ -17,7 +17,7 @@ namespace MWGui
{
using namespace MyGUI;
class BirthDialog : public OEngine::GUI::Layout
class BirthDialog : public WindowBase
{
public:
BirthDialog(MWWorld::Environment& environment);
@ -57,8 +57,6 @@ namespace MWGui
void updateBirths();
void updateSpells();
MWWorld::Environment& environment;
MyGUI::ListPtr birthList;
MyGUI::WidgetPtr spellArea;
MyGUI::StaticImagePtr birthImage;

@ -15,15 +15,10 @@ using namespace MWGui;
/* GenerateClassResultDialog */
GenerateClassResultDialog::GenerateClassResultDialog(MWWorld::Environment& environment)
: Layout("openmw_chargen_generate_class_result_layout.xml")
, environment(environment)
: WindowBase("openmw_chargen_generate_class_result_layout.xml", environment)
{
// Centre dialog
MyGUI::IntSize gameWindowSize = environment.mWindowManager->getGui()->getViewSize();
MyGUI::IntCoord coord = mMainWidget->getCoord();
coord.left = (gameWindowSize.width - coord.width)/2;
coord.top = (gameWindowSize.height - coord.height)/2;
mMainWidget->setCoord(coord);
center();
WindowManager *wm = environment.mWindowManager;
setText("ReflectT", wm->getGameSettingString("sMessageQuestionAnswer1", ""));
@ -74,49 +69,31 @@ void GenerateClassResultDialog::onBackClicked(MyGUI::Widget* _sender)
/* PickClassDialog */
PickClassDialog::PickClassDialog(MWWorld::Environment& environment)
: Layout("openmw_chargen_class_layout.xml")
, environment(environment)
: WindowBase("openmw_chargen_class_layout.xml", environment)
{
// Centre dialog
MyGUI::IntSize gameWindowSize = environment.mWindowManager->getGui()->getViewSize();
MyGUI::IntCoord coord = mMainWidget->getCoord();
coord.left = (gameWindowSize.width - coord.width)/2;
coord.top = (gameWindowSize.height - coord.height)/2;
mMainWidget->setCoord(coord);
center();
WindowManager *wm = environment.mWindowManager;
setText("SpecializationT", wm->getGameSettingString("sChooseClassMenu1", "Specialization"));
getWidget(specializationName, "SpecializationName");
setText("FavoriteAttributesT", wm->getGameSettingString("sChooseClassMenu2", "Favorite Attributes:"));
getWidget(favoriteAttribute0, "FavoriteAttribute0");
getWidget(favoriteAttribute1, "FavoriteAttribute1");
favoriteAttribute0->setWindowManager(wm);
favoriteAttribute1->setWindowManager(wm);
getWidget(favoriteAttribute[0], "FavoriteAttribute0");
getWidget(favoriteAttribute[1], "FavoriteAttribute1");
favoriteAttribute[0]->setWindowManager(wm);
favoriteAttribute[1]->setWindowManager(wm);
setText("MajorSkillT", wm->getGameSettingString("sChooseClassMenu3", "Major Skills:"));
getWidget(majorSkill0, "MajorSkill0");
getWidget(majorSkill1, "MajorSkill1");
getWidget(majorSkill2, "MajorSkill2");
getWidget(majorSkill3, "MajorSkill3");
getWidget(majorSkill4, "MajorSkill4");
majorSkill0->setWindowManager(wm);
majorSkill1->setWindowManager(wm);
majorSkill2->setWindowManager(wm);
majorSkill3->setWindowManager(wm);
majorSkill4->setWindowManager(wm);
setText("MinorSkillT", wm->getGameSettingString("sChooseClassMenu4", "Minor Skills:"));
getWidget(minorSkill0, "MinorSkill0");
getWidget(minorSkill1, "MinorSkill1");
getWidget(minorSkill2, "MinorSkill2");
getWidget(minorSkill3, "MinorSkill3");
getWidget(minorSkill4, "MinorSkill4");
minorSkill0->setWindowManager(wm);
minorSkill1->setWindowManager(wm);
minorSkill2->setWindowManager(wm);
minorSkill3->setWindowManager(wm);
minorSkill4->setWindowManager(wm);
for(int i = 0; i < 5; i++)
{
char theIndex = '0'+i;
getWidget(majorSkill[i], std::string("MajorSkill").append(1, theIndex));
getWidget(minorSkill[i], std::string("MinorSkill").append(1, theIndex));
majorSkill[i]->setWindowManager(wm);
minorSkill[i]->setWindowManager(wm);
}
getWidget(classList, "ClassList");
classList->setScrollVisible(true);
@ -259,28 +236,13 @@ void PickClassDialog::updateStats()
};
specializationName->setCaption(wm->getGameSettingString(specIds[specialization], specIds[specialization]));
favoriteAttribute0->setAttributeId(klass->data.attribute[0]);
favoriteAttribute1->setAttributeId(klass->data.attribute[1]);
Widgets::MWSkillPtr majorSkills[5] = {
majorSkill0,
majorSkill1,
majorSkill2,
majorSkill3,
majorSkill4
};
Widgets::MWSkillPtr minorSkills[5] = {
minorSkill0,
minorSkill1,
minorSkill2,
minorSkill3,
minorSkill4
};
favoriteAttribute[0]->setAttributeId(klass->data.attribute[0]);
favoriteAttribute[1]->setAttributeId(klass->data.attribute[1]);
for (int i = 0; i < 5; ++i)
{
majorSkills[i]->setSkillNumber(klass->data.skills[i][0]);
minorSkills[i]->setSkillNumber(klass->data.skills[i][1]);
majorSkill[i]->setSkillNumber(klass->data.skills[i][0]);
minorSkill[i]->setSkillNumber(klass->data.skills[i][1]);
}
classImage->setImageTexture(std::string("textures\\levelup\\") + currentClassId + ".dds");
@ -288,7 +250,7 @@ void PickClassDialog::updateStats()
/* InfoBoxDialog */
void fitToText(MyGUI::StaticTextPtr widget)
void InfoBoxDialog::fitToText(MyGUI::StaticTextPtr widget)
{
MyGUI::IntCoord inner = widget->getTextRegion();
MyGUI::IntCoord outer = widget->getCoord();
@ -298,7 +260,7 @@ void fitToText(MyGUI::StaticTextPtr widget)
widget->setSize(size);
}
void layoutVertically(MyGUI::WidgetPtr widget, int margin)
void InfoBoxDialog::layoutVertically(MyGUI::WidgetPtr widget, int margin)
{
size_t count = widget->getChildCount();
int pos = 0;
@ -319,8 +281,7 @@ void layoutVertically(MyGUI::WidgetPtr widget, int margin)
}
InfoBoxDialog::InfoBoxDialog(MWWorld::Environment& environment)
: Layout("openmw_infobox_layout.xml")
, environment(environment)
: WindowBase("openmw_infobox_layout.xml", environment)
, currentButton(-1)
{
getWidget(textBox, "TextBox");
@ -401,16 +362,6 @@ void InfoBoxDialog::onButtonClicked(MyGUI::WidgetPtr _sender)
}
}
void InfoBoxDialog::center()
{
// Centre dialog
MyGUI::IntSize gameWindowSize = environment.mWindowManager->getGui()->getViewSize();
MyGUI::IntCoord coord = mMainWidget->getCoord();
coord.left = (gameWindowSize.width - coord.width)/2;
coord.top = (gameWindowSize.height - coord.height)/2;
mMainWidget->setCoord(coord);
}
/* ClassChoiceDialog */
ClassChoiceDialog::ClassChoiceDialog(MWWorld::Environment& environment)
@ -429,19 +380,14 @@ ClassChoiceDialog::ClassChoiceDialog(MWWorld::Environment& environment)
/* CreateClassDialog */
CreateClassDialog::CreateClassDialog(MWWorld::Environment& environment)
: Layout("openmw_chargen_create_class_layout.xml")
, environment(environment)
: WindowBase("openmw_chargen_create_class_layout.xml", environment)
, specDialog(nullptr)
, attribDialog(nullptr)
, skillDialog(nullptr)
, descDialog(nullptr)
{
// Centre dialog
MyGUI::IntSize gameWindowSize = environment.mWindowManager->getGui()->getViewSize();
MyGUI::IntCoord coord = mMainWidget->getCoord();
coord.left = (gameWindowSize.width - coord.width)/2;
coord.top = (gameWindowSize.height - coord.height)/2;
mMainWidget->setCoord(coord);
center();
WindowManager *wm = environment.mWindowManager;
setText("SpecializationT", wm->getGameSettingString("sChooseClassMenu1", "Specialization"));
@ -458,28 +404,15 @@ CreateClassDialog::CreateClassDialog(MWWorld::Environment& environment)
favoriteAttribute1->eventClicked = MyGUI::newDelegate(this, &CreateClassDialog::onAttributeClicked);
setText("MajorSkillT", wm->getGameSettingString("sSkillClassMajor", ""));
getWidget(majorSkill0, "MajorSkill0");
getWidget(majorSkill1, "MajorSkill1");
getWidget(majorSkill2, "MajorSkill2");
getWidget(majorSkill3, "MajorSkill3");
getWidget(majorSkill4, "MajorSkill4");
skills.push_back(majorSkill0);
skills.push_back(majorSkill1);
skills.push_back(majorSkill2);
skills.push_back(majorSkill3);
skills.push_back(majorSkill4);
setText("MinorSkillT", wm->getGameSettingString("sSkillClassMinor", ""));
getWidget(minorSkill0, "MinorSkill0");
getWidget(minorSkill1, "MinorSkill1");
getWidget(minorSkill2, "MinorSkill2");
getWidget(minorSkill3, "MinorSkill3");
getWidget(minorSkill4, "MinorSkill4");
skills.push_back(minorSkill0);
skills.push_back(minorSkill1);
skills.push_back(minorSkill2);
skills.push_back(minorSkill3);
skills.push_back(minorSkill4);
for(int i = 0; i < 5; i++)
{
char theIndex = '0'+i;
getWidget(majorSkill[i], std::string("MajorSkill").append(1, theIndex));
getWidget(minorSkill[i], std::string("MinorSkill").append(1, theIndex));
skills.push_back(majorSkill[i]);
skills.push_back(minorSkill[i]);
}
std::vector<Widgets::MWSkillPtr>::const_iterator end = skills.end();
for (std::vector<Widgets::MWSkillPtr>::const_iterator it = skills.begin(); it != end; ++it)
@ -512,17 +445,17 @@ CreateClassDialog::CreateClassDialog(MWWorld::Environment& environment)
favoriteAttribute0->setAttributeId(ESM::Attribute::Strength);
favoriteAttribute1->setAttributeId(ESM::Attribute::Agility);
majorSkill0->setSkillId(ESM::Skill::Block);
majorSkill1->setSkillId(ESM::Skill::Armorer);
majorSkill2->setSkillId(ESM::Skill::MediumArmor);
majorSkill3->setSkillId(ESM::Skill::HeavyArmor);
majorSkill4->setSkillId(ESM::Skill::BluntWeapon);
majorSkill[0]->setSkillId(ESM::Skill::Block);
majorSkill[1]->setSkillId(ESM::Skill::Armorer);
majorSkill[2]->setSkillId(ESM::Skill::MediumArmor);
majorSkill[3]->setSkillId(ESM::Skill::HeavyArmor);
majorSkill[4]->setSkillId(ESM::Skill::BluntWeapon);
minorSkill0->setSkillId(ESM::Skill::LongBlade);
minorSkill1->setSkillId(ESM::Skill::Axe);
minorSkill2->setSkillId(ESM::Skill::Spear);
minorSkill3->setSkillId(ESM::Skill::Athletics);
minorSkill4->setSkillId(ESM::Skill::Enchant);
minorSkill[0]->setSkillId(ESM::Skill::LongBlade);
minorSkill[1]->setSkillId(ESM::Skill::Axe);
minorSkill[2]->setSkillId(ESM::Skill::Spear);
minorSkill[3]->setSkillId(ESM::Skill::Athletics);
minorSkill[4]->setSkillId(ESM::Skill::Enchant);
}
CreateClassDialog::~CreateClassDialog()
@ -559,22 +492,20 @@ std::vector<int> CreateClassDialog::getFavoriteAttributes() const
std::vector<ESM::Skill::SkillEnum> CreateClassDialog::getMajorSkills() const
{
std::vector<ESM::Skill::SkillEnum> v;
v.push_back(majorSkill0->getSkillId());
v.push_back(majorSkill1->getSkillId());
v.push_back(majorSkill2->getSkillId());
v.push_back(majorSkill3->getSkillId());
v.push_back(majorSkill4->getSkillId());
for(int i = 0; i < 5; i++)
{
v.push_back(majorSkill[i]->getSkillId());
}
return v;
}
std::vector<ESM::Skill::SkillEnum> CreateClassDialog::getMinorSkills() const
{
std::vector<ESM::Skill::SkillEnum> v;
v.push_back(majorSkill0->getSkillId());
v.push_back(majorSkill1->getSkillId());
v.push_back(majorSkill2->getSkillId());
v.push_back(majorSkill3->getSkillId());
v.push_back(majorSkill4->getSkillId());
for(int i=0; i < 5; i++)
{
v.push_back(majorSkill[i]->getSkillId());
}
return v;
}
@ -734,13 +665,10 @@ void CreateClassDialog::onBackClicked(MyGUI::Widget* _sender)
/* SelectSpecializationDialog */
SelectSpecializationDialog::SelectSpecializationDialog(MWWorld::Environment& environment, MyGUI::IntSize gameWindowSize)
: Layout("openmw_chargen_select_specialization_layout.xml")
: WindowBase("openmw_chargen_select_specialization_layout.xml", environment)
{
// Centre dialog
MyGUI::IntCoord coord = mMainWidget->getCoord();
coord.left = (gameWindowSize.width - coord.width)/2;
coord.top = (gameWindowSize.height - coord.height)/2;
mMainWidget->setCoord(coord);
center();
WindowManager *wm = environment.mWindowManager;
@ -788,43 +716,24 @@ void SelectSpecializationDialog::onCancelClicked(MyGUI::Widget* _sender)
/* SelectAttributeDialog */
SelectAttributeDialog::SelectAttributeDialog(MWWorld::Environment& environment, MyGUI::IntSize gameWindowSize)
: Layout("openmw_chargen_select_attribute_layout.xml")
: WindowBase("openmw_chargen_select_attribute_layout.xml", environment)
{
// Centre dialog
MyGUI::IntCoord coord = mMainWidget->getCoord();
coord.left = (gameWindowSize.width - coord.width)/2;
coord.top = (gameWindowSize.height - coord.height)/2;
mMainWidget->setCoord(coord);
center();
WindowManager *wm = environment.mWindowManager;
setText("LabelT", wm->getGameSettingString("sAttributesMenu1", ""));
getWidget(attribute0, "Attribute0");
getWidget(attribute1, "Attribute1");
getWidget(attribute2, "Attribute2");
getWidget(attribute3, "Attribute3");
getWidget(attribute4, "Attribute4");
getWidget(attribute5, "Attribute5");
getWidget(attribute6, "Attribute6");
getWidget(attribute7, "Attribute7");
Widgets::MWAttributePtr attributes[8] = {
attribute0,
attribute1,
attribute2,
attribute3,
attribute4,
attribute5,
attribute6,
attribute7
};
for (int i = 0; i < 8; ++i)
{
attributes[i]->setWindowManager(wm);
attributes[i]->setAttributeId(ESM::Attribute::attributeIds[i]);
attributes[i]->eventClicked = MyGUI::newDelegate(this, &SelectAttributeDialog::onAttributeClicked);
Widgets::MWAttributePtr attribute;
char theIndex = '0'+i;
getWidget(attribute, std::string("Attribute").append(1, theIndex));
attribute->setWindowManager(wm);
attribute->setAttributeId(ESM::Attribute::attributeIds[i]);
attribute->eventClicked = MyGUI::newDelegate(this, &SelectAttributeDialog::onAttributeClicked);
}
// TODO: These buttons should be managed by a Dialog class
@ -852,13 +761,10 @@ void SelectAttributeDialog::onCancelClicked(MyGUI::Widget* _sender)
/* SelectSkillDialog */
SelectSkillDialog::SelectSkillDialog(MWWorld::Environment& environment, MyGUI::IntSize gameWindowSize)
: Layout("openmw_chargen_select_skill_layout.xml")
: WindowBase("openmw_chargen_select_skill_layout.xml", environment)
{
// Centre dialog
MyGUI::IntCoord coord = mMainWidget->getCoord();
coord.left = (gameWindowSize.width - coord.width)/2;
coord.top = (gameWindowSize.height - coord.height)/2;
mMainWidget->setCoord(coord);
center();
WindowManager *wm = environment.mWindowManager;
@ -867,69 +773,47 @@ SelectSkillDialog::SelectSkillDialog(MWWorld::Environment& environment, MyGUI::I
setText("MagicLabelT", wm->getGameSettingString("sSpecializationMagic", ""));
setText("StealthLabelT", wm->getGameSettingString("sSpecializationStealth", ""));
getWidget(combatSkill0, "CombatSkill0");
getWidget(combatSkill1, "CombatSkill1");
getWidget(combatSkill2, "CombatSkill2");
getWidget(combatSkill3, "CombatSkill3");
getWidget(combatSkill4, "CombatSkill4");
getWidget(combatSkill5, "CombatSkill5");
getWidget(combatSkill6, "CombatSkill6");
getWidget(combatSkill7, "CombatSkill7");
getWidget(combatSkill8, "CombatSkill8");
getWidget(magicSkill0, "MagicSkill0");
getWidget(magicSkill1, "MagicSkill1");
getWidget(magicSkill2, "MagicSkill2");
getWidget(magicSkill3, "MagicSkill3");
getWidget(magicSkill4, "MagicSkill4");
getWidget(magicSkill5, "MagicSkill5");
getWidget(magicSkill6, "MagicSkill6");
getWidget(magicSkill7, "MagicSkill7");
getWidget(magicSkill8, "MagicSkill8");
getWidget(stealthSkill0, "StealthSkill0");
getWidget(stealthSkill1, "StealthSkill1");
getWidget(stealthSkill2, "StealthSkill2");
getWidget(stealthSkill3, "StealthSkill3");
getWidget(stealthSkill4, "StealthSkill4");
getWidget(stealthSkill5, "StealthSkill5");
getWidget(stealthSkill6, "StealthSkill6");
getWidget(stealthSkill7, "StealthSkill7");
getWidget(stealthSkill8, "StealthSkill8");
for(int i = 0; i < 9; i++)
{
char theIndex = '0'+i;
getWidget(combatSkill[i], std::string("CombatSkill").append(1, theIndex));
getWidget(magicSkill[i], std::string("MagicSkill").append(1, theIndex));
getWidget(stealthSkill[i], std::string("StealthSkill").append(1, theIndex));
}
struct {Widgets::MWSkillPtr widget; ESM::Skill::SkillEnum skillId;} skills[3][9] = {
{
{combatSkill0, ESM::Skill::Block},
{combatSkill1, ESM::Skill::Armorer},
{combatSkill2, ESM::Skill::MediumArmor},
{combatSkill3, ESM::Skill::HeavyArmor},
{combatSkill4, ESM::Skill::BluntWeapon},
{combatSkill5, ESM::Skill::LongBlade},
{combatSkill6, ESM::Skill::Axe},
{combatSkill7, ESM::Skill::Spear},
{combatSkill8, ESM::Skill::Athletics}
{combatSkill[0], ESM::Skill::Block},
{combatSkill[1], ESM::Skill::Armorer},
{combatSkill[2], ESM::Skill::MediumArmor},
{combatSkill[3], ESM::Skill::HeavyArmor},
{combatSkill[4], ESM::Skill::BluntWeapon},
{combatSkill[5], ESM::Skill::LongBlade},
{combatSkill[6], ESM::Skill::Axe},
{combatSkill[7], ESM::Skill::Spear},
{combatSkill[8], ESM::Skill::Athletics}
},
{
{magicSkill0, ESM::Skill::Enchant},
{magicSkill1, ESM::Skill::Destruction},
{magicSkill2, ESM::Skill::Alteration},
{magicSkill3, ESM::Skill::Illusion},
{magicSkill4, ESM::Skill::Conjuration},
{magicSkill5, ESM::Skill::Mysticism},
{magicSkill6, ESM::Skill::Restoration},
{magicSkill7, ESM::Skill::Alchemy},
{magicSkill8, ESM::Skill::Unarmored}
{magicSkill[0], ESM::Skill::Enchant},
{magicSkill[1], ESM::Skill::Destruction},
{magicSkill[2], ESM::Skill::Alteration},
{magicSkill[3], ESM::Skill::Illusion},
{magicSkill[4], ESM::Skill::Conjuration},
{magicSkill[5], ESM::Skill::Mysticism},
{magicSkill[6], ESM::Skill::Restoration},
{magicSkill[7], ESM::Skill::Alchemy},
{magicSkill[8], ESM::Skill::Unarmored}
},
{
{stealthSkill0, ESM::Skill::Security},
{stealthSkill1, ESM::Skill::Sneak},
{stealthSkill2, ESM::Skill::Acrobatics},
{stealthSkill3, ESM::Skill::LightArmor},
{stealthSkill4, ESM::Skill::ShortBlade},
{stealthSkill5 ,ESM::Skill::Marksman},
{stealthSkill6 ,ESM::Skill::Mercantile},
{stealthSkill7 ,ESM::Skill::Speechcraft},
{stealthSkill8 ,ESM::Skill::HandToHand}
{stealthSkill[0], ESM::Skill::Security},
{stealthSkill[1], ESM::Skill::Sneak},
{stealthSkill[2], ESM::Skill::Acrobatics},
{stealthSkill[3], ESM::Skill::LightArmor},
{stealthSkill[4], ESM::Skill::ShortBlade},
{stealthSkill[5] ,ESM::Skill::Marksman},
{stealthSkill[6] ,ESM::Skill::Mercantile},
{stealthSkill[7] ,ESM::Skill::Speechcraft},
{stealthSkill[8] ,ESM::Skill::HandToHand}
}
};
@ -966,14 +850,10 @@ void SelectSkillDialog::onCancelClicked(MyGUI::Widget* _sender)
/* DescriptionDialog */
DescriptionDialog::DescriptionDialog(MWWorld::Environment& environment, MyGUI::IntSize gameWindowSize)
: Layout("openmw_chargen_class_description_layout.xml")
, environment(environment)
: WindowBase("openmw_chargen_class_description_layout.xml", environment)
{
// Centre dialog
MyGUI::IntCoord coord = mMainWidget->getCoord();
coord.left = (gameWindowSize.width - coord.width)/2;
coord.top = (gameWindowSize.height - coord.height)/2;
mMainWidget->setCoord(coord);
center();
getWidget(textEdit, "TextEdit");

@ -1,13 +1,9 @@
#ifndef MWGUI_CLASS_H
#define MWGUI_CLASS_H
#include <components/esm_store/store.hpp>
#include <openengine/gui/layout.hpp>
#include <MyGUI.h>
#include "widgets.hpp"
#include "window_base.hpp"
namespace MWWorld
{
@ -23,7 +19,7 @@ namespace MWGui
{
using namespace MyGUI;
class InfoBoxDialog : public OEngine::GUI::Layout
class InfoBoxDialog : public WindowBase
{
public:
InfoBoxDialog(MWWorld::Environment& environment);
@ -49,10 +45,9 @@ namespace MWGui
void onButtonClicked(MyGUI::WidgetPtr _sender);
private:
void center();
MWWorld::Environment& environment;
void fitToText(MyGUI::StaticTextPtr widget);
void layoutVertically(MyGUI::WidgetPtr widget, int margin);
int currentButton;
MyGUI::WidgetPtr textBox;
MyGUI::StaticTextPtr text;
@ -75,7 +70,7 @@ namespace MWGui
ClassChoiceDialog(MWWorld::Environment& environment);
};
class GenerateClassResultDialog : public OEngine::GUI::Layout
class GenerateClassResultDialog : public WindowBase
{
public:
GenerateClassResultDialog(MWWorld::Environment& environment);
@ -103,15 +98,13 @@ namespace MWGui
void onBackClicked(MyGUI::Widget* _sender);
private:
MWWorld::Environment& environment;
MyGUI::StaticImagePtr classImage;
MyGUI::StaticTextPtr className;
std::string currentClassId;
};
class PickClassDialog : public OEngine::GUI::Layout
class PickClassDialog : public WindowBase
{
public:
PickClassDialog(MWWorld::Environment& environment);
@ -145,19 +138,17 @@ namespace MWGui
void updateClasses();
void updateStats();
MWWorld::Environment& environment;
MyGUI::StaticImagePtr classImage;
MyGUI::ListPtr classList;
MyGUI::StaticTextPtr specializationName;
Widgets::MWAttributePtr favoriteAttribute0, favoriteAttribute1;
Widgets::MWSkillPtr majorSkill0, majorSkill1, majorSkill2, majorSkill3, majorSkill4;
Widgets::MWSkillPtr minorSkill0, minorSkill1, minorSkill2, minorSkill3, minorSkill4;
Widgets::MWAttributePtr favoriteAttribute[2];
Widgets::MWSkillPtr majorSkill[5];
Widgets::MWSkillPtr minorSkill[5];
std::string currentClassId;
};
class SelectSpecializationDialog : public OEngine::GUI::Layout
class SelectSpecializationDialog : public WindowBase
{
public:
SelectSpecializationDialog(MWWorld::Environment& environment, MyGUI::IntSize gameWindowSize);
@ -187,7 +178,7 @@ namespace MWGui
ESM::Class::Specialization specializationId;
};
class SelectAttributeDialog : public OEngine::GUI::Layout
class SelectAttributeDialog : public WindowBase
{
public:
SelectAttributeDialog(MWWorld::Environment& environment, MyGUI::IntSize gameWindowSize);
@ -214,14 +205,12 @@ namespace MWGui
void onCancelClicked(MyGUI::Widget* _sender);
private:
Widgets::MWAttributePtr attribute0, attribute1, attribute2, attribute3,
attribute4, attribute5, attribute6, attribute7;
Widgets::MWAttributePtr affectedWidget;
ESM::Attribute::AttributeID attributeId;
};
class SelectSkillDialog : public OEngine::GUI::Layout
class SelectSkillDialog : public WindowBase
{
public:
SelectSkillDialog(MWWorld::Environment& environment, MyGUI::IntSize gameWindowSize);
@ -248,18 +237,15 @@ namespace MWGui
void onCancelClicked(MyGUI::Widget* _sender);
private:
Widgets::MWSkillPtr combatSkill0, combatSkill1, combatSkill2, combatSkill3, combatSkill4,
combatSkill5, combatSkill6, combatSkill7, combatSkill8;
Widgets::MWSkillPtr magicSkill0, magicSkill1, magicSkill2, magicSkill3, magicSkill4,
magicSkill5, magicSkill6, magicSkill7, magicSkill8;
Widgets::MWSkillPtr stealthSkill0, stealthSkill1, stealthSkill2, stealthSkill3, stealthSkill4,
stealthSkill5, stealthSkill6, stealthSkill7, stealthSkill8;
Widgets::MWSkillPtr combatSkill[9];
Widgets::MWSkillPtr magicSkill[9];
Widgets::MWSkillPtr stealthSkill[9];
Widgets::MWSkillPtr affectedWidget;
ESM::Skill::SkillEnum skillId;
};
class DescriptionDialog : public OEngine::GUI::Layout
class DescriptionDialog : public WindowBase
{
public:
DescriptionDialog(MWWorld::Environment& environment, MyGUI::IntSize gameWindowSize);
@ -279,12 +265,10 @@ namespace MWGui
void onOkClicked(MyGUI::Widget* _sender);
private:
MWWorld::Environment& environment;
MyGUI::EditPtr textEdit;
};
class CreateClassDialog : public OEngine::GUI::Layout
class CreateClassDialog : public WindowBase
{
public:
CreateClassDialog(MWWorld::Environment& environment);
@ -328,13 +312,11 @@ namespace MWGui
void onDialogCancel();
private:
MWWorld::Environment& environment;
MyGUI::EditPtr editName;
MyGUI::WidgetPtr specializationName;
Widgets::MWAttributePtr favoriteAttribute0, favoriteAttribute1;
Widgets::MWSkillPtr majorSkill0, majorSkill1, majorSkill2, majorSkill3, majorSkill4;
Widgets::MWSkillPtr minorSkill0, minorSkill1, minorSkill2, minorSkill3, minorSkill4;
Widgets::MWSkillPtr majorSkill[5];
Widgets::MWSkillPtr minorSkill[5];
std::vector<Widgets::MWSkillPtr> skills;
std::string description;

@ -0,0 +1,122 @@
#include "dialogue.hpp"
#include "dialogue_history.hpp"
#include "../mwworld/environment.hpp"
#include "../mwworld/world.hpp"
#include "window_manager.hpp"
#include "widgets.hpp"
#include "components/esm_store/store.hpp"
#include <assert.h>
#include <iostream>
#include <iterator>
#include <boost/algorithm/string.hpp>
#include <boost/lexical_cast.hpp>
using namespace MWGui;
using namespace Widgets;
DialogueWindow::DialogueWindow(MWWorld::Environment& environment)
: WindowBase("openmw_dialogue_window_layout.xml", environment)
{
// Centre dialog
center();
//WindowManager *wm = environment.mWindowManager;
setText("NpcName", "Name of character");
//History view
getWidget(history, "History");
history->setOverflowToTheLeft(true);
history->getClient()->eventMouseButtonClick = MyGUI::newDelegate(this, &DialogueWindow::onHistoryClicked);
//Topics list
getWidget(topicsList, "TopicsList");
topicsList->setScrollVisible(true);
topicsList->eventListSelectAccept = MyGUI::newDelegate(this, &DialogueWindow::onSelectTopic);
topicsList->eventListMouseItemActivate = MyGUI::newDelegate(this, &DialogueWindow::onSelectTopic);
topicsList->eventListChangePosition = MyGUI::newDelegate(this, &DialogueWindow::onSelectTopic);
MyGUI::ButtonPtr byeButton;
getWidget(byeButton, "ByeButton");
byeButton->eventMouseButtonClick = MyGUI::newDelegate(this, &DialogueWindow::onByeClicked);
updateOptions();
}
void DialogueWindow::onHistoryClicked(MyGUI::Widget* _sender)
{
ISubWidgetText* t = history->getSubWidgetText();
if(t == nullptr)
return;
const IntPoint& lastPressed = InputManager::getInstance().getLastLeftPressed();
size_t cursorPosition = t->getCursorPosition(lastPressed);
if(history->getColorAtPos(cursorPosition) != "#FFFFFF")
{
UString key = history->getColorTextAt(cursorPosition);
std::cout << "Clicked on key: " << key << std::endl;
//eventTopicSelected(key);
}
}
void DialogueWindow::open()
{
updateOptions();
setVisible(true);
}
void DialogueWindow::onByeClicked(MyGUI::Widget* _sender)
{
eventBye();
}
void DialogueWindow::onSelectTopic(MyGUI::List* _sender, size_t _index)
{
if (_index == MyGUI::ITEM_NONE)
return;
//const std::string* theTopic = topicsList->getItemDataAt<std::string>(_index);
//std::cout << "Selected: "<< theTopic << std::endl;
//eventTopicSelected(key);
}
void DialogueWindow::updateOptions()
{
//FIXME Add this properly
history->addDialogText("Through the translucent surface of the orb, you see shifting images of distant locations...");
for(int z = 0; z < 10; z++)
{
history->addDialogHeading("Fort Frostmoth");
history->addDialogText("The image in the orb flickers, and you see.... The cold courtyard of #FF0000Fort Frostmoth#FFFFFF, battered bu werewolf attack, but still standing, still projecting Imperial might even to this distant and cold corner of the world.");
}
//Clear the list of topics
topicsList->removeAllItems();
int i = 0;
topicsList->addItem("Ald'ruhn", i++);
topicsList->addItem("Balmora", i++);
topicsList->addItem("Sadrith Mora", i++);
topicsList->addItem("Vivec", i++);
topicsList->addItem("Ald Velothi", i++);
topicsList->addItem("Caldera", i++);
topicsList->addItem("Dagon Fel ", i++);
topicsList->addItem("Gnaar Mok", i++);
topicsList->addItem("Gnisis", i++);
topicsList->addItem("Hla Oad", i++);
topicsList->addItem("Khuul", i++);
topicsList->addItem("Maar Gan", i++);
topicsList->addItem("Molag Mar", i++);
topicsList->addItem("Pelagiad", i++);
topicsList->addItem("Seyda Neen", i++);
topicsList->addItem("Suran", i++);
topicsList->addItem("Tel Aruhn", i++);
topicsList->addItem("Tel Branora", i++);
topicsList->addItem("Tel Fyr", i++);
topicsList->addItem("Tel Mora", i++);
topicsList->addItem("Tel Vos", i++);
topicsList->addItem("Vos", i++);
}

@ -0,0 +1,50 @@
#ifndef MWGUI_DIALOGE_H
#define MWGUI_DIALOGE_H
#include "window_base.hpp"
#include <boost/array.hpp>
namespace MWWorld
{
class Environment;
}
/*
This file contains the dialouge window
Layout is defined by resources/mygui/openmw_dialogue_window_layout.xml.
*/
namespace MWGui
{
class DialogeHistory;
using namespace MyGUI;
class DialogueWindow: public WindowBase
{
public:
DialogueWindow(MWWorld::Environment& environment);
void open();
// Events
typedef delegates::CDelegate0 EventHandle_Void;
/** Event : Dialog finished, OK button clicked.\n
signature : void method()\n
*/
EventHandle_Void eventBye;
protected:
void onSelectTopic(MyGUI::List* _sender, size_t _index);
void onByeClicked(MyGUI::Widget* _sender);
void onHistoryClicked(MyGUI::Widget* _sender);
private:
void updateOptions();
DialogeHistory* history;
MyGUI::ListPtr topicsList;
};
}
#endif

@ -0,0 +1,77 @@
#include "dialogue_history.hpp"
#include "../mwworld/environment.hpp"
#include "../mwworld/world.hpp"
#include "window_manager.hpp"
#include "widgets.hpp"
#include "components/esm_store/store.hpp"
#include <assert.h>
#include <iostream>
#include <iterator>
#include <boost/algorithm/string.hpp>
#include <boost/lexical_cast.hpp>
using namespace MWGui;
using namespace Widgets;
UString DialogeHistory::getColorAtPos(size_t _pos)
{
UString colour = TextIterator::convertTagColour(mText->getTextColour());
TextIterator iterator(mText->getCaption());
while(iterator.moveNext())
{
size_t pos = iterator.getPosition();
iterator.getTagColour(colour);
if (pos < _pos)
continue;
else if (pos == _pos)
break;
}
return colour;
}
UString DialogeHistory::getColorTextAt(size_t _pos)
{
bool breakOnNext = false;
UString colour = TextIterator::convertTagColour(mText->getTextColour());
UString colour2 = colour;
TextIterator iterator(mText->getCaption());
TextIterator col_start = iterator;
while(iterator.moveNext())
{
size_t pos = iterator.getPosition();
iterator.getTagColour(colour);
if(colour != colour2)
{
if(breakOnNext)
{
return getOnlyText().substr(col_start.getPosition(), iterator.getPosition()-col_start.getPosition());
}
col_start = iterator;
colour2 = colour;
}
if (pos < _pos)
continue;
else if (pos == _pos)
{
breakOnNext = true;
}
}
return "";
}
void DialogeHistory::addDialogHeading(const UString& parText)
{
UString head("\n#00FF00");
head.append(parText);
head.append("#FFFFFF\n");
addText(head);
}
void DialogeHistory::addDialogText(const UString& parText)
{
addText(parText);
addText("\n");
}

@ -0,0 +1,20 @@
#ifndef MWGUI_DIALOGE_HISTORY_H
#define MWGUI_DIALOGE_HISTORY_H
#include <openengine/gui/layout.hpp>
namespace MWGui
{
using namespace MyGUI;
class DialogeHistory : public MyGUI::Edit
{
MYGUI_RTTI_DERIVED( DialogeHistory )
public:
Widget* getClient() { return mClient; }
UString getColorAtPos(size_t _pos);
UString getColorTextAt(size_t _pos);
void addDialogHeading(const UString& parText);
void addDialogText(const UString& parText);
};
}
#endif

@ -13,8 +13,7 @@ using namespace MWGui;
const int StatsWindow::lineHeight = 18;
StatsWindow::StatsWindow (MWWorld::Environment& environment)
: Layout("openmw_stats_window_layout.xml")
, environment(environment)
: WindowBase("openmw_stats_window_layout.xml", environment)
, lastPos(0)
, reputation(0)
, bounty(0)
@ -56,10 +55,11 @@ StatsWindow::StatsWindow (MWWorld::Environment& environment)
for (int i = 0; i < ESM::Skill::Length; ++i)
{
skillValues.insert(std::pair<int, MWMechanics::Stat<float> >(i, MWMechanics::Stat<float>()));
skillWidgetMap.insert(std::pair<int, MyGUI::WidgetPtr>(i, nullptr));
skillWidgetMap.insert(std::pair<int, MyGUI::StaticTextPtr>(i, nullptr));
}
static_cast<MyGUI::WindowPtr>(mMainWidget)->eventWindowChangeCoord = MyGUI::newDelegate(this, &StatsWindow::onWindowResize);
MyGUI::WindowPtr t = static_cast<MyGUI::WindowPtr>(mMainWidget);
t->eventWindowChangeCoord = MyGUI::newDelegate(this, &StatsWindow::onWindowResize);
}
void StatsWindow::onScrollChangePosition(MyGUI::VScrollPtr scroller, size_t pos)
@ -99,7 +99,7 @@ void StatsWindow::setPlayerName(const std::string& playerName)
mMainWidget->setCaption(playerName);
}
void StatsWindow::setStyledText(MyGUI::WidgetPtr widget, ColorStyle style, const std::string &value)
void StatsWindow::setStyledText(MyGUI::StaticTextPtr widget, ColorStyle style, const std::string &value)
{
widget->setCaption(value);
if (style == CS_Super)
@ -205,13 +205,13 @@ void StatsWindow::setValue (const std::string& id, const MWMechanics::Stat<float
{"SkillSpeechcraft", ESM::Skill::Speechcraft},
{"SkillHandToHand", ESM::Skill::HandToHand},
};
for (int i = 0; i < sizeof(skillMap)/sizeof(skillMap[0]); ++i)
for (size_t i = 0; i < sizeof(skillMap)/sizeof(skillMap[0]); ++i)
{
if (skillMap[i].id == id)
{
int skillId = skillMap[i].skillId;
skillValues[skillId] = value;
MyGUI::WidgetPtr widget = skillWidgetMap[skillId];
MyGUI::StaticTextPtr widget = skillWidgetMap[skillId];
if (widget)
{
float modified = value.getModified(), base = value.getBase();
@ -277,7 +277,7 @@ void StatsWindow::addGroup(const std::string &label, MyGUI::IntCoord &coord1, My
coord2.top += lineHeight;
}
MyGUI::WidgetPtr StatsWindow::addValueItem(const std::string text, const std::string &value, ColorStyle style, MyGUI::IntCoord &coord1, MyGUI::IntCoord &coord2)
MyGUI::StaticTextPtr StatsWindow::addValueItem(const std::string text, const std::string &value, ColorStyle style, MyGUI::IntCoord &coord1, MyGUI::IntCoord &coord2)
{
MyGUI::StaticTextPtr skillNameWidget, skillValueWidget;
@ -312,8 +312,6 @@ void StatsWindow::addItem(const std::string text, MyGUI::IntCoord &coord1, MyGUI
void StatsWindow::addSkills(const SkillList &skills, const std::string &titleId, const std::string &titleDefault, MyGUI::IntCoord &coord1, MyGUI::IntCoord &coord2)
{
WindowManager *wm = environment.mWindowManager;
MWMechanics::MechanicsManager *mm = environment.mMechanicsManager;
ESMS::ESMStore &store = environment.mWorld->getStore();
// Add a line separator if there are items above
if (!skillWidgets.empty())
@ -340,7 +338,7 @@ void StatsWindow::addSkills(const SkillList &skills, const std::string &titleId,
style = CS_Super;
else if (modified < base)
style = CS_Sub;
MyGUI::WidgetPtr widget = addValueItem(wm->getGameSettingString(skillNameId, skillNameId), boost::lexical_cast<std::string>(static_cast<int>(modified)), style, coord1, coord2);
MyGUI::StaticTextPtr widget = addValueItem(wm->getGameSettingString(skillNameId, skillNameId), boost::lexical_cast<std::string>(static_cast<int>(modified)), style, coord1, coord2);
skillWidgetMap[skillId] = widget;
}
}

@ -15,6 +15,7 @@
#include "../mwmechanics/stat.hpp"
#include "../mwworld/environment.hpp"
#include "../mwworld/world.hpp"
#include "window_base.hpp"
/*
This file contains classes corresponding to all the window layouts
@ -177,7 +178,7 @@ namespace MWGui
}
};
class StatsWindow : public OEngine::GUI::Layout
class StatsWindow : public WindowBase
{
public:
typedef std::pair<std::string, int> Faction;
@ -212,11 +213,11 @@ namespace MWGui
CS_Normal,
CS_Super
};
void setStyledText(MyGUI::WidgetPtr widget, ColorStyle style, const std::string &value);
void setStyledText(MyGUI::StaticTextPtr widget, ColorStyle style, const std::string &value);
void addSkills(const SkillList &skills, const std::string &titleId, const std::string &titleDefault, MyGUI::IntCoord &coord1, MyGUI::IntCoord &coord2);
void addSeparator(MyGUI::IntCoord &coord1, MyGUI::IntCoord &coord2);
void addGroup(const std::string &label, MyGUI::IntCoord &coord1, MyGUI::IntCoord &coord2);
MyGUI::WidgetPtr addValueItem(const std::string text, const std::string &value, ColorStyle style, MyGUI::IntCoord &coord1, MyGUI::IntCoord &coord2);
MyGUI::StaticTextPtr addValueItem(const std::string text, const std::string &value, ColorStyle style, MyGUI::IntCoord &coord1, MyGUI::IntCoord &coord2);
void addItem(const std::string text, MyGUI::IntCoord &coord1, MyGUI::IntCoord &coord2);
void updateScroller();
@ -225,14 +226,13 @@ namespace MWGui
static const int lineHeight;
MWWorld::Environment& environment;
MyGUI::WidgetPtr skillAreaWidget, skillClientWidget;
MyGUI::VScrollPtr skillScrollerWidget;
int lastPos, clientHeight;
SkillList majorSkills, minorSkills, miscSkills;
std::map<int, MWMechanics::Stat<float> > skillValues;
std::map<int, MyGUI::WidgetPtr> skillWidgetMap;
std::map<int, MyGUI::StaticTextPtr> skillWidgetMap;
std::map<std::string, MyGUI::WidgetPtr> factionWidgetMap;
FactionList factions; ///< Stores a list of factions and the current rank
std::string birthSignId;

@ -16,8 +16,7 @@ using namespace MWGui;
using namespace Widgets;
RaceDialog::RaceDialog(MWWorld::Environment& environment)
: Layout("openmw_chargen_race_layout.xml")
, environment(environment)
: WindowBase("openmw_chargen_race_layout.xml", environment)
, genderIndex(0)
, faceIndex(0)
, hairIndex(0)
@ -25,11 +24,7 @@ RaceDialog::RaceDialog(MWWorld::Environment& environment)
, hairCount(14)
{
// Centre dialog
MyGUI::IntSize gameWindowSize = environment.mWindowManager->getGui()->getViewSize();
MyGUI::IntCoord coord = mMainWidget->getCoord();
coord.left = (gameWindowSize.width - coord.width)/2;
coord.top = (gameWindowSize.height - coord.height)/2;
mMainWidget->setCoord(coord);
center();
// These are just demo values, you should replace these with
// real calls from outside the class later.

@ -3,7 +3,7 @@
#include <components/esm_store/store.hpp>
#include <openengine/gui/layout.hpp>
#include "window_base.hpp"
#include <boost/array.hpp>
@ -21,7 +21,7 @@ namespace MWGui
{
using namespace MyGUI;
class RaceDialog : public OEngine::GUI::Layout
class RaceDialog : public WindowBase
{
public:
RaceDialog(MWWorld::Environment& environment);
@ -80,8 +80,6 @@ namespace MWGui
void updateSkills();
void updateSpellPowers();
MWWorld::Environment& environment;
MyGUI::CanvasPtr appearanceBox;
MyGUI::ListPtr raceList;
MyGUI::HScrollPtr headRotate;

@ -14,16 +14,11 @@ using namespace Widgets;
const int ReviewDialog::lineHeight = 18;
ReviewDialog::ReviewDialog(MWWorld::Environment& environment)
: Layout("openmw_chargen_review_layout.xml")
, environment(environment)
: WindowBase("openmw_chargen_review_layout.xml", environment)
, lastPos(0)
{
// Centre dialog
MyGUI::IntSize gameWindowSize = environment.mWindowManager->getGui()->getViewSize();
MyGUI::IntCoord coord = mMainWidget->getCoord();
coord.left = (gameWindowSize.width - coord.width)/2;
coord.top = (gameWindowSize.height - coord.height)/2;
mMainWidget->setCoord(coord);
center();
WindowManager *wm = environment.mWindowManager;
@ -85,7 +80,7 @@ ReviewDialog::ReviewDialog(MWWorld::Environment& environment)
for (int i = 0; i < ESM::Skill::Length; ++i)
{
skillValues.insert(std::pair<int, MWMechanics::Stat<float> >(i, MWMechanics::Stat<float>()));
skillWidgetMap.insert(std::pair<int, MyGUI::WidgetPtr>(i, nullptr));
skillWidgetMap.insert(std::pair<int, MyGUI::StaticTextPtr>(i, nullptr));
}
static_cast<MyGUI::WindowPtr>(mMainWidget)->eventWindowChangeCoord = MyGUI::newDelegate(this, &ReviewDialog::onWindowResize);
@ -180,7 +175,7 @@ void ReviewDialog::setAttribute(ESM::Attribute::AttributeID attributeId, const M
void ReviewDialog::setSkillValue(ESM::Skill::SkillEnum skillId, const MWMechanics::Stat<float>& value)
{
skillValues[skillId] = value;
MyGUI::WidgetPtr widget = skillWidgetMap[skillId];
MyGUI::StaticTextPtr widget = skillWidgetMap[skillId];
if (widget)
{
float modified = value.getModified(), base = value.getBase();
@ -214,7 +209,7 @@ void ReviewDialog::configureSkills(const std::vector<int>& major, const std::vec
}
}
void ReviewDialog::setStyledText(MyGUI::WidgetPtr widget, ColorStyle style, const std::string &value)
void ReviewDialog::setStyledText(MyGUI::StaticTextPtr widget, ColorStyle style, const std::string &value)
{
widget->setCaption(value);
if (style == CS_Super)
@ -244,7 +239,7 @@ void ReviewDialog::addGroup(const std::string &label, MyGUI::IntCoord &coord1, M
coord2.top += lineHeight;
}
MyGUI::WidgetPtr ReviewDialog::addValueItem(const std::string text, const std::string &value, ColorStyle style, MyGUI::IntCoord &coord1, MyGUI::IntCoord &coord2)
MyGUI::StaticTextPtr ReviewDialog::addValueItem(const std::string text, const std::string &value, ColorStyle style, MyGUI::IntCoord &coord1, MyGUI::IntCoord &coord2)
{
MyGUI::StaticTextPtr skillNameWidget, skillValueWidget;
@ -279,8 +274,6 @@ void ReviewDialog::addItem(const std::string text, MyGUI::IntCoord &coord1, MyGU
void ReviewDialog::addSkills(const SkillList &skills, const std::string &titleId, const std::string &titleDefault, MyGUI::IntCoord &coord1, MyGUI::IntCoord &coord2)
{
WindowManager *wm = environment.mWindowManager;
MWMechanics::MechanicsManager *mm = environment.mMechanicsManager;
ESMS::ESMStore &store = environment.mWorld->getStore();
// Add a line separator if there are items above
if (!skillWidgets.empty())
@ -307,7 +300,7 @@ void ReviewDialog::addSkills(const SkillList &skills, const std::string &titleId
style = CS_Super;
else if (modified < base)
style = CS_Sub;
MyGUI::WidgetPtr widget = addValueItem(wm->getGameSettingString(skillNameId, skillNameId), boost::lexical_cast<std::string>(static_cast<int>(modified)), style, coord1, coord2);
MyGUI::StaticTextPtr widget = addValueItem(wm->getGameSettingString(skillNameId, skillNameId), boost::lexical_cast<std::string>(static_cast<int>(modified)), style, coord1, coord2);
skillWidgetMap[skillId] = widget;
}
}
@ -333,9 +326,6 @@ void ReviewDialog::updateSkillArea()
if (!miscSkills.empty())
addSkills(miscSkills, "sSkillClassMisc", "Misc Skills", coord1, coord2);
WindowManager *wm = environment.mWindowManager;
ESMS::ESMStore &store = environment.mWorld->getStore();
clientHeight = coord1.top;
updateScroller();
}

@ -1,8 +1,7 @@
#ifndef MWGUI_REVIEW_H
#define MWGUI_REVIEW_H
#include <components/esm_store/store.hpp>
#include <openengine/gui/layout.hpp>
#include "window_base.hpp"
#include "../mwmechanics/stat.hpp"
#include "widgets.hpp"
@ -20,7 +19,7 @@ namespace MWGui
{
using namespace MyGUI;
class ReviewDialog : public OEngine::GUI::Layout
class ReviewDialog : public WindowBase
{
public:
typedef std::vector<int> SkillList;
@ -92,11 +91,11 @@ namespace MWGui
CS_Normal,
CS_Super
};
void setStyledText(MyGUI::WidgetPtr widget, ColorStyle style, const std::string &value);
void setStyledText(MyGUI::StaticTextPtr widget, ColorStyle style, const std::string &value);
void addSkills(const SkillList &skills, const std::string &titleId, const std::string &titleDefault, MyGUI::IntCoord &coord1, MyGUI::IntCoord &coord2);
void addSeparator(MyGUI::IntCoord &coord1, MyGUI::IntCoord &coord2);
void addGroup(const std::string &label, MyGUI::IntCoord &coord1, MyGUI::IntCoord &coord2);
MyGUI::WidgetPtr addValueItem(const std::string text, const std::string &value, ColorStyle style, MyGUI::IntCoord &coord1, MyGUI::IntCoord &coord2);
MyGUI::StaticTextPtr addValueItem(const std::string text, const std::string &value, ColorStyle style, MyGUI::IntCoord &coord1, MyGUI::IntCoord &coord2);
void addItem(const std::string text, MyGUI::IntCoord &coord1, MyGUI::IntCoord &coord2);
void updateScroller();
void updateSkillArea();
@ -106,7 +105,6 @@ namespace MWGui
static const int lineHeight;
MWWorld::Environment& environment;
MyGUI::StaticTextPtr nameWidget, raceWidget, classWidget, birthSignWidget;
MyGUI::WidgetPtr skillAreaWidget, skillClientWidget;
MyGUI::VScrollPtr skillScrollerWidget;
@ -118,7 +116,7 @@ namespace MWGui
SkillList majorSkills, minorSkills, miscSkills;
std::map<int, MWMechanics::Stat<float> > skillValues;
std::map<int, MyGUI::WidgetPtr> skillWidgetMap;
std::map<int, MyGUI::StaticTextPtr> skillWidgetMap;
std::string name, raceId, birthSignId;
ESM::Class klass;
std::vector<MyGUI::WidgetPtr> skillWidgets; //< Skills and other information

@ -6,15 +6,10 @@
using namespace MWGui;
TextInputDialog::TextInputDialog(MWWorld::Environment& environment)
: Layout("openmw_text_input_layout.xml")
, environment(environment)
: WindowBase("openmw_text_input_layout.xml", environment)
{
// Centre dialog
MyGUI::IntSize gameWindowSize = environment.mWindowManager->getGui()->getViewSize();
MyGUI::IntCoord coord = mMainWidget->getCoord();
coord.left = (gameWindowSize.width - coord.width)/2;
coord.top = (gameWindowSize.height - coord.height)/2;
mMainWidget->setCoord(coord);
center();
getWidget(textEdit, "TextEdit");
textEdit->eventEditSelectAccept = newDelegate(this, &TextInputDialog::onTextAccepted);

@ -1,7 +1,7 @@
#ifndef MWGUI_TEXT_INPUT_H
#define MWGUI_TEXT_INPUT_H
#include <openengine/gui/layout.hpp>
#include "window_base.hpp"
namespace MWWorld
{
@ -15,7 +15,7 @@ namespace MWGui
{
using namespace MyGUI;
class TextInputDialog : public OEngine::GUI::Layout
class TextInputDialog : public WindowBase
{
public:
TextInputDialog(MWWorld::Environment& environment);
@ -40,8 +40,6 @@ namespace MWGui
void onTextAccepted(MyGUI::Edit* _sender);
private:
MWWorld::Environment& environment;
MyGUI::EditPtr textEdit;
};
}

@ -0,0 +1,25 @@
#include "window_base.hpp"
#include "../mwworld/environment.hpp"
#include "window_manager.hpp"
using namespace MWGui;
WindowBase::WindowBase(const std::string& parLayout, MWWorld::Environment& parEnvironment)
: Layout(parLayout)
, environment(parEnvironment)
{
}
void WindowBase::open()
{
}
void WindowBase::center()
{
// Centre dialog
MyGUI::IntSize gameWindowSize = environment.mWindowManager->getGui()->getViewSize();
MyGUI::IntCoord coord = mMainWidget->getCoord();
coord.left = (gameWindowSize.width - coord.width)/2;
coord.top = (gameWindowSize.height - coord.height)/2;
mMainWidget->setCoord(coord);
}

@ -0,0 +1,27 @@
#ifndef MWGUI_WINDOW_BASE_H
#define MWGUI_WINDOW_BASE_H
#include <openengine/gui/layout.hpp>
namespace MWWorld
{
class Environment;
}
namespace MWGui
{
class WindowBase: public OEngine::GUI::Layout
{
public:
WindowBase(const std::string& parLayout, MWWorld::Environment& parEnvironment);
virtual void open();
void center();
protected:
MWWorld::Environment& environment;
};
}
#endif

@ -5,6 +5,8 @@
#include "class.hpp"
#include "birth.hpp"
#include "review.hpp"
#include "dialogue.hpp"
#include "dialogue_history.hpp"
#include "../mwmechanics/mechanicsmanager.hpp"
#include "../mwinput/inputmanager.hpp"
@ -22,6 +24,7 @@ WindowManager::WindowManager(MyGUI::Gui *_gui, MWWorld::Environment& environment
: environment(environment)
, nameDialog(nullptr)
, raceDialog(nullptr)
, dialogueWindow(nullptr)
, classChoiceDialog(nullptr)
, generateClassQuestionDialog(nullptr)
, generateClassResultDialog(nullptr)
@ -41,6 +44,10 @@ WindowManager::WindowManager(MyGUI::Gui *_gui, MWWorld::Environment& environment
, shown(GW_ALL)
, allowed(newGame ? GW_None : GW_ALL)
{
//Register own widgets with MyGUI
MyGUI::FactoryManager::getInstance().registerFactory<DialogeHistory>("Widget");
// Get size info from the Gui object
assert(gui);
int w = gui->getViewSize().width;
@ -86,6 +93,7 @@ WindowManager::~WindowManager()
delete nameDialog;
delete raceDialog;
delete dialogueWindow;
delete classChoiceDialog;
delete generateClassQuestionDialog;
delete generateClassResultDialog;
@ -311,6 +319,17 @@ void WindowManager::updateVisible()
return;
}
if (mode == GM_Dialogue)
{
if (dialogueWindow)
removeDialog(dialogueWindow);
dialogueWindow = new DialogueWindow(environment);
dialogueWindow->eventBye = MyGUI::newDelegate(this, &WindowManager::onDialogueWindowBye);
dialogueWindow->open();
return;
}
// Unsupported mode, switch back to game
// Note: The call will eventually end up this method again but
// will stop at the check if(mode == GM_Game) above.
@ -337,7 +356,7 @@ void WindowManager::setValue (const std::string& id, const MWMechanics::Stat<int
ESM::Attribute::Personality,
ESM::Attribute::Luck
};
for (int i = 0; i < sizeof(ids)/sizeof(ids[0]); ++i)
for (size_t i = 0; i < sizeof(ids)/sizeof(ids[0]); ++i)
{
if (id != ids[i])
continue;
@ -380,7 +399,7 @@ void WindowManager::setValue (const std::string& id, const MWMechanics::Stat<flo
{"SkillSpeechcraft", ESM::Skill::Speechcraft},
{"SkillHandToHand", ESM::Skill::HandToHand},
};
for (int i = 0; i < sizeof(skillMap)/sizeof(skillMap[0]); ++i)
for (size_t i = 0; i < sizeof(skillMap)/sizeof(skillMap[0]); ++i)
{
if (skillMap[i].id == id)
{
@ -526,6 +545,16 @@ void WindowManager::onRaceDialogDone()
setGuiMode(GM_Game);
}
void WindowManager::onDialogueWindowBye()
{
if (dialogueWindow)
{
//FIXME set some state and stuff?
removeDialog(dialogueWindow);
}
setGuiMode(GM_Game);
}
void WindowManager::onRaceDialogBack()
{
if (raceDialog)
@ -775,7 +804,6 @@ void WindowManager::onClassQuestionChosen(MyGUI::Widget* _sender, int _index)
void WindowManager::onGenerateClassBack()
{
bool goNext = classChosen; // Go to next dialog if class was previously chosen
classChosen = true;
if (generateClassResultDialog)

@ -54,6 +54,7 @@ namespace MWGui
class TextInputDialog;
class InfoBoxDialog;
class RaceDialog;
class DialogueWindow;
class ClassChoiceDialog;
class GenerateClassResultDialog;
class PickClassDialog;
@ -82,6 +83,7 @@ namespace MWGui
// Character creation
TextInputDialog *nameDialog;
RaceDialog *raceDialog;
DialogueWindow *dialogueWindow;
ClassChoiceDialog *classChoiceDialog;
InfoBoxDialog *generateClassQuestionDialog;
GenerateClassResultDialog *generateClassResultDialog;
@ -250,6 +252,9 @@ namespace MWGui
const std::string &getGameSettingString(const std::string &id, const std::string &default_);
private:
void onDialogueWindowBye();
// Character generation: Name dialog
void onNameDialogDone();

@ -53,6 +53,7 @@ configure_file("${SDIR}/openmw_chargen_select_skill_layout.xml" "${DDIR}/openmw_
configure_file("${SDIR}/openmw_chargen_class_description_layout.xml" "${DDIR}/openmw_chargen_class_description_layout.xml" COPYONLY)
configure_file("${SDIR}/openmw_chargen_birth_layout.xml" "${DDIR}/openmw_chargen_birth_layout.xml" COPYONLY)
configure_file("${SDIR}/openmw_chargen_review_layout.xml" "${DDIR}/openmw_chargen_review_layout.xml" COPYONLY)
configure_file("${SDIR}/openmw_dialogue_window_layout.xml" "${DDIR}/openmw_dialogue_window_layout.xml" COPYONLY)
configure_file("${SDIR}/openmw_inventory_window_layout.xml" "${DDIR}/openmw_inventory_window_layout.xml" COPYONLY)
configure_file("${SDIR}/openmw_layers.xml" "${DDIR}/openmw_layers.xml" COPYONLY)
configure_file("${SDIR}/openmw_mainmenu_layout.xml" "${DDIR}/openmw_mainmenu_layout.xml" COPYONLY)

@ -0,0 +1,29 @@
<?xml version="1.0" encoding="UTF-8"?>
<MyGUI type="Layout">
<Widget type="Window" skin="MW_Dialog" layer="Windows" position="0 0 588 433" name="_Main">
<!-- HEADER -->
<Widget type="StaticText" skin="HeaderText" position="0 0 588 18" name="NpcName" align="ALIGN_LEFT ALIGN_TOP">
<Property key="Widget_Caption" value="Name"/>
<Property key="Widget_AlignText" value="ALIGN_CENTER"/>
</Widget>
<!-- The Dialogue history -->
<Widget type="DialogeHistory" skin="MW_TextBoxEdit" position="8 39 400 375" name="History" align="ALIGN_LEFT ALIGN_TOP STRETCH">
<Property key="Edit_Static" value="true"/>
<Property key="Edit_WordWrap" value="true"/>
<Property key="Text_FontHeight" value="18"/>
<Property key="Edit_MultiLine" value="1" />
<Property key="Edit_VisibleVScroll" value="1" />
</Widget>
<!-- The list of topics -->
<Widget type="List" skin="MW_List" position="432 39 132 341" name="TopicsList">
</Widget>
<!-- The Goodbye button -->
<Widget type="Button" skin="MW_Button" position="432 387 132 23" name="ByeButton">
<Property key="Widget_Caption" value="Goodbye"/>
</Widget>
</Widget>
</MyGUI>
Loading…
Cancel
Save