コード例 #1
0
        public bool CanMoveToResource()
        {
            ThrowIfNotOnUIThread();

            var document = _dte.ActiveDocument;

            if (document == null)
            {
                return(false);
            }

            var filePath = document.FullName;

            var extension = Path.GetExtension(filePath);

            if (extension == null)
            {
                return(false);
            }

            var configuration = _exportProvider.GetExportedValue <IDteConfiguration>();

            var configurations = configuration.MoveToResources.Items
                                 .Where(item => item.ParseExtensions().Contains(extension, StringComparer.OrdinalIgnoreCase));

            if (!configurations.Any())
            {
                return(false);
            }

            var selection = GetSelection(document);

            if (selection == null)
            {
                return(false);
            }

            if (!selection.Begin.EqualTo(selection.End))
            {
                return(true);
            }

            IParser parser = new GenericParser();

            var s = parser.LocateString(selection, false);

            return(s != null);
        }
コード例 #2
0
        public bool CanMoveToResource(Document?document)
        {
            Microsoft.VisualStudio.Shell.ThreadHelper.ThrowIfNotOnUIThread();

            var extension = Path.GetExtension(document?.FullName);

            if (extension == null)
            {
                return(false);
            }

            var configuration = _exportProvider.GetExportedValue <DteConfiguration>();

            var configurations = configuration.MoveToResources.Items
                                 .Where(item => item.ParseExtensions().Contains(extension, StringComparer.OrdinalIgnoreCase));

            if (!configurations.Any())
            {
                return(false);
            }

            var selection = GetSelection(document);

            if (selection == null)
            {
                return(false);
            }

            if (!selection.Begin.EqualTo(selection.End))
            {
                return(true);
            }

            IParser parser = new GenericParser();

            var s = parser.LocateString(selection, false);

            return(s != null);
        }
コード例 #3
0
        public bool CanMoveToResource(EnvDTE.Document document)
        {
            var extension = Path.GetExtension(document?.FullName);

            if (extension == null)
            {
                return(false);
            }

            var configuration = _compositionHost.GetExportedValue <DteConfiguration>();

            var configurations = configuration.MoveToResources.Items
                                 .Where(item => item.ParseExtensions().Contains(extension, StringComparer.OrdinalIgnoreCase));

            if (!configurations.Any())
            {
                return(false);
            }

            Contract.Assume(document != null);
            var selection = GetSelection(document);

            if (selection == null)
            {
                return(false);
            }

            if (!selection.Begin.EqualTo(selection.End))
            {
                return(true);
            }

            IParser parser = new GenericParser();

            var s = parser.LocateString(selection, false);

            return(s != null);
        }
コード例 #4
0
        public ResourceTableEntry MoveToResource([CanBeNull] EnvDTE.Document document)
        {
            var extension = Path.GetExtension(document?.FullName);

            if (extension == null)
            {
                return(null);
            }

            var fileName = Path.GetFileNameWithoutExtension(document.FullName);

            var configurationItems = _exportProvider.GetExportedValue <DteConfiguration>().MoveToResources.Items;

            var configuration = configurationItems
                                .FirstOrDefault(item => item.ParseExtensions().Contains(extension, StringComparer.OrdinalIgnoreCase));

            if (configuration == null)
            {
                return(null);
            }

            var selection = GetSelection(document);

            if (selection == null)
            {
                return(null);
            }

            IParser parser = new GenericParser();

            var text = !selection.IsEmpty ? selection.Text?.Trim('"') : parser.LocateString(selection, true);

            if (string.IsNullOrEmpty(text))
            {
                return(null);
            }

            var patterns = configuration.ParsePatterns().ToArray();

            var resourceViewModel = _exportProvider.GetExportedValue <ResourceViewModel>();

            resourceViewModel.Reload();

            var resourceManager = _exportProvider.GetExportedValue <ResourceManager>();

            var entities = resourceManager.ResourceEntities
                           .Where(entity => !entity.IsWinFormsDesignerResource)
                           .ToList();

            var filter = EntityFilter.BuildFilter(Settings.Default.ResourceFilter);

            if (filter != null)
            {
                entities.RemoveAll(item => !filter(item.ToString()));
            }

            var projectResources = new HashSet <ResourceEntity>(GetResourceEntiesFromProject(document, entities));

            // put resources from the same project on top
            entities.RemoveAll(entity => projectResources.Contains(entity));
            entities.InsertRange(0, projectResources);

            // put the last used entry on top, if it's in the same project, or the last access was cross-project.
            if (_lastUsedEntity != null)
            {
                if (!_isLastUsedEntityInSameProject || IsInProject(_lastUsedEntity, document))
                {
                    entities.Remove(_lastUsedEntity);
                    entities.Insert(0, _lastUsedEntity);
                }
            }

            var viewModel = new MoveToResourceViewModel(patterns, entities, text, extension, selection.ClassName, selection.FunctionName, fileName);

            var confirmed = ConfirmationDialog.Show(_exportProvider, viewModel, Resources.MoveToResource, null).GetValueOrDefault();

            if (!confirmed || string.IsNullOrEmpty(viewModel.Key))
            {
                return(null);
            }

            ResourceTableEntry entry = null;

            if (!viewModel.ReuseExisiting)
            {
                var entity = _lastUsedEntity = viewModel.SelectedResourceEntity;
                if (entity == null)
                {
                    return(null);
                }

                _isLastUsedEntityInSameProject = IsInProject(entity, document);

                entry = entity.Add(viewModel.Key);
                if (entry == null)
                {
                    return(null);
                }

                entry.Values[null] = viewModel.Value;
                entry.Comment      = viewModel.Comment;
            }

            selection.ReplaceWith(viewModel.Replacement?.Value);

            return(entry);
        }
