Пример #1
0
 public void SetIconRecognizer(IconRecognizer value)
 {
     foreach (var field in Fields)
     {
         field.IconRecognizer = value;
     }
 }
Пример #2
0
        public void Init(
            DeckListModel decks,
            IconRecognizer recognizer,
            DeckSearcher searcher,
            DeckDocumentAdapter adapter,
            CollectionEditorModel collection,
            UiConfigRepository uiConfigRepository,
            Control tooltipOwner,
            IApplication app)
        {
            _searcher            = searcher;
            _uiConfigRepository  = uiConfigRepository;
            _panelRename.Visible = false;

            _viewDeck.IconRecognizer = recognizer;
            _viewDeck.DataSource     = _filteredModels;

            _menuFilterByDeckMode.SetMenuValues(
                "Ignored",
                "Cards in currently open deck",
                "Cards in saved decks matching filter");

            _menuFilterByDeckMode.SelectedIndex = 0;

            _listModel    = decks;
            _collection   = collection;
            _tooltipOwner = tooltipOwner;
            _app          = app;

            _searchSubsystem = new DeckSearchSubsystem(
                this,
                _searchBar,
                uiConfigRepository,
                _searcher,
                adapter,
                _viewDeck);
            _deckSort          = new DeckSortSubsystem(_viewDeck, new DeckFields(), _searchSubsystem, _listModel);
            _layoutViewTooltip = new ViewDeckListTooltips(_tooltipOwner, _viewDeck);

            _model           = _listModel.CreateModel(Deck.Create());
            _model.IsCurrent = true;

            subscribeToEvents();

            updateSortLabel();

            if (components == null)
            {
                components = new Container();
            }

            components.Add(new SearchResultHighlightSubsystem(_viewDeck, _searchSubsystem, adapter));

            _searchSubsystem.Apply();
        }
Пример #3
0
        public void Init(
            DeckListModel decks,
            IconRecognizer recognizer,
            DeckSearcher searcher,
            DeckDocumentAdapter adapter,
            Control tooltipOwner)
        {
            _deckListModel = decks;
            _tooltipOwner  = tooltipOwner;

            _viewDeck.IconRecognizer    = recognizer;
            _viewDeck.LayoutControlType = typeof(DeckListLayout);
            _viewDeck.DataSource        = _filteredModels;

            _textBoxName.Visible = false;

            _customTooltip = new ViewDeckListTooltips(_tooltipOwner, _viewDeck);

            _searchSubsystem = new DeckSearchSubsystem(
                this,
                _textBoxSearch,
                _panelSearchIcon,
                _listBoxSuggest,
                searcher,
                _viewDeck);

            _menuFilterByDeckMode.SelectedIndex = 0;

            _viewDeck.MouseClicked     += viewDeckClicked;
            _viewDeck.RowDataLoaded    += viewDeckRowDataLoaded;
            _viewDeck.CardIndexChanged += viewScrolled;

            _textBoxName.LostFocus += nameLostFocus;
            _textBoxName.KeyDown   += nameKeyDown;

            _menuFilterByDeckMode.SelectedIndexChanged += filterByDeckModeChanged;

            _searchSubsystem.TextApplied += applySearchResult;

            _searchSubsystem.SubscribeToEvents();
            _customTooltip.SubscribeToEvents();

            _higlightSubsystem = new SearchResultHiglightSubsystem(_viewDeck, _searchSubsystem, adapter);
            _higlightSubsystem.SubscribeToEvents();
        }
Пример #4
0
        private static IEnumerable <RichTextToken> getSubtokens(
            RichTextToken originalToken,
            RichTextRenderContext renderContext,
            IconRecognizer iconRecognizer)
        {
            IEnumerable <RichTextToken> tokens;

            if (iconRecognizer == null)
            {
                tokens = Sequence.From(originalToken);
            }
            else
            {
                tokens = iconRecognizer.Recognize(originalToken, renderContext.Text);
            }

            foreach (var token in tokens)
            {
                if (token.IconName != null || token.Length == 1)
                {
                    yield return(token);
                }
                else
                {
                    var splitPositions = Enumerable.Range(token.Index + 1, token.Length)
                                         .Where(i =>
                                                i == token.Index + token.Length ||
                                                !char.IsLetterOrDigit(renderContext.Text[i]) ||
                                                !char.IsLetterOrDigit(renderContext.Text[i - 1]));

                    int position = token.Index;
                    foreach (int i in splitPositions)
                    {
                        var subtoken = new RichTextToken(token, position, i - position);
                        yield return(subtoken);

                        position = i;
                    }
                }
            }
        }
Пример #5
0
        public RichTextLayout(RichTextRenderContext renderContext, IconRecognizer iconRecognizer)
        {
            _renderContext  = renderContext;
            _iconRecognizer = iconRecognizer;

            _highlightBrush        = new SolidBrush(renderContext.HighlightColor);
            _highlightContextBrush = new SolidBrush(renderContext.HighlightContextColor);
            _selectionBrush        = new SolidBrush(Color.FromArgb(_renderContext.SelectionAlpha, _renderContext.SelectionBackColor));

            _pen = new Pen(renderContext.HighlightBorderColor, renderContext.HighlightBorderWidth);

            _x = _renderContext.Rect.Left;
            _y = _renderContext.Rect.Top;

            var lineSize = getLineSize(@" ");

            _lineHeight = lineSize.Height;
            _spaceWidth = lineSize.Width;

            _iconShadowOffset = new SizeF(-0.7f, 1f).ByDpi().ToPointF();
        }
