private AbstractLogColumnPresenter AddColumn(ILogFileColumn column) { var columnPresenter = CreatePresenterFor(column); // The 2nd column is reserved for the data source name which hasn't been // ported to the new ILogFileColumnPresenter interface just yet int columnIndex; if (_columnPresenters.Count == 0) { columnIndex = 0; } else if (Equals(column, LogFileColumns.Message)) { columnIndex = ColumnDefinitions.IndexOf(_messageColumnDefinition); } else { columnIndex = _columnPresenters.Count + 1; } columnPresenter.SetValue(RowProperty, 0); columnPresenter.SetValue(ColumnProperty, columnIndex); _columnPresenters.Add(columnPresenter.Column, columnPresenter); var columnDefinition = new ColumnDefinition { Width = new GridLength(value: 1, type: GridUnitType.Auto) }; _columnDefinitionsByColumn.Add(columnPresenter.Column, columnDefinition); _columnsByColumnDefinition.Add(columnDefinition, columnPresenter.Column); int insertionIndex; if (_messageColumnDefinition != null) { insertionIndex = ColumnDefinitions.IndexOf(_messageColumnDefinition); } else { insertionIndex = ColumnDefinitions.Count; } ColumnDefinitions.Insert(insertionIndex, columnDefinition); return(columnPresenter); }
private void RemoveColumn(ILogFileColumn column) { if (!_columnPresenters.Remove(column)) { Log.WarnFormat("Unable to remove column '{0}' it's not presented", column); return; } if (!_columnDefinitionsByColumn.TryGetValue(column, out var columnDefinition)) { Log.ErrorFormat("Inconsistency detected: A column presenter exists, but not column definition for column '{0}'!", column); return; } var firstIndex = ColumnDefinitions.IndexOf(columnDefinition); _columnDefinitionsByColumn.Remove(column); _columnsByColumnDefinition.Remove(columnDefinition); ColumnDefinitions.Remove(columnDefinition); OffsetColumnsFrom(firstIndex, -1); }
public LogEntryListView() { var textSettings = TextSettings.Default; RowDefinitions.Add(new RowDefinition { Height = new GridLength(value: 1, type: GridUnitType.Star) }); RowDefinitions.Add(new RowDefinition { Height = new GridLength(value: 1, type: GridUnitType.Auto) }); _verticalScrollBar = new FlatScrollBar { Name = "PART_VerticalScrollBar", Thickness = 18 }; _verticalScrollBar.ValueChanged += VerticalScrollBarOnValueChanged; _verticalScrollBar.Scroll += VerticalScrollBarOnScroll; _verticalScrollBar.SetValue(RowProperty, value: 0); _verticalScrollBar.SetValue(ColumnProperty, value: 6); _horizontalScrollBar = new FlatScrollBar { Name = "PART_HorizontalScrollBar", Orientation = Orientation.Horizontal, Thickness = 18 }; _horizontalScrollBar.SetValue(RowProperty, value: 1); _horizontalScrollBar.SetValue(ColumnProperty, value: 0); _horizontalScrollBar.SetValue(ColumnSpanProperty, value: 6); _columnPresenterFactories = new Dictionary <ILogFileColumn, Func <TextSettings, AbstractLogColumnPresenter> > { { LogFileColumns.DeltaTime, settings => new DeltaTimeColumnPresenter(settings) }, { LogFileColumns.ElapsedTime, settings => new ElapsedTimeColumnPresenter(settings) }, { LogFileColumns.OriginalLineNumber, settings => new OriginalLineNumberColumnPresenter(settings) }, { LogFileColumns.LogLevel, settings => new LogLevelColumnPresenter(settings) }, { LogFileColumns.Message, settings => new MessageColumnPresenter(settings) }, { LogFileColumns.Timestamp, settings => new TimestampColumnPresenter(settings) } }; _columnPresenters = new Dictionary <ILogFileColumn, AbstractLogColumnPresenter>(); _columnDefinitionsByColumn = new Dictionary <ILogFileColumn, ColumnDefinition>(); _columnsByColumnDefinition = new Dictionary <ColumnDefinition, ILogFileColumn>(); _lineNumberColumn = (OriginalLineNumberColumnPresenter)AddColumn(LogFileColumns.OriginalLineNumber); _lineNumberColumn.SetValue(MarginProperty, new Thickness(left: 5, top: 0, right: 5, bottom: 0)); _dataSourceCanvas = new DataSourceCanvas(textSettings); _dataSourceCanvas.SetValue(RowProperty, value: 0); _dataSourceCanvas.SetValue(ColumnProperty, value: 1); _dataSourceCanvas.SetValue(MarginProperty, new Thickness(left: 0, top: 0, right: 5, bottom: 0)); ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(value: 1, type: GridUnitType.Auto) }); _deltaTimesColumn = (DeltaTimeColumnPresenter)AddColumn(LogFileColumns.DeltaTime); _deltaTimesColumn.Visibility = Visibility.Collapsed; _deltaTimesColumn.SetValue(MarginProperty, new Thickness(left: 0, top: 0, right: 5, bottom: 0)); _elapsedTimeColumn = (ElapsedTimeColumnPresenter)AddColumn(LogFileColumns.ElapsedTime); _elapsedTimeColumn.Visibility = Visibility.Collapsed; _elapsedTimeColumn.SetValue(MarginProperty, new Thickness(left: 0, top: 0, right: 5, bottom: 0)); _fixedColumns = _columnPresenters.Keys.ToList(); _messageColumnDefinition = new ColumnDefinition { Width = new GridLength(value: 1, type: GridUnitType.Star) }; ColumnDefinitions.Add(_messageColumnDefinition); var messageColumnIndex = ColumnDefinitions.IndexOf(_messageColumnDefinition); PartTextCanvas = new TextCanvas(_horizontalScrollBar, _verticalScrollBar, textSettings); PartTextCanvas.SetValue(RowProperty, value: 0); PartTextCanvas.SetValue(ColumnProperty, value: messageColumnIndex); PartTextCanvas.MouseWheelDown += TextCanvasOnMouseWheelDown; PartTextCanvas.MouseWheelUp += TextCanvasOnMouseWheelUp; PartTextCanvas.SizeChanged += TextCanvasOnSizeChanged; PartTextCanvas.VisibleLinesChanged += TextCanvasOnVisibleLinesChanged; PartTextCanvas.RequestBringIntoView += TextCanvasOnRequestBringIntoView; PartTextCanvas.VisibleSectionChanged += TextCanvasOnVisibleSectionChanged; PartTextCanvas.OnSelectionChanged += TextCanvasOnOnSelectionChanged; ChangeTextSettings(textSettings); var separator = new Rectangle { Fill = new SolidColorBrush(Color.FromRgb(225, 228, 232)), Width = 2 }; separator.SetValue(RowProperty, value: 0); separator.SetValue(ColumnProperty, value: messageColumnIndex); separator.SetValue(MarginProperty, new Thickness(left: 0, top: 0, right: 5, bottom: 0)); ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(value: 1, type: GridUnitType.Auto) }); Children.Add(_lineNumberColumn); Children.Add(_dataSourceCanvas); Children.Add(_deltaTimesColumn); Children.Add(_elapsedTimeColumn); Children.Add(separator); Children.Add(PartTextCanvas); Children.Add(_verticalScrollBar); Children.Add(_horizontalScrollBar); _timer = new DispatcherTimer(DispatcherPriority.Normal) { Interval = MaximumRefreshInterval, }; _timer.Tick += OnTimer; Loaded += OnLoaded; Unloaded += OnUnloaded; }
/// <summary> /// Delete compoenent from the rung /// </summary> /// <param name="component">Component to be deleted</param> public RungUI Remove(ComponentUIBase component) { ComponentGridPosition _component = _Components.Where(x => x.Component == component).First(); if (_LogicalRung.Components.Where(x => x.LeftLide == component.LogicComponent.LeftLide && x.RightLide == component.LogicComponent.RightLide).Count() > 1) { foreach (ComponentGridPosition item in GetAllBetween(component.LogicComponent.LeftLide, component.LogicComponent.RightLide).Where(x => x.Row > _component.Row)) { item.SetPossition(item.Row - 1, item.Column); } } else { IEnumerable <ComponentGridPosition> RR = _Components.Where(x => x.Component.LogicComponent.RightLide == component.LogicComponent.RightLide && x != _component); if (RR.Count() > 0) { IEnumerable <ComponentGridPosition> column_components = _Components.Where(x => x.Column == _component.Column); if (column_components.Count() == 1) { foreach (ComponentGridPosition item in _Components.Where(x => x.Column > _component.Column)) { item.SetPossition(item.Row, item.Column - 1); } } else { foreach (ComponentGridPosition item in GetAllBetween(component.LogicComponent.LeftLide, component.LogicComponent.RightLide).Where(x => x.Row > _component.Row)) { item.SetPossition(item.Row - 1, item.Column); } } } else { foreach (ComponentGridPosition item in _Components.Where(x => x.Component.LogicComponent.LeftLide == component.LogicComponent.RightLide)) { item.SetPossition(item.Row, item.Column - 1); } } } _Components.Remove(_component); _LogicalRung.Remove(component.LogicComponent); Children.Remove(component); var row = RowDefinitions.Where(x => _Components.Where(y => (y.Row == RowDefinitions.IndexOf(x))).Count() == 0); if (row.Count() != 0) { int row_index = RowDefinitions.IndexOf(row.First()); foreach (ComponentGridPosition item in _Components.Where(x => x.Row > row_index)) { item.SetPossition(item.Row - 1, item.Column); } RowDefinitions.RemoveAt(row_index); } var column = ColumnDefinitions.Where(x => _Components.Where(y => (y.Column == ColumnDefinitions.IndexOf(x))).Count() == 0); if (column.Count() != 0) { int column_index = ColumnDefinitions.IndexOf(column.First()); if (_component.Column >= ColumnDefinitions.Count - _OutputBlockLegth) { _OutputBlockLegth--; } foreach (ComponentGridPosition item in _Components.Where(x => x.Column > column_index)) { item.SetPossition(item.Row, item.Column - 1); } ColumnDefinitions.RemoveAt(column_index); } return(this); }