internal Reward AddNewReward(RewardType rt) { var indexToInsert = -1; indexToInsert = FindIndexToInsert(rt); var newReward = new Reward(trackerFactory) { Type = rt, Reason = rewardReason.Value }; if ((indexToInsert > -1) && (indexToInsert < RewardsEditor.Count)) { rewards.Add(newReward); RewardsEditor.Insert(indexToInsert, new AddSingleRewardViewModel(trackerFactory) { Reward = newReward, ParentRewardViewModel = this }); } else { rewards.Add(newReward); RewardsEditor.Add(new AddSingleRewardViewModel(trackerFactory) { Reward = newReward, ParentRewardViewModel = this }); } RaisePropertyChangedEvent(nameof(RewardsEditor)); return(newReward); }
/// <summary> /// find last of same type and reason ///if found, inster after ///if not ///..find any of higher type of this reson, insert before ///..if not found, find any lower and insert after ///..fallback - append to end /// </summary> /// <param name="rt"></param> /// <returns></returns> private int FindIndexToInsert(RewardType rt) { int indexToInsert; var rewardsList = RewardsEditor.Select(r => r.Reward).ToList(); int index = RewardsEditor.Where(r => r.Reward.Type == rt) .Select(r => rewardsList.IndexOf(r.Reward)) .OrderByDescending(i => i) .DefaultIfEmpty(-1) .FirstOrDefault(); if (index > -1) { indexToInsert = index + 1; } else { index = RewardsEditor.Where(r => (int)r.Reward.Type > (int)rt) .Select(r => rewardsList.IndexOf(r.Reward)) .OrderBy(i => i) .DefaultIfEmpty(-1) .FirstOrDefault(); if (index > -1) { indexToInsert = index; } else { index = RewardsEditor.Where(r => (int)r.Reward.Type < (int)rt) .Select(r => rewardsList.IndexOf(r.Reward)) .OrderByDescending(i => i) .DefaultIfEmpty(-1) .FirstOrDefault(); if (index > -1) { indexToInsert = index + 1; } else { indexToInsert = -1; } } } return(indexToInsert); }
public void DoneClicked(object param) { var newRewards = RewardsAdded.Where(r => !tracker.Rewards.Contains(r)); //fix up excaly same date DateTime date = trackerFactory.GetDateTimeNow(); foreach (Reward r in newRewards) { r.Date = date; r.ArenaDeck = ArenaDeck; } trackerFactory.GetTracker().Rewards.AddRange(newRewards); trackerFactory.GetFileManager().SaveDatabase(); rewards.Clear(); RewardsEditor.Clear(); RewardReason = null; RefreshRewardLists(); }
internal void DeleteReward(object obj) { Reward reward = obj as Reward; if (reward != null) { if ((reward.Reason != rewardReason) || (RewardsEditor.Where(r => r.Reward.Type == reward.Type).Count() > 1) //more than one current type ) { this.rewards.Remove(obj as Reward); } else { reward.Quantity = 0; if (reward.CardInstance != null) { reward.CardInstance.Card = Card.Unknown; } } } RefreshRewardLists(); }