private bool HasDataChanged()
        {
            if (SlotRecordChanged == true)
            {
                return(true);
            }

            if (EnhancementRecordChanged == true)
            {
                return(true);
            }

            if (RankRequirementsRP1.HaveRecordsChanged() == true || RankRequirementsRP2.HaveRecordsChanged() == true || RankRequirementsRP2.HaveRecordsChanged() == true)
            {
                return(true);
            }

            if (RankModifiersMP1.HaveRecordsChanged() == true || RankModifiersMP2.HaveRecordsChanged() == true || RankModifiersMP3.HaveRecordsChanged() == true)
            {
                return(true);
            }

            //no data has changed, so return false.
            return(false);
        }
        private void PopulateRankFields()
        {
            int rankCount;
            int enhancementIndex;

            enhancementIndex = EnhancementIconListControl.SelectedIndex;
            rankCount        = RankModels[enhancementIndex].Count;

            //lets reset what tabs are shown based on number of ranks
            tabControl1.TabPages.Remove(tpRank2);
            tabControl1.TabPages.Remove(tpRank3);
            tabControl1.TabPages.Remove(tpNewRank);


            //Rank 1 data
            RankDescriptionHE1.Text = RankModels[enhancementIndex][0].Description;
            RankRequirementsRP1.Clear();
            RankRequirementsRP1.RecordId = RankModels[enhancementIndex][0].Id;
            RankRequirementsRP1.Initialize();
            RankModifiersMP1.Clear();
            RankModifiersMP1.RecordId = RankModels[enhancementIndex][0].Id;
            RankModifiersMP1.Initialize();

            //Rank 2 data
            if (rankCount > 1)
            {
                tabControl1.TabPages.Add(tpRank2);
                RankDescriptionHE2.Text = RankModels[enhancementIndex][1].Description;
                RankRequirementsRP2.Clear();
                RankRequirementsRP2.RecordId = RankModels[enhancementIndex][1].Id;
                RankRequirementsRP2.Initialize();
                RankModifiersMP2.Clear();
                RankModifiersMP2.RecordId = RankModels[enhancementIndex][1].Id;
                RankModifiersMP2.Initialize();
            }

            //Rank 3 data
            if (rankCount == 3)
            {
                tabControl1.TabPages.Add(tpRank3);
                RankDescriptionHE3.Text = RankModels[enhancementIndex][2].Description;
                RankRequirementsRP3.Clear();
                RankRequirementsRP3.RecordId = RankModels[enhancementIndex][2].Id;
                RankRequirementsRP3.Initialize();
                RankModifiersMP3.Clear();
                RankModifiersMP3.RecordId = RankModels[enhancementIndex][2].Id;
                RankModifiersMP3.Initialize();
            }
            if (rankCount < 3)
            {
                tabControl1.TabPages.Add(tpNewRank);
            }
        }
 private void tabControl1_MouseClick(object sender, MouseEventArgs e)
 {
     for (int i = 0; i < tabControl1.TabCount; i++)
     {
         if (tabControl1.GetTabRect(i).Contains(e.Location))
         {
             if (tabControl1.TabPages[i] == tpNewRank)
             {
                 //we need to add a new rank model for this tab
                 AddRankModel(EnhancementIconListControl.SelectedIndex);
                 if (i == 1)
                 {
                     //tabControl1.TabPages.Insert(i, tpRank2);
                     //tabControl1.TabPages.Add(tpRank2);
                     tabControl1.TabPages.Insert(i, tpRank2);
                     tabControl1.SelectedTab = tpRank2;
                     RankDescriptionHE2.Text = "test2";
                     RankRequirementsRP2.Clear();
                     RankRequirementsRP2.RecordId = RankModels[EnhancementIconListControl.SelectedIndex][1].Id;
                     RankRequirementsRP2.Initialize();
                     RankModifiersMP2.Clear();
                     RankModifiersMP2.RecordId = RankModels[EnhancementIconListControl.SelectedIndex][1].Id;
                     RankModifiersMP2.Initialize();
                 }
                 if (i == 2)
                 {
                     tabControl1.TabPages.Insert(i, tpRank3);
                     tabControl1.TabPages.Remove(tpNewRank);
                     tabControl1.SelectedTab = tpRank3;
                     RankDescriptionHE3.Text = "Test3";
                     RankRequirementsRP3.Clear();
                     RankRequirementsRP3.RecordId = RankModels[EnhancementIconListControl.SelectedIndex][2].Id;
                     RankRequirementsRP3.Initialize();
                     RankModifiersMP3.Clear();
                     RankModifiersMP3.RecordId = RankModels[EnhancementIconListControl.SelectedIndex][2].Id;
                     RankModifiersMP3.Initialize();
                 }
             }
         }
     }
 }
        private void SaveRecord()
        {
            if (EnhancementRecordChanged == true || HasDataChanged() == true)
            {
                //Update the Enhancement Record
                if (NewEnhancementRecord == true)
                {
                    EnhancementModels[EnhancementIndexLoaded].EnhancementSlotId = SlotModel.Id;
                }

                EnhancementModels[EnhancementIndexLoaded].Save();

                //Update the Enhancement Rank Record(s)
                for (int i = 0; i < RankModels[EnhancementIndexLoaded].Count; i++)
                {
                    RankModels[EnhancementIndexLoaded][i].EnhancementId = EnhancementModels[EnhancementIndexLoaded].Id;
                    RankModels[EnhancementIndexLoaded][i].Rank          = (byte)(i + 1);
                    RankModels[EnhancementIndexLoaded][i].Save();
                    switch (i)
                    {
                    case 0:
                    {
                        if (RankRequirementsRP1.HaveRecordsChanged() == true)
                        {
                            RankRequirementsRP1.RecordId = RankModels[EnhancementIndexLoaded][i].Id;
                            RankRequirementsRP1.SaveRecords();
                        }
                        if (RankModifiersMP1.HaveRecordsChanged() == true)
                        {
                            RankModifiersMP1.RecordId = RankModels[EnhancementIndexLoaded][i].Id;
                            RankModifiersMP1.SaveRecords();
                        }
                        break;
                    }

                    case 1:
                    {
                        if (RankRequirementsRP2.HaveRecordsChanged() == true)
                        {
                            RankRequirementsRP2.RecordId = RankModels[EnhancementIndexLoaded][i].Id;
                            RankRequirementsRP2.SaveRecords();
                        }
                        if (RankModifiersMP2.HaveRecordsChanged() == true)
                        {
                            RankModifiersMP2.RecordId = RankModels[EnhancementIndexLoaded][i].Id;
                            RankModifiersMP2.SaveRecords();
                        }
                        break;
                    }

                    case 2:
                    {
                        if (RankRequirementsRP3.HaveRecordsChanged() == true)
                        {
                            RankRequirementsRP3.RecordId = RankModels[EnhancementIndexLoaded][i].Id;
                            RankRequirementsRP3.SaveRecords();
                        }
                        if (RankModifiersMP3.HaveRecordsChanged() == true)
                        {
                            RankModifiersMP3.RecordId = RankModels[EnhancementIndexLoaded][i].Id;
                            RankModifiersMP3.SaveRecords();
                        }
                        break;
                    }
                    }
                }
            }
        }
        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();
        }