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