示例#1
0
        /// <summary>Create <see cref="FileDiffPanel"/>.</summary>
        public FileDiffPanel(Repository repository, DiffFile diffFile, DiffType diffType)
        {
            Verify.Argument.IsNotNull(diffFile, "diffFile");

            _repository = repository;
            _diffType = diffType;
            _diffFile = diffFile;
            if(_diffFile.HunkCount != 0)
            {
                _digits = GetDecimalDigits(_diffFile.MaxLineNum);
                _columnWidth = _lineHeaderWidth = _digits * CellSize.Width;
                _lineHeaderWidth *= _diffFile[0].ColumnCount;
            }
            else
            {
                _digits = 0;
                _columnWidth = 0;
                _lineHeaderWidth = 0;
            }
            _lineHover = new TrackingService(OnLineHoverChanged);
            _selStart = -1;
            _selEnd = -1;
            _selOrigin = -1;
        }
示例#2
0
        public DiffFileMenu(IDiffSource diffSource, DiffFile diffFile)
        {
            Verify.Argument.IsNotNull(diffSource, "diffSource");
            Verify.Argument.IsNotNull(diffFile, "diffFile");

            _diffSource = diffSource;
            _diffFile = diffFile;

            string fileName = diffFile.Status != FileStatus.Removed ? diffFile.TargetFile : diffFile.SourceFile;

            var indexDiff = diffSource as IIndexDiffSource;
            if(indexDiff != null)
            {
                var repository = indexDiff.Repository;
                if(diffFile.Status != FileStatus.Removed)
                {
                    try
                    {
                        var fullPath = Path.Combine(diffSource.Repository.WorkingDirectory, diffFile.TargetFile);
                        if(File.Exists(fullPath))
                        {
                            Items.Add(GuiItemFactory.GetOpenUrlItem<ToolStripMenuItem>(
                                Resources.StrOpen, null, fullPath));
                            Items.Add(GuiItemFactory.GetOpenUrlWithItem<ToolStripMenuItem>(
                                Resources.StrOpenWith.AddEllipsis(), null, fullPath));
                            Items.Add(GuiItemFactory.GetOpenUrlItem<ToolStripMenuItem>(
                                Resources.StrOpenContainingFolder, null, Path.GetDirectoryName(fullPath)));
                            Items.Add(new ToolStripSeparator());
                        }
                    }
                    catch(Exception exc)
                    {
                        if(exc.IsCritical())
                        {
                            throw;
                        }
                    }
                }
                if(indexDiff.Cached)
                {
                    var item = indexDiff.Repository.Status.TryGetStaged(fileName);
                    if(item != null)
                    {
                        Items.Add(GuiItemFactory.GetUnstageItem<ToolStripMenuItem>(item));
                        Items.Add(new ToolStripSeparator());
                    }
                }
                else
                {
                    var item = indexDiff.Repository.Status.TryGetUnstaged(fileName);
                    if(item != null)
                    {
                        Items.Add(GuiItemFactory.GetStageItem<ToolStripMenuItem>(item));
                        Items.Add(new ToolStripSeparator());
                    }
                }
                if(diffFile.Status != FileStatus.Removed)
                {
                    Items.Add(GuiItemFactory.GetBlameItem<ToolStripMenuItem>(
                        indexDiff.Repository.Head, fileName));
                }
                Items.Add(GuiItemFactory.GetPathHistoryItem<ToolStripMenuItem>(
                    indexDiff.Repository.Head, fileName));
            }
            else
            {
                var revisionDiff = diffSource as IRevisionDiffSource;
                if(revisionDiff != null)
                {
                    if(diffFile.Status != FileStatus.Removed)
                    {
                        Items.Add(GuiItemFactory.GetBlameItem<ToolStripMenuItem>(
                            revisionDiff.Revision, diffFile.TargetFile));
                        Items.Add(GuiItemFactory.GetPathHistoryItem<ToolStripMenuItem>(
                            revisionDiff.Revision, diffFile.TargetFile));
                    }
                    else
                    {
                        Items.Add(GuiItemFactory.GetPathHistoryItem<ToolStripMenuItem>(
                            revisionDiff.Revision, diffFile.SourceFile));
                    }
                }
            }
            Items.Add(new ToolStripMenuItem(Resources.StrCopyToClipboard, null,
                new ToolStripItem[]
                {
                    GuiItemFactory.GetCopyToClipboardItem<ToolStripMenuItem>(Resources.StrSourceFileName, diffFile.SourceFile),
                    GuiItemFactory.GetCopyToClipboardItem<ToolStripMenuItem>(Resources.StrDestinationFileName, diffFile.TargetFile),
                }));
        }
示例#3
0
 public DiffFileEventArgs(DiffFile diffFile)
 {
     _diffFile = diffFile;
 }
 public DiffFileContextMenuRequestedEventArgs(DiffFile file)
 {
     _file = file;
 }
