1 #include "pageclasses.h"
2 #include "dfclasses.h"
3 #include <wx/wx.h>
4 #include "common.h"
5 
PageClasses()6 PageClasses::PageClasses()
7 {
8 	skillEdits["Attributes"] = new SkillEdit;
9 	skillEdits["WeaponSkills"] = new SkillEdit;
10 	skillEdits["DefensiveSkills"] = new SkillEdit;
11 	skillEdits["MagicSkills"] = new SkillEdit;
12 	skillEdits["ThievingSkills"] = new SkillEdit;
13 }
14 
~PageClasses()15 PageClasses::~PageClasses()
16 {
17 	delete attributeStrArray;
18 
19 	for ( std::map<std::string,SkillEdit*>::iterator itr = skillEdits.begin(); itr != skillEdits.end(); itr++ )
20 	{
21 		delete itr->second->strArray;
22 		delete itr->second;
23 	}
24 }
25 
Init(wxNotebook * notebook,DF * dataFile)26 void PageClasses::Init(wxNotebook *notebook, DF *dataFile)
27 {
28 	dfClasses = (DFClasses*)dataFile;
29 	this->dataFile = dataFile;
30 	page = new wxNotebookPage(notebook, ID_ClassesPage);
31 
32 	Class *c = dfClasses->GetCurrent();
33 
34 	// name
35 	wxStaticText *nameText = new wxStaticText(page, -1, _("Name"), wxPoint(10,10));
36 	nameEdit = new wxTextCtrl(page, -1, std2wx(c->name), wxPoint(10,30), wxSize(150,25));
37 
38 	// short name
39 	wxStaticText *shortNameText = new wxStaticText(page, -1, _("Short Name"), wxPoint(170,10));
40 	shortNameEdit = new wxTextCtrl(page, -1, std2wx(c->shortName), wxPoint(170,30), wxSize(50,25));
41 
42 	// description
43 	wxStaticText *descText = new wxStaticText(page, -1, _("Description"), wxPoint(450,10));
44 	descEdit = new wxTextCtrl(page, -1, std2wx(c->description), wxPoint(450,30), wxSize(350,150), wxTE_MULTILINE);
45 
46 	// Per level Bonuses
47 	wxStaticBox *bonusesBox = new wxStaticBox(page, -1, L"Per level bonuses", wxPoint(10,60),wxSize(160,80));
48 		// hp bonus
49 		wxStaticText *hpBonusText = new wxStaticText(page, -1, _("HP"), wxPoint(20,80));
50 		hpBonusEdit = new wxTextCtrl(page, -1, std2wx(c->hpBonus), wxPoint(20,100), wxSize(30,-1));
51 		// mp bonus
52 		wxStaticText *mpBonusText = new wxStaticText(page, -1, _("MP"), wxPoint(55,80));
53 		mpBonusEdit = new wxTextCtrl(page, -1, std2wx(c->mpBonus), wxPoint(55,100), wxSize(30,-1));
54 		// skill bonus
55 		wxStaticText *skillBonusText = new wxStaticText(page, -1, _("Skill"), wxPoint(90,80));
56 		skillBonusEdit = new wxTextCtrl(page, -1, std2wx(c->skillBonus), wxPoint(90,100), wxSize(30,-1));
57 		// attack bonus
58 		wxStaticText *attackBonusText = new wxStaticText(page, -1, _("Attack"), wxPoint(125,80));
59 		attackBonusEdit = new wxTextCtrl(page, -1, std2wx(c->attackBonus), wxPoint(125,100), wxSize(30,-1));
60 	// level progression
61 	wxStaticText *levelProgressionText = new wxStaticText(page, -1, _("Level Progression"), wxPoint(180,80));
62 	levelProgressionEdit = new wxTextCtrl(page, -1, std2wx(c->levelProgression), wxPoint(210,100), wxSize(30,-1));
63 	// additional attack level
64 	wxStaticText *additionalAttackLevelText = new wxStaticText(page, -1, _("Additional Attack Level"), wxPoint(300,80));
65 	additionalAttackLevelEdit = new wxTextCtrl(page, -1, std2wx(c->additionalAttackLevel), wxPoint(350,100), wxSize(30,-1));
66 
67 	SkillEdit *skillEdit;
68 /**
69 	Attributes
70 **/
71 	wxStaticBox *attributeBox = new wxStaticBox(page, -1, L"Attributes", wxPoint(10,185),wxSize(140,140));
72 	skillEdit = skillEdits["Attributes"];
73 		wxString str[] = { L"SPEED", L"COORDINATION", L"POWER", L"IQ", L"LEADERSHIP", L"LUCK", L"PIETY", L"LORE" };
74 		skillEdit->strArray = new wxArrayString(8, str);
75 		skillEdit->list = new wxListBox(page, ID_ClassesSkillList, wxPoint(15,205), wxSize(130,80), *skillEdit->strArray);
76 			skillEdit->list->SetFont( wxFont(8, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL) );
77 		// Min
78 		wxStaticText *attributeMinText = new wxStaticText(page, -1, _("Min:"), wxPoint(15,295));
79 		skillEdit->minEdit = new wxTextCtrl(page, -1, L"", wxPoint(40,290), wxSize(35,25));
80 
81 		// Max
82 		wxStaticText *skillMaxText = new wxStaticText(page, -1, _("Max:"), wxPoint(80,295));
83 		skillEdit->maxEdit = new wxTextCtrl(page, -1, L"", wxPoint(110,290), wxSize(35,-1));
84 
85 /**
86 	Weapon Skills
87 **/
88 	wxStaticBox *weaponSkillBox = new wxStaticBox(page, -1, L"Weapon Skills", wxPoint(160,185),wxSize(180,140));
89 	skillEdit = skillEdits["WeaponSkills"];
90 		wxString wStr[] = { L"SWORD_WEAPON", L"AXE_WEAPON", L"BOW_WEAPON", L"MACE_WEAPON", L"HAND_TO_HAND_COMBAT" };
91 		skillEdit->strArray = new wxArrayString(5, wStr);
92 		skillEdit->list = new wxListBox(page, ID_ClassesSkillList, wxPoint(165,205), wxSize(170,80), *skillEdit->strArray);
93 			skillEdit->list->SetFont( wxFont(8, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL) );
94 		// Min
95 		wxStaticText *weaponSkillMinText = new wxStaticText(page, -1, _("Min:"), wxPoint(165,295));
96 		skillEdit->minEdit = new wxTextCtrl(page, -1, L"", wxPoint(195,290), wxSize(45,25));
97 
98 		// Max
99 		wxStaticText *weaponSkillMaxText = new wxStaticText(page, -1, _("Max:"), wxPoint(255,295));
100 		skillEdit->maxEdit = new wxTextCtrl(page, -1, L"", wxPoint(285,290), wxSize(45,-1));
101 
102 /**
103 	Defensive Skills
104 **/
105 	wxStaticBox *defensiveSkillBox = new wxStaticBox(page, -1, L"Defensive Skills", wxPoint(350,185),wxSize(140,140));
106 	skillEdit = skillEdits["DefensiveSkills"];
107 		wxString dStr[] = { L"SHIELD_DEFEND", L"ARMOR_DEFEND", L"WEAPON_DEFEND", L"HAND_DEFEND" };
108 		skillEdit->strArray = new wxArrayString(4, dStr);
109 		skillEdit->list = new wxListBox(page, ID_ClassesSkillList, wxPoint(355,205), wxSize(130,80), *skillEdit->strArray);
110 			skillEdit->list->SetFont( wxFont(8, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL) );
111 		// Min
112 		wxStaticText *defensiveSkillMinText = new wxStaticText(page, -1, _("Min:"), wxPoint(355,295));
113 		skillEdit->minEdit = new wxTextCtrl(page, -1, L"", wxPoint(380,290), wxSize(35,25));
114 
115 		// Max
116 		wxStaticText *defensiveSkillMaxText = new wxStaticText(page, -1, _("Max:"), wxPoint(420,295));
117 		skillEdit->maxEdit = new wxTextCtrl(page, -1, L"", wxPoint(450,290), wxSize(35,-1));
118 
119 /**
120 	Magic Skills
121 **/
122 	wxStaticBox *magicSkillBox = new wxStaticBox(page, -1, L"Magic Skills", wxPoint(500,185),wxSize(175,140));
123 	skillEdit = skillEdits["MagicSkills"];
124 		wxString mStr [] = { L"NATURE_MAGIC", L"AWARENESS_MAGIC", L"LIFE_AND_DEATH_MAGIC", L"HISTORY_MAGIC", L"DECEIT_MAGIC", L"CONFRONTATION" };
125 		skillEdit->strArray = new wxArrayString(6, mStr);
126 		skillEdit->list = new wxListBox(page, ID_ClassesSkillList, wxPoint(505,205), wxSize(165,80), *skillEdit->strArray);
127 			skillEdit->list->SetFont( wxFont(8, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL) );
128 		// Min
129 		wxStaticText *magicSkillMinText = new wxStaticText(page, -1, _("Min:"), wxPoint(505,295));
130 		skillEdit->minEdit = new wxTextCtrl(page, -1, L"", wxPoint(535,290), wxSize(35,25));
131 
132 		// Max
133 		wxStaticText *magicSkillMaxText = new wxStaticText(page, -1, _("Max:"), wxPoint(575,295));
134 		skillEdit->maxEdit = new wxTextCtrl(page, -1, L"", wxPoint(605,290), wxSize(35,-1));
135 
136 /**
137 	Thieving Skills
138 **/
139 	wxStaticBox *thievingSkillBox = new wxStaticBox(page, -1, L"Magic Skills", wxPoint(685,185),wxSize(140,140));
140 	skillEdit = skillEdits["ThievingSkills"];
141 		wxString tStr [] = { L"OPEN_LOCK", L"FIND_TRAP", L"MOVE_UNDETECTED", L"STEALING" };
142 		skillEdit->strArray = new wxArrayString(4, tStr);
143 		skillEdit->list = new wxListBox(page, ID_ClassesSkillList, wxPoint(690,205), wxSize(130,80), *skillEdit->strArray);
144 			skillEdit->list->SetFont( wxFont(8, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL) );
145 		// Min
146 		wxStaticText *thievingSkillMinText = new wxStaticText(page, -1, _("Min:"), wxPoint(690,295));
147 		skillEdit->minEdit = new wxTextCtrl(page, -1, L"", wxPoint(715,290), wxSize(35,25));
148 
149 		// Max
150 		wxStaticText *thievingSkillMaxText = new wxStaticText(page, -1, _("Max:"), wxPoint(755,295));
151 		skillEdit->maxEdit = new wxTextCtrl(page, -1, L"", wxPoint(785,290), wxSize(35,-1));
152 
153 	notebook->AddPage(page, _("Classes"));
154 }
155 
UpdatePage()156 void PageClasses::UpdatePage()
157 {
158 }
159 
GetCurrent()160 void PageClasses::GetCurrent()
161 {
162 	Class *c = dfClasses->GetCurrent();
163 
164 	nameEdit->SetValue( std2wx(c->name) );
165 	shortNameEdit->SetValue( std2wx(c->shortName) );
166 	descEdit->SetValue( std2wx(c->description) );
167 
168 	hpBonusEdit->SetValue( std2wx(c->hpBonus) );
169 	mpBonusEdit->SetValue( std2wx(c->mpBonus) );
170 	skillBonusEdit->SetValue( std2wx(c->skillBonus) );
171 	attackBonusEdit->SetValue( std2wx(c->attackBonus) );
172 
173 	levelProgressionEdit->SetValue( std2wx(c->levelProgression) );
174 	additionalAttackLevelEdit->SetValue( std2wx(c->additionalAttackLevel) );
175 
176 	GetSkills();
177 }
178 
SetCurrent()179 void PageClasses::SetCurrent()
180 {
181 	Class *c = dfClasses->GetCurrent();
182 
183 	c->name = wx2std( nameEdit->GetValue() );
184 	c->shortName = wx2std( shortNameEdit->GetValue() );
185 	c->description = wx2std( descEdit->GetValue() );
186 
187 	c->hpBonus = wx2std( hpBonusEdit->GetValue() );
188 	c->mpBonus = wx2std( mpBonusEdit->GetValue() );
189 	c->skillBonus = wx2std( skillBonusEdit->GetValue() );
190 	c->attackBonus = wx2std( attackBonusEdit->GetValue() );
191 
192 	c->levelProgression = wx2std( levelProgressionEdit->GetValue() );
193 	c->additionalAttackLevel = wx2std( additionalAttackLevelEdit->GetValue() );
194 
195 	SetSkills();
196 }
197 
ClearCurrent()198 void PageClasses::ClearCurrent()
199 {
200 	Class *c = dfClasses->GetCurrent();
201 
202 	c->Clear();
203 }
204 
GetSkills()205 void PageClasses::GetSkills()
206 {
207 	std::string str;
208 	str = "Attributes";			GetSkill(str);
209 	str = "WeaponSkills";		GetSkill(str);
210 	str = "DefensiveSkills";	GetSkill(str);
211 	str = "MagicSkills";		GetSkill(str);
212 	str = "ThievingSkills";		GetSkill(str);
213 }
SetSkills()214 void PageClasses::SetSkills()
215 {
216 	std::string str;
217 	str = "Attributes";			SetSkill(str);
218 	str = "WeaponSkills";		SetSkill(str);
219 	str = "DefensiveSkills";	SetSkill(str);
220 	str = "MagicSkills";		SetSkill(str);
221 	str = "ThievingSkills";		SetSkill(str);
222 }
GetSkill(std::string & skillType)223 void PageClasses::GetSkill(std::string &skillType)
224 {
225 	Skill *skill = GetSelectedSkill(skillType);
226 	if ( skill )
227 	{
228 		skillEdits[skillType]->minEdit->SetValue( std2wx(skill->min) );
229 		skillEdits[skillType]->maxEdit->SetValue( std2wx(skill->max) );
230 	}
231 }
SetSkill(std::string & skillType)232 void PageClasses::SetSkill(std::string &skillType)
233 {
234 	Skill *skill = currentSkills[skillType];
235 	if ( skill )
236 	{
237 		skill->min = wx2std( skillEdits[skillType]->minEdit->GetValue() );
238 		skill->max = wx2std( skillEdits[skillType]->maxEdit->GetValue() );
239 	}
240 }
241 
GetSelectedSkill(std::string & skillType)242 Skill* PageClasses::GetSelectedSkill(std::string &skillType)
243 {
244 	PageClasses *pPage = ((PageClasses*)currentPage);		// wxWidgets event callback safety
245 	Class *c = pPage->dfClasses->GetCurrent();
246 
247 	wxArrayInt selected;
248 	if ( pPage->skillEdits[skillType]->list->GetSelections(selected) == 0 )
249 		return 0;
250 
251 	wxArrayString *pAttributeStrArray = pPage->skillEdits[skillType]->strArray;
252 	wxString str = (*pAttributeStrArray)[ (selected[0]) ];
253 
254 	currentSkills[skillType] = c->skills[ wx2std(str) ];
255 	return currentSkills[skillType];
256 }
257 
OnSkillChange()258 void PageClasses::OnSkillChange()
259 {
260 	PageClasses *pPage = ((PageClasses*)currentPage);
261 
262 	pPage->SetSkills();
263 	pPage->GetSkills();
264 }
265