private bool TryBuildAggregateDeckName(out string aggregateDeckName) { if (mTrackBarMin.Value > mTrackBarMax.Value) { aggregateDeckName = "Invalid: Min greater than Max"; return(false); } aggregateDeckName = ""; if (!string.IsNullOrEmpty(mAggregateFilterDownTo) && !mAggregateFilterDownTo.Equals("Everything")) { aggregateDeckName = mAggregateFilterDownTo + " "; } BookAndChapterNum minValue = mBookAndChapterNumbers[mTrackBarMin.Value]; if (mTrackBarMin.Value == mTrackBarMax.Value) { aggregateDeckName += minValue.ToString(); return(true); } BookAndChapterNum maxValue = mBookAndChapterNumbers[mTrackBarMax.Value]; aggregateDeckName += string.Format("{0} → {1}", minValue.ToString(), maxValue.ToString()); return(true); }
private void WriteAggregateDecks() { string aggregateDeckName; if (TryBuildAggregateDeckName(out aggregateDeckName)) { EnablePermanentExtraOptionsFromUI(mAggregateEnabledOptions); const int totalSteps = 5; ResetProgressBar(totalSteps); // 1 : Aggregate all specified decks into a list List <Deck> sourceDecks = new List <Deck>(); for (int i = mTrackBarMin.Value; i <= mTrackBarMax.Value; ++i) { BookAndChapterNum selectedChapter = mBookAndChapterNumbers[i]; mDeckSerializer.AddAllDecksOfQualifyingBookAndChapter(selectedChapter, ref sourceDecks); } IncrementBar(); // 2 : Combine the decks into a mega-deck Deck combinedDeck = new Deck(mDeckSerializer); combinedDeck.InitializeFromDeckList(sourceDecks, aggregateDeckName); IncrementBar(); // 3 : Filter mega-deck down to selected card type CardType filterDownTo = CardType.kInvalid; switch (mAggregateFilterDownTo) { case "Verbs": filterDownTo = CardType.kVerb; break; case "Adjectives": filterDownTo = CardType.kAdjective; break; case "Phrases": filterDownTo = CardType.kPhrase; break; } if (filterDownTo != CardType.kInvalid) { combinedDeck.FilterCardsDownTo(filterDownTo); } IncrementBar(); // 4 : Randomize deck if (mDeckSerializer.HasExtraOptionEnabled(StudyOptions.Option.kRandomize)) { combinedDeck.RandomizeDeck(); } IncrementBar(); // 5 : Write Deck mDeckSerializer.SetPermanentExtraOption(StudyOptions.Option.kIncludeChapterSourceInResult); mDeckSerializer.WriteSingleDeck(combinedDeck); IncrementBar(); mDeckSerializer.ClearPermanentExtraOptions(); } }