示例#5
0
            public FileItem(DiffFile file)
            {
                Verify.Argument.IsNotNull(file, "file");

                _file = file;

                if(file.Status == FileStatus.Removed)
                {
                    _text = file.SourceFile;
                }
                else
                {
                    _text = file.TargetFile;
                }
                _icon = GraphicsUtility.QueryIcon(_text);
                switch(file.Status)
                {
                    case FileStatus.Removed:
                        _overlay = CachedResources.Bitmaps["ImgOverlayDel"];
                        break;
                    case FileStatus.Added:
                        _overlay = CachedResources.Bitmaps["ImgOverlayAdd"];
                        break;
                    case FileStatus.Modified:
                        _overlay = CachedResources.Bitmaps["ImgOverlayEdit"];
                        break;
                    case FileStatus.Unmerged:
                        _overlay = CachedResources.Bitmaps["ImgOverlayConflict"];
                        break;
                    case FileStatus.Copied:
                        _overlay = CachedResources.Bitmaps["ImgOverlayCopy"];
                        _text = GetRenamedOrCopiedText(file.SourceFile, file.TargetFile);
                        break;
                    case FileStatus.Renamed:
                        _overlay = CachedResources.Bitmaps["ImgOverlayRename"];
                        _text = GetRenamedOrCopiedText(file.SourceFile, file.TargetFile);
                        break;
                    case FileStatus.ModeChanged:
                        _overlay = CachedResources.Bitmaps["ImgOverlayChmod"];
                        break;
                }
            }
示例#6
0
 private void OnFileNavigationRequested(DiffFile diffFile)
 {
     var handler = FileNavigationRequested;
     if(handler != null) handler(this, new DiffFileEventArgs(diffFile));
 }
示例#7
0
 public DiffResult(DiffFile oldFile, DiffFile modifiedFile)
 {
     this.File         = oldFile;
     this.ModifiedFile = modifiedFile;
 }
示例#8
0
        public DiffFileMenu(IDiffSource diffSource, DiffFile diffFile)
        {
            Verify.Argument.IsNotNull(diffSource, nameof(diffSource));
            Verify.Argument.IsNotNull(diffFile, nameof(diffFile));

            DiffSource = diffSource;
            DiffFile   = diffFile;

            string fileName = diffFile.Status != FileStatus.Removed ? diffFile.TargetFile : diffFile.SourceFile;

            var indexDiff = diffSource as IIndexDiffSource;

            if (indexDiff != null)
            {
                var repository = indexDiff.Repository;
                if (diffFile.Status != FileStatus.Removed)
                {
                    try
                    {
                        var fullPath = Path.Combine(diffSource.Repository.WorkingDirectory, diffFile.TargetFile);
                        if (File.Exists(fullPath))
                        {
                            Items.Add(GuiItemFactory.GetOpenUrlItem <ToolStripMenuItem>(
                                          Resources.StrOpen, null, fullPath));
                            Items.Add(GuiItemFactory.GetOpenUrlWithItem <ToolStripMenuItem>(
                                          Resources.StrOpenWith.AddEllipsis(), null, fullPath));
                            Items.Add(GuiItemFactory.GetOpenUrlItem <ToolStripMenuItem>(
                                          Resources.StrOpenContainingFolder, null, Path.GetDirectoryName(fullPath)));
                            Items.Add(new ToolStripSeparator());
                        }
                    }
                    catch (Exception exc)
                    {
                        if (exc.IsCritical())
                        {
                            throw;
                        }
                    }
                }
                if (indexDiff.Cached)
                {
                    var item = indexDiff.Repository.Status.TryGetStaged(fileName);
                    if (item != null)
                    {
                        Items.Add(GuiItemFactory.GetUnstageItem <ToolStripMenuItem>(item));
                        Items.Add(new ToolStripSeparator());
                    }
                }
                else
                {
                    var item = indexDiff.Repository.Status.TryGetUnstaged(fileName);
                    if (item != null)
                    {
                        Items.Add(GuiItemFactory.GetStageItem <ToolStripMenuItem>(item));
                        Items.Add(new ToolStripSeparator());
                    }
                }
                if (diffFile.Status != FileStatus.Removed)
                {
                    Items.Add(GuiItemFactory.GetBlameItem <ToolStripMenuItem>(
                                  indexDiff.Repository.Head, fileName));
                }
                Items.Add(GuiItemFactory.GetPathHistoryItem <ToolStripMenuItem>(
                              indexDiff.Repository.Head, fileName));
            }
            else
            {
                var revisionDiff = diffSource as IRevisionDiffSource;
                if (revisionDiff != null)
                {
                    if (diffFile.Status != FileStatus.Removed)
                    {
                        Items.Add(GuiItemFactory.GetBlameItem <ToolStripMenuItem>(
                                      revisionDiff.Revision, diffFile.TargetFile));
                        Items.Add(GuiItemFactory.GetPathHistoryItem <ToolStripMenuItem>(
                                      revisionDiff.Revision, diffFile.TargetFile));
                    }
                    else
                    {
                        Items.Add(GuiItemFactory.GetPathHistoryItem <ToolStripMenuItem>(
                                      revisionDiff.Revision, diffFile.SourceFile));
                    }
                }
            }
            Items.Add(new ToolStripMenuItem(Resources.StrCopyToClipboard, null,
                                            new ToolStripItem[]
            {
                GuiItemFactory.GetCopyToClipboardItem <ToolStripMenuItem>(Resources.StrSourceFileName, diffFile.SourceFile),
                GuiItemFactory.GetCopyToClipboardItem <ToolStripMenuItem>(Resources.StrDestinationFileName, diffFile.TargetFile),
            }));
        }