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); } }
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(); }); }