1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
|
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
// <version value="$version"/>
// </file>
using System;
using System.Collections;
using System.Collections.Specialized;
using System.IO;
using MonoDevelop.Core.Gui;
using MonoDevelop.Projects;
using MonoDevelop.DefaultEditor.Gui.Editor;
using MonoDevelop.Core;
using MonoDevelop.Core;
using MonoDevelop.TextEditor;
namespace MonoDevelop.TextEditor.Document
{
public class DirectoryDocumentIterator : IDocumentIterator
{
string searchDirectory;
string fileMask;
bool searchSubdirectories;
StringCollection files = null;
int curIndex = -1;
public DirectoryDocumentIterator(string searchDirectory, string fileMask, bool searchSubdirectories)
{
this.searchDirectory = searchDirectory;
this.fileMask = fileMask;
this.searchSubdirectories = searchSubdirectories;
Reset();
}
public string CurrentFileName {
get {
if (curIndex < 0 || curIndex >= files.Count) {
return null;
}
return files[curIndex].ToString();;
}
}
public ProvidedDocumentInformation Current {
get {
if (curIndex < 0 || curIndex >= files.Count) {
return null;
}
if (!File.Exists(files[curIndex].ToString())) {
++curIndex;
return Current;
}
IDocument document;
string fileName = files[curIndex].ToString();
foreach (Document doc in IdeApp.Workbench.Documents) {
// WINDOWS DEPENDENCY : ToUpper
if (doc.FileName != null &&
doc.FileName.ContentName.ToUpper() == fileName.ToUpper()) {
document = ((ITextEditorControlProvider)content).TextEditorControl.Document;
return new ProvidedDocumentInformation(document,
fileName);
}
}
ITextBufferStrategy strategy = null;
try {
strategy = StringTextBufferStrategy.CreateTextBufferFromFile(fileName);
} catch (Exception) {
TaskService taskService = (TaskService)MonoDevelop.Core.ServiceManager.Services.GetService(typeof(TaskService));
taskService.Tasks.Add(new Task(String.Empty, "can't access " + fileName, -1, -1));
return null;
}
return new ProvidedDocumentInformation(strategy,
fileName,
0);
}
}
public bool MoveForward()
{
if (curIndex == -1) {
FileUtilityService fileUtilityService = (FileUtilityService)ServiceManager.Services.GetService(typeof(FileUtilityService));
files = fileUtilityService.SearchDirectory(this.searchDirectory, this.fileMask, this.searchSubdirectories);
}
return ++curIndex < files.Count;
}
public bool MoveBackward()
{
if (curIndex == -1) {
curIndex = files.Count - 1;
return true;
}
return --curIndex >= -1;
}
public void Reset()
{
curIndex = -1;
}
}
}
|