Beispiel #1
0
        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);
        }
Beispiel #2
0
        /// <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);
        }
Beispiel #3
0
        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();
        }