Esempio n. 1
0
        private Declaration GetDeclaration(CodeExplorerItemViewModel node)
        {
            while (node != null && !(node is ICodeExplorerDeclarationViewModel))
            {
                node = node.Parent;
            }

            return((node as ICodeExplorerDeclarationViewModel)?.Declaration);
        }
Esempio n. 2
0
 public bool CanAddComponent(CodeExplorerItemViewModel parameter)
 {
     try
     {
         return(GetDeclaration(parameter) != null || _vbe.VBProjects.Count == 1);
     }
     catch (COMException)
     {
         return(false);
     }
 }
Esempio n. 3
0
        private string Folder(CodeExplorerItemViewModel node)
        {
            var declaration = node?.Declaration;

            if (declaration == null)
            {
                return(ActiveProjectFolder());
            }

            return(declaration.CustomFolder ?? ProjectFolder(declaration.ProjectName));
        }
Esempio n. 4
0
        public void AddComponent(CodeExplorerItemViewModel node, ComponentType type)
        {
            var components = node != null
                ? GetDeclaration(node).Project.VBComponents
                : _vbe.ActiveVBProject.VBComponents;

            var folderAnnotation = $"'@Folder(\"{GetFolder(node)}\")";

            var newComponent = components.Add(type);

            newComponent.CodeModule.InsertLines(1, folderAnnotation);
        }
Esempio n. 5
0
        private string GetFolder(CodeExplorerItemViewModel node)
        {
            switch (node)
            {
            case null:
                return(DefaultFolder);

            case ICodeExplorerDeclarationViewModel declarationNode:
                return(string.IsNullOrEmpty(declarationNode.Declaration.CustomFolder)
                        ? DefaultFolder
                        : declarationNode.Declaration.CustomFolder.Replace("\"", string.Empty));

            default:
                return(((CodeExplorerCustomFolderViewModel)node).FullPath);
            }
        }
Esempio n. 6
0
        private IVBProject GetNodeProject(CodeExplorerItemViewModel parameter)
        {
            if (parameter is ICodeExplorerDeclarationViewModel)
            {
                return(parameter.GetSelectedDeclaration().Project);
            }

            var node = parameter.Parent;

            while (!(node is ICodeExplorerDeclarationViewModel))
            {
                node = node.Parent;
            }

            return(((ICodeExplorerDeclarationViewModel)node).Declaration.Project);
        }
Esempio n. 7
0
        private string GetFolder(CodeExplorerItemViewModel node)
        {
            if (node == null)
            {
                return(DefaultFolder);
            }

            var declarationNode = node as ICodeExplorerDeclarationViewModel;

            if (declarationNode != null)
            {
                return(string.IsNullOrEmpty(declarationNode.Declaration.CustomFolder)
                    ? DefaultFolder
                    : declarationNode.Declaration.CustomFolder.Replace("\"", string.Empty));
            }

            return(((CodeExplorerCustomFolderViewModel)node).FullPath);
        }
        private string Folder(CodeExplorerItemViewModel node)
        {
            var declaration = node?.Declaration;

            if (declaration == null)
            {
                return(ActiveProjectFolder());
            }

            var customFolder = declaration.CustomFolder;

            if (customFolder != null)
            {
                return(customFolder.Replace("\"", string.Empty));
            }

            return(ProjectFolder(declaration.ProjectName));
        }
        protected void AddComponent(CodeExplorerItemViewModel node, string moduleText)
        {
            var nodeProject = node?.Declaration?.Project;

            if (node != null && nodeProject == null)
            {
                return; //The project is not available.
            }

            string optionCompare;

            using (var hostApp = Vbe.HostApplication())
            {
                optionCompare = hostApp?.ApplicationName == "Access" ? "Option Compare Database" :
                                string.Empty;
            }

            using (var components = node != null
                ? nodeProject.VBComponents
                : ComponentsCollectionFromActiveProject())
            {
                var folderAnnotation = (node is CodeExplorerCustomFolderViewModel folder) ? folder.FolderAttribute : $"'@Folder(\"{GetFolder(node)}\")";
                var fileName         = CreateTempTextFile(moduleText);

                using (var newComponent = components.Import(fileName))
                {
                    using (var codeModule = newComponent.CodeModule)
                    {
                        if (optionCompare.Length > 0)
                        {
                            codeModule.InsertLines(1, optionCompare);
                        }
                        if (folderAnnotation.Length > 0)
                        {
                            codeModule.InsertLines(1, folderAnnotation);
                        }
                        codeModule.CodePane.Show();
                    }
                }
                File.Delete(fileName);
            }
        }
        private bool EvaluateCanExecuteCore(IVBProject project, CodeExplorerItemViewModel itemViewModel)
        {
            if (project == null)
            {
                return(false);
            }

            foreach (var component in project.VBComponents)
            {
                using (component)
                {
                    if (component.Type == ComponentType.MDIForm)
                    {
                        // Only one MDI Form allowed per project
                        return(false);
                    }
                }
            }

            return(_addComponentCommand.CanAddComponent(itemViewModel, new[] { ProjectType.StandardExe, ProjectType.ActiveXExe }));
        }
        public bool CanAddComponent(CodeExplorerItemViewModel parameter, IEnumerable <ProjectType> allowableProjectTypes)
        {
            try
            {
                var project = GetDeclaration(parameter)?.Project;

                if (project == null && _vbe.ProjectsCount == 1)
                {
                    using (var vbProjects = _vbe.VBProjects)
                        using (project = vbProjects[1])
                        {
                            return(project != null && allowableProjectTypes.Contains(project.Type));
                        }
                }

                return(project != null && allowableProjectTypes.Contains(project.Type));
            }
            catch (COMException)
            {
                return(false);
            }
        }
