/// <summary>
        /// Initializes a new instance of the <see cref="ShortcutEditorFactory"/> class.
        /// </summary>
        internal ShortcutEditorFactory(IServiceProvider provider, IShortcutPersistenceHandler fileHandler)
            : this(provider)
        {
            Guard.NotNull(() => fileHandler, fileHandler);

            this.PersistenceHandler = fileHandler;
        }
Пример #2
0
        /// <summary>
        /// Initializes a new instance of the <see cref="ShortcutEditorFactory"/> class.
        /// </summary>
        internal ShortcutEditorFactory(IServiceProvider provider, IShortcutPersistenceHandler fileHandler)
            : this(provider)
        {
            Guard.NotNull(() => fileHandler, fileHandler);

            this.PersistenceHandler = fileHandler;
        }
        /// <summary>
        /// Used by the editor factory architecture to create editors that support data/view separation.  
        /// </summary>
        public int CreateEditorInstance(uint grfCreateDoc, string pszMkDocument, string pszPhysicalView, IVsHierarchy pvHier, uint itemid, IntPtr punkDocDataExisting, out IntPtr ppunkDocView, out IntPtr ppunkDocData, out string pbstrEditorCaption, out Guid pguidCmdUI, out int pgrfCDW)
        {
            ppunkDocView = IntPtr.Zero;
            ppunkDocData = IntPtr.Zero;
            pbstrEditorCaption = string.Empty;
            pguidCmdUI = this.GetType().GUID;
            pgrfCDW = 0;

            // Ensure that the file exists
            if (File.Exists(pszMkDocument))
            {
                // Ensure we have a file handler.
                if (this.PersistenceHandler == null)
                {
                    this.PersistenceHandler = new ShortcutFileHandler(pszMkDocument);
                }

                // Launch the shortcut
                var result = ShortcutLaunchCoordinator.LaunchShortcut(this.serviceProvider, this.PersistenceHandler);
                return result ? VSConstants.S_OK : VSConstants.S_FALSE;
            }

            return VSConstants.S_FALSE;
        }
Пример #4
0
        /// <summary>
        /// Used by the editor factory architecture to create editors that support data/view separation.
        /// </summary>
        public int CreateEditorInstance(uint grfCreateDoc, string pszMkDocument, string pszPhysicalView, IVsHierarchy pvHier, uint itemid, IntPtr punkDocDataExisting, out IntPtr ppunkDocView, out IntPtr ppunkDocData, out string pbstrEditorCaption, out Guid pguidCmdUI, out int pgrfCDW)
        {
            ppunkDocView       = IntPtr.Zero;
            ppunkDocData       = IntPtr.Zero;
            pbstrEditorCaption = string.Empty;
            pguidCmdUI         = this.GetType().GUID;
            pgrfCDW            = 0;

            // Ensure that the file exists
            if (File.Exists(pszMkDocument))
            {
                // Ensure we have a file handler.
                if (this.PersistenceHandler == null)
                {
                    this.PersistenceHandler = new ShortcutFileHandler(pszMkDocument);
                }

                // Launch the shortcut
                var result = ShortcutLaunchCoordinator.LaunchShortcut(this.serviceProvider, this.PersistenceHandler);
                return(result ? VSConstants.S_OK : VSConstants.S_FALSE);
            }

            return(VSConstants.S_FALSE);
        }
Пример #5
0
        /// <summary>
        /// Launches a shortcut from file.
        /// </summary>
        public static bool LaunchShortcut(IServiceProvider serviceProvider, IShortcutPersistenceHandler fileHandler)
        {
            Guard.NotNull(() => serviceProvider, serviceProvider);
            Guard.NotNull(() => fileHandler, fileHandler);

            var messageService = serviceProvider.GetService <IUserMessageService>();
            var launchService  = serviceProvider.GetService <IShortcutLaunchService>();

            try
            {
                // Read the file content
                var shortcut = fileHandler.ReadShortcut();
                if (shortcut != null)
                {
                    // Check if type is registered
                    if (!launchService.IsTypeRegistered(shortcut.Type))
                    {
                        throw new ShortcutProviderNotExistException();
                    }

                    // Get an actual instance of the provided shortcut
                    var specificShortcut = launchService.ResolveShortcut(shortcut);
                    if (specificShortcut == null)
                    {
                        throw new ShortcutProviderNotExistException();
                    }

                    // Execute the shortcut
                    var newShortcut = launchService.Execute(specificShortcut);

                    // Update the shortcut (if updated at all)
                    if (newShortcut != null)
                    {
                        fileHandler.WriteShortcut(newShortcut);
                    }

                    return(true);
                }
            }
            catch (ShortcutProviderNotExistException)
            {
                if (messageService != null)
                {
                    messageService.ShowError(Resources.ShortcutEditorFactory_ErrorShortcutProviderNotExist);
                }
            }
            catch (ShortcutFileFormatException)
            {
                if (messageService != null)
                {
                    messageService.ShowError(Resources.ShortcutEditorFactory_ErrorShortcutFormat);
                }
            }
            catch (ShortcutFileAccessException)
            {
                if (messageService != null)
                {
                    messageService.ShowError(Resources.ShortcutEditorFactory_ErrorShortcutIO);
                }
            }
            catch (Exception)
            {
                if (messageService != null)
                {
                    messageService.ShowError(Resources.ShortcutEditorFactory_ErrorUnknown);
                }
            }

            return(false);
        }
        /// <summary>
        /// Launches a shortcut from file.
        /// </summary>
        public static bool LaunchShortcut(IServiceProvider serviceProvider, IShortcutPersistenceHandler fileHandler)
        {
            Guard.NotNull(() => serviceProvider, serviceProvider);
            Guard.NotNull(() => fileHandler, fileHandler);

            var messageService = serviceProvider.GetService<IUserMessageService>();
            var launchService = serviceProvider.GetService<IShortcutLaunchService>();

            try
            {
                // Read the file content
                var shortcut = fileHandler.ReadShortcut();
                if (shortcut != null)
                {
                    // Check if type is registered
                    if (!launchService.IsTypeRegistered(shortcut.Type))
                    {
                        throw new ShortcutProviderNotExistException();
                    }

                    // Get an actual instance of the provided shortcut
                    var specificShortcut = launchService.ResolveShortcut(shortcut);
                    if (specificShortcut == null)
                    {
                        throw new ShortcutProviderNotExistException();
                    }

                    // Execute the shortcut
                    var newShortcut = launchService.Execute(specificShortcut);

                    // Update the shortcut (if updated at all)
                    if (newShortcut != null)
                    {
                        fileHandler.WriteShortcut(newShortcut);
                    }

                    return true;
                }
            }
            catch (ShortcutProviderNotExistException)
            {
                if (messageService != null)
                {
                    messageService.ShowError(Resources.ShortcutEditorFactory_ErrorShortcutProviderNotExist);
                }
            }
            catch (ShortcutFileFormatException)
            {
                if (messageService != null)
                {
                    messageService.ShowError(Resources.ShortcutEditorFactory_ErrorShortcutFormat);
                }
            }
            catch (ShortcutFileAccessException)
            {
                if (messageService != null)
                {
                    messageService.ShowError(Resources.ShortcutEditorFactory_ErrorShortcutIO);
                }
            }
            catch (Exception)
            {
                if (messageService != null)
                {
                    messageService.ShowError(Resources.ShortcutEditorFactory_ErrorUnknown);
                }
            }

            return false;
        }