Пример #1
0
        private void OnViewSelectionChanged(object sender, EventArgs e)
        {
            LoadWorkItems();
            ViewSelectionViewModel.ShowViewOptions = false;
            var defaultProfile = Repository.Instance.ProfileProvider.GetDefaultProfile();

            try
            {
                DetachFromProfileProvider();
                if (ViewSelectionViewModel.IsMergeCandidatesSelected())
                {
                    var result = ViewSelectionViewModel.GetMergeSourceTargetBranches();
                    defaultProfile.WIQueryName        = null;
                    defaultProfile.WISourceBranch     = result.SourceBranch.Name;
                    defaultProfile.WITargetBranch     = result.TargetBranch.Name;
                    defaultProfile.WISourcePathFilter = result.PathFilter;
                }
                else if (ViewSelectionViewModel.IsQuerySelected())
                {
                    var query = ViewSelectionViewModel.GetSelectedQuery();
                    defaultProfile.WISourceBranch     = null;
                    defaultProfile.WITargetBranch     = null;
                    defaultProfile.WISourcePathFilter = null;
                    defaultProfile.WIQueryName        = query.QualifiedTitle;
                }
            }
            finally
            {
                AttachToProfileProvider();
            }
        }
Пример #2
0
        void Merge(object o)
        {
            try
            {
                var candidates = FilteredChangesets.Where(cs => cs.IsSelected).Select(cs => cs.TfsChangeset);

                if (!candidates.Any())
                {
                    var mbvm = new MessageBoxViewModel("Perform merge", "No changesets are currently selected.", MessageBoxViewModel.MessageBoxButtons.OK);
                    Repository.Instance.ViewManager.ShowModal(mbvm);
                }
                else
                {
                    var mergeViewModel = new PrepareMergeViewModel(TfsItemCache, candidates);
                    var result         = ViewSelectionViewModel.GetMergeSourceTargetBranches();
                    mergeViewModel.MergeSource = result != null ? result.SourceBranch : null;
                    mergeViewModel.MergeTarget = result != null ? result.TargetBranch : null;
                    mergeViewModel.PathFilter  = result != null ? result.PathFilter : null;
                    mergeViewModel.SetDefaults();

                    if (Repository.Instance.Settings.FetchSettings <bool>(Constants.Settings.PerformNonModalMergeKey))
                    {
                        vMergePackage.OpenMergeView(mergeViewModel);
                    }
                    else
                    {
                        Repository.Instance.ViewManager.ShowModal(mergeViewModel, "Modal");
                    }
                }
            }
            catch (Exception ex)
            {
                SimpleLogger.Log(ex, true);
            }
        }
        public ViewSelectionWindow(IEnumerable <LogLine> logLines)
        {
            InitializeComponent();
            DataContext = new ViewSelectionViewModel();

            ViewModel.LogLines = logLines;

            Settings.SettingsChanged += ViewModel.SettingsChanged;
        }
Пример #4
0
        void Merge(object o)
        {
            try
            {
                var candidates = WorkItems.Where(wi => wi.IsSelected).Select(wi => wi.TfsWorkItem);

                if (!candidates.Any())
                {
                    var mbvm = new MessageBoxViewModel("Perform merge", "No work items are currently selected.", MessageBoxViewModel.MessageBoxButtons.OK);
                    Repository.Instance.ViewManager.ShowModal(mbvm);
                }
                else if (!candidates.Any(candidate => candidate.RelatedChangesetCount > 0))
                {
                    var mbvm = new MessageBoxViewModel("Perform merge", "The selected work items don't have any linked changesets.", MessageBoxViewModel.MessageBoxButtons.OK);
                    Repository.Instance.ViewManager.ShowModal(mbvm);
                }
                else
                {
                    PrepareMergeViewModel mergeViewModel;
                    try
                    {
                        mergeViewModel = new PrepareMergeViewModel(TfsItemCache, WorkItems.Where(wi => wi.IsSelected).Select(wi => wi.TfsWorkItem));
                    }
                    catch (ArgumentException)
                    {
                        var mbvm = new MessageBoxViewModel(
                            "Perform merge",
                            String.Format("The selected work items don't have any linked changesets in the current team project\r\n({0}).", Repository.Instance.TfsBridgeProvider.ActiveTeamProject.Name),
                            MessageBoxViewModel.MessageBoxButtons.OK);
                        Repository.Instance.ViewManager.ShowModal(mbvm);
                        mergeViewModel = null;
                    }

                    if (mergeViewModel != null)
                    {
                        var result = ViewSelectionViewModel.GetMergeSourceTargetBranches();
                        mergeViewModel.MergeSource = result != null ? result.SourceBranch : null;
                        mergeViewModel.MergeTarget = result != null ? result.TargetBranch : null;
                        mergeViewModel.PathFilter  = result != null ? result.PathFilter : null;
                        mergeViewModel.SetDefaults();
                        if (Repository.Instance.Settings.FetchSettings <bool>(Constants.Settings.PerformNonModalMergeKey))
                        {
                            vMergePackage.OpenMergeView(mergeViewModel);
                        }
                        else
                        {
                            Repository.Instance.ViewManager.ShowModal(mergeViewModel, "Modal");
                        }
                    }
                }
            }
            catch (Exception)
            {
            }
        }