Пример #6
0
        public static void Render(RichTextRenderContext renderContext, IconRecognizer iconRecognizer)
        {
            var textTokenPrinter = new RichTextLayout(renderContext, iconRecognizer);
            var readingContext   = new RichTextTokenReader(renderContext.Text, renderContext.HighlightRanges);

            var  currentWord = new List <RichTextToken>();
            bool aborted     = false;

            while (readingContext.ReadToken())
            {
                var token = readingContext.Current;

                bool isCj = renderContext.Text[token.Index + token.Length - 1].IsCj();

                if (token.Type == RichTextTokenType.Word)
                {
                    var subtokens = getSubtokens(token, renderContext, iconRecognizer);
                    currentWord.AddRange(subtokens);

                    if (isCj)
                    {
                        bool canContinue = textTokenPrinter.PrintWord(currentWord);

                        if (currentWord.Count > 0 && !canContinue)
                        {
                            aborted = true;
                            break;
                        }

                        currentWord.Clear();
                    }
                }
                else if (token.Type == RichTextTokenType.Space)
                {
                    bool canContinue = textTokenPrinter.PrintWord(currentWord);

                    if (currentWord.Count > 0 && !canContinue)
                    {
                        aborted = true;
                        break;
                    }

                    currentWord.Clear();

                    canContinue = textTokenPrinter.PrintSpace(token);

                    if (!canContinue)
                    {
                        aborted = true;
                        break;
                    }
                }
                else if (token.Type == RichTextTokenType.NewLine)
                {
                    bool canContinue = textTokenPrinter.PrintWord(currentWord);

                    if (currentWord.Count > 0 && !canContinue)
                    {
                        aborted = true;
                        break;
                    }

                    currentWord.Clear();
                    canContinue = textTokenPrinter.NewParagraph();

                    if (!canContinue)
                    {
                        aborted = true;
                        break;
                    }
                }
            }

            if (!aborted && currentWord.Count > 0)
            {
                textTokenPrinter.PrintWord(currentWord);
            }

            textTokenPrinter.Flush();
        }
Пример #7
0
        public void Init(
            DeckListModel decks,
            IconRecognizer recognizer,
            DeckSearcher searcher,
            DeckDocumentAdapter adapter,
            CollectionEditorModel collection,
            Control tooltipOwner)
        {
            _listModel       = decks;
            _tooltipOwner    = tooltipOwner;
            _collection      = collection;
            searcher.Loaded += indexLoaded;

            _viewDeck.IconRecognizer    = recognizer;
            _viewDeck.LayoutControlType = typeof(DeckListLayout);
            _viewDeck.DataSource        = _filteredModels;

            var iBeamIcon    = Resources.text_selection_24.ResizeDpi();
            var iBeamHotSpot = new Size(iBeamIcon.Width / 2, iBeamIcon.Height / 2);

            _textSelectionCursor = CursorHelper.CreateCursor(iBeamIcon, iBeamHotSpot);

            _textBoxName.Visible = false;

            _layoutViewTooltip = new ViewDeckListTooltips(_tooltipOwner, _viewDeck);

            _searchSubsystem = new DeckSearchSubsystem(
                this,
                _textBoxSearch,
                _panelSearchIcon,
                _listBoxSuggest,
                searcher,
                adapter,
                _viewDeck);

            _searchSubsystem.TextApplied += searchTextApplied;
            _searchSubsystem.SubscribeToEvents();

            _menuFilterByDeckMode.SelectedIndex = 0;

            _viewDeck.MouseClicked     += viewDeckClicked;
            _viewDeck.RowDataLoaded    += viewDeckRowDataLoaded;
            _viewDeck.CardIndexChanged += viewScrolled;

            _textBoxName.LostFocus += nameLostFocus;
            _textBoxName.KeyDown   += nameKeyDown;

            _menuFilterByDeckMode.SelectedIndexChanged += filterByDeckModeChanged;

            _layoutViewTooltip.SubscribeToEvents();

            _highlightSubsystem = new SearchResultHighlightSubsystem(_viewDeck, _searchSubsystem, adapter);
            _highlightSubsystem.SubscribeToEvents();

            _viewDeck.MouseMove += deckMouseMove;

            _deckSort              = new DeckSortSubsystem(_viewDeck, new DeckFields(), _searchSubsystem, _listModel);
            _deckSort.SortChanged += sortChanged;
            _deckSort.SubscribeToEvents();

            _model           = _listModel.CreateModel(Deck.Create());
            _model.IsCurrent = true;

            if (_listModel.IsLoaded)
            {
                listModelLoaded();
            }
            else
            {
                _listModel.Loaded += listModelLoaded;
            }

            searcher.Loaded += searcherLoaded;

            if (searcher.IsLoaded)
            {
                _searchSubsystem.Apply();
            }

            updateSortLabel();
        }