Exemplo n.º 1
0
        public override ICompletionData[] GenerateCompletionData(string fileName, TextArea textArea, char charTyped)
        {
            var returnValues = new List <ICompletionData>();

            if (!PreSelection.StartsWith("\""))
            {
                return(returnValues.ToArray());
            }

            var baseDir      = "";
            var preSelection = PreSelection.Substring(1);
            var lastSlash    = preSelection.LastIndexOfAny(new[] { '/', '\\' });

            if (lastSlash >= 0)
            {
                baseDir      = preSelection.Substring(0, lastSlash + 1);
                preSelection = lastSlash < preSelection.Length ? preSelection.Substring(lastSlash + 1) : "";
            }

            var searchedDirectories = new List <string>();

            foreach (var originalDirectory in _directories)
            {
                try
                {
                    var directory = new DirectoryInfo(Path.Combine(originalDirectory.FullName, baseDir));

                    if (!directory.Exists)
                    {
                        continue;
                    }
                    if (searchedDirectories.Contains(directory.FullName))
                    {
                        continue;
                    }
                    searchedDirectories.Add(directory.FullName);
                    foreach (var subDirectory in directory.GetDirectories().Where(dir => dir.Name.StartsWith(preSelection, StringComparison.InvariantCultureIgnoreCase)))
                    {
                        returnValues.Add(new DirectoryData(subDirectory.Name, _reOpen));
                    }
                    foreach (var file in directory.GetFiles().Where(file => file.Name.StartsWith(preSelection, StringComparison.InvariantCultureIgnoreCase)))
                    {
                        returnValues.Add(new FileData(file.Name));
                    }
                }
                catch
                {
                    // Directory is an invalid name, user doesn't have access, etc.
                    continue;
                }
            }

            return(returnValues.ToArray());
        }
Exemplo n.º 2
0
        public override bool InsertAction(ICompletionData data, TextArea textArea, int insertionOffset, char key)
        {
            var preOffset = PreSelection.LastIndexOfAny(new[] { '\\', '/', '"' });

            if (preOffset < 0)
            {
                return(false);
            }
            textArea.Caret.Position = textArea.Document.OffsetToPosition(insertionOffset);
            textArea.InsertString(PreSelection.Substring(0, preOffset + 1));
            return(data.InsertAction(textArea, key));
        }