Пример #5
0
        public ChangesetViewModel(TfsItemCache tfsItemCache)
            : base("Changeset", typeof(ChangesetViewModel))
        {
            Repository.Instance.VMergeUIProvider.MergeWindowVisibilityChanged += (o, a) => Enabled = !Repository.Instance.VMergeUIProvider.IsMergeWindowVisible();
            Enabled                    = !Repository.Instance.VMergeUIProvider.IsMergeWindowVisible();
            _applyFilterTimer          = new DispatcherTimer();
            _applyFilterTimer.Interval = new TimeSpan(0, 0, 0, 0, 350);
            _applyFilterTimer.Tick    += (o, a) => PerformApplyFilter();

            TfsItemCache = tfsItemCache;

            ViewSelectionViewModel     = new ViewSelectionViewModel();
            Changesets                 = new ObservableCollection <TfsChangesetWrapper>();
            FilteredChangesets         = new ObservableCollection <TfsChangesetWrapper>();
            _changesetsToResetOnCancel = new List <Tuple <TfsChangesetWrapper, bool> >();
            ChangesetList              =
                new FieldMapperGridViewModel <TfsChangesetWrapper>(
                    new ChangesetPropertyAccessor(),
                    FilteredChangesets,
                    Columns);
            ChangesetList.ColumnSettingsChanged += (o, a) => DataWasModified();

            ViewSelectionViewModel.ViewSelectionChanged += OnViewSelectionChanged;

            ItemSelectedCommand      = new RelayCommand((o) => ItemSelected(o), (o) => Repository.Instance.TfsBridgeProvider.TfsTeamProjectCollection != null);
            ShowWorkItemViewCommand  = new RelayCommand((o) => ShowWorkItemView(), (o) => Repository.Instance.TfsBridgeProvider.TfsTeamProjectCollection != null);
            SelectMarkedItemsCommand = new RelayCommand((o) => SelectMarkedItems(), (o) => Repository.Instance.TfsBridgeProvider.TfsTeamProjectCollection != null);
            ViewChangesetCommand     = new RelayCommand((o) => ViewChangeset(o), (o) => Repository.Instance.TfsBridgeProvider.TfsTeamProjectCollection != null);
            TrackChangesetCommand    = new RelayCommand((o) => TrackChangeset(o), (o) => Repository.Instance.TfsBridgeProvider.TfsTeamProjectCollection != null);
            MergeCommand             = new RelayCommand((o) => Merge(o), (o) => Repository.Instance.TfsBridgeProvider.TfsTeamProjectCollection != null);
            ShowMergeViewCommand     = new RelayCommand((o) => ShowMergeView(), (o) => Repository.Instance.TfsBridgeProvider.TfsTeamProjectCollection != null);
            SelectAllCommand         = new RelayCommand((o) => SelectAll(), (o) => Repository.Instance.TfsBridgeProvider.TfsTeamProjectCollection != null);
            SaveMergeProfileCommand  = new RelayCommand((o) => SaveMergeProfile(), (o) => Repository.Instance.TfsBridgeProvider.TfsTeamProjectCollection != null);
            RefreshCommand           = new RelayCommand((o) => Refresh(), (o) => Repository.Instance.TfsBridgeProvider.TfsTeamProjectCollection != null);
            ShowLogFileWindowCommand = new RelayCommand((o) => ShowLogFileWindow(o), (o) => Repository.Instance.TfsBridgeProvider.TfsTeamProjectCollection != null);

            AttachToChangesetCache();
            AttachToProfileProvider();
            Repository.Instance.TfsBridgeProvider.ActiveProjectSelected += (o, a) =>
            {
                Changesets.Clear();
                FilteredChangesets.Clear();
                if (Repository.Instance.TfsBridgeProvider.ActiveTeamProject != null)
                {
                    Repository.Instance.BackgroundTaskManager.DelayedPost(() => { ProfileProvider_DefaultProfileChanged(null, null); return(true); });
                }
            };
        }
