private void PopulateFields(string recordName)
        {
            bool bitFlag;

            Model       = new SpellModel();
            DetailModel = new List <SpellDetailsModel>();
            if (recordName != string.Empty)
            {
                Model.Initialize(recordName);
                DetailModel = SpellDetailsModel.GetAll(Model.Id);
            }

            //basic fields
            SpellNameInputBox.Text           = Model.SpellName;
            SpellSchoolComboBox.SelectedItem = SpellSchoolModel.GetNameFromId(Model.SpellSchoolId);
            SpellIconInputBox.Text           = Model.IconFilename;
            DescriptionPreview.Navigate("about:blank");
            DescriptionPreview.Document.OpenNew(false);
            DescriptionPreview.Document.Write(Model.Description);
            DescriptionPreview.Refresh();
            RangeInputComboBox.SelectedItem = Model.SpellRange;
            for (int i = 0; i < ComponentCheckListBox.Items.Count; i++)
            {
                bitFlag = ((Model.SpellComponents & (1 << i)) > 0);
                ComponentCheckListBox.SetItemChecked(i, bitFlag);
            }
            for (int i = 0; i < MetamagicFeatCheckListBox.Items.Count; i++)
            {
                bitFlag = ((Model.MetamagicFeats & (1 << i)) > 0);
                MetamagicFeatCheckListBox.SetItemChecked(i, bitFlag);
            }
            for (int i = 0; i < TargetCheckListBox.Items.Count; i++)
            {
                bitFlag = ((Model.Targets & (1 << i)) > 0);
                TargetCheckListBox.SetItemChecked(i, bitFlag);
            }
            DurationInputTextBox.Text        = Model.Duration;
            SavingThrowComboBox.SelectedItem = Model.SavingThrow;
            if (Model.SpellResistance == true)
            {
                SpellResistanceComboBox.SelectedItem = "Yes";
            }
            else
            {
                SpellResistanceComboBox.SelectedItem = "No";
            }
            ModDateLabel.Text    = Model.LastUpdatedDate.ToString();
            ModVersionLabel.Text = Model.LastUpdatedVersion;
            RecordGUIDLabel.Text = Model.Id.ToString();

            //the icon
            SpellIcon = new IconClass("Spells\\" + Model.IconFilename);
            SpellIcon.SetLocation(this.Width, this.Height, IconLocation);

            //the spell detail panel
            //Delete/Remove Current Controls
            for (int i = 0; i < SpellDetailSubPanel.Controls.Count; i++)
            {
                SpellDetailSubPanel.Controls[i].Dispose();
            }
            SpellDetailSubPanel.Controls.Clear();
            SpellDetailClassComboBox.Clear();
            SpellDetailLevelComboBox.Clear();
            SpellDetailCoolDownTextBox.Clear();
            SpellDetailSPCostUpDownBox.Clear();
            SpellDetailDeleteButton.Clear();
            //reload the panel
            SpellDetailRecordCount = 0;
            foreach (SpellDetailsModel detail in DetailModel)
            {
                AddSpellDetailRecordUI(detail);
            }

            DatabaseName = Model.SpellName;
            //invalidate the screen to make sure everything gets updated (icon, etc).
            Invalidate();
        }
        /// <summary>
        /// Handle an input change on a checkbox input
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="Type"></param>
        private void CheckBoxChange(object sender, InputType type, ItemCheckEventArgs e)
        {
            ushort bitField;

            switch (type)
            {
            case InputType.Component:
            {
                bitField = 0;
                for (ushort i = 0; i < ComponentCheckListBox.Items.Count; i++)
                {
                    if (ComponentCheckListBox.GetItemChecked(i))
                    {
                        bitField = (ushort)(bitField | (1 << i));
                    }
                }
                if (e.NewValue == CheckState.Checked)
                {
                    bitField = (ushort)(bitField | (1 << e.Index));
                }
                else
                {
                    bitField -= (ushort)(1 << e.Index);
                }

                Model.SpellComponents = bitField;
                DataHasChanged        = true;
                break;
            }

            case InputType.MetamagicFeat:
            {
                bitField = 0;
                for (ushort i = 0; i < MetamagicFeatCheckListBox.Items.Count; i++)
                {
                    if (MetamagicFeatCheckListBox.GetItemChecked(i))
                    {
                        bitField = (ushort)(bitField | (1 << i));
                    }
                }
                if (e.NewValue == CheckState.Checked)
                {
                    bitField = (ushort)(bitField | (1 << e.Index));
                }
                else
                {
                    bitField -= (ushort)(1 << e.Index);
                }

                Model.MetamagicFeats = bitField;
                DataHasChanged       = true;
                break;
            }

            case InputType.Target:
            {
                bitField = 0;
                for (ushort i = 0; i < TargetCheckListBox.Items.Count; i++)
                {
                    if (TargetCheckListBox.GetItemChecked(i))
                    {
                        bitField = (ushort)(bitField | (1 << i));
                    }
                }
                if (e.NewValue == CheckState.Checked)
                {
                    bitField = (ushort)(bitField | (1 << e.Index));
                }
                else
                {
                    bitField -= (ushort)(1 << e.Index);
                }

                Model.Targets  = bitField;
                DataHasChanged = true;
                break;
            }
            }
        }