public SampleAddEditInstrumentView(IUnityContainer container, Ace2ApiServiceModule api, ILoggerFacade log, UiModel model, IEventAggregator eventAggregator) { InitializeComponent(); _vm = new SampleAddEditInstrumentViewModel(container, api, log, model, eventAggregator); this.DataContext = _vm; }
public SampleAddEditInstrumentViewModel(IUnityContainer container, Ace2ApiServiceModule api, ILoggerFacade log, UiModel model, IEventAggregator eventAggregator) : base(container, api, log, eventAggregator) { }
public DeckModel(Deck deck, UiModel ui) { Ui = ui; Deck = deck; int countInMain(Card c) => Deck.MainDeck.Count.TryGet(c.Id); int countTotal(Card c, int countInDeck) => countInDeck; int countOwned(Card c, int countInDeck) => Math.Min(countInDeck, c.CollectionCount(Ui)); int countOwnedSide(Card c, int countInDeck) => (c.CollectionCount(Ui) - countInMain(c)).WithinRange(0, countInDeck); float priceTotal(Card c, int countInDeck) => countInDeck * (c.PriceMid ?? 0f); float priceOwned(Card c, int countInDeck) => countOwned(c, countInDeck) * (c.PriceMid ?? 0f); float priceOwnedSide(Card c, int countInDeck) => countOwnedSide(c, countInDeck) * (c.PriceMid ?? 0f); IList <string> generatedMana(Card c, int countInDeck) => c.GeneratedManaArr; _priceTotalCache = new DeckAggregateCache <float, float, float>( () => Ui, () => Deck, () => 0f, (a, b) => a + b, priceTotal, a => a); _countTotalCache = new DeckAggregateCache <int, int, int>( () => Ui, () => Deck, () => 0, (a, b) => a + b, countTotal, a => a); _priceOwnedCache = new DeckAggregateCache <float, float, float>( () => Ui, () => Deck, () => 0f, (a, b) => a + b, priceOwned, a => a); _countOwnedCache = new DeckAggregateCache <int, int, int>( () => Ui, () => Deck, () => 0, (a, b) => a + b, countOwned, a => a); _priceOwnedSideCache = new DeckAggregateCache <float, float, float>( () => Ui, () => Deck, () => 0f, (a, b) => a + b, priceOwnedSide, a => a); _countOwnedSideCache = new DeckAggregateCache <int, int, int>( () => Ui, () => Deck, () => 0, (a, b) => a + b, countOwnedSide, a => a); _generatedManaCache = new DeckAggregateCache <IList <string>, Dictionary <string, int>, string>( () => Ui, () => Deck, () => new Dictionary <string, int>(Str.Comparer), (a, b) => { foreach (string s in b) { a.TryGetValue(s, out int count); count++; a[s] = count; } return(a); }, generatedMana, a => string.Concat(a.Keys.OrderBy(s => KeywordDefinitions.GeneratedMana.IndexOf(s, Str.Comparer)))); _filterNone = c => true; _filterPriceIsUnknown = c => !c.PriceMid.HasValue; _filterIsCreature = c => c.TypesArr.IndexOf("creature", Str.Comparer) >= 0; _filterIsLand = c => c.TypesArr.IndexOf("land", Str.Comparer) >= 0; _filterIsOtherSpell = c => !_filterIsCreature(c) && !_filterIsLand(c); _filterIsLandAndPriceIsUnknown = c => _filterIsLand(c) && _filterPriceIsUnknown(c); _filterIsCreatureAndPriceIsUnknown = c => _filterIsCreature(c) && _filterPriceIsUnknown(c); _filterIsOtherSpellAndPriceIsUnknown = c => _filterIsOtherSpell(c) && _filterPriceIsUnknown(c); }
public async Task LoadImages(Card card, UiModel ui) { _location = Cursor.Position; await runLoadImagesTask(card, ui); }
public void SetUi(UiModel ui) => _ui = ui;
public FormRoot(Func <FormMain> formMainFactory, DownloaderSubsystem downloaderSubsystem, NewsService newsService, CardSuggestModel cardSuggestModel, DeckSuggestModel deckSuggestModel, TooltipController tooltipController, CardRepository repo, DeckSerializationSubsystem serialization, UiModel uiModel, Application application) : this() { TooltipController = tooltipController; UiModel = uiModel; DeckSuggestModel = deckSuggestModel; CardSuggestModel = cardSuggestModel; CardSuggestModel.Ui = UiModel; _application = application; _repo = repo; _serialization = serialization; _buttonSubsystem = new ButtonSubsystem(); _formMainFactory = formMainFactory; _downloaderSubsystem = downloaderSubsystem; _newsService = newsService; KeyPreview = true; PreviewKeyDown += previewKeyDown; KeyDown += formKeyDown; _repo.LoadingComplete += repositoryLoaded; QueryHandleDrag += queryHandleDrag; Load += load; Closed += closed; _tabs.AllowDrop = true; _tabs.AddNewTabsToTheLeft = true; _tabs.TabAdded += tabCreated; _tabs.TabRemoving += tabClosing; _tabs.TabRemoved += tabClosed; _tabs.SelectedIndexChanging += selectedTabChanging; _tabs.SelectedIndexChanged += selectedTabChanged; _tabs.DragOver += tabsDragOver; _tabs.MouseMove += tabMouseMove; FormClosing += formClosing; _newsService.NewsFetched += newsFetched; _newsService.NewsDisplayed += newsDisplayed; _downloaderSubsystem.ProgressCalculated += downloaderProgressCalculated; setupButtons(); setupExternalLinks(); setupButtonClicks(); setupLanguageMenu(); setupTooltips(); if (!DesignMode) { SnapTo(Direction.North, default(Point)); } foreach (var button in _deckButtons) { button.Enabled = false; } Text = $"Mtgdb.Gui v{AppDir.GetVersion()}"; WindowState = FormWindowState.Minimized; }
public FormRoot(Func <FormMain> formMainFactory, DownloaderSubsystem downloaderSubsystem, NewsService newsService, CardSuggestModel cardSuggestModel, DeckSuggestModel deckSuggestModel, [Named(GuiModule.DefaultTooltipScope)] TooltipController tooltipController, [Named(GuiModule.QuickFilterTooltipScope)] TooltipController quickFilterTooltipController, CardRepository repo, DeckSerializationSubsystem serialization, UiModel uiModel, ColorSchemeEditor colorSchemeEditor, App app, AppSourceConfig appSourceConfig, UiConfigRepository uiConfigRepository) : this() { TooltipController = tooltipController; QuickFilterTooltipController = quickFilterTooltipController; UiModel = uiModel; DeckSuggestModel = deckSuggestModel; CardSuggestModel = cardSuggestModel; CardSuggestModel.Ui = UiModel; _app = app; _appSourceConfig = appSourceConfig; _uiConfigRepository = uiConfigRepository; _repo = repo; _serialization = serialization; _colorSchemeEditor = colorSchemeEditor; _formMainFactory = formMainFactory; _downloaderSubsystem = downloaderSubsystem; _newsService = newsService; KeyPreview = true; PreviewKeyDown += previewKeyDown; KeyDown += formKeyDown; _repo.LoadingComplete += repositoryLoaded; QueryHandleDrag += queryHandleDrag; Load += load; Closed += closed; _tabs.AllowDrop = true; _tabs.TabAdded += tabCreated; _tabs.TabRemoving += tabClosing; _tabs.TabRemoved += tabClosed; _tabs.SelectedIndexChanging += selectedTabChanging; _tabs.SelectedIndexChanged += selectedTabChanged; _tabs.DragOver += tabsDragOver; _tabs.MouseMove += tabMouseMove; MessageFilter.Instance.GlobalMouseMove += globalMouseMove; FormClosing += formClosing; _newsService.NewsFetched += newsFetched; _newsService.NewsDisplayed += newsDisplayed; _downloaderSubsystem.ProgressCalculated += downloaderProgressCalculated; setupExternalLinks(); setupButtonClicks(); setupLanguageMenu(); setupTooltips(); foreach (var button in _deckButtons) { button.Enabled = false; } Text = $"Mtgdb.Gui v{AppDir.GetVersion()}"; scale(); updateFormBorderColor(); ColorSchemeController.SystemColorsChanging += updateFormBorderColor; _menuColors.BackColor = SystemColors.Control; _menuColors.ForeColor = SystemColors.ControlText; if (components == null) { components = new Container(); } components.Add(new UiConfigMenuSubsystem( _menuUiScale, _menuUiSmallImageQuality, _menuUiSuggestDownloadMissingImages, _menuUiImagesCacheCapacity, _menuUiUndoDepth, _checkboxAllPanels, _checkboxTopPanel, _checkboxRightPanel, _checkboxSearchBar, uiConfigRepository)); _dropdownOpenDeck.BeforeShow = () => setMenuMode(_dropdownOpenDeck); _dropdownSaveDeck.BeforeShow = () => setMenuMode(_dropdownSaveDeck); _dropdownColorScheme.BeforeShow = updateMenuColors; }
public IEnumerable <DeckModel> GetModels(UiModel ui) => Decks.Select(d => new DeckModel(d, ui));
private void refilter(Action onFinished) { var touchedCard = _deckEditor.TouchedCard; bool showDuplicates = _buttonShowDuplicates.Checked; var filterManagerStates = FilterManager.States; _breakRefreshing = true; lock (_searchResultCards) { _uiSnapshot = new UiModel( _cardRepo, _collectionEditor.Snapshot(), _deckEditor.SnapshotZone()); _breakRefreshing = false; var searchResultCards = new List <Card>(); var filteredCards = new List <Card>(); var allCards = showDuplicates ? _cardSort.SortedRecords : _cardSort.DuplicateAwareSortedCards; if (showDuplicates) { for (int i = 0; i < allCards.Count; i++) { if (_breakRefreshing) { return; } var card = allCards[i]; bool isFiltered = fit(card, filterManagerStates); if (isFiltered || card == touchedCard) { searchResultCards.Add(card); } if (isFiltered) { filteredCards.Add(card); } } } else { var cardsByName = new Dictionary <string, Card>(); for (int i = 0; i < allCards.Count; i++) { if (_breakRefreshing) { return; } var card = allCards[i]; if (!cardsByName.ContainsKey(card.NameNormalized) && fit(card, filterManagerStates)) { cardsByName[card.NameNormalized] = card; } } for (int i = 0; i < allCards.Count; i++) { if (_breakRefreshing) { return; } var card = allCards[i]; bool isFiltered = cardsByName.TryGet(card.NameNormalized) == card; if (isFiltered || card == touchedCard) { searchResultCards.Add(card); } if (isFiltered) { filteredCards.Add(card); } } } // implicit connection: data_source_sync lock (_searchResultCards) { _searchResultCards.Clear(); _searchResultCards.AddRange(searchResultCards); } _filteredCards.Clear(); _filteredCards.UnionWith(filteredCards); updateIsSearchResult(allCards); } this.Invoke(delegate { _imagePreloading.Reset(); refreshData(); onFinished?.Invoke(); }); }