Пример #6
0
        private void TfsItemCache_WorkItemHasBeenMerged(object sender, WorkItemHasBeenMergedEventArgs e)
        {
            if (ViewSelectionViewModel.IsMergeCandidatesSelected())
            {
                var original = WorkItemList.OriginalElements.Where(changeset => changeset == e.WorkItem).FirstOrDefault();
                if (original != null)
                {
                    WorkItemList.OriginalElements.Remove(original);
                }

                var source = WorkItemList.Elements.Where(changeset => changeset.InnerItem == e.WorkItem).FirstOrDefault();
                if (source != null)
                {
                    WorkItemList.Elements.Remove(source);
                }
            }
        }
Пример #7
0
        public WorkItemViewModel(TfsItemCache tfsItemCache)
            : base("Work Item", typeof(WorkItemViewModel))
        {
            try
            {
                Repository.Instance.VMergeUIProvider.MergeWindowVisibilityChanged += (o, a) => Enabled = !Repository.Instance.VMergeUIProvider.IsMergeWindowVisible();
                Enabled      = !Repository.Instance.VMergeUIProvider.IsMergeWindowVisible();
                TfsItemCache = tfsItemCache;

                ViewSelectionViewModel = new ViewSelectionViewModel();
                WorkItems    = new ObservableCollection <TfsWorkItemWrapper>();
                WorkItemList =
                    new FieldMapperGridViewModel <TfsWorkItemWrapper>(
                        new WorkItemPropertyAccessor(),
                        WorkItems,
                        Columns);
                WorkItemList.ColumnSettingsChanged += (o, a) => DataWasModified();

                ItemSelectedCommand      = new RelayCommand((o) => ItemSelected(o));
                ShowChangesetViewCommand = new RelayCommand((o) => ShowChangesetView());
                SelectMarkedItemsCommand = new RelayCommand((o) => SelectMarkedItems());
                ViewWorkItemCommand      = new RelayCommand((o) => ViewWorkItem(o));
                TrackWorkItemCommand     = new RelayCommand((o) => TrackWorkItem(o));
                MergeCommand             = new RelayCommand((o) => Merge(o));
                ShowMergeViewCommand     = new RelayCommand((o) => ShowMergeView());
                RefreshCommand           = new RelayCommand((o) => Refresh(), (o) => Repository.Instance.TfsBridgeProvider.TfsTeamProjectCollection != null);

                ViewSelectionViewModel.ViewSelectionChanged += OnViewSelectionChanged;

                AttachToWorkItemCache();
                AttachToProfileProvider();
                Repository.Instance.TfsBridgeProvider.ActiveProjectSelected += (o, a) =>
                {
                    WorkItems.Clear();
                    if (Repository.Instance.TfsBridgeProvider.ActiveTeamProject != null)
                    {
                        Repository.Instance.BackgroundTaskManager.DelayedPost(() => { ProfileProvider_DefaultProfileChanged(null, null); return(true); });
                    }
                };
            } catch (Exception ex)
            {
                SimpleLogger.Log(ex, false, false);
                throw;
            }
        }
Пример #8
0
        private void LoadWorkItems()
        {
            if (Repository.Instance.TfsConnectionInfo.Uri == null)
            {
                ResetWorkItems();
                return;
            }

            if (ViewSelectionViewModel.IsMergeCandidatesSelected())
            {
                var result = ViewSelectionViewModel.GetMergeSourceTargetBranches();
                ResetWorkItems();

                Repository.Instance.BackgroundTaskManager.Start(
                    Constants.Tasks.LoadWorkItemsTaskKey,
                    ItemsLoading,
                    (task) =>
                {
                    LoadWorkItems(result.SourceBranch, result.TargetBranch, result.PathFilter, task);
                });
            }
            else if (ViewSelectionViewModel.IsQuerySelected())
            {
                var query = ViewSelectionViewModel.GetSelectedQuery();
                ResetWorkItems();

                Repository.Instance.BackgroundTaskManager.Start(
                    Constants.Tasks.LoadWorkItemsTaskKey,
                    ItemsLoading,
                    (task) =>
                {
                    LoadWorkItems(query, task);
                });
            }
            else
            {
                ItemsLoading.IsLoading = false;
            }
        }