private void ReinsertFakeItems(IGraphBuilder<Revision> builder) { int fakeItems = 0; int graphLength = 0; if(_stagedItem != null) { if(_currentIndex != -1) { Items.Insert(_currentIndex, _stagedItem); ++_currentIndex; _stagedItem.Graph = builder.AddGraphLineToTop(_currentRevisionItem.Graph); graphLength = _stagedItem.Graph.Length; ++fakeItems; } else if(_repository.IsEmpty) { Items.Insert(0, _stagedItem); _stagedItem.Graph = builder.AddGraphLineToTop(null); graphLength = _stagedItem.Graph.Length; ++fakeItems; } else { _stagedItem = null; } } if(_unstagedItem != null) { if(_currentIndex != -1) { if(_stagedItem != null) { Items.Insert(_currentIndex - 1, _unstagedItem); } else { Items.Insert(_currentIndex, _unstagedItem); } ++_currentIndex; if(_unstagedItem != null && _stagedItem != null) { _unstagedItem.Graph = builder.AddGraphLineToTop(_stagedItem.Graph); } else { if(_currentRevisionItem != null) { _unstagedItem.Graph = builder.AddGraphLineToTop(_currentRevisionItem.Graph); } else { _unstagedItem.Graph = builder.AddGraphLineToTop(null); } } if(_unstagedItem.Graph.Length > graphLength) { graphLength = _unstagedItem.Graph.Length; } ++fakeItems; } else if(_repository.IsEmpty) { Items.Insert(0, _unstagedItem); if(_unstagedItem != null && _stagedItem != null) { _unstagedItem.Graph = builder.AddGraphLineToTop(_stagedItem.Graph); } else { if(_currentRevisionItem != null) { _unstagedItem.Graph = builder.AddGraphLineToTop(_currentRevisionItem.Graph); } else { _unstagedItem.Graph = builder.AddGraphLineToTop(null); } } if(_unstagedItem.Graph.Length > graphLength) { graphLength = _unstagedItem.Graph.Length; } ++fakeItems; } else { _unstagedItem = null; } } if(fakeItems != 0) { graphLength *= 21; var graphColumn = GraphColumn; if(graphColumn != null) { if(graphColumn.Width < graphLength) { graphColumn.Width = graphLength; } else { graphColumn.AutoSize(); } } } }
private void VerifyFakeItemsAfterStatusUpdate(Status status) { if(_showStatusItems && (_currentIndex != -1 || status.Repository.IsEmpty)) { var builder = GlobalBehavior.GraphBuilderFactory.CreateGraphBuilder<Revision>(); bool showStaged = status.StagedFiles.Count != 0; bool showUnstaged = status.UnstagedFiles.Count != 0; int changes = 0; if(showUnstaged) { if(_unstagedItem == null) ++changes; } else { if(_unstagedItem != null) ++changes; } if(showStaged) { if(_stagedItem == null) ++changes; } else { if(_stagedItem != null) ++changes; } if(changes != 0) { BeginUpdate(); if(showStaged) { if(_stagedItem == null) { _stagedItem = new FakeRevisionListItem(status.Repository, FakeRevisionItemType.StagedChanges); if(_currentIndex >= 0) { Items.Insert(_currentIndex, _stagedItem); ++_currentIndex; } else { if(showUnstaged && _unstagedItem != null) { Items.Insert(1, _stagedItem); } else { Items.Insert(0, _stagedItem); } } } if(showUnstaged) { if(_unstagedItem == null) { _unstagedItem = new FakeRevisionListItem(status.Repository, FakeRevisionItemType.UnstagedChanges); if(_currentIndex >= 0) { Items.Insert(_currentIndex - 1, _unstagedItem); ++_currentIndex; } else { Items.Insert(0, _unstagedItem); } } } else { if(_unstagedItem != null) { _unstagedItem.Remove(); _unstagedItem = null; if(_currentIndex != -1) { --_currentIndex; } } } } else { if(_stagedItem != null) { _stagedItem.Remove(); _stagedItem = null; if(_currentIndex != -1) { --_currentIndex; } } if(showUnstaged) { if(_unstagedItem == null) { _unstagedItem = new FakeRevisionListItem(status.Repository, FakeRevisionItemType.UnstagedChanges); if(_currentIndex >= 0) { Items.Insert(_currentIndex, _unstagedItem); ++_currentIndex; } else { Items.Insert(0, _unstagedItem); } } } else { if(_unstagedItem != null) { _unstagedItem.Remove(); _unstagedItem = null; if(_currentIndex != -1) { --_currentIndex; } } } } int fakeitems = 0; if(_stagedItem != null) ++fakeitems; if(_unstagedItem != null) ++fakeitems; if(_currentIndex != -1) { if(_currentIndex == fakeitems) { builder.CleanGraph(_currentRevisionItem.Graph); } else { var prev = ((RevisionListItem)Items[_currentIndex - fakeitems - 1]).Graph; var next = ((RevisionListItem)Items[_currentIndex]).Graph; builder.CleanGraph(prev, next); } } if(_stagedItem != null) { _stagedItem.Graph = builder.AddGraphLineToTop( _currentRevisionItem == null ? null : _currentRevisionItem.Graph); if(_unstagedItem != null) { _unstagedItem.Graph = builder.AddGraphLineToTop(_stagedItem.Graph); } } else { if(_unstagedItem != null) { _unstagedItem.Graph = builder.AddGraphLineToTop( _currentRevisionItem == null ? null : _currentRevisionItem.Graph); } } var graphColumn = GraphColumn; if(graphColumn != null) { graphColumn.AutoSize(); } EndUpdate(); } } }
private int CheckNeedOfFakeItems() { bool needStaged = false; bool needUnstaged = false; if(_repository != null && _showStatusItems) { if(_currentRevisionItem != null || _repository.IsEmpty) { if(_repository.Status.StagedFiles.Count != 0) { needStaged = true; } if(_repository.Status.UnstagedFiles.Count != 0) { needUnstaged = true; } } } int count = 0; if(needStaged) { if(_stagedItem == null) { _stagedItem = new FakeRevisionListItem(_repository, FakeRevisionItemType.StagedChanges); } ++count; } else { _stagedItem = null; } if(needUnstaged) { if(_unstagedItem == null) { _unstagedItem = new FakeRevisionListItem(_repository, FakeRevisionItemType.UnstagedChanges); } ++count; } else { _unstagedItem = null; } return count; }