예제 #1
0
        public (Repository, Commit) GetSelectedCommit()
        {
            ThreadHelper.ThrowIfNotOnUIThread();
            EnvDTE80.DTE2 dte = ServiceProvider.GetService(typeof(DTE)) as EnvDTE80.DTE2;
            // GUID found via dte.ActiveWindow.ObjectKind
            Guid           gitHistoryWindowGuid = new Guid("116D2292-E37D-41CD-A077-EBACAC4C8CC4");
            IVsUIShell     vsUIShell            = (IVsUIShell)Package.GetGlobalService(typeof(SVsUIShell));
            int            toolWindowReturn     = vsUIShell.FindToolWindow((uint)__VSFINDTOOLWIN.FTW_fFrameOnly, ref gitHistoryWindowGuid, out IVsWindowFrame vsWindowFrame);
            WindowFrame    windowFrame          = (WindowFrame)vsWindowFrame;
            ToolWindowView toolWindowView       = (ToolWindowView)windowFrame.FrameView;
            // panel is of innaccessible type Microsoft.VisualStudio.Platform.WindowManagement.WindowFrame.ContentHostingPanel
            // so use base System.Windows.Controls.Grid
            Grid contentHostingPanel = (Grid)toolWindowView.Content;
            // Type Microsoft.VisualStudio.Platform.WindowManagement.Controls.GenericPaneContentPresenter is internal
            // so use base ContentPresenter
            ContentPresenter genericPaneContentPresenter = contentHostingPanel.Children[1] as ContentPresenter;
            // Microsoft.VisualStudio.TeamFoundation.ToolWindowBase.ToolWindowBaseProxy is innaccessible
            // so use base ContentPresenter
            ContentPresenter toolWindowBaseProxy = (ContentPresenter)genericPaneContentPresenter.Content;
            // Is of type Microsoft.TeamFoundation.Git.Controls.History.HistoryView,
            // but this class is defined as internal so using base UserControl.
            UserControl historyView = (UserControl)toolWindowBaseProxy.Content;
            // Is of type Microsoft.TeamFoundation.Git.Controls.History.HistoryViewModel,
            // but this class is defined as internal so using base Microsoft.TeamFoundation.MVVM.ViewModelBase.
            ViewModelBase historyViewModel = (ViewModelBase)historyView.DataContext;
            // Use reflection to get at properties of internal type HistoryViewModel and ObservableCollection<GitHistoryItem>
            object     gitHistoryItem = ((IList)historyViewModel.GetType().GetProperty("SelectedItems").GetValue(historyViewModel, null))[0];
            IGitCommit selectedCommit = (IGitCommit)gitHistoryItem.GetType().GetProperty("Commit").GetValue(gitHistoryItem, null);
            IGitExt    gitExt         = ServiceProvider.GetService(typeof(IGitExt)) as IGitExt;
            Repository repository     = new Repository(gitExt.ActiveRepositories.First().RepositoryPath);
            Commit     commit         = repository.Lookup <Commit>(selectedCommit.Id.Sha);

            return(repository, commit);
        }
        public FrameworkElement GetToolWindowView(object _)
        {
            var control = new EditorControl {
                DataContext = this
            };

            ToolWindowView.SetTabTitle(control, new ToolWindowTitle("Run C# script"));

            return(control);
        }
예제 #3
0
        public static string GetShortTitle(this ToolWindowView view)
        {
            if (view == null)
            {
                throw new ArgumentNullException(nameof(view));
            }

            var wft = view.Title as WindowFrameTitle;

            return(wft?.ShortTitle);
        }
예제 #4
0
        public static void SetShortTitle(this ToolWindowView view, string title)
        {
            if (view == null)
            {
                throw new ArgumentNullException(nameof(view));
            }
            if (title.IsNullOrEmpty())
            {
                throw new ArgumentNullException(nameof(title));
            }

            if (view.Title is WindowFrameTitle wft)
            {
                BindingOperations.ClearBinding(wft, WindowFrameTitle.ShortTitleProperty);
                wft.ShortTitle = title;
            }
        }