public TreeViewItemWithIconViewModel(FilesTreeViewItem model, int stashId, FileIconsService fileIconService, VisualStudioGitService gitService)
        {
            _internalModel   = model;
            _fileIconService = fileIconService;
            _gitService      = gitService;

            Source = IsFile ?
                     _fileIconService.GetFileIcon("." + FileExtension) :
                     _fileIconService.GetFolderIcon(IsExpanded);

            var childNodes = model.Items.Select(m => new TreeViewItemWithIconViewModel(m, stashId, fileIconService, gitService)).ToList();

            Items = new ObservableCollection <TreeViewItemWithIconViewModel>(childNodes);

            CompareWithPreviousVersionCommand = new DelegateCommand(o =>
            {
                var treeItem = o as TreeViewItemWithIconViewModel;
                var filePath = treeItem?.FullPath;
                var fileName = treeItem?.Text;
                var isNew    = treeItem?.IsNew ?? false;
                var isStaged = treeItem?.IsStaged ?? false;

                _gitService.RunDiff(stashId, filePath, fileName, isNew, isStaged);
            });
        }
        public StashInfoChangesSectionViewModel(Stash stash, FileIconsService fileIconsService, GitCommandExecuter gitCommandExecuter, ITeamExplorer teamExplorer, IVsDifferenceService vsDiffService)
        {
            _fileIconsService   = fileIconsService;
            _gitCommandExecuter = gitCommandExecuter;
            _teamExplorer       = teamExplorer;
            _vsDiffService      = vsDiffService;
            _stash = stash;

            if (stash == null)
            {
                return;
            }

            var separator = '/';
            var rootNode  = new TreeNode();
            var paths     = stash.ChangedFiles
                            .Select(f => f.Path)
                            .Where(x => !string.IsNullOrEmpty(x.Trim()))
                            .ToList();

            foreach (var path in paths)
            {
                var currentNode = rootNode;
                var pathNodes   = path.Split(separator);
                foreach (var item in pathNodes)
                {
                    var foundedNode = currentNode.Nodes.Cast <TreeNode>().FirstOrDefault(x => x.Text == item);
                    currentNode = foundedNode ?? currentNode.Nodes.Add(item);
                }
            }

            var rootTreeViewItem = ToTreeViewItem(rootNode, false);

            ChangeItems = new ObservableCollection <TreeViewItemWithIcon>(rootTreeViewItem.Items.ToList());
        }
示例#3
0
        public StashInfoChangesSectionViewModel(Stash stash,
                                                FileIconsService fileIconsService,
                                                GitCommandExecuter gitCommandExecuter,
                                                ITeamExplorer teamExplorer,
                                                IVsDifferenceService vsDiffService,
                                                DTE dte)
        {
            _fileIconsService   = fileIconsService;
            _gitCommandExecuter = gitCommandExecuter;
            _teamExplorer       = teamExplorer;
            _vsDiffService      = vsDiffService;
            _dte   = dte;
            _stash = stash;

            if (stash == null)
            {
                return;
            }

            var separator = '/';
            var rootNode  = new TreeNode();

            foreach (var file in stash.ChangedFiles)
            {
                if (string.IsNullOrEmpty(file.Path.Trim()))
                {
                    continue;
                }

                var currentNode = rootNode;
                var pathNodes   = file.Path.Split(separator);
                foreach (var item in pathNodes)
                {
                    var foundedNode = currentNode.Nodes.Cast <TreeNode>().FirstOrDefault(x => x.Text == item);
                    if (foundedNode != null)
                    {
                        currentNode = foundedNode;
                    }
                    else
                    {
                        currentNode = currentNode.Nodes.Add(item);
                        // Last node in the path -> file.
                        if (item == pathNodes.LastOrDefault())
                        {
                            // Additional file info
                            currentNode.Tag = new Models.FileAttributes
                            {
                                IsNew    = file.IsNew,
                                IsStaged = file.IsStaged
                            };
                        }
                    }
                }
            }

            var rootTreeViewItem = ToTreeViewItem(rootNode, false);

            ChangeItems = new ObservableCollection <TreeViewItemWithIcon>(rootTreeViewItem.Items?.ToList() ?? Enumerable.Empty <TreeViewItemWithIcon>());
        }
        public StashInfoChangesSectionUI(Stash stash, IServiceProvider serviceProvider)
        {
            _serviceProvider    = serviceProvider;
            _vsImageService     = _serviceProvider.GetService(typeof(SVsImageService)) as IVsImageService2;
            _fileIconsService   = new FileIconsService(_vsImageService);
            _gitCommandExecuter = new GitCommandExecuter(_serviceProvider);
            _teamExplorer       = _serviceProvider.GetService(typeof(ITeamExplorer)) as ITeamExplorer;
            _vsDiffService      = _serviceProvider.GetService(typeof(SVsDifferenceService)) as IVsDifferenceService;
            InitializeComponent();

            DataContext = _viewModel = new StashInfoChangesSectionViewModel(stash, _fileIconsService, _gitCommandExecuter, _teamExplorer, _vsDiffService);
        }
示例#5
0
        public StashInfoChangesSectionViewModel(Stash stash, IServiceProvider serviceProvider)
        {
            _stash      = stash;
            _gitService = new VisualStudioGitService(serviceProvider);

            if (stash?.ChangedFiles == null)
            {
                return;
            }

            var vsImageService   = serviceProvider.GetService(typeof(SVsImageService)) as IVsImageService2;
            var fileIconsService = new FileIconsService(vsImageService);

            var rootTreeViewItem = stash.ChangedFiles.ToTreeViewItemStructure();
            var rootViewModel    = new TreeViewItemWithIconViewModel(rootTreeViewItem, stash.Id, fileIconsService, _gitService);

            ChangeItems = rootViewModel.Items;
        }