public static void DrawFocusedMessageMark(DrawContext drawContext,
                                                  IPresentationDataAccess presentationDataAccess, VisibleMessagesIndexes messagesToDraw)
        {
            var   dc = drawContext;
            Image focusedMessageMark = null;
            SizeF focusedMessageSz   = new SizeF();
            float markYPos           = 0;

            if (presentationDataAccess.FocusedMessageDisplayMode == FocusedMessageDisplayModes.Master)
            {
                var sel = presentationDataAccess.Selection;
                if (sel.First.Message != null)
                {
                    focusedMessageMark = dc.FocusedMessageIcon;
                    focusedMessageSz   = focusedMessageMark.GetSize(height: 14);
                    markYPos           = dc.GetTextOffset(0, sel.First.DisplayIndex).Y + (dc.LineHeight - focusedMessageSz.Height) / 2;
                }
            }
            else
            {
                if (presentationDataAccess.ViewLinesCount != 0)
                {
                    var slaveModeFocusInfo = presentationDataAccess.FindSlaveModeFocusedMessagePosition(
                        Math.Max(messagesToDraw.begin - 4, 0),
                        Math.Min(messagesToDraw.end + 4, presentationDataAccess.ViewLinesCount));
                    if (slaveModeFocusInfo != null)
                    {
                        focusedMessageMark = dc.FocusedMessageIcon;
                        focusedMessageSz   = focusedMessageMark.GetSize(height: 9);
                        float yOffset = slaveModeFocusInfo.Item1 != slaveModeFocusInfo.Item2 ?
                                        (dc.LineHeight - focusedMessageSz.Height) / 2 : -focusedMessageSz.Height / 2;
                        markYPos = dc.GetTextOffset(0, slaveModeFocusInfo.Item1).Y + yOffset;
                    }
                }
            }
            if (focusedMessageMark != null)
            {
                var canvas = drawContext.Canvas;
                canvas.PushState();
                canvas.TranslateTransform(
                    drawContext.CollapseBoxesAreaSize - focusedMessageSz.Width / 2 + 1,
                    markYPos + focusedMessageSz.Height / 2);
                if (dc.SlaveMessagePositionAnimationStep > 0)
                {
                    focusedMessageSz = focusedMessageMark.GetSize(height: 10);
                    var   factors = new float[] { .81f, 1f, 0.9f, .72f, .54f, .36f, .18f, .09f };
                    float factor  = 1f + 1.4f * factors[dc.SlaveMessagePositionAnimationStep - 1];
                    canvas.ScaleTransform(factor, factor);
                }
                dc.Canvas.DrawImage(
                    focusedMessageMark, new RectangleF(
                        -focusedMessageSz.Width / 2,
                        -focusedMessageSz.Height / 2,
                        focusedMessageSz.Width,
                        focusedMessageSz.Height
                        ));
                canvas.PopState();
            }
        }
