184 lines
7.9 KiB
C#
184 lines
7.9 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Data;
|
|
using System.Drawing;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Windows.Forms;
|
|
using d20_SRD_Spell_Lists.Models;
|
|
using d20_SRD_Spell_Lists.Exceptions;
|
|
|
|
namespace d20_SRD_Spell_Lists {
|
|
public partial class FrmMain : Form {
|
|
private SpellSet spells;
|
|
private Character character;
|
|
|
|
public FrmMain() {
|
|
InitializeComponent();
|
|
|
|
character = new Character();
|
|
spells = new SpellSet();
|
|
spellsDataGridView.AutoGenerateColumns = false;
|
|
|
|
setupAttributes();
|
|
setupClassList();
|
|
}
|
|
|
|
private void setupAttributes() {
|
|
txtStrength_TextChanged(txtStrength, new EventArgs());
|
|
txtDexterity_TextChanged(txtDexterity, new EventArgs());
|
|
txtConstitution_TextChanged(txtConstitution, new EventArgs());
|
|
txtIntelligence_TextChanged(txtIntelligence, new EventArgs());
|
|
txtWisdom_TextChanged(txtWisdom, new EventArgs());
|
|
txtCharisma_TextChanged(txtCharisma, new EventArgs());
|
|
}
|
|
|
|
private void setupClassList() {
|
|
classComboBox.DataSource = Character.ClassNames;
|
|
classComboBox.DropDownStyle = ComboBoxStyle.DropDownList;
|
|
classComboBox.SelectedIndexChanged += new System.EventHandler(classComboBox_SelectedIndexChanged);
|
|
classComboBox_SelectedIndexChanged(classComboBox, new EventArgs());
|
|
|
|
charClassComboBox.DataSource = Character.ClassNames;
|
|
charClassComboBox.DropDownStyle = ComboBoxStyle.DropDownList;
|
|
charClassComboBox.SelectedIndexChanged += new System.EventHandler(charClassComboBox_SelectedIndexChanged);
|
|
charClassComboBox_SelectedIndexChanged(charClassComboBox, new EventArgs());
|
|
}
|
|
|
|
private void classComboBox_SelectedIndexChanged(object sender, EventArgs e) {
|
|
ComboBox classList = (ComboBox)sender;
|
|
|
|
string charClass = classList.SelectedItem.ToString();
|
|
this.spellsDataGridView.DataSource = spells.byClass((Character.SpellCastingClasses)Enum.Parse(typeof(Character.SpellCastingClasses), charClass, true));
|
|
}
|
|
|
|
private void charClassComboBox_SelectedIndexChanged(object sender, EventArgs e) {
|
|
ComboBox classList = (ComboBox)sender;
|
|
|
|
string charClass = classList.SelectedItem.ToString();
|
|
character.CharacterClass = (Character.SpellCastingClasses)Enum.Parse(typeof(Character.SpellCastingClasses), charClass);
|
|
this.classComboBox.SelectedItem = charClassComboBox.SelectedItem;
|
|
updateSpellDCs();
|
|
updateExtraSpells();
|
|
}
|
|
|
|
private void updateExtraSpells() {
|
|
for (int i = 0; i < character.BonusSpells.Length; i++) {
|
|
((Label)this.Controls.Find("lblExtra" + i, true)[0]).Text = character.BonusSpells[i].ToString();
|
|
}
|
|
}
|
|
|
|
private void updateSpellDCs() {
|
|
for (int i = 0; i < 10; i++) {
|
|
((Label)this.Controls.Find("lblDC" + i, true)[0]).Text = (10 + i + character.SpellCastingAttributeMod).ToString();
|
|
}
|
|
}
|
|
|
|
private void txtStrength_Validating(object sender, CancelEventArgs e) {
|
|
int val;
|
|
if (txtStrength.Text != "" && !int.TryParse(txtStrength.Text, out val)) {
|
|
errorProvider.SetError(txtStrength, "Strength should be a number or empty.");
|
|
e.Cancel = true;
|
|
}
|
|
}
|
|
|
|
private void txtStrength_TextChanged(object sender, EventArgs e) {
|
|
if (txtStrength.Text != "") {
|
|
character.Strength = int.Parse(txtStrength.Text);
|
|
lblStrMod.Text = String.Format((character.StrengthMod >= 0) ? "+{0:D}" : "{0:D}", character.StrengthMod);
|
|
}
|
|
}
|
|
|
|
private void txtDexterity_TextChanged(object sender, EventArgs e) {
|
|
if (txtDexterity.Text != "") {
|
|
character.Dexterity = int.Parse(txtDexterity.Text);
|
|
lblDexMod.Text = String.Format((character.DexterityMod >= 0) ? "+{0:D}" : "{0:D}", character.DexterityMod);
|
|
}
|
|
}
|
|
|
|
private void txtConstitution_TextChanged(object sender, EventArgs e) {
|
|
if (txtConstitution.Text != "") {
|
|
character.Constitution = int.Parse(txtConstitution.Text);
|
|
lblConMod.Text = String.Format((character.Constitution >= 0) ? "+{0:D}" : "{0:D}", character.ConstitutionMod);
|
|
}
|
|
}
|
|
|
|
private void txtIntelligence_TextChanged(object sender, EventArgs e) {
|
|
if (txtIntelligence.Text != "") {
|
|
character.Intelligence = int.Parse(txtIntelligence.Text);
|
|
lblIntMod.Text = String.Format((character.Intelligence >= 0) ? "+{0:D}" : "{0:D}", character.IntelligenceMod);
|
|
updateSpellDCs();
|
|
updateExtraSpells();
|
|
}
|
|
}
|
|
|
|
private void txtWisdom_TextChanged(object sender, EventArgs e) {
|
|
if (txtWisdom.Text != "") {
|
|
character.Wisdom = int.Parse(txtWisdom.Text);
|
|
lblWisMod.Text = String.Format((character.Wisdom >= 0) ? "+{0:D}" : "{0:D}", character.WisdomMod);
|
|
updateSpellDCs();
|
|
updateExtraSpells();
|
|
}
|
|
}
|
|
|
|
private void txtCharisma_TextChanged(object sender, EventArgs e) {
|
|
if (txtCharisma.Text != "") {
|
|
character.Charisma = int.Parse(txtCharisma.Text);
|
|
lblChaMod.Text = String.Format((character.Charisma >= 0) ? "+{0:D}" : "{0:D}", character.CharismaMod);
|
|
updateSpellDCs();
|
|
updateExtraSpells();
|
|
}
|
|
}
|
|
|
|
private void saveToolStripButton_Click(object sender, EventArgs e) {
|
|
try {
|
|
character.save();
|
|
} catch (NoCharacterFileException) {
|
|
SaveFileDialog sfd = new SaveFileDialog();
|
|
sfd.AddExtension = true;
|
|
sfd.Filter = "Character files (*.xml)|*.xml|All files (*.*)|*.*";
|
|
sfd.FilterIndex = 1;
|
|
sfd.RestoreDirectory = true;
|
|
|
|
if (sfd.ShowDialog() == DialogResult.OK) {
|
|
string filename = sfd.FileName;
|
|
character.FileName = filename;
|
|
character.save();
|
|
}
|
|
}
|
|
}
|
|
|
|
private void txtCharacter_TextChanged(object sender, EventArgs e) {
|
|
character.Name = txtCharacter.Text;
|
|
}
|
|
|
|
private void openToolStripButton_Click(object sender, EventArgs e) {
|
|
OpenFileDialog ofd = new OpenFileDialog();
|
|
ofd.Filter = "Character files (*.xml)|*.xml|All files (*.*)|*.*";
|
|
ofd.FilterIndex = 1;
|
|
ofd.RestoreDirectory = true;
|
|
|
|
if (ofd.ShowDialog() == DialogResult.OK) {
|
|
try {
|
|
character = new Character(ofd.FileName);
|
|
loadValues();
|
|
} catch (Exception ex) {
|
|
MessageBox.Show("Error: Could not read the character file. Original error: " + ex.Message);
|
|
}
|
|
}
|
|
}
|
|
|
|
private void loadValues() {
|
|
txtCharacter.Text = character.Name;
|
|
txtStrength.Text = character.Strength.ToString();
|
|
txtDexterity.Text = character.Dexterity.ToString();
|
|
txtConstitution.Text = character.Constitution.ToString();
|
|
txtIntelligence.Text = character.Intelligence.ToString();
|
|
txtWisdom.Text = character.Wisdom.ToString();
|
|
txtCharisma.Text = character.Charisma.ToString();
|
|
charClassComboBox.SelectedItem = Character.getClassName(character.CharacterClass);
|
|
}
|
|
}
|
|
}
|