コード例 #5
0
        public ResourceTableEntry MoveToResource(EnvDTE.Document document)
        {
            var extension = Path.GetExtension(document?.FullName);

            if (extension == null)
            {
                return(null);
            }

            var configurationItems = _compositionHost.GetExportedValue <DteConfiguration>().MoveToResources.Items;

            var configuration = configurationItems
                                .FirstOrDefault(item => item.ParseExtensions().Contains(extension, StringComparer.OrdinalIgnoreCase));

            if (configuration == null)
            {
                return(null);
            }

            Contract.Assume(document != null);
            var selection = GetSelection(document);

            if (selection == null)
            {
                return(null);
            }

            IParser parser = new GenericParser();

            var text = !selection.IsEmpty ? selection.Text?.Trim('"') : parser.LocateString(selection, true);

            if (string.IsNullOrEmpty(text))
            {
                return(null);
            }

            var patterns = configuration.ParsePatterns().ToArray();

            var resourceViewModel = _compositionHost.GetExportedValue <ResourceViewModel>();

            resourceViewModel.Reload();

            var resourceManager = _compositionHost.GetExportedValue <ResourceManager>();

            var entities = resourceManager.ResourceEntities
                           .Where(entity => !entity.IsWinFormsDesignerResource)
                           .ToArray();

            var filter = Settings.Default?.ResourceFilter?.Trim();

            if (!string.IsNullOrEmpty(filter))
            {
                var regex = new Regex(filter, RegexOptions.IgnoreCase | RegexOptions.Singleline);

                entities = entities
                           .Where(item => regex.Match(item.ToString()).Success)
                           .ToArray();
            }

            var favorites = new[] { GetPreferredResourceEntity(document, entities), _lastUsedEntity }
            .Where(item => item != null)
            .ToArray();

            entities = favorites
                       .Concat(entities.Except(favorites))
                       .ToArray();

            var viewModel = new MoveToResourceViewModel(patterns, entities, text, extension, selection.ClassName, selection.FunctionName);

            var confirmed = ConfirmationDialog.Show(_compositionHost.Container, viewModel, Resources.MoveToResource).GetValueOrDefault();

            if (confirmed && !string.IsNullOrEmpty(viewModel.Key))
            {
                ResourceTableEntry entry = null;

                if (!viewModel.ReuseExisiting)
                {
                    var entity = _lastUsedEntity = viewModel.SelectedResourceEntity;

                    entry = entity?.Add(viewModel.Key);
                    if (entry == null)
                    {
                        return(null);
                    }

                    entry.Values[null] = viewModel.Value;
                    entry.Comment      = viewModel.Comment;
                }

                selection.ReplaceWith(viewModel.Replacement);

                return(entry);
            }

            return(null);
        }
コード例 #6
0
        public ResourceTableEntry MoveToResource(Document document)
        {
            var extension = Path.GetExtension(document?.FullName);

            if (extension == null)
            {
                return(null);
            }

            var configurationItems = _exportProvider.GetExportedValue <DteConfiguration>().MoveToResources.Items;

            var configuration = configurationItems
                                .FirstOrDefault(item => item.ParseExtensions().Contains(extension, StringComparer.OrdinalIgnoreCase));

            if (configuration == null)
            {
                return(null);
            }

            Contract.Assume(document != null);
            var selection = GetSelection(document);

            if (selection == null)
            {
                return(null);
            }

            IParser parser = new GenericParser();

            var text = !selection.IsEmpty ? selection.Text?.Trim('"') : parser.LocateString(selection, true);

            if (string.IsNullOrEmpty(text))
            {
                return(null);
            }

            var patterns = configuration.ParsePatterns().ToArray();

            var resourceManager = _exportProvider.GetExportedValue <ResourceManager>();

            resourceManager.Reload(ResourceLoadOptions.None);

            var entities = resourceManager.ResourceEntities
                           .Where(entity => !entity.IsWinFormsDesignerResource)
                           .ToArray();

            var viewModel = new MoveToResourceViewModel(patterns, entities, text, extension, selection.ClassName, selection.FunctionName)
            {
                SelectedResourceEntity = GetPreferredResourceEntity(document, entities) ?? _lastUsedEntity
            };

            var confirmed = ConfirmationDialog.Show(_exportProvider, viewModel, Resources.MoveToResource).GetValueOrDefault();

            if (confirmed && !string.IsNullOrEmpty(viewModel.Key))
            {
                ResourceTableEntry entry = null;

                if (!viewModel.ReuseExisiting)
                {
                    var entity = _lastUsedEntity = viewModel.SelectedResourceEntity;

                    entry = entity?.Add(viewModel.Key);
                    if (entry == null)
                    {
                        return(null);
                    }

                    entry.Values[null] = viewModel.Value;
                    entry.Comment      = viewModel.Comment;
                }

                selection.ReplaceWith(viewModel.Replacement);

                return(entry);
            }
            ;

            return(null);
        }