Exemplo n.º 2
0
 public HighlightingManager(
     ISearchResultModel searchResultModel,
     IPresentationDataAccess presentationDataAccess,
     IFiltersList highlightFilters
     )
 {
     this.searchResultModel      = searchResultModel;
     this.presentationDataAccess = presentationDataAccess;
     this.highlightFilters       = highlightFilters;
 }
        public static void MouseMoveHelper(
            IPresentationDataAccess presentationDataAccess,
            DrawContext drawContext,
            Rectangle clientRectangle,
            IViewEvents viewEvents,
            Point pt,
            bool isLeftDrag,
            out CursorType newCursor
            )
        {
            newCursor = CursorType.Arrow;

            if (presentationDataAccess != null)
            {
                foreach (var i in DrawingUtils.GetVisibleMessagesIterator(drawContext, presentationDataAccess, clientRectangle))
                {
                    DrawingUtils.Metrics mtx = DrawingUtils.GetMetrics(i, drawContext);

                    if (pt.Y >= mtx.MessageRect.Top && pt.Y < mtx.MessageRect.Bottom)
                    {
                        if (isLeftDrag)
                        {
                            var hitTester = new HitTestingVisitor(drawContext, mtx, pt.X, i.TextLineIndex);
                            i.Message.Visit(hitTester);
                            MessageMouseEventFlag flags = MessageMouseEventFlag.ShiftIsHeld
                                                          | MessageMouseEventFlag.CapturedMouseMove;
                            if (pt.X < drawContext.CollapseBoxesAreaSize)
                            {
                                flags |= MessageMouseEventFlag.OulineBoxesArea;
                            }
                            viewEvents.OnMessageMouseEvent(i, hitTester.LineTextPosition, flags, pt);
                        }
                        if (i.Message.IsStartFrame() && mtx.OulineBox.Contains(pt))
                        {
                            newCursor = CursorType.Arrow;
                        }
                        else if (pt.X < drawContext.CollapseBoxesAreaSize)
                        {
                            newCursor = CursorType.RightToLeftArrow;
                        }
                        else if (pt.X >= drawContext.GetTextOffset(0, 0).X)
                        {
                            newCursor = CursorType.IBeam;
                        }
                        else
                        {
                            newCursor = CursorType.Arrow;
                        }
                    }
                }
            }
        }
        public static void MouseDownHelper(
            IPresentationDataAccess presentationDataAccess,
            DrawContext drawContext,
            Rectangle clientRectangle,
            IViewEvents viewEvents,
            Point pt,
            MessageMouseEventFlag flags,
            out bool captureTheMouse
            )
        {
            captureTheMouse = true;

            if (presentationDataAccess != null)
            {
                foreach (var i in DrawingUtils.GetVisibleMessagesIterator(drawContext, presentationDataAccess, clientRectangle))
                {
                    DrawingUtils.Metrics mtx = DrawingUtils.GetMetrics(i, drawContext);

                    // if user clicked line's outline box (collapse/expand cross)
                    if (i.Message.IsStartFrame() && mtx.OulineBox.Contains(pt.X, pt.Y) && i.TextLineIndex == 0)
                    //if (viewEvents.OnOulineBoxClicked(i.Message, (flags & MessageMouseEventFlag.CtrlIsHeld) != 0))
                    {
                        captureTheMouse = false;
                        break;
                    }

                    // if user clicked line area
                    if (mtx.MessageRect.Contains(pt.X, pt.Y))
                    {
                        var hitTester = new HitTestingVisitor(drawContext, mtx, pt.X, i.TextLineIndex);
                        i.Message.Visit(hitTester);
                        if ((flags & MessageMouseEventFlag.DblClick) != 0)
                        {
                            captureTheMouse = false;
                        }
                        if (pt.X < drawContext.CollapseBoxesAreaSize)
                        {
                            flags |= MessageMouseEventFlag.OulineBoxesArea;
                        }
                        viewEvents.OnMessageMouseEvent(i, hitTester.LineTextPosition, flags, pt);
                        break;
                    }
                }
            }
        }
        public static void PaintControl(DrawContext drawContext, IPresentationDataAccess presentationDataAccess,
                                        SelectionInfo selection, bool controlIsFocused, Rectangle dirtyRect, out int maxRight)
        {
            var drawingVisitor = new DrawingVisitor();

            drawingVisitor.ctx = drawContext;
            drawingVisitor.SearchResultHighlightingHandler = presentationDataAccess.CreateSearchResultHighlightingHandler();
            drawingVisitor.SelectionHighlightingHandler    = presentationDataAccess.CreateSelectionHighlightingHandler();
            drawingVisitor.HighlightingFiltersHandler      = presentationDataAccess.CreateHighlightingFiltersHandler();

            maxRight = 0;
            var  sel = selection;
            bool needToDrawCursor = drawContext.CursorState == true && controlIsFocused && sel.First.Message != null;

            var messagesToDraw = DrawingUtils.GetVisibleMessages(drawContext, presentationDataAccess, dirtyRect);

            var displayLinesEnum = presentationDataAccess.GetViewLines(messagesToDraw.begin, messagesToDraw.end);

            foreach (var il in displayLinesEnum)
            {
                drawingVisitor.DisplayIndex = il.LineIndex;
                drawingVisitor.TextLineIdx  = il.TextLineIndex;
                drawingVisitor.IsBookmarked = il.IsBookmarked;
                DrawingUtils.Metrics m = DrawingUtils.GetMetrics(il, drawContext);
                drawingVisitor.m = m;
                if (needToDrawCursor && sel.First.DisplayIndex == il.LineIndex)
                {
                    drawingVisitor.CursorPosition = sel.First;
                }
                else
                {
                    drawingVisitor.CursorPosition = null;
                }

                il.Message.Visit(drawingVisitor);

                maxRight = Math.Max(maxRight, m.OffsetTextRect.Right);
            }

            DrawFocusedMessageMark(drawContext, presentationDataAccess, messagesToDraw);

            drawingVisitor.SearchResultHighlightingHandler?.Dispose();
            drawingVisitor.SelectionHighlightingHandler?.Dispose();
            drawingVisitor.HighlightingFiltersHandler?.Dispose();
        }
