Ejemplo n.º 1
0
 void IView.DisplayNothingLoadedMessage(string messageToDisplayOrNull)
 {
     if (string.IsNullOrWhiteSpace(messageToDisplayOrNull))
     {
         messageToDisplayOrNull = null;
     }
     if (emptyMessagesCollectionMessage == null)
     {
         emptyMessagesCollectionMessage         = new EmptyMessagesCollectionMessage();
         emptyMessagesCollectionMessage.Visible = messageToDisplayOrNull != null;
         Controls.Add(emptyMessagesCollectionMessage);
         emptyMessagesCollectionMessage.Dock = DockStyle.Fill;
     }
     else
     {
         emptyMessagesCollectionMessage.Visible = messageToDisplayOrNull != null;
     }
     if (messageToDisplayOrNull != null)
     {
         emptyMessagesCollectionMessage.SetMessage(messageToDisplayOrNull);
     }
 }
Ejemplo n.º 2
0
        void IView.SetViewModel(IViewModel viewModel)
        {
            this.viewModel = viewModel;

            var prototypeStringFormat = (StringFormat)StringFormat.GenericDefault.Clone();

            prototypeStringFormat.SetTabStops(0, new float[] { 20 });
            prototypeStringFormat.FormatFlags |=
                StringFormatFlags.MeasureTrailingSpaces |
                StringFormatFlags.NoFontFallback;                 // this is to treat \0002 and \0003 as regular characters

            graphicsResources = new GraphicsResources(viewModel,
                                                      fontData => new LJD.Font(GetFontFamily(fontData.Name).Name, ToFontEmSize(fontData.Size)),
                                                      textFormat: new LJD.StringFormat(prototypeStringFormat),
                                                      (error: new LJD.Image(Properties.Resources.ErrorLogSeverity),
                                                       warn: new LJD.Image(Properties.Resources.WarnLogSeverity),
                                                       bookmark: new LJD.Image(Properties.Resources.Bookmark),
                                                       focusedMark: new LJD.Image(Properties.Resources.FocusedMsg)),
                                                      () => new LJD.Graphics(this.CreateGraphics(), ownsGraphics: true)
                                                      );

            viewDrawing = new ViewDrawing(
                viewModel,
                graphicsResources,
                dpiScale: UIUtils.Dpi.Scale(1f),
                scrollPosXSelector: () => scrollPosXCache,
                viewWidthSelector: () => viewWidthCache
                );

            viewWidthCache = this.ClientRectangle.Width;

            var viewUpdater = Updaters.Create(
                () => viewModel.ViewLines,
                () => viewModel.FocusedMessageMark,
                (_1, _2) =>
            {
                Invalidate();
            }
                );
            var vScrollerUpdater = Updaters.Create(
                () => viewModel.VerticalScrollerPosition,
                value =>
            {
                scrollBarsInfo.scrollSize.Height = value != null ? ScrollBarsInfo.virtualVScrollSize : 0;
                SetScrollPos(posY: (int)(value.GetValueOrDefault() * (double)(ScrollBarsInfo.virtualVScrollSize - ClientRectangle.Height + 1)));
            }
                );
            var emptyViewMessageUpdater = Updaters.Create(
                () => viewModel.EmptyViewMessage,
                value =>
            {
                if (emptyMessagesCollectionMessage == null)
                {
                    Controls.Add(emptyMessagesCollectionMessage = new EmptyMessagesCollectionMessage {
                        Dock = DockStyle.Fill
                    });
                }
                emptyMessagesCollectionMessage.Visible = value != null;
                emptyMessagesCollectionMessage.SetMessage(value ?? "");
            }
                );

            viewModel.ChangeNotification.CreateSubscription(() =>
            {
                viewUpdater();
                vScrollerUpdater();
                emptyViewMessageUpdater();
            });
        }