forked from teamnwah/openmw-tes3coop
b364d47b0b
Added a generic infobox dialog which displays some text and a set of buttons (vertical only for now), this is used for the Class Choice dialogs and the dialogs which shows various questions the player must choose from. The questions are currently hardcoded. Added more gui states to handle the extra class dialogs (Generate, Pick or Create).
309 lines
9.5 KiB
C++
309 lines
9.5 KiB
C++
#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"
|
|
|
|
namespace MWWorld
|
|
{
|
|
class Environment;
|
|
}
|
|
|
|
/*
|
|
This file contains the dialogs for choosing a class.
|
|
Layout is defined by resources/mygui/openmw_chargen_class_layout.xml.
|
|
*/
|
|
|
|
namespace MWGui
|
|
{
|
|
using namespace MyGUI;
|
|
|
|
class InfoBoxDialog : public OEngine::GUI::Layout
|
|
{
|
|
public:
|
|
InfoBoxDialog(MWWorld::Environment& environment);
|
|
|
|
typedef std::vector<std::string> ButtonList;
|
|
|
|
void setText(const std::string &str);
|
|
std::string getText() const;
|
|
void setButtons(ButtonList &buttons);
|
|
|
|
void update();
|
|
int getChosenButton() const;
|
|
|
|
// Events
|
|
typedef delegates::CDelegate2<MyGUI::WidgetPtr, int> EventHandle_WidgetInt;
|
|
|
|
/** Event : Button was clicked.\n
|
|
signature : void method(MyGUI::WidgetPtr widget, int index)\n
|
|
*/
|
|
EventHandle_WidgetInt eventButtonSelected;
|
|
|
|
protected:
|
|
void onButtonClicked(MyGUI::WidgetPtr _sender);
|
|
|
|
private:
|
|
void center();
|
|
|
|
MWWorld::Environment& environment;
|
|
|
|
int currentButton;
|
|
MyGUI::WidgetPtr textBox;
|
|
MyGUI::StaticTextPtr text;
|
|
MyGUI::WidgetPtr buttonBar;
|
|
std::vector<MyGUI::ButtonPtr> buttons;
|
|
};
|
|
|
|
// Lets the player choose between 3 ways of creating a class
|
|
class ClassChoiceDialog : public InfoBoxDialog
|
|
{
|
|
public:
|
|
// Corresponds to the buttons that can be clicked
|
|
enum ClassChoice
|
|
{
|
|
Class_Generate = 0,
|
|
Class_Pick = 1,
|
|
Class_Create = 2,
|
|
Class_Back = 3
|
|
};
|
|
ClassChoiceDialog(MWWorld::Environment& environment);
|
|
};
|
|
|
|
class PickClassDialog : public OEngine::GUI::Layout
|
|
{
|
|
public:
|
|
PickClassDialog(MWWorld::Environment& environment, MyGUI::IntSize gameWindowSize);
|
|
|
|
const std::string &getClassId() const { return currentClassId; }
|
|
void setClassId(const std::string &classId);
|
|
|
|
void setNextButtonShow(bool shown);
|
|
void open();
|
|
|
|
// Events
|
|
typedef delegates::CDelegate0 EventHandle_Void;
|
|
|
|
/** Event : Back button clicked.\n
|
|
signature : void method()\n
|
|
*/
|
|
EventHandle_Void eventBack;
|
|
|
|
/** Event : Dialog finished, OK button clicked.\n
|
|
signature : void method()\n
|
|
*/
|
|
EventHandle_Void eventDone;
|
|
|
|
protected:
|
|
void onSelectClass(MyGUI::List* _sender, size_t _index);
|
|
|
|
void onOkClicked(MyGUI::Widget* _sender);
|
|
void onBackClicked(MyGUI::Widget* _sender);
|
|
|
|
private:
|
|
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;
|
|
|
|
std::string currentClassId;
|
|
};
|
|
|
|
class SelectSpecializationDialog : public OEngine::GUI::Layout
|
|
{
|
|
public:
|
|
SelectSpecializationDialog(MWWorld::Environment& environment, MyGUI::IntSize gameWindowSize);
|
|
|
|
ESM::Class::Specialization getSpecializationId() const { return specializationId; }
|
|
|
|
// Events
|
|
typedef delegates::CDelegate0 EventHandle_Void;
|
|
|
|
/** Event : Cancel button clicked.\n
|
|
signature : void method()\n
|
|
*/
|
|
EventHandle_Void eventCancel;
|
|
|
|
/** Event : Dialog finished, specialization selected.\n
|
|
signature : void method()\n
|
|
*/
|
|
EventHandle_Void eventItemSelected;
|
|
|
|
protected:
|
|
void onSpecializationClicked(MyGUI::Widget* _sender);
|
|
void onCancelClicked(MyGUI::Widget* _sender);
|
|
|
|
private:
|
|
MyGUI::WidgetPtr specialization0, specialization1, specialization2;
|
|
|
|
ESM::Class::Specialization specializationId;
|
|
};
|
|
|
|
class SelectAttributeDialog : public OEngine::GUI::Layout
|
|
{
|
|
public:
|
|
SelectAttributeDialog(MWWorld::Environment& environment, MyGUI::IntSize gameWindowSize);
|
|
|
|
ESM::Attribute::AttributeID getAttributeId() const { return attributeId; }
|
|
Widgets::MWAttributePtr getAffectedWidget() const { return affectedWidget; }
|
|
void setAffectedWidget(Widgets::MWAttributePtr widget) { affectedWidget = widget; }
|
|
|
|
// Events
|
|
typedef delegates::CDelegate0 EventHandle_Void;
|
|
|
|
/** Event : Cancel button clicked.\n
|
|
signature : void method()\n
|
|
*/
|
|
EventHandle_Void eventCancel;
|
|
|
|
/** Event : Dialog finished, attribute selected.\n
|
|
signature : void method()\n
|
|
*/
|
|
EventHandle_Void eventItemSelected;
|
|
|
|
protected:
|
|
void onAttributeClicked(Widgets::MWAttributePtr _sender);
|
|
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
|
|
{
|
|
public:
|
|
SelectSkillDialog(MWWorld::Environment& environment, MyGUI::IntSize gameWindowSize);
|
|
|
|
ESM::Skill::SkillEnum getSkillId() const { return skillId; }
|
|
Widgets::MWSkillPtr getAffectedWidget() const { return affectedWidget; }
|
|
void setAffectedWidget(Widgets::MWSkillPtr widget) { affectedWidget = widget; }
|
|
|
|
// Events
|
|
typedef delegates::CDelegate0 EventHandle_Void;
|
|
|
|
/** Event : Cancel button clicked.\n
|
|
signature : void method()\n
|
|
*/
|
|
EventHandle_Void eventCancel;
|
|
|
|
/** Event : Dialog finished, skill selected.\n
|
|
signature : void method()\n
|
|
*/
|
|
EventHandle_Void eventItemSelected;
|
|
|
|
protected:
|
|
void onSkillClicked(Widgets::MWSkillPtr _sender);
|
|
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 affectedWidget;
|
|
|
|
ESM::Skill::SkillEnum skillId;
|
|
};
|
|
|
|
class DescriptionDialog : public OEngine::GUI::Layout
|
|
{
|
|
public:
|
|
DescriptionDialog(MWWorld::Environment& environment, MyGUI::IntSize gameWindowSize);
|
|
|
|
std::string getTextInput() const { return textEdit ? textEdit->getOnlyText() : ""; }
|
|
void setTextInput(const std::string &text) { if (textEdit) textEdit->setOnlyText(text); }
|
|
|
|
// Events
|
|
typedef delegates::CDelegate0 EventHandle_Void;
|
|
|
|
/** Event : Dialog finished, OK button clicked.\n
|
|
signature : void method()\n
|
|
*/
|
|
EventHandle_Void eventDone;
|
|
|
|
protected:
|
|
void onOkClicked(MyGUI::Widget* _sender);
|
|
|
|
private:
|
|
MWWorld::Environment& environment;
|
|
|
|
MyGUI::EditPtr textEdit;
|
|
};
|
|
|
|
class CreateClassDialog : public OEngine::GUI::Layout
|
|
{
|
|
public:
|
|
CreateClassDialog(MWWorld::Environment& environment, MyGUI::IntSize gameWindowSize);
|
|
virtual ~CreateClassDialog();
|
|
|
|
// const std::string &getClassId() const { return currentClassId; }
|
|
// void setClassId(const std::string &classId);
|
|
|
|
void setNextButtonShow(bool shown);
|
|
void open();
|
|
|
|
// Events
|
|
typedef delegates::CDelegate0 EventHandle_Void;
|
|
|
|
/** Event : Back button clicked.\n
|
|
signature : void method()\n
|
|
*/
|
|
EventHandle_Void eventBack;
|
|
|
|
/** Event : Dialog finished, OK button clicked.\n
|
|
signature : void method()\n
|
|
*/
|
|
EventHandle_Void eventDone;
|
|
|
|
protected:
|
|
void onOkClicked(MyGUI::Widget* _sender);
|
|
void onBackClicked(MyGUI::Widget* _sender);
|
|
|
|
void onSpecializationClicked(MyGUI::WidgetPtr _sender);
|
|
void onSpecializationSelected();
|
|
void onAttributeClicked(Widgets::MWAttributePtr _sender);
|
|
void onAttributeSelected();
|
|
void onSkillClicked(Widgets::MWSkillPtr _sender);
|
|
void onSkillSelected();
|
|
void onDescriptionClicked(MyGUI::Widget* _sender);
|
|
void onDescriptionEntered();
|
|
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;
|
|
std::vector<Widgets::MWSkillPtr> skills;
|
|
std::string description;
|
|
|
|
SelectSpecializationDialog *specDialog;
|
|
SelectAttributeDialog *attribDialog;
|
|
SelectSkillDialog *skillDialog;
|
|
DescriptionDialog *descDialog;
|
|
|
|
ESM::Class::Specialization specializationId;
|
|
};
|
|
}
|
|
#endif
|