private void PopulateData()
        {
            //Lets get our model records
            switch (MainScreen)
            {
            case ScreenType.DestinyRank:
            {
                //TODO: Add Destiny info once that system is setup
                break;
            }

            case ScreenType.EnhancementRank:
            {
                EnhancementRankModifierModels = EnhancementRankModifierModel.GetAll(MainRecordId);
                ModelRecordCount = EnhancementRankModifierModels.Count;
                break;
            }

            case ScreenType.Feat:
            {
                FeatModifierModels = FeatModifierModel.GetAll(MainRecordId);
                ModelRecordCount   = FeatModifierModels.Count;
                break;
            }
            }

            //Lets set our tracking variables to false
            for (int i = 0; i < ModelRecordCount; i++)
            {
                RecordsChanged.Add(false);
                RecordsDeleted.Add(false);
            }
        }
        private void buttonDuplicateRecord_Click(object sender, EventArgs e)
        {
            string selection;
            EnhancementTreeModel newTreeModel = new EnhancementTreeModel();
            List <EnhancementTreeRequirementModel> newTreeRequirementModels            = new List <EnhancementTreeRequirementModel>();
            List <EnhancementSlotModel>            newSlotModels                       = new List <EnhancementSlotModel>();
            List <EnhancementModel>                newEnhancementModels                = new List <EnhancementModel>();
            List <EnhancementRankModel>            newEnhancementRankModels            = new List <EnhancementRankModel>();
            List <EnhancementRankModifierModel>    newEnhancementRankModifierModels    = new List <EnhancementRankModifierModel>();
            List <EnhancementRankRequirementModel> newEnhancementRankRequirementModels = new List <EnhancementRankRequirementModel>();
            Guid oldSlotId;
            Guid oldEnhancementId;
            Guid oldRankId;
            Guid oldModifierId;
            Guid oldRequirementId;

            //Copy the Tree Model First
            newTreeModel.Initialize(TreeModel.Id);
            newTreeModel.ConvertToNewRecord();
            newTreeModel.Name = TreeModel.Name + "Duplicate";
            newTreeModel.Save();

            //Copy the Tree Requirement Models
            newTreeRequirementModels = EnhancementTreeRequirementModel.GetAll(TreeModel.Id);
            foreach (EnhancementTreeRequirementModel etrm in newTreeRequirementModels)
            {
                etrm.ConvertToNewRecord();
                etrm.EnhancementTreeId = newTreeModel.Id;
                etrm.Save();
            }

            //Copy the Slot Models
            newSlotModels = EnhancementSlotModel.GetAll(TreeModel.Id);
            foreach (EnhancementSlotModel slot in newSlotModels)
            {
                oldSlotId = slot.Id;
                slot.ConvertToNewRecord();
                slot.EnhancementTreeId = newTreeModel.Id;
                slot.Save();
                //Copy the Enhancements for this Slot Model.
                newEnhancementModels = EnhancementModel.GetAll(oldSlotId);
                foreach (EnhancementModel em in newEnhancementModels)
                {
                    oldEnhancementId = em.Id;
                    em.ConvertToNewRecord();
                    em.EnhancementSlotId = slot.Id;
                    em.Save();
                    //Copy the Enhancement Ranks for this Enhancement.
                    newEnhancementRankModels = EnhancementRankModel.GetAll(oldEnhancementId);
                    foreach (EnhancementRankModel erm in newEnhancementRankModels)
                    {
                        oldRankId = erm.Id;
                        erm.ConvertToNewRecord();
                        erm.EnhancementId = em.Id;
                        erm.Save();
                        //Copy the Enhancement Rank Modifier Models
                        newEnhancementRankModifierModels = EnhancementRankModifierModel.GetAll(oldRankId);
                        foreach (EnhancementRankModifierModel ermm in newEnhancementRankModifierModels)
                        {
                            oldModifierId = ermm.Id;
                            ermm.ConvertToNewRecord();
                            ermm.EnhancementRankId = erm.Id;
                            ermm.Save();
                        }
                        //Copy the Enhancement Rank Requirement Models
                        newEnhancementRankRequirementModels = EnhancementRankRequirementModel.GetAll(oldRankId);
                        foreach (EnhancementRankRequirementModel errm in newEnhancementRankRequirementModels)
                        {
                            oldRequirementId = errm.Id;
                            errm.ConvertToNewRecord();
                            errm.EnhancementRankId = erm.Id;
                            errm.Save();
                        }
                    }
                }
            }

            //Now lets update our screen with the new record
            selection = newTreeModel.Name;
            EnhancementTreeListBox.Items.Clear();
            PopulateEnhancementTreeListBox();
            //AllowChangeEvents = false;
            EnhancementTreeListBox.SelectedItem = selection;
            //AllowChangeEvents = true;

            //Now we can reset our flags
            RecordChanged = false;
            NewRecord     = false;
        }
        private void CopyPreviousRank(int previousRank)
        {
            List <EnhancementRankRequirementModel> newRankRequirements;
            List <EnhancementRankModifierModel>    newRankModifiers;
            List <EnhancementRankRequirementModel> deleteRankRequirements;
            List <EnhancementRankModifierModel>    deleteRankModifiers;

            newRankRequirements    = new List <EnhancementRankRequirementModel>();
            newRankModifiers       = new List <EnhancementRankModifierModel>();
            deleteRankRequirements = new List <EnhancementRankRequirementModel>();
            deleteRankModifiers    = new List <EnhancementRankModifierModel>();

            //We need to save any changes to the enhancement record before doing any copying.
            if (HasDataChanged() == true)
            {
                SaveSlotRecord();
                SaveRecord();
            }

            //Lets delete the records for the current rank requirements and modifiers.
            deleteRankRequirements = EnhancementRankRequirementModel.GetAll(RankModels[EnhancementIndexLoaded][previousRank].Id);
            foreach (EnhancementRankRequirementModel deleteRequirement in deleteRankRequirements)
            {
                deleteRequirement.Delete();
            }
            deleteRankModifiers = EnhancementRankModifierModel.GetAll(RankModels[EnhancementIndexLoaded][previousRank].Id);
            foreach (EnhancementRankModifierModel deleteModifier in deleteRankModifiers)
            {
                deleteModifier.Delete();
            }

            //Lets make a copy of the previous rank requirements and modifiers now and save them to the database.
            newRankRequirements = EnhancementRankRequirementModel.GetAll(RankModels[EnhancementIndexLoaded][previousRank - 1].Id);
            foreach (EnhancementRankRequirementModel rankRequirement in newRankRequirements)
            {
                rankRequirement.ConvertToNewRecord();
                rankRequirement.EnhancementRankId = RankModels[EnhancementIndexLoaded][previousRank].Id;
                rankRequirement.Save();
            }
            newRankModifiers = EnhancementRankModifierModel.GetAll(RankModels[EnhancementIndexLoaded][previousRank - 1].Id);
            foreach (EnhancementRankModifierModel rankModifier in newRankModifiers)
            {
                rankModifier.ConvertToNewRecord();
                rankModifier.EnhancementRankId = RankModels[EnhancementIndexLoaded][previousRank].Id;
                rankModifier.Save();
            }

            //Ok, now that new records are saved, lets Update the screen with the changes and also update the Description boxes.
            switch (previousRank)
            {
            case 1:
            {
                RankRequirementsRP2.Clear();
                RankRequirementsRP2.RecordId = RankModels[EnhancementIndexLoaded][previousRank].Id;
                RankRequirementsRP2.Initialize();
                RankModifiersMP2.Clear();
                RankModifiersMP2.RecordId = RankModels[EnhancementIndexLoaded][previousRank].Id;
                RankModifiersMP2.Initialize();

                RankModels[EnhancementIconListControl.SelectedIndex][1].Description = RankDescriptionHE1.Text;
                RankDescriptionHE2.Text  = RankDescriptionHE1.Text;
                EnhancementRecordChanged = true;
                break;
            }

            case 2:
            {
                RankRequirementsRP3.Clear();
                RankRequirementsRP3.RecordId = RankModels[EnhancementIndexLoaded][previousRank].Id;
                RankRequirementsRP3.Initialize();
                RankModifiersMP3.Clear();
                RankModifiersMP3.RecordId = RankModels[EnhancementIndexLoaded][previousRank].Id;
                RankModifiersMP3.Initialize();

                RankModels[EnhancementIconListControl.SelectedIndex][2].Description = RankDescriptionHE2.Text;
                RankDescriptionHE3.Text  = RankDescriptionHE2.Text;
                EnhancementRecordChanged = true;
                break;
            }
            }

            //lets save the enhancement record again to make sure changes hold. this may be redundant but it doesn't hurt :)
            SaveRecord();
        }