Exemplo n.º 6
0
 public SelectionManager(
     IView view,
     IScreenBuffer screenBuffer,
     LJTraceSource tracer,
     IPresentationDataAccess presentationDataAccess,
     IClipboardAccess clipboard,
     IScreenBufferFactory screenBufferFactory,
     IBookmarksFactory bookmarksFactory
     )
 {
     this.view                   = view;
     this.screenBuffer           = screenBuffer;
     this.clipboard              = clipboard;
     this.presentationDataAccess = presentationDataAccess;
     this.tracer                 = tracer;
     this.screenBufferFactory    = screenBufferFactory;
     this.bookmarksFactory       = bookmarksFactory;
 }
Exemplo n.º 7
0
        public SelectionManager(
            IView view,
            ISearchResultModel searchResultModel,             // todo: try get rid of this dependency
            IScreenBuffer screenBuffer,
            LJTraceSource tracer,
            IPresentationDataAccess presentationDataAccess,
            IClipboardAccess clipboard,
            IScreenBufferFactory screenBufferFactory,
            IBookmarksFactory bookmarksFactory
            )
        {
            this.view = view;
            this.searchResultModel      = searchResultModel;
            this.screenBuffer           = screenBuffer;
            this.clipboard              = clipboard;
            this.presentationDataAccess = presentationDataAccess;
            this.tracer              = tracer;
            this.searchResultModel   = searchResultModel;
            this.screenBufferFactory = screenBufferFactory;
            this.bookmarksFactory    = bookmarksFactory;

            this.searchResultInplaceHightlightHandler = SearchResultInplaceHightlightHandler;
        }
 void IView.SetPresentationDataAccess(IPresentationDataAccess presentationDataAccess)
 {
     this.presentationDataAccess = presentationDataAccess;
     this.drawContext.Presenter  = presentationDataAccess;
 }
Exemplo n.º 9
0
 void IView.SetPresenter(IViewEvents viewEvents)
 {
     this.viewEvents             = viewEvents;
     this.presentationDataAccess = (IPresentationDataAccess)viewEvents;
 }
Exemplo n.º 10
0
        public static VisibleMessagesIndexes GetVisibleMessages(DrawContext drawContext, IPresentationDataAccess presentationDataAccess, Rectangle viewRect)
        {
            VisibleMessagesIndexes rv;

            viewRect.Offset(0, drawContext.ScrollPos.Y);

            rv.begin             = viewRect.Y / drawContext.LineHeight;
            rv.fullyVisibleBegin = rv.begin;
            if ((viewRect.Y % drawContext.LineHeight) != 0)
            {
                ++rv.fullyVisibleBegin;
            }

            rv.end             = viewRect.Bottom / drawContext.LineHeight;
            rv.fullyVisibleEnd = rv.end;
            --rv.fullyVisibleEnd;
            if ((viewRect.Bottom % drawContext.LineHeight) != 0)
            {
                ++rv.end;
            }

            int availableLines = presentationDataAccess.ViewLinesCount;

            rv.begin           = Math.Min(availableLines, rv.begin);
            rv.end             = Math.Min(availableLines, rv.end);
            rv.fullyVisibleEnd = Math.Min(availableLines, rv.fullyVisibleEnd);

            return(rv);
        }
Exemplo n.º 11
0
        public static IEnumerable <ViewLine> GetVisibleMessagesIterator(DrawContext drawContext, IPresentationDataAccess presentationDataAccess, Rectangle viewRect)
        {
            var vl = DrawingUtils.GetVisibleMessages(drawContext, presentationDataAccess, viewRect);

            return(presentationDataAccess.GetViewLines(vl.begin, vl.end));
        }