private void cardView_OnDragEnd(object sender, EventArgs e) { lock(cardArrangeLock) { CardChoiceViewModel model = DataContext as CardChoiceViewModel; if (model == null) return; _ResetHighlightSlot(); if (_highlightedStack != null) { int newPos = _highlightedStack.InteractingCardIndex; List<CardView> backup1 = new List<CardView>(_sourceDeck.Cards); List<CardView> backup2 = null; _sourceDeck.Cards.Remove(InteractingCard); _highlightedStack.Cards.Insert(newPos, InteractingCard); _sourceDeck.InteractingCard = null; _sourceDeck.CardStatus = CardInteraction.None; _sourceDeck.RearrangeCards(0.2d); if (_sourceDeck != _highlightedStack) { backup2 = new List<CardView>(_highlightedStack.Cards); _highlightedStack.InteractingCard = null; _highlightedStack.CardStatus = CardInteraction.None; _highlightedStack.RearrangeCards(0.2d); } _sourceDeck = null; _highlightedStack = null; _UpdateAnswer(); if (model.Verifier.Verify(model.Answer) == Core.UI.VerifierResult.Fail) { _sourceDeck.Cards.Clear(); foreach (var card in backup1) _sourceDeck.Cards.Add(card); if (_sourceDeck != _highlightedStack) { Trace.Assert(backup2 != null); _highlightedStack.Cards.Clear(); foreach (var card in backup2) _highlightedStack.Cards.Add(card); _highlightedStack.InteractingCard = null; _UpdateAnswer(); _highlightedStack.CardStatus = CardInteraction.None; _highlightedStack.RearrangeCards(0.2d); } } } else if (_sourceDeck != null) { _sourceDeck.InteractingCard = null; _sourceDeck.CardStatus = CardInteraction.None; _sourceDeck.RearrangeCards(0.2d); } _UpdateVerifiedStatus(); } }
private void cardView_OnDragEnd(object sender, EventArgs e) { CardChoiceViewModel model = DataContext as CardChoiceViewModel; if (model == null) { return; } _ResetHighlightSlot(); if (_highlightedStack != null) { int newPos = _highlightedStack.InteractingCardIndex; List <CardView> backup1 = new List <CardView>(_sourceDeck.Cards); var backup2 = new List <CardView>(_highlightedStack.Cards); int from = _sourceDeck.Cards.IndexOf(InteractingCard); int to = newPos; _sourceDeck.Cards.Remove(InteractingCard); _highlightedStack.Cards.Insert(newPos, InteractingCard); _sourceDeck.InteractingCard = null; _sourceDeck.CardStatus = CardInteraction.None; _sourceDeck.RearrangeCards(); if (_sourceDeck != _highlightedStack) { _highlightedStack.InteractingCard = null; _highlightedStack.CardStatus = CardInteraction.None; _highlightedStack.RearrangeCards(); } _UpdateAnswer(); if (model.Verifier.Verify(model.Answer) == Core.UI.VerifierResult.Fail) { _sourceDeck.Cards.Clear(); foreach (var card in backup1) { _sourceDeck.Cards.Add(card); } _sourceDeck.RearrangeCards(); if (_sourceDeck != _highlightedStack) { Trace.Assert(backup2 != null); _highlightedStack.Cards.Clear(); foreach (var card in backup2) { _highlightedStack.Cards.Add(card); } _highlightedStack.InteractingCard = null; _UpdateAnswer(); _highlightedStack.CardStatus = CardInteraction.None; _highlightedStack.RearrangeCards(); } } else { var handle = OnCardMoved; if (handle != null) { int s = _allCardStacks.IndexOf(_sourceDeck); int d = _allCardStacks.IndexOf(_highlightedStack); Trace.Assert(s >= 0 && d >= 0 && from >= 0 && to >= 0); handle(s, from, d, to); } } _sourceDeck = null; _highlightedStack = null; } else if (_sourceDeck != null) { _sourceDeck.InteractingCard = null; _sourceDeck.CardStatus = CardInteraction.None; _sourceDeck.RearrangeCards(); } _UpdateVerifiedStatus(); }