public SampleAddEditInstrumentView(IUnityContainer container, Ace2ApiServiceModule api, ILoggerFacade log, 
            UiModel model, IEventAggregator eventAggregator)
        {
            InitializeComponent();

            _vm = new SampleAddEditInstrumentViewModel(container, api, log, model, eventAggregator);
            this.DataContext = _vm;
        }
Exemplo n.º 2
0
 public SampleAddEditInstrumentViewModel(IUnityContainer container, Ace2ApiServiceModule api, ILoggerFacade log,
                                         UiModel model, IEventAggregator eventAggregator)
     : base(container, api, log, eventAggregator)
 {
 }
 public SampleAddEditInstrumentViewModel(IUnityContainer container, Ace2ApiServiceModule api, ILoggerFacade log,
     UiModel model, IEventAggregator eventAggregator)
     : base(container, api, log, eventAggregator)
 {
 }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
 public async Task LoadImages(Card card, UiModel ui)
 {
     _location = Cursor.Position;
     await runLoadImagesTask(card, ui);
 }
Exemplo n.º 6
0
 public void SetUi(UiModel ui) =>
 _ui = ui;
Exemplo n.º 7
0
        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;
        }
Exemplo n.º 8
0
        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;
        }
Exemplo n.º 9
0
 public IEnumerable <DeckModel> GetModels(UiModel ui) =>
 Decks.Select(d => new DeckModel(d, ui));
Exemplo n.º 10
0
        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();
            });
        }