Esempio n. 12
0
        public void AddComponent(CodeExplorerItemViewModel node, ComponentType componentType, string code = null)
        {
            var projectId = ProjectId(node);

            if (projectId == null)
            {
                return;
            }

            var prefixInModule = FolderAnnotation(node);

            var suspensionResult = _parseManager.OnSuspendParser(
                this,
                Enum.GetValues(typeof(ParserState)).Cast <ParserState>(),
                () => _addComponentService.AddComponent(projectId, componentType, code, prefixInModule));

            if (suspensionResult.Outcome == SuspensionOutcome.UnexpectedError &&
                suspensionResult.EncounteredException != null)
            {
                //This rethrows with the original stack trace.
                ExceptionDispatchInfo.Capture(suspensionResult.EncounteredException).Throw();
            }
        }
Esempio n. 13
0
        public void AddComponentWithAttributes(CodeExplorerItemViewModel node, ComponentType componentType, string code, string additionalPrefixInModule = null)
        {
            var projectId = ProjectId(node);

            if (projectId == null)
            {
                return;
            }

            var folderAnnotation = FolderAnnotation(node);
            var optionCompare    = OptionCompareStatement();

            var modulePrefix = new StringBuilder(folderAnnotation);

            if (optionCompare != null)
            {
                modulePrefix.Append(Environment.NewLine).Append(optionCompare);
            }
            if (additionalPrefixInModule != null)
            {
                modulePrefix.Append(Environment.NewLine).Append(additionalPrefixInModule);
            }
            var prefixInModule = modulePrefix.ToString();

            var suspensionResult = _parseManager.OnSuspendParser(
                this,
                Enum.GetValues(typeof(ParserState)).Cast <ParserState>(),
                () => _addComponentService.AddComponentWithAttributes(projectId, componentType, code, prefixInModule));

            if (suspensionResult.Outcome == SuspensionOutcome.UnexpectedError &&
                suspensionResult.EncounteredException != null)
            {
                //This rethrows with the original stack trace.
                ExceptionDispatchInfo.Capture(suspensionResult.EncounteredException).Throw();
            }
        }
        protected void AddComponent(CodeExplorerItemViewModel node)
        {
            var nodeProject = node?.Declaration.Project;

            if (node != null && nodeProject == null)
            {
                return; //The project is not available.
            }

            using (var components = node != null
                ? nodeProject.VBComponents
                : ComponentsCollectionFromActiveProject())
            {
                var folderAnnotation = (node is CodeExplorerCustomFolderViewModel folder) ? folder.FolderAttribute : $"'@Folder(\"{GetFolder(node)}\")";

                using (var newComponent = components.Add(ComponentType))
                {
                    using (var codeModule = newComponent.CodeModule)
                    {
                        codeModule.InsertLines(1, folderAnnotation);
                    }
                }
            }
        }
Esempio n. 15
0
        private bool EvaluateCanExecuteForProject(IVBProject project, CodeExplorerItemViewModel itemViewModel)
        {
            if (project == null)
            {
                return(false);
            }

            using (var components = project.VBComponents)
            {
                foreach (var component in components)
                {
                    using (component)
                    {
                        if (component.Type == ComponentType.MDIForm)
                        {
                            // Only one MDI Form allowed per project
                            return(false);
                        }
                    }
                }
            }

            return(base.EvaluateCanExecute(itemViewModel));
        }
Esempio n. 16
0
        public void AddComponent(CodeExplorerItemViewModel node, ComponentType type)
        {
            var nodeProject = GetDeclaration(node)?.Project;

            if (node != null && nodeProject == null)
            {
                return; //The project is not available.
            }

            using (var components = node != null
                ? nodeProject.VBComponents
                : ComponentsCollectionFromActiveProject())
            {
                var folderAnnotation = $"'@Folder(\"{GetFolder(node)}\")";

                using (var newComponent = components.Add(type))
                {
                    using (var codeModule = newComponent.CodeModule)
                    {
                        codeModule.InsertLines(1, folderAnnotation);
                    }
                }
            }
        }
Esempio n. 17
0
 private string FolderAnnotation(CodeExplorerItemViewModel node)
 {
     return((node is CodeExplorerCustomFolderViewModel folder)
         ? folder.FolderAttribute
         : $"'@Folder(\"{Folder(node)}\")");
 }
Esempio n. 18
0
 private string ProjectId(CodeExplorerItemViewModel node)
 {
     return(node?.Declaration.ProjectId);
 }
 private string GetFolder(CodeExplorerItemViewModel node)
 {
     return(string.IsNullOrEmpty(node?.Declaration?.CustomFolder)
         ? GetActiveProjectName()
         : node.Declaration.CustomFolder.Replace("\"", string.Empty));
 }
 private void AddComponent(CodeExplorerItemViewModel node)
 {
     _addComponentService.AddComponent(node, ComponentType);
 }