コード例 #1
0
        public FormsDesignerContent(FormsDesignerExtension parent, OpenedFile sourceFile)
            : base(parent)
        {
            _language = (NetLanguageDescriptor)LanguageDescriptor.GetLanguageByPath(sourceFile.FilePath);
            if (!(_language is NetLanguageDescriptor))
            {
                throw new ArgumentException("File must be a .NET source file.");
            }

            _extensionHost = parent.ExtensionHost;
            _extensionHost.ControlManager.AppearanceChanged += ControlManager_AppearanceChanged;

            _propertyContainer = new PropertyContainer();

            _serviceContainer = new ServiceContainer();
            _surfaceManager   = parent.DesignerSurfaceManager;

            _codeReader = new DesignerCodeReader(_extensionHost, _language);
            _codeWriter = new DesignerCodeWriter(_language);

            this.Text           = sourceFile.FilePath.FileName + sourceFile.FilePath.Extension + " [Design]";
            this.AssociatedFile = sourceFile;
            this.AssociatedFile.FilePathChanged += AssociatedFile_FilePathChanged;

            _errorControl = new ErrorControl()
            {
                Dock = DockStyle.Fill,
            };
            _errorControl.ReloadRequested += _errorControl_ReloadRequested;

            SetupDesigner();
        }
コード例 #2
0
        private void InitializeEditorLayout()
        {
            _autoCompleteMenu = new AutocompleteMenu(this.TextBox);

            var language = LanguageDescriptor.GetLanguageByPath(_file.FilePath);

            _layoutData = EditorLayoutData.GetLayout(language);

            if (_layoutData != null)
            {
                _autoCompletionMap = _layoutData.CreateAutoCompletionMap(_autoCompleteMenu);
            }

            if (_autoCompletionMap != null)
            {
                this.TextBox_TextChangedDelayed(this, null);
                _autoCompleteMenu.Items.SetAutocompleteItems(_itemEnumerator = new InternalAutoCompletionMap(_autoCompletionMap));
                _autoCompleteMenu.AppearInterval    = 10;
                _autoCompleteMenu.MinFragmentLength = 1;
                _autoCompleteMenu.Opening          += _autoCompleteMenu_Opening;
                _autoCompleteMenu.Opened           += _autoCompleteMenu_Opened;
                _autoCompleteMenu.SearchPattern     = _autoCompletionMap.SearchPattern;
                _autoCompleteMenu.Selecting        += _autoCompleteMenu_Selecting;
            }
            else
            {
                _itemEnumerator = new InternalAutoCompletionMap(null);
            }
        }
コード例 #3
0
        /// <inheritdoc />
        protected override TemplateResult CreateFileCore(IFileService fileService, Project parentProject, FilePath filePath)
        {
            string @namespace = "MyNamespace";

            if (parentProject != null && parentProject is NetProject)
            {
                @namespace = (parentProject as NetProject).RootNamespace;
                var relativePath = filePath.ParentDirectory.GetRelativePath(parentProject);
                if (!string.IsNullOrEmpty(relativePath))
                {
                    @namespace += "." + relativePath.Replace(Path.DirectorySeparatorChar, '.');
                }
            }

            var language     = (LanguageDescriptor.GetLanguageByPath(filePath) as NetLanguageDescriptor);
            var codeProvider = language.CodeProvider;
            var fileName     = filePath.FileName;

            using (var stringWriter = new StringWriter())
            {
                // generate source
                using (var writer = new IndentedTextWriter(stringWriter))
                {
                    codeProvider.GenerateCodeFromCompileUnit(CompileUnit, writer, new CodeGeneratorOptions()
                    {
                        BlankLinesBetweenMembers = true,
                        BracingStyle             = "C",
                    });
                }

                string source = stringWriter.ToString();

                // replace auto generated message.
                var match = Regex.Match(source, string.Format("{0}[^\r\n]+\r\n[^{0}]", language.CommentPrefix));
                if (match.Success)
                {
                    source = source.Remove(0, match.Index + match.Length);
                }

                // VbCodeProvider adds two option statements which should be removed as well because they are specified by default in the project settings.
                if (language.Name == LanguageDescriptor.GetLanguage <VisualBasicLanguage>().Name)
                {
                    match = Regex.Match(source, @"Option\s+\w+\s+\w+\s+Option\s+\w+\s+\w+");
                    if (match.Success)
                    {
                        source = source.Remove(0, match.Index + match.Length);
                    }
                }

                // create file instance.
                source = source.Replace("%folder%", @namespace)
                         .Replace("%file%", (string.IsNullOrEmpty(ObjectName) ? fileName : ObjectName));

                var file = fileService.CreateFile(filePath, Encoding.UTF8.GetBytes(source));
                return(new TemplateResult(new CreatedFile(file, ExtensionToUse)));
            }
        }