├── .editorconfig
├── .gitattributes
├── .gitignore
├── Fetitor.sln
├── Fetitor
├── FeaturesFile.cs
├── Fetitor.csproj
├── FrmAbout.Designer.cs
├── FrmAbout.cs
├── FrmAbout.resx
├── FrmMain.Designer.cs
├── FrmMain.cs
├── FrmMain.resx
├── FrmSearch.Designer.cs
├── FrmSearch.cs
├── FrmSearch.resx
├── FrmUpdateFeatureNames.Designer.cs
├── FrmUpdateFeatureNames.cs
├── FrmUpdateFeatureNames.resx
├── MyScintilla.cs
├── Program.cs
├── Properties
│ ├── AssemblyInfo.cs
│ ├── Resources.Designer.cs
│ ├── Resources.resx
│ ├── Settings.Designer.cs
│ └── Settings.settings
├── ToolStripRendererNL.cs
├── app.config
├── features.txt
└── icon.ico
├── LICENSE.md
├── Lib
└── jacobslusser.ScintillaNET.3.2.0-rc
│ ├── LICENSE
│ ├── ScintillaNET.dll
│ └── ScintillaNET.xml
├── README.md
├── icon.ico
├── icon.png
└── preview.png
/.editorconfig:
--------------------------------------------------------------------------------
1 | # EditorConfig is awesome: http://EditorConfig.org
2 |
3 | # top-most EditorConfig file
4 | root = true
5 |
6 | # Code files
7 | [*.{cs,csx,vb,vbx}]
8 | indent_style = tab
9 | indent_size = 4
10 | insert_final_newline = true
11 | #charset = utf-8-bom
12 |
13 | # Xml project files
14 | [*.{csproj,vbproj,vcxproj,vcxproj.filters,proj,projitems,shproj}]
15 | indent_style = space
16 | indent_size = 2
17 |
18 | # Xml config files
19 | [*.{props,targets,ruleset,config,nuspec,resx,vsixmanifest,vsct}]
20 | indent_style = space
21 | indent_size = 2
22 |
23 | # JSON files
24 | [*.json]
25 | indent_style = tab
26 | indent_size = 4
27 |
28 | # Dotnet code style settings:
29 | [*.{cs,vb}]
30 | # Sort using and Import directives with System.* appearing first
31 | dotnet_sort_system_directives_first = true
32 | dotnet_style_qualification_for_field = true:none # only for public fields
33 | dotnet_style_qualification_for_property = true:suggestion
34 | dotnet_style_qualification_for_method = true:suggestion
35 | dotnet_style_qualification_for_event = true:suggestion
36 |
37 | # Use language keywords instead of framework type names for type references
38 | dotnet_style_predefined_type_for_locals_parameters_members = true:suggestion
39 | dotnet_style_predefined_type_for_member_access = true:suggestion
40 |
41 | # Suggest more modern language features when available
42 | dotnet_style_object_initializer = false:suggestion
43 | dotnet_style_collection_initializer = false:suggestion
44 | dotnet_style_coalesce_expression = true:suggestion
45 | dotnet_style_null_propagation = true:suggestion
46 | dotnet_style_explicit_tuple_names = true:suggestion
47 |
48 | # Static fields
49 | dotnet_naming_rule.static_fields_should_have_prefix.severity = suggestion
50 | dotnet_naming_rule.static_fields_should_have_prefix.symbols = static_fields
51 | dotnet_naming_rule.static_fields_should_have_prefix.style = static_prefix_style
52 |
53 | dotnet_naming_symbols.static_fields.applicable_kinds = field
54 | dotnet_naming_symbols.static_fields.required_modifiers = static
55 |
56 | dotnet_naming_style.static_prefix_style.capitalization = pascal_case
57 |
58 | # Internal and private fields
59 | dotnet_naming_rule.camel_case_for_private_internal_fields.severity = suggestion
60 | dotnet_naming_rule.camel_case_for_private_internal_fields.symbols = private_internal_fields
61 | dotnet_naming_rule.camel_case_for_private_internal_fields.style = camel_case_underscore_style
62 |
63 | dotnet_naming_symbols.private_internal_fields.applicable_kinds = field
64 | dotnet_naming_symbols.private_internal_fields.applicable_accessibilities = private, internal
65 |
66 | dotnet_naming_style.camel_case_underscore_style.required_prefix = _
67 | dotnet_naming_style.camel_case_underscore_style.capitalization = camel_case
68 |
69 | # CSharp code style settings:
70 | [*.cs]
71 | # Prefer "var" everywhere
72 | csharp_style_var_for_built_in_types = true:suggestion
73 | csharp_style_var_when_type_is_apparent = true:suggestion
74 | csharp_style_var_elsewhere = true:suggestion
75 |
76 | # Prefer method-like constructs to have a block body
77 | csharp_style_expression_bodied_methods = false:none
78 | csharp_style_expression_bodied_constructors = false:none
79 | csharp_style_expression_bodied_operators = false:none
80 |
81 | # Prefer property-like constructs to have an expression-body
82 | csharp_style_expression_bodied_properties = true:none
83 | csharp_style_expression_bodied_indexers = true:none
84 | csharp_style_expression_bodied_accessors = true:none
85 |
86 | # Suggest more modern language features when available
87 | csharp_style_pattern_matching_over_is_with_cast_check = true:suggestion
88 | csharp_style_pattern_matching_over_as_with_null_check = true:suggestion
89 | csharp_style_inlined_variable_declaration = true:suggestion
90 | csharp_style_throw_expression = true:suggestion
91 | csharp_style_conditional_delegate_call = true:suggestion
92 |
93 | # Newline settings
94 | csharp_new_line_before_open_brace = all
95 | csharp_new_line_before_else = true
96 | csharp_new_line_before_catch = true
97 | csharp_new_line_before_finally = true
98 | csharp_new_line_before_members_in_object_initializers = true
99 | csharp_new_line_before_members_in_anonymous_types = true
100 |
101 | # Labels
102 | csharp_indent_labels = one_less_than_current
103 |
104 | # Object initializer
105 | csharp_style_object_initializer = false
106 |
--------------------------------------------------------------------------------
/.gitattributes:
--------------------------------------------------------------------------------
1 | # Auto detect text files and perform LF normalization
2 | * text=auto
3 |
4 | # Custom for Visual Studio
5 | *.cs diff=csharp
6 |
7 | # Standard to msysgit
8 | *.doc diff=astextplain
9 | *.DOC diff=astextplain
10 | *.docx diff=astextplain
11 | *.DOCX diff=astextplain
12 | *.dot diff=astextplain
13 | *.DOT diff=astextplain
14 | *.pdf diff=astextplain
15 | *.PDF diff=astextplain
16 | *.rtf diff=astextplain
17 | *.RTF diff=astextplain
18 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | ## Ignore Visual Studio temporary files, build results, and
2 | ## files generated by popular Visual Studio add-ons.
3 |
4 | # User-specific files
5 | *.suo
6 | *.user
7 | *.userosscache
8 | *.sln.docstates
9 | .vs/
10 |
11 | # Build results
12 | [Dd]ebug/
13 | [Dd]ebugPublic/
14 | [Rr]elease/
15 | [Rr]eleases/
16 | x64/
17 | x86/
18 | build/
19 | bld/
20 | [Bb]in/
21 | [Oo]bj/
22 |
23 | # Roslyn cache directories
24 | *.ide/
25 |
26 | # MSTest test Results
27 | [Tt]est[Rr]esult*/
28 | [Bb]uild[Ll]og.*
29 |
30 | #NUNIT
31 | *.VisualState.xml
32 | TestResult.xml
33 |
34 | # Build Results of an ATL Project
35 | [Dd]ebugPS/
36 | [Rr]eleasePS/
37 | dlldata.c
38 |
39 | *_i.c
40 | *_p.c
41 | *_i.h
42 | *.ilk
43 | *.meta
44 | *.obj
45 | *.pch
46 | *.pdb
47 | *.pgc
48 | *.pgd
49 | *.rsp
50 | *.sbr
51 | *.tlb
52 | *.tli
53 | *.tlh
54 | *.tmp
55 | *.tmp_proj
56 | *.log
57 | *.vspscc
58 | *.vssscc
59 | .builds
60 | *.pidb
61 | *.svclog
62 | *.scc
63 |
64 | # Chutzpah Test files
65 | _Chutzpah*
66 |
67 | # Visual C++ cache files
68 | ipch/
69 | *.aps
70 | *.ncb
71 | *.opensdf
72 | *.sdf
73 | *.cachefile
74 |
75 | # Visual Studio profiler
76 | *.psess
77 | *.vsp
78 | *.vspx
79 |
80 | # TFS 2012 Local Workspace
81 | $tf/
82 |
83 | # Guidance Automation Toolkit
84 | *.gpState
85 |
86 | # ReSharper is a .NET coding add-in
87 | _ReSharper*/
88 | *.[Rr]e[Ss]harper
89 | *.DotSettings.user
90 |
91 | # JustCode is a .NET coding addin-in
92 | .JustCode
93 |
94 | # TeamCity is a build add-in
95 | _TeamCity*
96 |
97 | # DotCover is a Code Coverage Tool
98 | *.dotCover
99 |
100 | # NCrunch
101 | _NCrunch_*
102 | .*crunch*.local.xml
103 |
104 | # MightyMoose
105 | *.mm.*
106 | AutoTest.Net/
107 |
108 | # Web workbench (sass)
109 | .sass-cache/
110 |
111 | # Installshield output folder
112 | [Ee]xpress/
113 |
114 | # DocProject is a documentation generator add-in
115 | DocProject/buildhelp/
116 | DocProject/Help/*.HxT
117 | DocProject/Help/*.HxC
118 | DocProject/Help/*.hhc
119 | DocProject/Help/*.hhk
120 | DocProject/Help/*.hhp
121 | DocProject/Help/Html2
122 | DocProject/Help/html
123 |
124 | # Click-Once directory
125 | publish/
126 |
127 | # Publish Web Output
128 | *.[Pp]ublish.xml
129 | *.azurePubxml
130 | # TODO: Comment the next line if you want to checkin your web deploy settings
131 | # but database connection strings (with potential passwords) will be unencrypted
132 | *.pubxml
133 | *.publishproj
134 |
135 | # NuGet Packages
136 | *.nupkg
137 | # The packages folder can be ignored because of Package Restore
138 | **/packages/*
139 | # except build/, which is used as an MSBuild target.
140 | !**/packages/build/
141 | # If using the old MSBuild-Integrated Package Restore, uncomment this:
142 | #!**/packages/repositories.config
143 |
144 | # Windows Azure Build Output
145 | csx/
146 | *.build.csdef
147 |
148 | # Windows Store app package directory
149 | AppPackages/
150 |
151 | # Others
152 | sql/
153 | *.Cache
154 | ClientBin/
155 | [Ss]tyle[Cc]op.*
156 | ~$*
157 | *~
158 | *.dbmdl
159 | *.dbproj.schemaview
160 | *.pfx
161 | *.publishsettings
162 | node_modules/
163 |
164 | # RIA/Silverlight projects
165 | Generated_Code/
166 |
167 | # Backup & report files from converting an old project file
168 | # to a newer Visual Studio version. Backup files are not needed,
169 | # because we have git ;-)
170 | _UpgradeReport_Files/
171 | Backup*/
172 | UpgradeLog*.XML
173 | UpgradeLog*.htm
174 |
175 | # SQL Server files
176 | *.mdf
177 | *.ldf
178 |
179 | # Business Intelligence projects
180 | *.rdl.data
181 | *.bim.layout
182 | *.bim_*.settings
183 |
184 | # Microsoft Fakes
185 | FakesAssemblies/
186 |
187 | # =========================
188 | # Operating System Files
189 | # =========================
190 |
191 | # OSX
192 | # =========================
193 |
194 | .DS_Store
195 | .AppleDouble
196 | .LSOverride
197 |
198 | # Thumbnails
199 | ._*
200 |
201 | # Files that might appear on external disk
202 | .Spotlight-V100
203 | .Trashes
204 |
205 | # Directories potentially created on remote AFP share
206 | .AppleDB
207 | .AppleDesktop
208 | Network Trash Folder
209 | Temporary Items
210 | .apdisk
211 |
212 | # Windows
213 | # =========================
214 |
215 | # Windows image file caches
216 | Thumbs.db
217 | ehthumbs.db
218 |
219 | # Folder config file
220 | Desktop.ini
221 |
222 | # Recycle Bin used on file shares
223 | $RECYCLE.BIN/
224 |
225 | # Windows Installer files
226 | *.cab
227 | *.msi
228 | *.msm
229 | *.msp
230 |
231 | # Windows shortcuts
232 | *.lnk
233 |
--------------------------------------------------------------------------------
/Fetitor.sln:
--------------------------------------------------------------------------------
1 |
2 | Microsoft Visual Studio Solution File, Format Version 12.00
3 | # Visual Studio 2013
4 | VisualStudioVersion = 12.0.31101.0
5 | MinimumVisualStudioVersion = 10.0.40219.1
6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Fetitor", "Fetitor\Fetitor.csproj", "{96BC212F-1ED2-4214-8A1C-35543C2B1AC8}"
7 | EndProject
8 | Global
9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
10 | Debug|Any CPU = Debug|Any CPU
11 | Release|Any CPU = Release|Any CPU
12 | EndGlobalSection
13 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
14 | {96BC212F-1ED2-4214-8A1C-35543C2B1AC8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
15 | {96BC212F-1ED2-4214-8A1C-35543C2B1AC8}.Debug|Any CPU.Build.0 = Debug|Any CPU
16 | {96BC212F-1ED2-4214-8A1C-35543C2B1AC8}.Release|Any CPU.ActiveCfg = Release|Any CPU
17 | {96BC212F-1ED2-4214-8A1C-35543C2B1AC8}.Release|Any CPU.Build.0 = Release|Any CPU
18 | EndGlobalSection
19 | GlobalSection(SolutionProperties) = preSolution
20 | HideSolutionNode = FALSE
21 | EndGlobalSection
22 | EndGlobal
23 |
--------------------------------------------------------------------------------
/Fetitor/FeaturesFile.cs:
--------------------------------------------------------------------------------
1 | // This program is free software: you can redistribute it and/or modify
2 | // it under the terms of the GNU General Public License as published by
3 | // the Free Software Foundation, either version 3 of the License, or
4 | // (at your option) any later version.
5 | //
6 | // This program is distributed in the hope that it will be useful,
7 | // but WITHOUT ANY WARRANTY; without even the implied warranty of
8 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9 | // GNU General Public License for more details.
10 | //
11 | // You should have received a copy of the GNU General Public License
12 | // along with this program. If not, see .
13 |
14 | using System;
15 | using System.Collections.Generic;
16 | using System.IO;
17 | using System.Text;
18 | using System.Xml;
19 |
20 | namespace Fetitor
21 | {
22 | ///
23 | /// Represents "Setting" entry in "features.xml.compiled".
24 | ///
25 | public class FeaturesSetting
26 | {
27 | public bool Development;
28 | public byte Generation;
29 | public string Locale = "";
30 | public string Name = "";
31 | public byte Season;
32 | public byte Subseason;
33 | public bool Test;
34 | }
35 |
36 | ///
37 | /// Represents "Feature" entry in "features.xml.compiled".
38 | ///
39 | public class FeaturesFeature
40 | {
41 | public string Default = "";
42 | public string Disable = "";
43 | public string Enable = "";
44 | public string StartTime = null;
45 | public string EndTime = null;
46 | public uint Hash;
47 | public string Name;
48 | }
49 |
50 | ///
51 | /// Reader and writer for features.xml(.compiled).
52 | ///
53 | public class FeaturesFile
54 | {
55 | private int _formatVersion = 0;
56 |
57 | private readonly byte[] _strBuffer = new byte[0x100];
58 |
59 | private readonly List _settings = new List();
60 | private readonly List _features = new List();
61 |
62 | private static readonly Dictionary _featureNames = new Dictionary();
63 | private static readonly HashSet _completeFeatureNames = new HashSet();
64 |
65 | ///
66 | /// Returns the number of features names loaded.
67 | ///
68 | public static int FetureNameCount => _completeFeatureNames.Count;
69 |
70 | ///
71 | /// Creates new FeaturesFile.
72 | ///
73 | public FeaturesFile()
74 | {
75 | }
76 |
77 | ///
78 | /// Creates new FeaturesFile from file.
79 | ///
80 | ///
81 | private FeaturesFile(string filePath)
82 | {
83 | if (!File.Exists(filePath))
84 | throw new FileNotFoundException("File not found: " + filePath);
85 |
86 | var ext = Path.GetExtension(filePath);
87 | if (ext != ".xml" && ext != ".compiled")
88 | throw new InvalidDataException("Invalid file extension.");
89 |
90 | using (var stream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read))
91 | {
92 | if (ext == ".xml")
93 | this.LoadFromXml(stream);
94 | else
95 | this.LoadFromCompiled(stream);
96 | }
97 | }
98 |
99 | ///
100 | /// Loads features names from text file.
101 | ///
102 | ///
103 | public static void LoadFeatureNames(string filePath)
104 | {
105 | using (var sr = new StreamReader(filePath))
106 | {
107 | string line = null;
108 | while ((line = sr.ReadLine()) != null)
109 | {
110 | var name = line.Trim();
111 | if (name == "" || name.StartsWith("//"))
112 | continue;
113 |
114 | var hash = GetStringHash(name);
115 |
116 | _featureNames[hash] = name;
117 | _completeFeatureNames.Add(name);
118 | }
119 | }
120 | }
121 |
122 | ///
123 | /// Hashes str.
124 | ///
125 | ///
126 | ///
127 | public static uint GetStringHash(string str)
128 | {
129 | var s = 5381;
130 | foreach (var ch in str) s = s * 33 + (int)ch;
131 | return (uint)s;
132 | }
133 |
134 | ///
135 | /// Loads settings and features from .xml file.
136 | ///
137 | ///
138 | public void LoadFromXml(string filePath)
139 | {
140 | using (var stream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read))
141 | this.LoadFromXml(stream);
142 | }
143 |
144 | ///
145 | /// Loads settings and features from .xml file.
146 | ///
147 | ///
148 | public void LoadFromXml(Stream stream)
149 | {
150 | using (var xml = XmlReader.Create(stream))
151 | {
152 | xml.ReadToFollowing("Settings");
153 | using (var settingsXml = xml.ReadSubtree())
154 | {
155 | while (settingsXml.ReadToFollowing("Setting"))
156 | {
157 | var setting = new FeaturesSetting();
158 | setting.Name = settingsXml.GetAttribute("Name");
159 | setting.Locale = settingsXml.GetAttribute("Locale");
160 | setting.Test = Convert.ToBoolean(settingsXml.GetAttribute("Test"));
161 | setting.Development = Convert.ToBoolean(settingsXml.GetAttribute("Development"));
162 | setting.Generation = Convert.ToByte(settingsXml.GetAttribute("Generation"));
163 | setting.Season = Convert.ToByte(settingsXml.GetAttribute("Season"));
164 | setting.Subseason = Convert.ToByte(settingsXml.GetAttribute("Subseason"));
165 |
166 | _settings.Add(setting);
167 | }
168 | }
169 |
170 | xml.ReadToFollowing("Features");
171 | using (var featuresXml = xml.ReadSubtree())
172 | {
173 | while (featuresXml.ReadToFollowing("Feature"))
174 | {
175 | var feature = new FeaturesFeature();
176 | feature.Hash = Convert.ToUInt32(featuresXml.GetAttribute("Hash") ?? featuresXml.GetAttribute("_Name"), 16);
177 | feature.Name = featuresXml.GetAttribute("Hash") != null ? featuresXml.GetAttribute("Name") : featuresXml.GetAttribute("_RealName");
178 | feature.Default = featuresXml.GetAttribute("Default");
179 | feature.Enable = featuresXml.GetAttribute("Enable");
180 | feature.Disable = featuresXml.GetAttribute("Disable");
181 |
182 | var startTime = featuresXml.GetAttribute("StartTime");
183 | var endTime = featuresXml.GetAttribute("EndTime");
184 | if (startTime != null || endTime != null)
185 | {
186 | feature.StartTime = startTime;
187 | feature.EndTime = endTime;
188 | }
189 |
190 | _features.Add(feature);
191 | }
192 | }
193 | }
194 | }
195 |
196 | ///
197 | /// Saves loaded settings and features in XML format.
198 | ///
199 | ///
200 | public void SaveAsXml(string filePath)
201 | {
202 | using (var fs = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None))
203 | this.SaveAsXml(fs);
204 | }
205 |
206 | ///
207 | /// Returns settings and features in XML format.
208 | ///
209 | ///
210 | public string GetXml()
211 | {
212 | using (var ms = new MemoryStream())
213 | {
214 | this.SaveAsXml(ms);
215 | return Encoding.UTF8.GetString(ms.ToArray());
216 | }
217 | }
218 |
219 | ///
220 | /// Returns compiled features file in XML format.
221 | ///
222 | ///
223 | ///
224 | public static string GetXmlFromCompiled(string filePath)
225 | {
226 | var ff = new FeaturesFile(filePath);
227 | return ff.GetXml();
228 | }
229 |
230 | ///
231 | /// Saves given XML file at path in compiled format.
232 | ///
233 | ///
234 | ///
235 | public static void SaveCompiledFromXml(string filePath, string xml)
236 | {
237 | var ff = new FeaturesFile();
238 |
239 | using (var ms = new MemoryStream(Encoding.UTF8.GetBytes(xml)))
240 | ff.LoadFromXml(ms);
241 |
242 | ff.SaveAsCompiled(filePath);
243 | }
244 |
245 | ///
246 | /// Saves loaded settings and features in XML format.
247 | ///
248 | ///
249 | public void SaveAsXml(Stream stream)
250 | {
251 | using (var writer = XmlWriter.Create(stream, new XmlWriterSettings { Indent = true, IndentChars = "\t" }))
252 | {
253 | writer.WriteStartDocument();
254 | {
255 | writer.WriteStartElement("FeatureList");
256 | {
257 | writer.WriteStartElement("Settings");
258 | foreach (var setting in _settings)
259 | {
260 | writer.WriteStartElement("Setting");
261 | writer.WriteAttributeString("Name", setting.Name);
262 | writer.WriteAttributeString("Locale", setting.Locale);
263 | writer.WriteAttributeString("Test", setting.Test.ToString());
264 | writer.WriteAttributeString("Development", setting.Development.ToString());
265 | writer.WriteAttributeString("Generation", setting.Generation.ToString());
266 | writer.WriteAttributeString("Season", setting.Season.ToString());
267 | writer.WriteAttributeString("Subseason", setting.Subseason.ToString());
268 | writer.WriteEndElement();
269 | }
270 | writer.WriteEndElement();
271 |
272 | writer.WriteStartElement("Features");
273 | foreach (var feature in _features)
274 | {
275 | writer.WriteStartElement("Feature");
276 | writer.WriteAttributeString("Hash", feature.Hash.ToString("x8"));
277 | writer.WriteAttributeString("Name", feature.Name);
278 | writer.WriteAttributeString("Default", feature.Default);
279 | writer.WriteAttributeString("Enable", feature.Enable);
280 | writer.WriteAttributeString("Disable", feature.Disable);
281 |
282 | if (feature.StartTime != null || feature.EndTime != null)
283 | {
284 | writer.WriteAttributeString("StartTime", feature.StartTime);
285 | writer.WriteAttributeString("EndTime", feature.EndTime);
286 | }
287 |
288 | writer.WriteEndElement();
289 | }
290 | writer.WriteEndElement();
291 | }
292 | writer.WriteEndElement();
293 | }
294 | writer.WriteEndDocument();
295 | writer.Close();
296 | }
297 | }
298 |
299 | ///
300 | /// Loads settings and features from compiled file.
301 | ///
302 | ///
303 | private void LoadFromCompiled(string filePath)
304 | {
305 | using (var stream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read))
306 | this.LoadFromCompiled(stream);
307 | }
308 |
309 | ///
310 | /// Loads settings and features from compiled file.
311 | ///
312 | /// Yiting
313 | ///
314 | private void LoadFromCompiled(Stream stream)
315 | {
316 | var buffer = new byte[0x100];
317 |
318 | if (stream.Read(buffer, 0, 2) != 2)
319 | throw new EndOfStreamException();
320 |
321 | var settingCount = BitConverter.ToUInt16(buffer, 0);
322 | for (var i = 0; i < settingCount; i++)
323 | {
324 | var setting = new FeaturesSetting();
325 |
326 | setting.Name = this.ReadEncryptedLpString(stream);
327 | setting.Locale = this.ReadEncryptedLpString(stream);
328 |
329 | if (stream.Read(buffer, 0, 3) != 3)
330 | throw new EndOfStreamException();
331 |
332 | setting.Generation = buffer[0];
333 | setting.Season = buffer[1];
334 | setting.Subseason = (byte)(buffer[2] >> 2);
335 | setting.Test = (buffer[2] & 1) != 0;
336 | setting.Development = (buffer[2] & 2) != 0;
337 |
338 | _settings.Add(setting);
339 | }
340 |
341 | if (stream.Read(buffer, 0, 2) != 2)
342 | throw new EndOfStreamException();
343 |
344 | var featureCount = BitConverter.ToUInt16(buffer, 0);
345 | for (var j = 0; j < featureCount; j++)
346 | {
347 | var feature = new FeaturesFeature();
348 |
349 | if (stream.Read(buffer, 0, 4) != 4)
350 | throw new EndOfStreamException();
351 |
352 | feature.Hash = BitConverter.ToUInt32(buffer, 0);
353 | feature.Name = _featureNames.ContainsKey(feature.Hash) ? _featureNames[feature.Hash] : "?";
354 |
355 | feature.Default = this.ReadEncryptedLpString(stream);
356 | feature.Enable = this.ReadEncryptedLpString(stream);
357 | feature.Disable = this.ReadEncryptedLpString(stream);
358 |
359 | // Determine version
360 | // In May 2022 they added two new strings here, which appear
361 | // to represent a start and an end time. Since these strings
362 | // are empty for the first feature, the next four bytes will
363 | // be 0 if we're reading the new format, otherwise they would
364 | // be the next hash.
365 | if (j == 0)
366 | {
367 | if (stream.Read(buffer, 0, 4) != 4)
368 | throw new EndOfStreamException();
369 |
370 | if (BitConverter.ToUInt32(buffer, 0) == 0)
371 | _formatVersion = 1;
372 |
373 | // Rewind, so we can read the bytes again
374 | stream.Seek(-4, SeekOrigin.Current);
375 | }
376 |
377 | if (_formatVersion > 0)
378 | {
379 | feature.StartTime = this.ReadEncryptedLpString(stream);
380 | feature.EndTime = this.ReadEncryptedLpString(stream);
381 | }
382 |
383 | _features.Add(feature);
384 | }
385 | }
386 |
387 | ///
388 | /// Reads an encrypted, length-prefixed string from the stream
389 | /// and returns it.
390 | ///
391 | ///
392 | ///
393 | ///
394 | ///
395 | private string ReadEncryptedLpString(Stream stream)
396 | {
397 | if (stream.Read(_strBuffer, 0, 2) != 2)
398 | throw new EndOfStreamException();
399 |
400 | var length = BitConverter.ToUInt16(_strBuffer, 0);
401 | if (length > _strBuffer.Length)
402 | throw new NotSupportedException();
403 |
404 | if (length <= 0)
405 | return "";
406 |
407 | if (stream.Read(_strBuffer, 0, length) != length)
408 | throw new EndOfStreamException();
409 |
410 | for (var i = 0; i < length; i++)
411 | _strBuffer[i] = (byte)(_strBuffer[i] ^ 0x80);
412 |
413 | return Encoding.UTF8.GetString(_strBuffer, 0, length);
414 | }
415 |
416 | ///
417 | /// Saves settings and features in compiled format.
418 | ///
419 | ///
420 | private void SaveAsCompiled(string filePath)
421 | {
422 | using (var fs = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None))
423 | this.SaveAsCompiled(fs);
424 | }
425 |
426 | ///
427 | /// Saves settings and features in compiled format.
428 | ///
429 | /// Yiting
430 | ///
431 | private void SaveAsCompiled(Stream stream)
432 | {
433 | stream.Write(BitConverter.GetBytes(_settings.Count), 0, 2);
434 | foreach (var setting in _settings)
435 | {
436 | if (string.IsNullOrEmpty(setting.Name))
437 | throw new NotSupportedException();
438 |
439 | if (string.IsNullOrEmpty(setting.Locale))
440 | throw new NotSupportedException();
441 |
442 | var nameBuffer = Encoding.UTF8.GetBytes(setting.Name);
443 | for (var num11 = 0; num11 < nameBuffer.Length; num11++)
444 | nameBuffer[num11] = (byte)(nameBuffer[num11] ^ 0x80);
445 | stream.Write(BitConverter.GetBytes(nameBuffer.Length), 0, 2);
446 | stream.Write(nameBuffer, 0, nameBuffer.Length);
447 |
448 | var localeBuffer = Encoding.UTF8.GetBytes(setting.Locale);
449 | for (var num12 = 0; num12 < localeBuffer.Length; num12++)
450 | localeBuffer[num12] = (byte)(localeBuffer[num12] ^ 0x80);
451 | stream.Write(BitConverter.GetBytes(localeBuffer.Length), 0, 2);
452 | stream.Write(localeBuffer, 0, localeBuffer.Length);
453 |
454 | var genBuffer = new byte[] { setting.Generation, setting.Season, (byte)(setting.Subseason << 2) };
455 | if (setting.Test)
456 | genBuffer[2] = (byte)(genBuffer[2] | 1);
457 | if (setting.Development)
458 | genBuffer[2] = (byte)(genBuffer[2] | 2);
459 | stream.Write(genBuffer, 0, 3);
460 | }
461 |
462 | stream.Write(BitConverter.GetBytes(_features.Count), 0, 2);
463 | foreach (var feature in _features)
464 | {
465 | stream.Write(BitConverter.GetBytes(feature.Hash), 0, 4);
466 | if (string.IsNullOrEmpty(feature.Default))
467 | {
468 | stream.WriteByte(0);
469 | stream.WriteByte(0);
470 | }
471 | else
472 | {
473 | var defaultBuffer = Encoding.UTF8.GetBytes(feature.Default);
474 | for (var num13 = 0; num13 < defaultBuffer.Length; num13++)
475 | defaultBuffer[num13] = (byte)(defaultBuffer[num13] ^ 0x80);
476 | stream.Write(BitConverter.GetBytes(defaultBuffer.Length), 0, 2);
477 | stream.Write(defaultBuffer, 0, defaultBuffer.Length);
478 | }
479 |
480 | if (string.IsNullOrEmpty(feature.Enable))
481 | {
482 | stream.WriteByte(0);
483 | stream.WriteByte(0);
484 | }
485 | else
486 | {
487 | var enableBuffer = Encoding.UTF8.GetBytes(feature.Enable);
488 | for (var num14 = 0; num14 < enableBuffer.Length; num14++)
489 | enableBuffer[num14] = (byte)(enableBuffer[num14] ^ 0x80);
490 | stream.Write(BitConverter.GetBytes(enableBuffer.Length), 0, 2);
491 | stream.Write(enableBuffer, 0, enableBuffer.Length);
492 | }
493 |
494 | if (string.IsNullOrEmpty(feature.Disable))
495 | {
496 | stream.WriteByte(0);
497 | stream.WriteByte(0);
498 | }
499 | else
500 | {
501 | var disableBuffer = Encoding.UTF8.GetBytes(feature.Disable);
502 | for (var num15 = 0; num15 < disableBuffer.Length; num15++)
503 | disableBuffer[num15] = (byte)(disableBuffer[num15] ^ 0x80);
504 | stream.Write(BitConverter.GetBytes(disableBuffer.Length), 0, 2);
505 | stream.Write(disableBuffer, 0, disableBuffer.Length);
506 | }
507 |
508 | if (feature.StartTime != null || feature.EndTime != null)
509 | {
510 | if (string.IsNullOrEmpty(feature.StartTime))
511 | {
512 | stream.WriteByte(0);
513 | stream.WriteByte(0);
514 | }
515 | else
516 | {
517 | var textBuffer = Encoding.UTF8.GetBytes(feature.StartTime);
518 | for (var num15 = 0; num15 < textBuffer.Length; num15++)
519 | textBuffer[num15] = (byte)(textBuffer[num15] ^ 0x80);
520 | stream.Write(BitConverter.GetBytes(textBuffer.Length), 0, 2);
521 | stream.Write(textBuffer, 0, textBuffer.Length);
522 | }
523 |
524 | if (string.IsNullOrEmpty(feature.EndTime))
525 | {
526 | stream.WriteByte(0);
527 | stream.WriteByte(0);
528 | }
529 | else
530 | {
531 | var textBuffer = Encoding.UTF8.GetBytes(feature.EndTime);
532 | for (var num15 = 0; num15 < textBuffer.Length; num15++)
533 | textBuffer[num15] = (byte)(textBuffer[num15] ^ 0x80);
534 | stream.Write(BitConverter.GetBytes(textBuffer.Length), 0, 2);
535 | stream.Write(textBuffer, 0, textBuffer.Length);
536 | }
537 | }
538 | }
539 | }
540 |
541 | ///
542 | /// Reads stream and returns features file in XML format.
543 | ///
544 | ///
545 | ///
546 | ///
547 | ///
548 | public static string CompiledToXml(Stream stream)
549 | {
550 | var ff = new FeaturesFile();
551 | ff.LoadFromCompiled(stream);
552 | return ff.GetXml();
553 | }
554 |
555 | ///
556 | /// Writes XML to stream in compiled format.
557 | ///
558 | ///
559 | ///
560 | public static void SaveXmlAsCompiled(string xml, Stream compiledStream)
561 | {
562 | var ff = new FeaturesFile();
563 | using (var ms = new MemoryStream(Encoding.UTF8.GetBytes(xml)))
564 | ff.LoadFromXml(ms);
565 | ff.SaveAsCompiled(compiledStream);
566 | }
567 | }
568 | }
569 |
--------------------------------------------------------------------------------
/Fetitor/Fetitor.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Debug
6 | AnyCPU
7 | {96BC212F-1ED2-4214-8A1C-35543C2B1AC8}
8 | WinExe
9 | Properties
10 | Fetitor
11 | Fetitor
12 | v4.5
13 | 512
14 |
15 |
16 |
17 | AnyCPU
18 | true
19 | full
20 | false
21 | bin\Debug\
22 | DEBUG;TRACE
23 | prompt
24 | 4
25 | false
26 |
27 |
28 | AnyCPU
29 | pdbonly
30 | true
31 | bin\Release\
32 | TRACE
33 | prompt
34 | 4
35 | false
36 |
37 |
38 | icon.ico
39 |
40 |
41 |
42 | False
43 | ..\Lib\jacobslusser.ScintillaNET.3.2.0-rc\ScintillaNET.dll
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 | Form
60 |
61 |
62 | FrmAbout.cs
63 |
64 |
65 | Form
66 |
67 |
68 | FrmMain.cs
69 |
70 |
71 | Form
72 |
73 |
74 | FrmSearch.cs
75 |
76 |
77 | Form
78 |
79 |
80 | FrmUpdateFeatureNames.cs
81 |
82 |
83 | Component
84 |
85 |
86 |
87 |
88 |
89 | FrmAbout.cs
90 |
91 |
92 | FrmMain.cs
93 |
94 |
95 | FrmSearch.cs
96 |
97 |
98 | FrmUpdateFeatureNames.cs
99 |
100 |
101 | ResXFileCodeGenerator
102 | Resources.Designer.cs
103 | Designer
104 |
105 |
106 | True
107 | Resources.resx
108 | True
109 |
110 |
111 |
112 | SettingsSingleFileGenerator
113 | Settings.Designer.cs
114 |
115 |
116 | True
117 | Settings.settings
118 | True
119 |
120 |
121 |
122 |
123 | PreserveNewest
124 |
125 |
126 |
127 |
128 |
135 |
--------------------------------------------------------------------------------
/Fetitor/FrmAbout.Designer.cs:
--------------------------------------------------------------------------------
1 | namespace Fetitor
2 | {
3 | partial class FrmAbout
4 | {
5 | ///
6 | /// Required designer variable.
7 | ///
8 | private System.ComponentModel.IContainer components = null;
9 |
10 | ///
11 | /// Clean up any resources being used.
12 | ///
13 | /// true if managed resources should be disposed; otherwise, false.
14 | protected override void Dispose(bool disposing)
15 | {
16 | if (disposing && (components != null))
17 | {
18 | components.Dispose();
19 | }
20 | base.Dispose(disposing);
21 | }
22 |
23 | #region Windows Form Designer generated code
24 |
25 | ///
26 | /// Required method for Designer support - do not modify
27 | /// the contents of this method with the code editor.
28 | ///
29 | private void InitializeComponent()
30 | {
31 | this.components = new System.ComponentModel.Container();
32 | System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FrmAbout));
33 | this.PnlHeader = new System.Windows.Forms.Panel();
34 | this.LblVersion = new System.Windows.Forms.Label();
35 | this.ImgIcon = new System.Windows.Forms.PictureBox();
36 | this.LblName = new System.Windows.Forms.Label();
37 | this.BtnOK = new System.Windows.Forms.Button();
38 | this.ImgGitHub = new System.Windows.Forms.PictureBox();
39 | this.ImgPatreon = new System.Windows.Forms.PictureBox();
40 | this.GrpScintilla = new System.Windows.Forms.GroupBox();
41 | this.textBox2 = new System.Windows.Forms.TextBox();
42 | this.GrpLicense = new System.Windows.Forms.GroupBox();
43 | this.textBox1 = new System.Windows.Forms.TextBox();
44 | this.ToolTip = new System.Windows.Forms.ToolTip(this.components);
45 | this.PnlHeader.SuspendLayout();
46 | ((System.ComponentModel.ISupportInitialize)(this.ImgIcon)).BeginInit();
47 | ((System.ComponentModel.ISupportInitialize)(this.ImgGitHub)).BeginInit();
48 | ((System.ComponentModel.ISupportInitialize)(this.ImgPatreon)).BeginInit();
49 | this.GrpScintilla.SuspendLayout();
50 | this.GrpLicense.SuspendLayout();
51 | this.SuspendLayout();
52 | //
53 | // PnlHeader
54 | //
55 | this.PnlHeader.BackColor = System.Drawing.Color.White;
56 | this.PnlHeader.Controls.Add(this.LblVersion);
57 | this.PnlHeader.Controls.Add(this.ImgIcon);
58 | this.PnlHeader.Controls.Add(this.LblName);
59 | this.PnlHeader.Dock = System.Windows.Forms.DockStyle.Top;
60 | this.PnlHeader.Location = new System.Drawing.Point(0, 0);
61 | this.PnlHeader.Name = "PnlHeader";
62 | this.PnlHeader.Size = new System.Drawing.Size(483, 58);
63 | this.PnlHeader.TabIndex = 18;
64 | //
65 | // LblVersion
66 | //
67 | this.LblVersion.AutoSize = true;
68 | this.LblVersion.ForeColor = System.Drawing.Color.Gray;
69 | this.LblVersion.Location = new System.Drawing.Point(136, 28);
70 | this.LblVersion.Name = "LblVersion";
71 | this.LblVersion.Size = new System.Drawing.Size(37, 13);
72 | this.LblVersion.TabIndex = 17;
73 | this.LblVersion.Text = "v1.2.7";
74 | //
75 | // ImgIcon
76 | //
77 | this.ImgIcon.Image = ((System.Drawing.Image)(resources.GetObject("ImgIcon.Image")));
78 | this.ImgIcon.Location = new System.Drawing.Point(12, 12);
79 | this.ImgIcon.Name = "ImgIcon";
80 | this.ImgIcon.Size = new System.Drawing.Size(32, 32);
81 | this.ImgIcon.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize;
82 | this.ImgIcon.TabIndex = 16;
83 | this.ImgIcon.TabStop = false;
84 | //
85 | // LblName
86 | //
87 | this.LblName.AutoSize = true;
88 | this.LblName.Font = new System.Drawing.Font("Microsoft Sans Serif", 20.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
89 | this.LblName.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
90 | this.LblName.Location = new System.Drawing.Point(50, 13);
91 | this.LblName.Name = "LblName";
92 | this.LblName.Size = new System.Drawing.Size(92, 31);
93 | this.LblName.TabIndex = 15;
94 | this.LblName.Text = "Fetitor";
95 | //
96 | // BtnOK
97 | //
98 | this.BtnOK.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
99 | this.BtnOK.Location = new System.Drawing.Point(398, 518);
100 | this.BtnOK.Name = "BtnOK";
101 | this.BtnOK.Size = new System.Drawing.Size(75, 23);
102 | this.BtnOK.TabIndex = 1;
103 | this.BtnOK.Text = "OK";
104 | this.BtnOK.UseVisualStyleBackColor = true;
105 | this.BtnOK.Click += new System.EventHandler(this.BtnOK_Click);
106 | //
107 | // ImgGitHub
108 | //
109 | this.ImgGitHub.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
110 | this.ImgGitHub.Cursor = System.Windows.Forms.Cursors.Hand;
111 | this.ImgGitHub.Image = ((System.Drawing.Image)(resources.GetObject("ImgGitHub.Image")));
112 | this.ImgGitHub.Location = new System.Drawing.Point(207, 509);
113 | this.ImgGitHub.Name = "ImgGitHub";
114 | this.ImgGitHub.Size = new System.Drawing.Size(32, 32);
115 | this.ImgGitHub.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize;
116 | this.ImgGitHub.TabIndex = 19;
117 | this.ImgGitHub.TabStop = false;
118 | this.ImgGitHub.Tag = "https://github.com/exectails";
119 | this.ToolTip.SetToolTip(this.ImgGitHub, "https://github.com/exectails");
120 | this.ImgGitHub.Click += new System.EventHandler(this.LinkImage_Click);
121 | //
122 | // ImgPatreon
123 | //
124 | this.ImgPatreon.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
125 | this.ImgPatreon.Cursor = System.Windows.Forms.Cursors.Hand;
126 | this.ImgPatreon.Image = ((System.Drawing.Image)(resources.GetObject("ImgPatreon.Image")));
127 | this.ImgPatreon.Location = new System.Drawing.Point(12, 509);
128 | this.ImgPatreon.Name = "ImgPatreon";
129 | this.ImgPatreon.Size = new System.Drawing.Size(189, 32);
130 | this.ImgPatreon.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize;
131 | this.ImgPatreon.TabIndex = 20;
132 | this.ImgPatreon.TabStop = false;
133 | this.ImgPatreon.Tag = "https://www.patreon.com/exectails";
134 | this.ToolTip.SetToolTip(this.ImgPatreon, "https://www.patreon.com/exectails");
135 | this.ImgPatreon.Click += new System.EventHandler(this.LinkImage_Click);
136 | //
137 | // GrpScintilla
138 | //
139 | this.GrpScintilla.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
140 | | System.Windows.Forms.AnchorStyles.Right)));
141 | this.GrpScintilla.BackColor = System.Drawing.SystemColors.Control;
142 | this.GrpScintilla.Controls.Add(this.textBox2);
143 | this.GrpScintilla.Location = new System.Drawing.Point(14, 229);
144 | this.GrpScintilla.Name = "GrpScintilla";
145 | this.GrpScintilla.Size = new System.Drawing.Size(459, 272);
146 | this.GrpScintilla.TabIndex = 22;
147 | this.GrpScintilla.TabStop = false;
148 | this.GrpScintilla.Text = "ScintillaNET License";
149 | //
150 | // textBox2
151 | //
152 | this.textBox2.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
153 | | System.Windows.Forms.AnchorStyles.Left)
154 | | System.Windows.Forms.AnchorStyles.Right)));
155 | this.textBox2.BackColor = System.Drawing.SystemColors.Control;
156 | this.textBox2.BorderStyle = System.Windows.Forms.BorderStyle.None;
157 | this.textBox2.Location = new System.Drawing.Point(8, 19);
158 | this.textBox2.Multiline = true;
159 | this.textBox2.Name = "textBox2";
160 | this.textBox2.ReadOnly = true;
161 | this.textBox2.Size = new System.Drawing.Size(443, 247);
162 | this.textBox2.TabIndex = 3;
163 | this.textBox2.TabStop = false;
164 | this.textBox2.Text = resources.GetString("textBox2.Text");
165 | //
166 | // GrpLicense
167 | //
168 | this.GrpLicense.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
169 | | System.Windows.Forms.AnchorStyles.Right)));
170 | this.GrpLicense.BackColor = System.Drawing.SystemColors.Control;
171 | this.GrpLicense.Controls.Add(this.textBox1);
172 | this.GrpLicense.Location = new System.Drawing.Point(12, 64);
173 | this.GrpLicense.Name = "GrpLicense";
174 | this.GrpLicense.Size = new System.Drawing.Size(459, 159);
175 | this.GrpLicense.TabIndex = 21;
176 | this.GrpLicense.TabStop = false;
177 | this.GrpLicense.Text = "License";
178 | //
179 | // textBox1
180 | //
181 | this.textBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
182 | | System.Windows.Forms.AnchorStyles.Right)));
183 | this.textBox1.BackColor = System.Drawing.SystemColors.Control;
184 | this.textBox1.BorderStyle = System.Windows.Forms.BorderStyle.None;
185 | this.textBox1.Location = new System.Drawing.Point(8, 19);
186 | this.textBox1.Multiline = true;
187 | this.textBox1.Name = "textBox1";
188 | this.textBox1.ReadOnly = true;
189 | this.textBox1.Size = new System.Drawing.Size(443, 134);
190 | this.textBox1.TabIndex = 3;
191 | this.textBox1.TabStop = false;
192 | this.textBox1.Text = resources.GetString("textBox1.Text");
193 | //
194 | // FrmAbout
195 | //
196 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
197 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
198 | this.ClientSize = new System.Drawing.Size(483, 553);
199 | this.Controls.Add(this.GrpScintilla);
200 | this.Controls.Add(this.GrpLicense);
201 | this.Controls.Add(this.ImgPatreon);
202 | this.Controls.Add(this.ImgGitHub);
203 | this.Controls.Add(this.BtnOK);
204 | this.Controls.Add(this.PnlHeader);
205 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
206 | this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
207 | this.MaximizeBox = false;
208 | this.MinimizeBox = false;
209 | this.Name = "FrmAbout";
210 | this.ShowInTaskbar = false;
211 | this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
212 | this.Text = "About";
213 | this.PnlHeader.ResumeLayout(false);
214 | this.PnlHeader.PerformLayout();
215 | ((System.ComponentModel.ISupportInitialize)(this.ImgIcon)).EndInit();
216 | ((System.ComponentModel.ISupportInitialize)(this.ImgGitHub)).EndInit();
217 | ((System.ComponentModel.ISupportInitialize)(this.ImgPatreon)).EndInit();
218 | this.GrpScintilla.ResumeLayout(false);
219 | this.GrpScintilla.PerformLayout();
220 | this.GrpLicense.ResumeLayout(false);
221 | this.GrpLicense.PerformLayout();
222 | this.ResumeLayout(false);
223 | this.PerformLayout();
224 |
225 | }
226 |
227 | #endregion
228 | private System.Windows.Forms.Panel PnlHeader;
229 | private System.Windows.Forms.Label LblVersion;
230 | private System.Windows.Forms.PictureBox ImgIcon;
231 | private System.Windows.Forms.Label LblName;
232 | private System.Windows.Forms.Button BtnOK;
233 | private System.Windows.Forms.PictureBox ImgGitHub;
234 | private System.Windows.Forms.PictureBox ImgPatreon;
235 | private System.Windows.Forms.GroupBox GrpScintilla;
236 | private System.Windows.Forms.TextBox textBox2;
237 | private System.Windows.Forms.GroupBox GrpLicense;
238 | private System.Windows.Forms.TextBox textBox1;
239 | private System.Windows.Forms.ToolTip ToolTip;
240 | }
241 | }
--------------------------------------------------------------------------------
/Fetitor/FrmAbout.cs:
--------------------------------------------------------------------------------
1 | // This program is free software: you can redistribute it and/or modify
2 | // it under the terms of the GNU General Public License as published by
3 | // the Free Software Foundation, either version 3 of the License, or
4 | // (at your option) any later version.
5 | //
6 | // This program is distributed in the hope that it will be useful,
7 | // but WITHOUT ANY WARRANTY; without even the implied warranty of
8 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9 | // GNU General Public License for more details.
10 | //
11 | // You should have received a copy of the GNU General Public License
12 | // along with this program. If not, see .
13 |
14 | using System;
15 | using System.Diagnostics;
16 | using System.Windows.Forms;
17 |
18 | namespace Fetitor
19 | {
20 | ///
21 | /// Form with information about the program.
22 | ///
23 | public partial class FrmAbout : Form
24 | {
25 | ///
26 | /// Creates new instance.
27 | ///
28 | public FrmAbout()
29 | {
30 | InitializeComponent();
31 | }
32 |
33 | ///
34 | /// Closes form.
35 | ///
36 | ///
37 | ///
38 | private void BtnOK_Click(object sender, EventArgs e)
39 | {
40 | this.Close();
41 | }
42 |
43 | ///
44 | /// Opens the clicked image's link in its Tag.
45 | ///
46 | ///
47 | ///
48 | private void LinkImage_Click(object sender, EventArgs e)
49 | {
50 | var tag = ((sender as Control)?.Tag as string);
51 | if (tag != null)
52 | Process.Start(tag);
53 | }
54 | }
55 | }
56 |
--------------------------------------------------------------------------------
/Fetitor/FrmAbout.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
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 |
109 | text/microsoft-resx
110 |
111 |
112 | 2.0
113 |
114 |
115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
119 |
120 |
121 |
122 |
123 | iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m
124 | dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAALaSURBVFhHxZXdT1JhHMedN1257rvzrper7rrqX/Au
125 | /4Fcs9VsuUqFqfMFIxAhJAYxGPEWgTFs1CyEUGO9MovsonUtI+dUBoqKfuP32OEc4HhuPDue7cP3+f5+
126 | z/Z8d3ie57QAOFVEi0oiWlQS0aKSiBaVhP0EAoHOKlCYzloAv9+PTCaDlZUVxbBYLNWl/wfw+XxYWFg4
127 | Eda4HpdmzjAlvzj/COloC1Py2elpVNrbmZKfrmotgNfrRSqVOhHXZq/iQu4cU/JLsSso4DxT8n87OoDe
128 | XqbkzWYzH8Dj8SCRSJyIcPw5Hs89ZEo+GQ/g/VsNkvMvmf8QCmF5aoop+boAbrcbVqtVUUZGRvgALpeL
129 | jKzPj99/JJmqvo3qcxTA6XTi8PBQVi7rs5LUBXA4HDg4OGBEo1GGcMx5sVrjmJQCXOyLSTI5OckHsNvt
130 | qFQqskEhvv78JYlOp+MD2Gw27O3tMSKRSB1cTdgXzhPWOU8hPn3P4r5KDc+LUBPUqwtAu7JcLsvG/v4+
131 | 0pllSbRaLR+ArsXt7W1GOByuIfSN/ePmku7u7mLxyzfcfdAHp8/fBPUmJib4AHQpFItF2aC3kPz4WRKN
132 | RsMHMJlMKBQKjGAwyBCOOS9WaxyT7uzsIL6URk/vPdhc7iaoNzY2xgcwGo3Y2tqSDfob5lKLkoyOjvIB
133 | DAYDNjY2GI3fba4m7AvnCeucL5VKiCWSuNlzB2b70yaoV3cV6/V6rK+vywbtg9l3cUmGh4f5AHQm19bW
134 | GPRp5hD6xv5xc0lpH0TezOHGrdswWJ40Qb2hoSE+AJ3JfD4vG7QPwrHXkgwODvIB6EzmcjkGfZo55RD2
135 | Gvticzc3NxGcfYXr3d3QGk1NUE+tVh8FqD6tdCZXV1dlgzaiPxKVRKVS0eqtFKBtfHy8tpvlgI6hdyYi
136 | ycDAAAVoYwG6urqe9ff3Q0loTS4AvQYanFUYWrOVbcLTRLSoHGj5B6CLWU5mGaLGAAAAAElFTkSuQmCC
137 |
138 |
139 |
140 |
141 | iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m
142 | dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAK3SURBVFhHxZa7TxRhFMXxkWABAQzg2kDsbHmYaEI0
143 | ofB/ICFofAQ7CjQxFvwBNJQUBiobJBI7Y+mjsUMKCjEatTFqI0ZIxDieM55vudz5dpmdmcST/BL23nPP
144 | HSb7zU5bXp3q6+8F18EDsAF+gETwb9bYo6dXY+WFsCGwAvZAWHgY9HJmSDGtC8Nd4D74A2JL8sBZZnQp
145 | Np8wwP/6HYiFFoFZ+e4GjOPguwarhJnjWhMXDCMyxgKqgNkjWndQaPSA9zIGNsEjUOSiOMNZZtg6d/Ro
146 | 7b5QXDamwKR67YDH67Pq4dg9E/ZY0kNvu2YnVbcss1cXCqPOEBiWJRU+82ScBUdVqos19Q584/F5GMSy
147 | R2VJTWuuGTgnS2Exw2UG1oKhBn6bhuVKaiohZrjMAHfWaJg2RcsncFI5hcUM8FGZnmka+MiMNa8po7SY
148 | 5bIDK2z6Y0J4e1p7fDYRs5Tp92yyueOK5INmKxMz3Q6yw4Yvki3NVSZkvnU7UhpdwLbmKhMz3Y6Uhg3Q
149 | r9nSYpbLDmyzue6KgSnNlxazXHZgnc0lVwy8BseVUVjMUFZsxxINE65oWVBOYTHDZVomaOgEP03Rswpq
150 | ysstzJzWbCyTcGdnMC+axjy4BJ6b2i/wENwE/OU8lg4aocZbfQHcAvxx40yYj7Go0XR4AOyqwRfJWcB3
151 | gFeqWRh+RKN1sQYey3MY3DWg0X9CYc4YyHlwBvgfkjGNZITeRedtxJxG9oUib+FLY3qqejfgG849cBlk
152 | bn8Qen3ALorBHfHThQbfDewjc0atXIKfF2uXeZjd/AsNwyDY0gB5Ae6Aq+AuOCFrRug1uwBmDsraXDDy
153 | JeKJBj3dsmXEnvMGmNXayw0G+K2+Ab4AG9bKBXwFPLqZU5NbGO4APJZvwDeQvm7HxJ489N4GHWo1VpIk
154 | /5Gk7S8Lp6cBadxETwAAAABJRU5ErkJggg==
155 |
156 |
157 |
158 | 17, 17
159 |
160 |
161 |
162 | iVBORw0KGgoAAAANSUhEUgAAAL0AAAAgCAIAAADITe76AAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m
163 | dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAATLSURBVHhe7ZjPix1FEMe9ePCPEf+OePAUAoon2UMM
164 | Gg+6oBgM8SJB2ausgoj4AwkKQQIe4sWDFz2EEBGDQRCJp3VFza7z5r1Zv93fmpp6PT3zZhp5h7WK76Gn
165 | f9RUV3265+0+VJ0/63LNlXPjKpFz4yqRc+MqkXPjKpFz4yqRc+MqkXPjKtEkbh557Az02uNPJP3V5YvL
166 | r240939pjh6s7n5ff/pe9fxT6RzXadQkbh5+9Az06jo3yxvXmuXyZN2aw4PFm5fsNNepVAk3i/23BJMB
167 | a/74vXrhaV3uOn0q4QYfJgFk2OrPPtDlQ1rduSWzW2vu/7rYu8LRk+Mj6TW2/PqmLkdbek9OVt9+U+3u
168 | 6BDa6JExjN67W3/4DofQkN7jI52PCexbfnk9PPYCgyE2nW+la+v9vWQoaHeHo9b4Fgqr2Ak/7MGL2JMY
169 | IrdbVrPeIDxq6uDKjtJzyFXbw51qcqZrPjeXL8aQNtjq3o/WQ1b58hwecHSMm92dfnJ1YRg9PJBeY/Xn
170 | H2O048ZUWt81l5vF6y/K8Ho9OuW4gTEYyPINb+iZyw1M4VCIrWlg6lk3vj1uFm9f5bvHrXnwt/WQVRp0
171 | W29eOawlOmXUiOlDjpjogEKcbKuOHOnVJbXBBbO7I9yY+XLiex6mZBPzMVOqZS6wTi03uhEJ/s4tPvK9
172 | 9KDlp1hmGwbXyuFhDwOI3tiGQ4Uy9ET/dKLcoMEJ03eaaDY39btyr45bU/1jPWSVBk1uYnXxyA1ruq0s
173 | XhRSGU6VWWhHIRYGCcXr0GAG0RmGIlXsYeWmZ5ORgDypcVuwTqPcYH5ox88oGvAmq6LE5xRu4o2Shc9O
174 | oEPmZ+5OE82/b66+Et69yZrf8r8GrBh0Ypp6bi+xQAMrkT3cCG/vSnaU6UPGWSG8Whhl7Y+PpCQmm4kl
175 | 9YB4UbHYUp72N0qnoe9ULJXSjLYiqGuHuOkbVzFjyYGRIOMFQ4cMNewdvwK3xk317Lnmrz/Di0dtefML
176 | 6yGrbHmwH359mIXE/kNueM3oiS/ghh6wMDwiKpYtBt+pxw34ICjy2yjWD48MgBcDNYUbzFdQJIBN3GAC
177 | Iw9J2B43COX6J3jZiDX1orp0QZcPqR80e1ghZoE5TdRPEJZgLSdn0yc1aL9TmExi9Aj2udmYTb4osRSv
178 | lpv+RjCTQ2tmiB/ihqSyDQqV1Px3yuCo3CAYXm/cwpa4qZ57cvVzCHHI6mvv69oRZbgxJ5hbynIjx2X6
179 | 7+LYE0rS/i5Gjxz3aGhLSSZzQ+z6xs9Wp2FupHI9420UJoxyAzEPmCaj7QdIPSiadNJxsx7/+E6zKuIG
180 | eumZ1U8/yGuNNU2D26ibNiopZ8+4MaKQGJaEtbm/tEPBWJuBv8PJhHITAogHlJXuc5Pa+rcvc7jbT5X9
181 | jRI6o0lsrfj5SHwyBnjm40ZudKcdSTGqxCRp69zoI2yL3EAXztUf7ev/APFtWt3+bvHGy2tzRpUpjzkr
182 | Y9xAyX/22j+mdJQppiGbmhrLDY9jWDuTG72rtAYUy0aHogFuGHy3nSiBKd5/eNzMTbudMK2FFVvQY4OG
183 | JTvhBg1O2y43rv+xnBtXiZwbV4mcG1eJJnHjciVyblwlcm5cJXJuXCVyblwlcm5cJXJuXPN1/uy/l2dF
184 | s02cwusAAAAASUVORK5CYII=
185 |
186 |
187 |
188 | Copyright (c) 2015, Jacob Slusser, https://github.com/jacobslusser
189 |
190 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
191 |
192 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
193 |
194 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
195 |
196 |
197 | This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
198 |
199 | This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
200 |
201 | You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>.
202 |
203 |
204 |
205 | AAABAAIAICAAAAEAIACoEAAAJgAAABAQAAABACAAaAQAAM4QAAAoAAAAIAAAAEAAAAABACAAAAAAAAAA
206 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
207 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
208 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
209 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
210 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAANAAAADwAAAA8AAAAPAAAADwAA
211 | AA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAA
212 | AA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA0AAAACAAAADWVlZaJ5eXn/eXl5/3l5
213 | ef95eXn/eXl5/3l5ef95eXn/eXl5/3l5ef95eXn/eXl5/3l5ef95eXn/eXl5/3l5ef95eXn/eXl5/3l5
214 | ef95eXn/eXl5/3l5ef95eXn/eXl5/3l5ef95eXn/eXl5/3l5ef95eXn/ZWVlogAAAA0AAAANhYWF/+/v
215 | 7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v
216 | 7//v7+//7+/v/+/v7//29vb/r62k/6+tpP+vraT/r62k/6+tpP+vraT/r62k/6+tpP96enr/AAAADQAA
217 | AAKGhob/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm
218 | 5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+/v7/+xr6b/sa+m/7Gvpv+xr6b/sa+m/7Gvpv+xr6b/sa+m/3t7
219 | e/8AAAACAAAAAIeHh//n5+f/5+fn/6Ghof/n5+f/oaGh/6Ghof+hoaH/5+fn/+fn5/+hoaH/oaGh/+fn
220 | 5/+hoaH/oaGh/+fn5/+hoaH/oaGh/6Ghof/n5+f/8PDw/7Oyqf9paWT/kZCJ/5GQif+RkIn/kZCJ/5GQ
221 | if+zsqn/fHx8/wAAAAAAAAAAiYmJ/+np6f/p6en/6enp/+np6f/p6en/6enp/+np6f/p6en/6enp/+np
222 | 6f/p6en/6enp/+np6f/p6en/6enp/+np6f/p6en/6enp/+np6f/x8fH/trWs/7a1rP+2taz/trWs/7a1
223 | rP+2taz/trWs/7a1rP9+fn7/AAAAAAAAAACLi4v/6+vr/+vr6/+kpKT/pKSk/6SkpP/r6+v/pKSk/6Sk
224 | pP/r6+v/6+vr/6SkpP+kpKT/6+vr/6SkpP+kpKT/pKSk/+vr6/+kpKT/6+vr//Ly8v+5t6//bWxn/5aV
225 | jv+WlY7/lpWO/5aVjv+WlY7/ubev/39/f/8AAAAAAAAAAIyMjP/t7e3/7e3t/+3t7f/t7e3/7e3t/+3t
226 | 7f/t7e3/7e3t/+3t7f/t7e3/7e3t/+3t7f/t7e3/7e3t/+3t7f/t7e3/7e3t/+3t7f/t7e3/9PT0/7y7
227 | sv+8u7L/vLuy/7y7sv+8u7L/vLuy/7y7sv+8u7L/gICA/wAAAAAAAAAAjo6O/+/v7//v7+//p6en/6en
228 | p/+np6f/p6en/+/v7/+np6f/7+/v/+/v7/+np6f/7+/v/6enp/+np6f/7+/v/+/v7/+np6f/p6en/+/v
229 | 7//19fX/v761/3Bvav+bmpP/m5qT/5uak/+bmpP/m5qT/7++tf+CgoL/AAAAAAAAAACQkJD/8fHx//Hx
230 | 8f/x8fH/8fHx//Hx8f/x8fH/8fHx//Hx8f/x8fH/8fHx//Hx8f/x8fH/8fHx//Hx8f/x8fH/8fHx//Hx
231 | 8f/x8fH/8fHx//b29v/Dwbn/w8G5/8PBuf/Dwbn/w8G5/8PBuf/Dwbn/w8G5/4ODg/8AAAAAAAAAAJGR
232 | kf/y8vL/8vLy/6mpqf+pqan/8vLy/6mpqf+pqan/qamp//Ly8v/y8vL/qamp/6mpqf+pqan/8vLy/6mp
233 | qf+pqan/8vLy/6mpqf/y8vL/9/f3/8bEvP91c2//oZ+Z/6Gfmf+hn5n/oZ+Z/6Gfmf/GxLz/hISE/wAA
234 | AAAAAAAAk5OT//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0
235 | 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/4+Pj/ysi//8rIv//KyL//ysi//8rIv//KyL//ysi//8rI
236 | v/+Ghob/AAAAAAAAAACVlZX/9vb2//b29v+srKz/rKys/6ysrP/29vb/rKys/6ysrP/29vb/9vb2/6ys
237 | rP+srKz/9vb2/6ysrP+srKz/rKys//b29v+srKz/9vb2//n5+f/Ny8P/eHdy/6alnv+mpZ7/pqWe/6al
238 | nv+mpZ7/zcvD/4eHh/8AAAAAAAAAAJeXl//4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4
239 | +P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+/v7/9DOxv/Qzsb/0M7G/9DO
240 | xv/Qzsb/0M7G/9DOxv/Qzsb/iYmJ/wAAAAAAAAAAmZmZ//r6+v/6+vr/r6+v/6+vr/+vr6//r6+v//r6
241 | +v+vr6//+vr6//r6+v+vr6//+vr6/6+vr/+vr6//+vr6//r6+v+vr6//r6+v//r6+v/8/Pz/09HJ/3x7
242 | dv+rqqP/q6qj/6uqo/+rqqP/q6qj/9PRyf+Li4v/AAAAAAAAAACampr//Pz8//z8/P/8/Pz//Pz8//z8
243 | /P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//39
244 | /f/W1Mz/1tTM/9bUzP/W1Mz/1tTM/9bUzP/W1Mz/1tTM/4uLi/8AAAAAAAAAAJycnP/9/f3//f39/7Gx
245 | sf+xsbH//f39/7Gxsf+xsbH/sbGx//39/f/9/f3/sbGx/7Gxsf+xsbH//f39/7Gxsf+xsbH//f39/7Gx
246 | sf/9/f3//v7+/7V4Kv+1eCr/tXgq/7V4Kv+1eCr/tXgq/7V4Kv+1eCr/jY2N/wAAAAAAAAAAnp6e//7+
247 | /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+
248 | /v/+/v7//v7+//7+/v/+/v7/04wx/9OMMf/TjDH/04wx/9OMMf/TjDH/04wx/9OMMf+Pj4//AAAAAAAA
249 | AACfn5//////////////////////////////////////////////////////////////////////////
250 | ///////////////////////////////////c2tL/3NrS/9za0v/c2tL/3NrS/9za0v/c2tL/3NrS/4+P
251 | j/8AAAAAAAAAAKGhof+Xl5f/l5eX/5eXl/+Xl5f/l5eX/5eXl/+Xl5f/l5eX/5eXl/+Xl5f/l5eX/5eX
252 | l/+Xl5f/l5eX/5eXl/+Xl5f/l5eX/5eXl/+Xl5f/l5eX/5eXl/+Xl5f/l5eX/5eXl/+Xl5f/l5eX/5eX
253 | l/+Xl5f/goKC/wAAAAAAAAAAo6Oj/76+vv++vr7/vr6+/76+vv++vr7/vr6+/76+vv++vr7/vr6+/76+
254 | vv++vr7/vr6+/76+vv++vr7/vr6+/76+vv+ovKz/iLmS/6i8rP++vr7/p7y//4a6wP+uvb//vr6+/6ur
255 | xf+Pj9D/q6vF/76+vv+Tk5P/AAAAAAAAAACkpKT/wcHB/8HBwf/BwcH/wcHB/8HBwf/BwcH/wcHB/8HB
256 | wf/BwcH/wcHB/8HBwf/BwcH/wcHB/8HBwf/BwcH/wcHB/z6yVv8a5yn/PrJW/8HBwf84tcT/KP/y/zi1
257 | xP/BwcH/T0/q/3Nz//9PT+r/wcHB/5OTk/8AAAAAAAAAAKWlpf/CwsL/wsLC/8LCwv/CwsL/wsLC/8LC
258 | wv/CwsL/wsLC/8LCwv/CwsL/wsLC/8LCwv/CwsL/wsLC/8LCwv/CwsL/jLyX/wetK/+MvJf/wsLC/4q9
259 | w/8Ascb/ir3D/8LCwv+UlNP/ISH8/5SU0//CwsL/lJSU/wAAAAAAAAAApqam/87Ozv/V1dX/1dXV/9XV
260 | 1f/V1dX/1dXV/9XV1f/V1dX/1dXV/9XV1f/V1dX/1dXV/9XV1f/V1dX/1dXV/9XV1f/V1dX/1dXV/9XV
261 | 1f/V1dX/1dXV/9XV1f/V1dX/1dXV/9XV1f/V1dX/1dXV/9XV1f+VlZX/AAAAAAAAAACnp6dXp6en/6en
262 | p/+np6f/p6en/6enp/+np6f/p6en/6enp/+np6f/p6en/6enp/+np6f/p6en/6enp/+np6f/p6en/6en
263 | p/+np6f/p6en/6enp/+np6f/p6en/6enp/+np6f/p6en/6enp/+np6f/p6en/6enp1cAAAAAAAAAAAAA
264 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
265 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
266 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
267 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
268 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
269 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
270 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
271 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
272 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
273 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
274 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////AAAAAAAAAAAAAAAAAAAAAIAA
275 | AAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAA
276 | AAGAAAABgAAAAYAAAAGAAAABgAAAAf//////////////////////////KAAAABAAAAAgAAAAAQAgAAAA
277 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
278 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZGRkwPDw8hzw8PIc8PDyHPDw8hzw8PIc8PDyHPDw8hzw8
279 | PIc8PDyHPDw8hzw8PIc8PDyHPDw8hzw8PIcZGRkwQkJCg+rq6v/q6ur/6urq/+rq6v/q6ur/6urq/+rq
280 | 6v/q6ur/6urq/+7u7v+wrqX/sK6l/7Cupf+wrqX/PT09g4iIiIDo6Oj/1tbW/8XFxf/W1tb/1tbW/9bW
281 | 1v/FxcX/1tbW/8XFxf/s7Oz/oqGZ/6Oimv+jopr/rKui/319fYCLi4uA7Ozs/8jIyP/a2tr/yMjI/+zs
282 | 7P/IyMj/2tra/8jIyP/a2tr/7+/v/6emnv+pqKD/qaig/7GwqP9/f3+Aj4+PgPDw8P/MzMz/zMzM/97e
283 | 3v/w8PD/3t7e/8zMzP/w8PD/zMzM//Ly8v+tq6T/r62m/6+tpv+4tq7/goKCgJKSkoDz8/P/zs7O/+Dg
284 | 4P/Ozs7/8/Pz/87Ozv/g4OD/zs7O/+Dg4P/19fX/s7Gq/7WzrP+1s6z/vry0/4WFhYCWlpaA9/f3/9LS
285 | 0v/k5OT/0tLS//f39//S0tL/5OTk/9LS0v/k5OT/+Pj4/7m3sP+7ubL/u7my/8TDu/+IiIiAmZmZgPv7
286 | +//V1dX/1dXV/+jo6P/7+/v/6Ojo/9XV1f/7+/v/1dXV//v7+/++vbX/wL+3/8C/t//KyMH/i4uLgJ2d
287 | nYD9/f3/19fX/+rq6v/X19f//f39/9fX1//q6ur/19fX/+rq6v/9/f3/xIIt/8SCLf/Egi3/xIIt/46O
288 | joCgoKCAy8vL/8vLy//Ly8v/y8vL/8vLy//Ly8v/y8vL/8vLy//Ly8v/y8vL/7m4tP+5uLT/ubi0/7m4
289 | tP+IiIiAo6OjgL+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//YsNv/5m7oP9jys3/mbzA/39/
290 | 3/+ensv/k5OTgKWlpYDJycn/y8vL/8vLy//Ly8v/y8vL/8vLy//Ly8v/y8vL/4/Em/++ysD/jcbM/73K
291 | y/+Xl97/wMDP/5SUlICnp6cWp6engKenp4Cnp6eAp6engKenp4Cnp6eAp6engKenp4Cnp6eAp6engKen
292 | p4Cnp6eAp6engKenp4Cnp6cWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
293 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
294 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//6xBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAA
295 | rEEAAKxBAACsQQAArEEAAKxBAACsQf//rEH//6xB
296 |
297 |
298 |
--------------------------------------------------------------------------------
/Fetitor/FrmMain.Designer.cs:
--------------------------------------------------------------------------------
1 | namespace Fetitor
2 | {
3 | partial class FrmMain
4 | {
5 | ///
6 | /// Erforderliche Designervariable.
7 | ///
8 | private System.ComponentModel.IContainer components = null;
9 |
10 | ///
11 | /// Verwendete Ressourcen bereinigen.
12 | ///
13 | /// True, wenn verwaltete Ressourcen gelöscht werden sollen; andernfalls False.
14 | protected override void Dispose(bool disposing)
15 | {
16 | if (disposing && (components != null))
17 | {
18 | components.Dispose();
19 | }
20 | base.Dispose(disposing);
21 | }
22 |
23 | #region Vom Windows Form-Designer generierter Code
24 |
25 | ///
26 | /// Erforderliche Methode für die Designerunterstützung.
27 | /// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.
28 | ///
29 | private void InitializeComponent()
30 | {
31 | this.components = new System.ComponentModel.Container();
32 | System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FrmMain));
33 | this.MainMenu = new System.Windows.Forms.MainMenu(this.components);
34 | this.menuItem1 = new System.Windows.Forms.MenuItem();
35 | this.MnuOpen = new System.Windows.Forms.MenuItem();
36 | this.MnuSave = new System.Windows.Forms.MenuItem();
37 | this.MnuSaveAsXml = new System.Windows.Forms.MenuItem();
38 | this.menuItem5 = new System.Windows.Forms.MenuItem();
39 | this.MnuExit = new System.Windows.Forms.MenuItem();
40 | this.menuItem3 = new System.Windows.Forms.MenuItem();
41 | this.MnuUndo = new System.Windows.Forms.MenuItem();
42 | this.MnuRedo = new System.Windows.Forms.MenuItem();
43 | this.menuItem9 = new System.Windows.Forms.MenuItem();
44 | this.MnuSearch = new System.Windows.Forms.MenuItem();
45 | this.MnuUpdateFeatures = new System.Windows.Forms.MenuItem();
46 | this.menuItem2 = new System.Windows.Forms.MenuItem();
47 | this.MnuAbout = new System.Windows.Forms.MenuItem();
48 | this.OpenFileDialog = new System.Windows.Forms.OpenFileDialog();
49 | this.SaveFileDialog = new System.Windows.Forms.SaveFileDialog();
50 | this.StatusStrip = new System.Windows.Forms.StatusStrip();
51 | this.LblCurLine = new System.Windows.Forms.ToolStripStatusLabel();
52 | this.LblCurCol = new System.Windows.Forms.ToolStripStatusLabel();
53 | this.LblKnownFeatureCount = new System.Windows.Forms.ToolStripStatusLabel();
54 | this.ToolStrip = new System.Windows.Forms.ToolStrip();
55 | this.BtnOpen = new System.Windows.Forms.ToolStripButton();
56 | this.BtnSave = new System.Windows.Forms.ToolStripButton();
57 | this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
58 | this.BtnUndo = new System.Windows.Forms.ToolStripButton();
59 | this.BtnRedo = new System.Windows.Forms.ToolStripButton();
60 | this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator();
61 | this.BtnSearch = new System.Windows.Forms.ToolStripButton();
62 | this.BtnUpdateFeatureNames = new System.Windows.Forms.ToolStripButton();
63 | this.SplMain = new System.Windows.Forms.SplitContainer();
64 | this.TxtEditor = new Fetitor.MyScintilla();
65 | this.BtnClearFilter = new System.Windows.Forms.Button();
66 | this.LstFeatures = new System.Windows.Forms.ListView();
67 | this.columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
68 | this.TxtFeatureFilter = new System.Windows.Forms.TextBox();
69 | this.MnuEnableSelected = new System.Windows.Forms.MenuItem();
70 | this.menuItem6 = new System.Windows.Forms.MenuItem();
71 | this.StatusStrip.SuspendLayout();
72 | this.ToolStrip.SuspendLayout();
73 | ((System.ComponentModel.ISupportInitialize)(this.SplMain)).BeginInit();
74 | this.SplMain.Panel1.SuspendLayout();
75 | this.SplMain.Panel2.SuspendLayout();
76 | this.SplMain.SuspendLayout();
77 | this.SuspendLayout();
78 | //
79 | // MainMenu
80 | //
81 | this.MainMenu.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
82 | this.menuItem1,
83 | this.menuItem3,
84 | this.menuItem2});
85 | //
86 | // menuItem1
87 | //
88 | this.menuItem1.Index = 0;
89 | this.menuItem1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
90 | this.MnuOpen,
91 | this.MnuSave,
92 | this.MnuSaveAsXml,
93 | this.menuItem5,
94 | this.MnuExit});
95 | this.menuItem1.Text = "File";
96 | //
97 | // MnuOpen
98 | //
99 | this.MnuOpen.Index = 0;
100 | this.MnuOpen.Shortcut = System.Windows.Forms.Shortcut.CtrlO;
101 | this.MnuOpen.Text = "Open...";
102 | this.MnuOpen.Click += new System.EventHandler(this.BtnOpen_Click);
103 | //
104 | // MnuSave
105 | //
106 | this.MnuSave.Enabled = false;
107 | this.MnuSave.Index = 1;
108 | this.MnuSave.Shortcut = System.Windows.Forms.Shortcut.CtrlS;
109 | this.MnuSave.Text = "Save";
110 | this.MnuSave.Click += new System.EventHandler(this.BtnSave_Click);
111 | //
112 | // MnuSaveAsXml
113 | //
114 | this.MnuSaveAsXml.Enabled = false;
115 | this.MnuSaveAsXml.Index = 2;
116 | this.MnuSaveAsXml.Text = "Save as XML...";
117 | this.MnuSaveAsXml.Click += new System.EventHandler(this.MenuSaveAsXml_Click);
118 | //
119 | // menuItem5
120 | //
121 | this.menuItem5.Index = 3;
122 | this.menuItem5.Text = "-";
123 | //
124 | // MnuExit
125 | //
126 | this.MnuExit.Index = 4;
127 | this.MnuExit.Text = "Exit";
128 | this.MnuExit.Click += new System.EventHandler(this.MenuExit_Click);
129 | //
130 | // menuItem3
131 | //
132 | this.menuItem3.Index = 1;
133 | this.menuItem3.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
134 | this.MnuUndo,
135 | this.MnuRedo,
136 | this.menuItem9,
137 | this.MnuSearch,
138 | this.MnuUpdateFeatures,
139 | this.menuItem6,
140 | this.MnuEnableSelected});
141 | this.menuItem3.Text = "Edit";
142 | //
143 | // MnuUndo
144 | //
145 | this.MnuUndo.Index = 0;
146 | this.MnuUndo.Shortcut = System.Windows.Forms.Shortcut.CtrlZ;
147 | this.MnuUndo.Text = "Undo";
148 | this.MnuUndo.Click += new System.EventHandler(this.BtnUndo_Click);
149 | //
150 | // MnuRedo
151 | //
152 | this.MnuRedo.Index = 1;
153 | this.MnuRedo.Shortcut = System.Windows.Forms.Shortcut.CtrlY;
154 | this.MnuRedo.Text = "Redo";
155 | this.MnuRedo.Click += new System.EventHandler(this.BtnRedo_Click);
156 | //
157 | // menuItem9
158 | //
159 | this.menuItem9.Index = 2;
160 | this.menuItem9.Text = "-";
161 | //
162 | // MnuSearch
163 | //
164 | this.MnuSearch.Index = 3;
165 | this.MnuSearch.Shortcut = System.Windows.Forms.Shortcut.CtrlF;
166 | this.MnuSearch.Text = "Search";
167 | this.MnuSearch.Click += new System.EventHandler(this.BtnSearch_Click);
168 | //
169 | // MnuUpdateFeatures
170 | //
171 | this.MnuUpdateFeatures.Index = 4;
172 | this.MnuUpdateFeatures.Text = "Update Feature Names";
173 | this.MnuUpdateFeatures.Click += new System.EventHandler(this.BtnUpdateFeatureNames_Click);
174 | //
175 | // menuItem2
176 | //
177 | this.menuItem2.Index = 2;
178 | this.menuItem2.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
179 | this.MnuAbout});
180 | this.menuItem2.Text = "?";
181 | //
182 | // MnuAbout
183 | //
184 | this.MnuAbout.Index = 0;
185 | this.MnuAbout.Text = "About";
186 | this.MnuAbout.Click += new System.EventHandler(this.MenuAbout_Click);
187 | //
188 | // OpenFileDialog
189 | //
190 | this.OpenFileDialog.Filter = "Compiled XML file|*.xml.compiled";
191 | //
192 | // SaveFileDialog
193 | //
194 | this.SaveFileDialog.Filter = "XML file|*.xml";
195 | //
196 | // StatusStrip
197 | //
198 | this.StatusStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
199 | this.LblCurLine,
200 | this.LblCurCol,
201 | this.LblKnownFeatureCount});
202 | this.StatusStrip.Location = new System.Drawing.Point(0, 556);
203 | this.StatusStrip.Name = "StatusStrip";
204 | this.StatusStrip.Size = new System.Drawing.Size(1008, 24);
205 | this.StatusStrip.TabIndex = 3;
206 | this.StatusStrip.Text = "statusStrip1";
207 | //
208 | // LblCurLine
209 | //
210 | this.LblCurLine.AutoSize = false;
211 | this.LblCurLine.Name = "LblCurLine";
212 | this.LblCurLine.Padding = new System.Windows.Forms.Padding(0, 0, 25, 0);
213 | this.LblCurLine.Size = new System.Drawing.Size(60, 19);
214 | this.LblCurLine.Text = "Line 0";
215 | this.LblCurLine.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
216 | //
217 | // LblCurCol
218 | //
219 | this.LblCurCol.AutoSize = false;
220 | this.LblCurCol.Name = "LblCurCol";
221 | this.LblCurCol.Padding = new System.Windows.Forms.Padding(0, 0, 25, 0);
222 | this.LblCurCol.Size = new System.Drawing.Size(60, 19);
223 | this.LblCurCol.Text = "Col 0";
224 | this.LblCurCol.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
225 | //
226 | // LblKnownFeatureCount
227 | //
228 | this.LblKnownFeatureCount.BorderSides = System.Windows.Forms.ToolStripStatusLabelBorderSides.Left;
229 | this.LblKnownFeatureCount.Name = "LblKnownFeatureCount";
230 | this.LblKnownFeatureCount.Size = new System.Drawing.Size(126, 19);
231 | this.LblKnownFeatureCount.Text = "Known Feature Count";
232 | //
233 | // ToolStrip
234 | //
235 | this.ToolStrip.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;
236 | this.ToolStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
237 | this.BtnOpen,
238 | this.BtnSave,
239 | this.toolStripSeparator1,
240 | this.BtnUndo,
241 | this.BtnRedo,
242 | this.toolStripSeparator2,
243 | this.BtnSearch,
244 | this.BtnUpdateFeatureNames});
245 | this.ToolStrip.Location = new System.Drawing.Point(0, 0);
246 | this.ToolStrip.Name = "ToolStrip";
247 | this.ToolStrip.RenderMode = System.Windows.Forms.ToolStripRenderMode.System;
248 | this.ToolStrip.Size = new System.Drawing.Size(1008, 25);
249 | this.ToolStrip.TabIndex = 2;
250 | this.ToolStrip.Text = "toolStrip1";
251 | //
252 | // BtnOpen
253 | //
254 | this.BtnOpen.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
255 | this.BtnOpen.Image = ((System.Drawing.Image)(resources.GetObject("BtnOpen.Image")));
256 | this.BtnOpen.ImageTransparentColor = System.Drawing.Color.Magenta;
257 | this.BtnOpen.Name = "BtnOpen";
258 | this.BtnOpen.Size = new System.Drawing.Size(23, 22);
259 | this.BtnOpen.Text = "Open...";
260 | this.BtnOpen.Click += new System.EventHandler(this.BtnOpen_Click);
261 | //
262 | // BtnSave
263 | //
264 | this.BtnSave.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
265 | this.BtnSave.Enabled = false;
266 | this.BtnSave.Image = ((System.Drawing.Image)(resources.GetObject("BtnSave.Image")));
267 | this.BtnSave.ImageTransparentColor = System.Drawing.Color.Magenta;
268 | this.BtnSave.Name = "BtnSave";
269 | this.BtnSave.Size = new System.Drawing.Size(23, 22);
270 | this.BtnSave.Text = "Save";
271 | this.BtnSave.Click += new System.EventHandler(this.BtnSave_Click);
272 | //
273 | // toolStripSeparator1
274 | //
275 | this.toolStripSeparator1.Name = "toolStripSeparator1";
276 | this.toolStripSeparator1.Size = new System.Drawing.Size(6, 25);
277 | //
278 | // BtnUndo
279 | //
280 | this.BtnUndo.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
281 | this.BtnUndo.Enabled = false;
282 | this.BtnUndo.Image = ((System.Drawing.Image)(resources.GetObject("BtnUndo.Image")));
283 | this.BtnUndo.ImageTransparentColor = System.Drawing.Color.Magenta;
284 | this.BtnUndo.Name = "BtnUndo";
285 | this.BtnUndo.Size = new System.Drawing.Size(23, 22);
286 | this.BtnUndo.Text = "Undo";
287 | this.BtnUndo.Click += new System.EventHandler(this.BtnUndo_Click);
288 | //
289 | // BtnRedo
290 | //
291 | this.BtnRedo.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
292 | this.BtnRedo.Enabled = false;
293 | this.BtnRedo.Image = ((System.Drawing.Image)(resources.GetObject("BtnRedo.Image")));
294 | this.BtnRedo.ImageTransparentColor = System.Drawing.Color.Magenta;
295 | this.BtnRedo.Name = "BtnRedo";
296 | this.BtnRedo.Size = new System.Drawing.Size(23, 22);
297 | this.BtnRedo.Text = "Redo";
298 | this.BtnRedo.Click += new System.EventHandler(this.BtnRedo_Click);
299 | //
300 | // toolStripSeparator2
301 | //
302 | this.toolStripSeparator2.Name = "toolStripSeparator2";
303 | this.toolStripSeparator2.Size = new System.Drawing.Size(6, 25);
304 | //
305 | // BtnSearch
306 | //
307 | this.BtnSearch.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
308 | this.BtnSearch.Image = ((System.Drawing.Image)(resources.GetObject("BtnSearch.Image")));
309 | this.BtnSearch.ImageTransparentColor = System.Drawing.Color.Magenta;
310 | this.BtnSearch.Name = "BtnSearch";
311 | this.BtnSearch.Size = new System.Drawing.Size(23, 22);
312 | this.BtnSearch.Text = "Search";
313 | this.BtnSearch.Click += new System.EventHandler(this.BtnSearch_Click);
314 | //
315 | // BtnUpdateFeatureNames
316 | //
317 | this.BtnUpdateFeatureNames.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
318 | this.BtnUpdateFeatureNames.Image = ((System.Drawing.Image)(resources.GetObject("BtnUpdateFeatureNames.Image")));
319 | this.BtnUpdateFeatureNames.ImageTransparentColor = System.Drawing.Color.Magenta;
320 | this.BtnUpdateFeatureNames.Name = "BtnUpdateFeatureNames";
321 | this.BtnUpdateFeatureNames.Size = new System.Drawing.Size(23, 22);
322 | this.BtnUpdateFeatureNames.Text = "Update Feature Names";
323 | this.BtnUpdateFeatureNames.Click += new System.EventHandler(this.BtnUpdateFeatureNames_Click);
324 | //
325 | // SplMain
326 | //
327 | this.SplMain.Dock = System.Windows.Forms.DockStyle.Fill;
328 | this.SplMain.FixedPanel = System.Windows.Forms.FixedPanel.Panel2;
329 | this.SplMain.IsSplitterFixed = true;
330 | this.SplMain.Location = new System.Drawing.Point(0, 25);
331 | this.SplMain.Name = "SplMain";
332 | //
333 | // SplMain.Panel1
334 | //
335 | this.SplMain.Panel1.Controls.Add(this.TxtEditor);
336 | //
337 | // SplMain.Panel2
338 | //
339 | this.SplMain.Panel2.Controls.Add(this.BtnClearFilter);
340 | this.SplMain.Panel2.Controls.Add(this.LstFeatures);
341 | this.SplMain.Panel2.Controls.Add(this.TxtFeatureFilter);
342 | this.SplMain.Size = new System.Drawing.Size(1008, 531);
343 | this.SplMain.SplitterDistance = 730;
344 | this.SplMain.TabIndex = 4;
345 | //
346 | // TxtEditor
347 | //
348 | this.TxtEditor.AllowDrop = true;
349 | this.TxtEditor.BorderStyle = System.Windows.Forms.BorderStyle.None;
350 | this.TxtEditor.CaretLineBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(235)))), ((int)(((byte)(235)))));
351 | this.TxtEditor.CaretLineVisible = true;
352 | this.TxtEditor.Dock = System.Windows.Forms.DockStyle.Fill;
353 | this.TxtEditor.HighlightGuide = 0;
354 | this.TxtEditor.IndentationGuides = ScintillaNET.IndentView.Real;
355 | this.TxtEditor.Location = new System.Drawing.Point(0, 0);
356 | this.TxtEditor.Name = "TxtEditor";
357 | this.TxtEditor.RectangularSelectionAnchor = 0;
358 | this.TxtEditor.RectangularSelectionAnchorVirtualSpace = 0;
359 | this.TxtEditor.RectangularSelectionCaret = 0;
360 | this.TxtEditor.RectangularSelectionCaretVirtualSpace = 0;
361 | this.TxtEditor.ScrollWidth = 100;
362 | this.TxtEditor.Size = new System.Drawing.Size(730, 531);
363 | this.TxtEditor.TabIndex = 1;
364 | //
365 | // BtnClearFilter
366 | //
367 | this.BtnClearFilter.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
368 | this.BtnClearFilter.Font = new System.Drawing.Font("Microsoft Sans Serif", 5.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
369 | this.BtnClearFilter.Location = new System.Drawing.Point(255, 513);
370 | this.BtnClearFilter.Name = "BtnClearFilter";
371 | this.BtnClearFilter.Size = new System.Drawing.Size(18, 18);
372 | this.BtnClearFilter.TabIndex = 4;
373 | this.BtnClearFilter.Text = "X";
374 | this.BtnClearFilter.UseVisualStyleBackColor = true;
375 | this.BtnClearFilter.Click += new System.EventHandler(this.BtnClearFilter_Click);
376 | //
377 | // LstFeatures
378 | //
379 | this.LstFeatures.BorderStyle = System.Windows.Forms.BorderStyle.None;
380 | this.LstFeatures.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
381 | this.columnHeader1});
382 | this.LstFeatures.Dock = System.Windows.Forms.DockStyle.Fill;
383 | this.LstFeatures.FullRowSelect = true;
384 | this.LstFeatures.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None;
385 | this.LstFeatures.HideSelection = false;
386 | this.LstFeatures.Location = new System.Drawing.Point(0, 0);
387 | this.LstFeatures.Name = "LstFeatures";
388 | this.LstFeatures.Size = new System.Drawing.Size(274, 511);
389 | this.LstFeatures.TabIndex = 2;
390 | this.LstFeatures.UseCompatibleStateImageBehavior = false;
391 | this.LstFeatures.View = System.Windows.Forms.View.Details;
392 | this.LstFeatures.DoubleClick += new System.EventHandler(this.LstFeatures_DoubleClick);
393 | //
394 | // columnHeader1
395 | //
396 | this.columnHeader1.Text = "Name";
397 | this.columnHeader1.Width = 100;
398 | //
399 | // TxtFeatureFilter
400 | //
401 | this.TxtFeatureFilter.Dock = System.Windows.Forms.DockStyle.Bottom;
402 | this.TxtFeatureFilter.ForeColor = System.Drawing.Color.Silver;
403 | this.TxtFeatureFilter.Location = new System.Drawing.Point(0, 511);
404 | this.TxtFeatureFilter.Name = "TxtFeatureFilter";
405 | this.TxtFeatureFilter.Size = new System.Drawing.Size(274, 20);
406 | this.TxtFeatureFilter.TabIndex = 3;
407 | this.TxtFeatureFilter.Text = "Filter";
408 | this.TxtFeatureFilter.Enter += new System.EventHandler(this.TxtFeatureFilter_Enter);
409 | this.TxtFeatureFilter.KeyUp += new System.Windows.Forms.KeyEventHandler(this.TxtFeatureFilter_KeyUp);
410 | this.TxtFeatureFilter.Leave += new System.EventHandler(this.TxtFeatureFilter_Leave);
411 | //
412 | // MnuEnableSelected
413 | //
414 | this.MnuEnableSelected.Index = 6;
415 | this.MnuEnableSelected.Shortcut = System.Windows.Forms.Shortcut.CtrlE;
416 | this.MnuEnableSelected.Text = "Enable Current Line\'s Feature";
417 | this.MnuEnableSelected.Click += new System.EventHandler(this.MnuEnableSelected_Click);
418 | //
419 | // menuItem6
420 | //
421 | this.menuItem6.Index = 5;
422 | this.menuItem6.Text = "-";
423 | //
424 | // FrmMain
425 | //
426 | this.AllowDrop = true;
427 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
428 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
429 | this.ClientSize = new System.Drawing.Size(1008, 580);
430 | this.Controls.Add(this.SplMain);
431 | this.Controls.Add(this.ToolStrip);
432 | this.Controls.Add(this.StatusStrip);
433 | this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
434 | this.Menu = this.MainMenu;
435 | this.MinimumSize = new System.Drawing.Size(520, 240);
436 | this.Name = "FrmMain";
437 | this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
438 | this.Text = "Fetitor";
439 | this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FrmMain_FormClosing);
440 | this.Load += new System.EventHandler(this.FrmMain_Load);
441 | this.DragDrop += new System.Windows.Forms.DragEventHandler(this.FrmMain_DragDrop);
442 | this.DragEnter += new System.Windows.Forms.DragEventHandler(this.FrmMain_DragEnter);
443 | this.StatusStrip.ResumeLayout(false);
444 | this.StatusStrip.PerformLayout();
445 | this.ToolStrip.ResumeLayout(false);
446 | this.ToolStrip.PerformLayout();
447 | this.SplMain.Panel1.ResumeLayout(false);
448 | this.SplMain.Panel2.ResumeLayout(false);
449 | this.SplMain.Panel2.PerformLayout();
450 | ((System.ComponentModel.ISupportInitialize)(this.SplMain)).EndInit();
451 | this.SplMain.ResumeLayout(false);
452 | this.ResumeLayout(false);
453 | this.PerformLayout();
454 |
455 | }
456 |
457 | #endregion
458 |
459 | private System.Windows.Forms.ToolStrip ToolStrip;
460 | private System.Windows.Forms.ToolStripButton BtnOpen;
461 | private System.Windows.Forms.MainMenu MainMenu;
462 | private System.Windows.Forms.MenuItem menuItem1;
463 | private System.Windows.Forms.ToolStripButton BtnSave;
464 | private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
465 | private System.Windows.Forms.ToolStripButton BtnUndo;
466 | private System.Windows.Forms.ToolStripButton BtnRedo;
467 | private System.Windows.Forms.MenuItem MnuOpen;
468 | private System.Windows.Forms.MenuItem MnuSave;
469 | private System.Windows.Forms.MenuItem menuItem5;
470 | private System.Windows.Forms.MenuItem MnuExit;
471 | private System.Windows.Forms.MenuItem menuItem2;
472 | private System.Windows.Forms.MenuItem MnuAbout;
473 | private System.Windows.Forms.OpenFileDialog OpenFileDialog;
474 | private System.Windows.Forms.SaveFileDialog SaveFileDialog;
475 | private System.Windows.Forms.StatusStrip StatusStrip;
476 | private System.Windows.Forms.ToolStripStatusLabel LblKnownFeatureCount;
477 | private System.Windows.Forms.SplitContainer SplMain;
478 | private MyScintilla TxtEditor;
479 | private System.Windows.Forms.MenuItem MnuSaveAsXml;
480 | private System.Windows.Forms.ListView LstFeatures;
481 | private System.Windows.Forms.ColumnHeader columnHeader1;
482 | private System.Windows.Forms.TextBox TxtFeatureFilter;
483 | private System.Windows.Forms.ToolStripStatusLabel LblCurCol;
484 | private System.Windows.Forms.ToolStripStatusLabel LblCurLine;
485 | private System.Windows.Forms.Button BtnClearFilter;
486 | private System.Windows.Forms.ToolStripSeparator toolStripSeparator2;
487 | private System.Windows.Forms.ToolStripButton BtnSearch;
488 | private System.Windows.Forms.ToolStripButton BtnUpdateFeatureNames;
489 | private System.Windows.Forms.MenuItem menuItem3;
490 | private System.Windows.Forms.MenuItem MnuUndo;
491 | private System.Windows.Forms.MenuItem MnuRedo;
492 | private System.Windows.Forms.MenuItem menuItem9;
493 | private System.Windows.Forms.MenuItem MnuSearch;
494 | private System.Windows.Forms.MenuItem MnuUpdateFeatures;
495 | private System.Windows.Forms.MenuItem menuItem6;
496 | private System.Windows.Forms.MenuItem MnuEnableSelected;
497 | }
498 | }
499 |
500 |
--------------------------------------------------------------------------------
/Fetitor/FrmMain.cs:
--------------------------------------------------------------------------------
1 | // This program is free software: you can redistribute it and/or modify
2 | // it under the terms of the GNU General Public License as published by
3 | // the Free Software Foundation, either version 3 of the License, or
4 | // (at your option) any later version.
5 | //
6 | // This program is distributed in the hope that it will be useful,
7 | // but WITHOUT ANY WARRANTY; without even the implied warranty of
8 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9 | // GNU General Public License for more details.
10 | //
11 | // You should have received a copy of the GNU General Public License
12 | // along with this program. If not, see .
13 |
14 | using Fetitor.Properties;
15 | using ScintillaNET;
16 | using System;
17 | using System.Collections.Generic;
18 | using System.Drawing;
19 | using System.IO;
20 | using System.Linq;
21 | using System.Text.RegularExpressions;
22 | using System.Windows.Forms;
23 | using System.Xml;
24 |
25 | namespace Fetitor
26 | {
27 | public partial class FrmMain : Form
28 | {
29 | private readonly string _windowTitle;
30 | private string _openedFilePath;
31 | private bool _fileChanged;
32 | private List _features = new List();
33 | private FrmSearch _searchForm;
34 |
35 | ///
36 | /// Creates new instance.
37 | ///
38 | public FrmMain()
39 | {
40 | this.InitializeComponent();
41 | this.SetUpEditor();
42 | this.UpdateFeatureNames();
43 |
44 | _windowTitle = this.Text;
45 | this.LblKnownFeatureCount.Text = "";
46 | this.ToolStrip.Renderer = new ToolStripRendererNL();
47 |
48 | this.UpdateSaveButtons();
49 | }
50 |
51 | ///
52 | /// Updates feature names list.
53 | ///
54 | private void UpdateFeatureNames()
55 | {
56 | var featuresPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "features.txt");
57 | if (File.Exists(featuresPath))
58 | FeaturesFile.LoadFeatureNames(featuresPath);
59 | }
60 |
61 | ///
62 | /// Called when the form loads.
63 | ///
64 | ///
65 | ///
66 | private void FrmMain_Load(object sender, EventArgs e)
67 | {
68 | var args = Environment.GetCommandLineArgs();
69 | if (args.Length > 1)
70 | {
71 | var filePath = args[1];
72 | this.OpenFile(filePath);
73 | }
74 |
75 | if (Settings.Default.WindowMaximized)
76 | {
77 | this.WindowState = FormWindowState.Maximized;
78 | }
79 | else if (Settings.Default.WindowLocation.X != -1 || Settings.Default.WindowLocation.Y != -1)
80 | {
81 | this.WindowState = FormWindowState.Normal;
82 | this.Location = Settings.Default.WindowLocation;
83 | this.Size = Settings.Default.WindowSize;
84 | }
85 | }
86 |
87 | ///
88 | /// Saves settings when the form is closing.
89 | ///
90 | ///
91 | ///
92 | private void FrmMain_FormClosing(object sender, FormClosingEventArgs e)
93 | {
94 | Settings.Default.WindowMaximized = (this.WindowState == FormWindowState.Maximized);
95 | if (this.WindowState == FormWindowState.Normal)
96 | {
97 | Settings.Default.WindowLocation = this.Location;
98 | Settings.Default.WindowSize = this.Size;
99 | }
100 |
101 | Settings.Default.Save();
102 | }
103 |
104 | ///
105 | /// Sets up the editor for XML code and subscribes to its events.
106 | ///
107 | public void SetUpEditor()
108 | {
109 | this.TxtEditor.Styles[Style.Default].Font = "Courier New";
110 | this.TxtEditor.Styles[Style.Default].Size = 10;
111 | this.TxtEditor.Styles[Style.Xml.XmlStart].ForeColor = Color.Blue;
112 | this.TxtEditor.Styles[Style.Xml.XmlEnd].ForeColor = Color.Blue;
113 | this.TxtEditor.Styles[Style.Xml.TagEnd].ForeColor = Color.Blue;
114 | this.TxtEditor.Styles[Style.Xml.Tag].ForeColor = Color.Blue;
115 | this.TxtEditor.Styles[Style.Xml.TagEnd].ForeColor = Color.Blue;
116 | this.TxtEditor.Styles[Style.Xml.Attribute].ForeColor = Color.Red;
117 | this.TxtEditor.Styles[Style.Xml.DoubleString].ForeColor = Color.Blue;
118 | this.TxtEditor.Styles[Style.Xml.SingleString].ForeColor = Color.Blue;
119 | this.TxtEditor.Styles[Style.IndentGuide].ForeColor = Color.LightGray;
120 | this.TxtEditor.Margins[0].Width = 40;
121 | this.TxtEditor.Lexer = Lexer.Xml;
122 | this.TxtEditor.TextChanged += this.TxtEditor_OnTextChanged;
123 | this.TxtEditor.CtrlS += this.TxtEditor_OnCtrlS;
124 | this.TxtEditor.CtrlF += this.TxtEditor_OnCtrlF;
125 | this.TxtEditor.UpdateUI += this.TxtEditor_OnUpdateUI;
126 | }
127 |
128 | ///
129 | /// Called if Ctrl+F is pressed in the editor.
130 | ///
131 | ///
132 | ///
133 | private void TxtEditor_OnCtrlF(object sender, EventArgs e)
134 | {
135 | this.BtnSearch_Click(null, null);
136 | }
137 |
138 | ///
139 | /// Called if the editor's text or styling have changed.
140 | ///
141 | ///
142 | ///
143 | private void TxtEditor_OnUpdateUI(object sender, UpdateUIEventArgs e)
144 | {
145 | if ((e.Change & UpdateChange.Selection) != 0 || (e.Change & UpdateChange.Content) != 0)
146 | {
147 | var pos = this.TxtEditor.CurrentPosition;
148 | var line = this.TxtEditor.LineFromPosition(pos);
149 | var col = (pos - this.TxtEditor.Lines[line].Position);
150 |
151 | this.LblCurLine.Text = "Line " + (line + 1);
152 | this.LblCurCol.Text = "Col " + (col + 1);
153 | }
154 | }
155 |
156 | ///
157 | /// Called when text in the editor changes.
158 | ///
159 | ///
160 | ///
161 | private void TxtEditor_OnTextChanged(object sender, EventArgs e)
162 | {
163 | _fileChanged = true;
164 |
165 | this.UpdateUndo();
166 | this.UpdateSaveButtons();
167 | }
168 |
169 | ///
170 | /// Called when Ctrl+S is pressed in the editor.
171 | ///
172 | ///
173 | ///
174 | private void TxtEditor_OnCtrlS(object sender, EventArgs e)
175 | {
176 | if (this.BtnSave.Enabled)
177 | this.BtnSave.PerformClick();
178 | }
179 |
180 | ///
181 | /// Updated Undo and Redo buttons, based on the editor's state.
182 | ///
183 | private void UpdateUndo()
184 | {
185 | this.BtnUndo.Enabled = this.TxtEditor.CanUndo;
186 | this.BtnRedo.Enabled = this.TxtEditor.CanRedo;
187 | }
188 |
189 | ///
190 | /// Resets Undo and Redo in the editor and updates the buttons.
191 | ///
192 | private void ResetUndo()
193 | {
194 | this.TxtEditor.EmptyUndoBuffer();
195 | this.UpdateUndo();
196 | }
197 |
198 | ///
199 | /// Toggles save buttons, based on whether saving is possible right
200 | /// now.
201 | ///
202 | private void UpdateSaveButtons()
203 | {
204 | var enabled = (_fileChanged && !string.IsNullOrWhiteSpace(_openedFilePath));
205 | this.MnuSave.Enabled = this.BtnSave.Enabled = enabled;
206 |
207 | var fileOpen = (_openedFilePath != null);
208 | this.MnuSaveAsXml.Enabled = fileOpen;
209 | }
210 |
211 | ///
212 | /// Updates feature name jump list.
213 | ///
214 | private void UpdateFeatureList()
215 | {
216 | var text = this.TxtEditor.Text;
217 |
218 | var index = text.IndexOf("");
219 | if (index == -1)
220 | return;
221 |
222 | var list = new List();
223 |
224 | while ((index = text.IndexOf("Name=", index)) != -1)
225 | {
226 | var nameStartIndex = index + "Name=\"".Length;
227 | var nameEndIndex = text.IndexOf("\"", nameStartIndex);
228 | var length = nameEndIndex - nameStartIndex;
229 |
230 | index = nameEndIndex;
231 |
232 | var name = text.Substring(nameStartIndex, length);
233 | if (name == "?")
234 | continue;
235 |
236 | var lvi = new ListViewItem(name);
237 | lvi.Tag = new Tuple(nameStartIndex, nameEndIndex);
238 |
239 | list.Add(lvi);
240 | }
241 |
242 | _features = list;
243 |
244 | this.PopulateFeatureList(_features);
245 | }
246 |
247 | ///
248 | /// Called when feature list is double clicked.
249 | ///
250 | ///
251 | ///
252 | private void LstFeatures_DoubleClick(object sender, EventArgs e)
253 | {
254 | if (this.LstFeatures.SelectedItems.Count == 0)
255 | return;
256 |
257 | var selectedItem = this.LstFeatures.SelectedItems[0];
258 | if (selectedItem == null || selectedItem.Tag == null)
259 | return;
260 |
261 | if (!(selectedItem.Tag is Tuple indices))
262 | return;
263 |
264 | this.TxtEditor.SetSelection(indices.Item1, indices.Item2);
265 | this.TxtEditor.ScrollRange(indices.Item1, indices.Item2);
266 | this.TxtEditor.Focus();
267 | }
268 |
269 | ///
270 | /// Called when one of the Open buttons is clicked.
271 | ///
272 | ///
273 | ///
274 | private void BtnOpen_Click(object sender, EventArgs e)
275 | {
276 | var result = this.OpenFileDialog.ShowDialog();
277 | if (result != DialogResult.OK)
278 | return;
279 |
280 | this.OpenFile(OpenFileDialog.FileName);
281 | }
282 |
283 | ///
284 | /// Called if the Undo button is clicked.
285 | ///
286 | ///
287 | ///
288 | private void BtnUndo_Click(object sender, EventArgs e)
289 | {
290 | this.TxtEditor.Undo();
291 |
292 | this.UpdateUndo();
293 | this.UpdateSaveButtons();
294 | }
295 |
296 | ///
297 | /// Called if the Redo button is clicked.
298 | ///
299 | ///
300 | ///
301 | private void BtnRedo_Click(object sender, EventArgs e)
302 | {
303 | this.TxtEditor.Redo();
304 |
305 | this.UpdateUndo();
306 | this.UpdateSaveButtons();
307 | }
308 |
309 | ///
310 | /// Called if the Exit menu item is clicked.
311 | ///
312 | ///
313 | ///
314 | private void MenuExit_Click(object sender, EventArgs e)
315 | {
316 | this.Close();
317 | }
318 |
319 | ///
320 | /// Called if a file is dragged onto the form.
321 | ///
322 | ///
323 | ///
324 | private void FrmMain_DragEnter(object sender, DragEventArgs e)
325 | {
326 | if (e.Data.GetDataPresent(DataFormats.FileDrop))
327 | e.Effect = DragDropEffects.Copy;
328 | }
329 |
330 | ///
331 | /// Called if a file is dropped on the form.
332 | ///
333 | ///
334 | ///
335 | private void FrmMain_DragDrop(object sender, DragEventArgs e)
336 | {
337 | var files = (string[])e.Data.GetData(DataFormats.FileDrop);
338 | if (files.Length == 0)
339 | return;
340 |
341 | this.OpenFile(files[0]);
342 | }
343 |
344 | ///
345 | /// Tries to open compiled XML file at the given path in the editor.
346 | ///
347 | ///
348 | private void OpenFile(string filePath)
349 | {
350 | // Check file's existence
351 | if (!File.Exists(filePath))
352 | {
353 | MessageBox.Show("File not found: " + filePath, _windowTitle, MessageBoxButtons.OK, MessageBoxIcon.Error);
354 | return;
355 | }
356 |
357 | // Check file extension
358 | if (!Path.GetFileName(filePath).EndsWith(".xml.compiled"))
359 | {
360 | MessageBox.Show("Unknown file type, expected: *.xml.compiled", _windowTitle, MessageBoxButtons.OK, MessageBoxIcon.Error);
361 | return;
362 | }
363 |
364 | // Read file
365 | try
366 | {
367 | string xml;
368 | using (var fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read))
369 | xml = FeaturesFile.CompiledToXml(fs);
370 |
371 | this.TxtEditor.Text = xml;
372 | this.Text = _windowTitle + " - " + filePath;
373 |
374 | _openedFilePath = filePath;
375 |
376 | var known = Regex.Matches(xml, @"Name=""[^\?\""]+""").Count;
377 | var total = Regex.Matches(xml, @"Name=""").Count;
378 | this.LblKnownFeatureCount.Text = string.Format("Known features: {0}/{1}", known, total);
379 |
380 | _fileChanged = false;
381 | this.ResetUndo();
382 | this.UpdateSaveButtons();
383 | this.UpdateFeatureList();
384 | }
385 | catch (InvalidDataException)
386 | {
387 | MessageBox.Show("Invalid file format.", _windowTitle, MessageBoxButtons.OK, MessageBoxIcon.Error);
388 | }
389 | catch (EndOfStreamException)
390 | {
391 | MessageBox.Show("Corrupted file.", _windowTitle, MessageBoxButtons.OK, MessageBoxIcon.Error);
392 | }
393 | catch (NotSupportedException)
394 | {
395 | MessageBox.Show("Unsupported file.", _windowTitle, MessageBoxButtons.OK, MessageBoxIcon.Error);
396 | }
397 | catch (Exception ex)
398 | {
399 | MessageBox.Show("Error: " + ex.Message, _windowTitle, MessageBoxButtons.OK, MessageBoxIcon.Error);
400 | }
401 | }
402 |
403 | ///
404 | /// Called if one of the Save buttons is clicked.
405 | ///
406 | ///
407 | ///
408 | private void BtnSave_Click(object sender, EventArgs e)
409 | {
410 | if (string.IsNullOrWhiteSpace(_openedFilePath))
411 | return;
412 |
413 | try
414 | {
415 | this.SaveFile(_openedFilePath);
416 |
417 | _fileChanged = false;
418 | this.UpdateSaveButtons();
419 | }
420 | catch (XmlException ex)
421 | {
422 | MessageBox.Show("XML Error: " + ex.Message, _windowTitle, MessageBoxButtons.OK, MessageBoxIcon.Error);
423 | }
424 | catch (Exception ex)
425 | {
426 | MessageBox.Show("Error: " + ex.ToString(), _windowTitle, MessageBoxButtons.OK, MessageBoxIcon.Error);
427 | }
428 | }
429 |
430 | ///
431 | /// Saves file to given path.
432 | ///
433 | ///
434 | private void SaveFile(string filePath)
435 | {
436 | using (var fs = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None))
437 | FeaturesFile.SaveXmlAsCompiled(TxtEditor.Text, fs);
438 | }
439 |
440 | ///
441 | /// Called if the Save as XML menu item is clicked.
442 | ///
443 | ///
444 | ///
445 | private void MenuSaveAsXml_Click(object sender, EventArgs e)
446 | {
447 | this.SaveFileDialog.InitialDirectory = Path.GetDirectoryName(_openedFilePath);
448 | this.SaveFileDialog.FileName = "features.xml";
449 |
450 | if (this.SaveFileDialog.ShowDialog() != DialogResult.OK)
451 | return;
452 |
453 | try
454 | {
455 | using (var fs = this.SaveFileDialog.OpenFile())
456 | using (var sw = new StreamWriter(fs))
457 | sw.Write(this.TxtEditor.Text);
458 | }
459 | catch (Exception ex)
460 | {
461 | MessageBox.Show("Error: " + ex.ToString(), _windowTitle, MessageBoxButtons.OK, MessageBoxIcon.Error);
462 | }
463 | }
464 |
465 | ///
466 | /// Called if the About menu item is clicked.
467 | ///
468 | ///
469 | ///
470 | private void MenuAbout_Click(object sender, EventArgs e)
471 | {
472 | var form = new FrmAbout();
473 | form.ShowDialog();
474 | }
475 |
476 | ///
477 | /// Called if TxtFeatureFilter gets the focus.
478 | ///
479 | ///
480 | ///
481 | private void TxtFeatureFilter_Enter(object sender, EventArgs e)
482 | {
483 | if (this.TxtFeatureFilter.ForeColor == Color.Silver)
484 | {
485 | this.TxtFeatureFilter.ForeColor = Color.Black;
486 | this.TxtFeatureFilter.Text = "";
487 | }
488 | }
489 |
490 | ///
491 | /// Called if TxtFeatureFilter loses the focus.
492 | ///
493 | ///
494 | ///
495 | private void TxtFeatureFilter_Leave(object sender, EventArgs e)
496 | {
497 | if (string.IsNullOrWhiteSpace(this.TxtFeatureFilter.Text.Trim()))
498 | {
499 | this.TxtFeatureFilter.ForeColor = Color.Silver;
500 | this.TxtFeatureFilter.Text = "Filter";
501 | this.FilterFeatures("");
502 | }
503 | }
504 |
505 | ///
506 | /// Filters the feature list, only showing those that contain
507 | /// the given string.
508 | ///
509 | ///
510 | private void FilterFeatures(string filter)
511 | {
512 | this.PopulateFeatureList(_features.Where(a => a.Text.ToUpper().Contains(filter.ToUpper())));
513 | }
514 |
515 | ///
516 | /// Fills feature list with the given items.
517 | ///
518 | ///
519 | private void PopulateFeatureList(IEnumerable items)
520 | {
521 | this.LstFeatures.BeginUpdate();
522 | this.LstFeatures.Items.Clear();
523 |
524 | // Add names alphabetically
525 | foreach (var item in items.OrderBy(a => a.Text))
526 | this.LstFeatures.Items.Add(item);
527 |
528 | // Autosize column header
529 | this.LstFeatures.Columns[0].AutoResize(ColumnHeaderAutoResizeStyle.HeaderSize);
530 | this.LstFeatures.Columns[0].Width -= 5;
531 |
532 | this.LstFeatures.EndUpdate();
533 | }
534 |
535 | ///
536 | /// Called if a key is let go of in TxtFeatureFilter.
537 | ///
538 | ///
539 | ///
540 | private void TxtFeatureFilter_KeyUp(object sender, KeyEventArgs e)
541 | {
542 | var filter = this.TxtFeatureFilter.Text;
543 | this.FilterFeatures(filter);
544 | }
545 |
546 | ///
547 | /// Called when Clear Filter button is clicked.
548 | ///
549 | ///
550 | ///
551 | private void BtnClearFilter_Click(object sender, EventArgs e)
552 | {
553 | if (!string.IsNullOrWhiteSpace(this.TxtFeatureFilter.Text.Trim()))
554 | {
555 | this.TxtFeatureFilter.Text = "";
556 | this.TxtFeatureFilter_Leave(null, null);
557 | }
558 | }
559 |
560 | ///
561 | /// Jumps to the next occurance of given text in editor.
562 | ///
563 | /// Text to search for, starting at current position.
564 | /// True if text was found, False if not.
565 | public bool SearchFor(string searchText)
566 | {
567 | var text = this.TxtEditor.Text;
568 | var currentPos = this.TxtEditor.CurrentPosition;
569 | var selectLength = searchText.Length;
570 |
571 | if (string.IsNullOrEmpty(text))
572 | return false;
573 |
574 | currentPos++;
575 | if (currentPos > text.Length - 1)
576 | currentPos = 0;
577 |
578 | var nextIndex = text.IndexOf(searchText, currentPos, StringComparison.CurrentCultureIgnoreCase);
579 | if (nextIndex == -1)
580 | {
581 | nextIndex = text.IndexOf(searchText, 0, StringComparison.CurrentCultureIgnoreCase);
582 | if (nextIndex == -1)
583 | return false;
584 | }
585 |
586 | this.TxtEditor.SetSelection(nextIndex + selectLength, nextIndex);
587 | this.TxtEditor.ScrollRange(nextIndex + selectLength, nextIndex);
588 | //this.TxtEditor.Focus();
589 |
590 | return true;
591 | }
592 |
593 | ///
594 | /// Called if Search button is clicked, opens Search form.
595 | ///
596 | ///
597 | ///
598 | private void BtnSearch_Click(object sender, EventArgs e)
599 | {
600 | if (_searchForm == null)
601 | {
602 | _searchForm = new FrmSearch(this);
603 |
604 | var x = this.Location.X + this.Width / 2 - _searchForm.Width / 2;
605 | var y = this.Location.Y + this.Height / 2 - _searchForm.Height / 2;
606 | _searchForm.Location = new Point(x, y);
607 | }
608 |
609 | if (!_searchForm.Visible)
610 | _searchForm.Show(this);
611 | else
612 | _searchForm.Focus();
613 |
614 | _searchForm.SelectSearchText();
615 | }
616 |
617 | ///
618 | /// Opens form to updates feature names.
619 | ///
620 | ///
621 | ///
622 | private void BtnUpdateFeatureNames_Click(object sender, EventArgs e)
623 | {
624 | var form = new FrmUpdateFeatureNames();
625 | form.ShowDialog();
626 |
627 | this.UpdateFeatureNames();
628 | }
629 |
630 | ///
631 | /// Enables the feature in the line the cursor is in.
632 | ///
633 | ///
634 | ///
635 | private void MnuEnableSelected_Click(object sender, EventArgs e)
636 | {
637 | var pos = this.TxtEditor.CurrentPosition;
638 | var lineIndex = this.TxtEditor.LineFromPosition(pos);
639 | var line = this.TxtEditor.Lines[lineIndex];
640 | var start = line.Position;
641 | var end = line.EndPosition;
642 | var text = line.Text;
643 |
644 | text = Regex.Replace(text, @"
2 |
3 |
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 |
109 | text/microsoft-resx
110 |
111 |
112 | 2.0
113 |
114 |
115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
119 |
120 |
121 | 237, 17
122 |
123 |
124 | 347, 17
125 |
126 |
127 | 482, 17
128 |
129 |
130 | 613, 17
131 |
132 |
133 | 132, 17
134 |
135 |
136 |
137 |
138 | iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
139 | YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAKgSURBVDhPhZLbSxRhGMb3Nuh/6LqLiAitOyO66CKJCi2I
140 | uikIwgsFKTJICzOlUNfZJFbMIAqyQCivUhK3rdb1sK6nddd1Xfe8a7U6s3PYOXxP78zOjdnhhYdvmHmf
141 | 33v4xvG3GPxcQP9EBn1jKUsNL4LitYF56YprOnLyjvfe8aY3++zUP0f/pzQYgLxgoEDK8TqSRRVZXkXn
142 | WAF17XMfam4O77fT9wZHVX+IDF9iOr7FNXiiZYwuihDKDN6ECm7yO07f9XB2+t4w296WGGYTOmaTOnwb
143 | KsbDMtbzIrYEFYKi4UJrK7PT94YJ2JEZFtI6gikdMwkN3vUyxkISRoICUjTOJROwMnp0fvP9GTXxm5wE
144 | 4GVgOcssBdMG/HEV3ljZ6iTLG7hoAnwvqxXGDFoXrYyZqjw7P9IIFgBYyRpYyhiYp06mk+Y+VOQEhnoT
145 | sDRStc10GUqqG2LMCTE+BGnzHc63+2kEIJwH1gqVM0SwhTQwnYD1rc4ERF4f4Q11h8wulKIc8uPXEXFV
146 | /VdFSbMBb6tUTcohO96IxHAd4q9qsTXlRJE2bdA4Ok1UEYOmM3rHLECOL6L+/hyog2OqNb+hkCTKFMF0
147 | AaWUG3LGDSkzADE9SHqOUnoIihCxAD9LBmraJsqOiKu6zHQJStpF4mw5kV/jkAxxiC5wCM31IuB7gq+T
148 | HVhZnbIAp5o9uXO3/DsOn7taMVQeSsYE9JF6oSQfQ050QN5shRS7DSnagFL4KoTls9D4GQtg/y4OR6Dn
149 | sMzUYqVyqofMXWR8AHmjhcxNENduoLR6GcJSLfjgCQL4dwPC3Qc0dTtKV/cMUvwppI0+uhG60mgXSpGH
150 | VLkNQqiFqjeDX2yEUvDsBix3HAwGOg/JgUck8/yX7BzTU3E7HL8AbxvC5jLUgfYAAAAASUVORK5CYII=
151 |
152 |
153 |
154 |
155 | iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
156 | YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAKrSURBVDhPjZLZTxNRGMX7D/lAl8El/hc+GsNW6AIEEJFN
157 | q4kPagSJRiOLVAthFUV2O4CmilCoWDCYAi1dEEqBrkCndDt+c6s8EcIkJzczc8/vnJn7STgNX67Q8E1y
158 | LW8hBTjtUJzT6tKclge9Y7pUPIkrpVO4XMIju2g8eLWUX5Bpxq5JxItT861LriiWXAJiiTQEUvQ4hdBR
159 | EruhOPyRBLsX4inshRPQ6XRpvdWZuPHItM+pR/IlnNZoW3JGca/Ph2iczLSx4MkcAgcJ7JIhEk0ycJhW
160 | z/4x1r0xGK0BTFn3wZXxMQJMhqwEuNuzwzaJEgG+cByBwwRLFhvsUBvHTgzr2wJqO9z4uhKEQq1LE2Ao
161 | bnEcEcDLNokqbDDDR+tBLIUYtQoeJuH0iekCVrcEVBtc6DV5oVCNgQC6tNl+iDvdXripoqhN/zGlJ1n6
162 | gZDClj9+YrZtRXH7zQY6p/9AXjQiAnjMrhKga5tVV1J6UaMZxc8WUEJSN81DSc/Fd/9V2bYGvdENeeEw
163 | AeiYZmwR1HVu0reRaK3r9KCuQ5QbNQY3JTpRpd9AZbsDFW3rqHxtR8uoA3LlxwzAtBLJmEkZI4kgorn6
164 | rYtVvtVOADLebF0jreLF4BpkBR8ygOnlEJk9/+Q+SWdmSq7SO5i5gozlzTaUNf9GY/8KZPkDIsAI3hpE
165 | rcHDzvs8Knn5C4+7lyHN64fkIv3EicUgqyvQkT38knemxJnQPP+JBx2LkOb2EaCYx5glQA0yAJP985kS
166 | AaqmH7jfbiFADyTZNAfD834CuM7dQNkwj/pWM7JyaBKlKuPGwPc9DMzsnvq9p6m+ZQ41r2aRdd3glyjU
167 | n54q1BOj8tyJgEI1TuM5yiZMXjgEmXKQjuo9pPnv6If1UeVeSu1hyRdyusJZuV3f/gKQ3A7m6Tg5CAAA
168 | AABJRU5ErkJggg==
169 |
170 |
171 |
172 |
173 | iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
174 | YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAI2SURBVDhPzZLbT9JxGMbd+ju6Ihsj11aUBRWHMSxPUJYo
175 | GGmEgKL4M8ETIIIghDjAwxzLExLGRA1mhanhRDRntZrrYHbnJf9De0L3W4y8iMs+d8/ePd/3fZ/3m/f/
176 | 8DipAJGQQ7Mug3qtDqplKepf1YAdZf+qmRekJKGKWHVASFRNCk+TlmyIDTkiP2fx4mAWCz8CCO/PIPR9
177 | CsGv45j4PALXVh+0L5sg9PEjZcM8BmnL0ByXYfEgiPm0cW7fj+ffJo/NM198mNobw+hHF3yfvNAvt4Hv
178 | ZkWKXDeyJ2lcqYXy9X3Il8SoWxRBOncX4tnbEPnLQURV8Ow4MPphEEPvByAPSsG2XiVI678RjPHdJV7u
179 | oWPTDFvSCN2SBkwjPUaWc4PvYrnVYTn6kyaY410o7L6QIksZKucqT1UFBHpSZsGxM93K0ENYEnoY1tpx
180 | sY128gFRQDBV8bR0j5R/4NiYboap8FC/qkPHWwIN4UcoaKFmryDylw23RJVQL8hROsLDTTcHPOd1cGwM
181 | SCbuoXtFC9NGF4zrHRB6S3BOfTYTomi63KmJKDC064Rn9wkGd/rh3O6DfasX1s0emNNja1ebYYi3Qzot
182 | Bk2dH6E0UDJnvDNebG2cl6WNNgy8s8GxbTkOy5IwoDfdtfNNK+pDtRB4i0FT5UeoCsrJj3TLy/XInknw
183 | wF8NVt8VMHsuHSUNuu48aK20VEETNUZVnSGyOv8N184Yv2a6fCLEnDk6I8NI7yRlDuTl/Qa0FCtA1YjQ
184 | KwAAAABJRU5ErkJggg==
185 |
186 |
187 |
188 |
189 | iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
190 | YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAI6SURBVDhPvZFvT1JhHIbZ+hy0ytLpdC4rkZmYMWUaYWaE
191 | wQhiahhpx3+AgGLiyURNEURRRP5YlnPrVDMkMYfL2oxBqNV7X/Id2t0hz3JN2vJN17t7z6779zzPj/Vf
192 | kS1e14sXxceYeHQkPuF2reeKm4mHaYoo2Zp3CkL9Vh5soKRJFSXB7aUbkC3UQBIQofVNEx68bITQwR9j
193 | lAM0qyquOqSgyE0jnLER+Ham8PSrG/5dF+a2JzH7xQFX3AZHdAR3nyvAHyzuZ1R68oqSnZLHo4/x4rsX
194 | 3h0nArszdIkLnoQTM3E7XLExTNCybcsKVUAGHsmxMjqLpV6RE/2bBix88/yaOh0fh3alGWKvEDXuSogm
195 | K1A1fhn1z+S4E5CCZ+HYGXWf+mVp0B61YjZhx3TMhjp/1R4tjzLHvykji7d5lsI5Jh6gouqS7oSDvu4E
196 | zGEtaj2Vh+QUF/s4RrE4zRplS6LkFP3G1CcZQm245hKkLfgr0vnq4MCGGWNbAxj+SKLKVrYneHLp30tu
197 | +q4SxGs17J+H6JJBkJEeKP23UEoWobj3AoqMBTivy8fZ9lzktWQjR5MJRt2n2lPBFjnLKe1yC4Y+kTBH
198 | 9Hj0wYy+DRN6I13oWdfBsNYB/VobOlcJZDVm/FmQQjDK55YP8yglvSbi1T2Ywp3oXtfD9F6LLlrWhVvR
199 | QcvtoWacVp04XJCixFLCLnlYSHC7zwUL23OSBaV5P/KJHOTez0J20xlkNpxCBi2fVBxPX3B0WKyf/Xkt
200 | WxTt6eMAAAAASUVORK5CYII=
201 |
202 |
203 |
204 |
205 | iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
206 | YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHySURBVDhPrZHPa9NgGMeLQq8evMgugpfh8C8QL578Cwqi
207 | hzIQ9aDHTfQSENlQlDIKhql1Yzoome12sDq3Zck2Z9u1nZ1z2Y+adE2qrbYrSpomGYSvb7rXg7SOCftA
208 | Du/7PJ/v8z7Ec2gAODKbs9gpydYmBcl5LXx2xtO/NG6pxjKkRtva48ozOUvMqDaU6i7Umg11x8bWdwv8
209 | 2k8MiSWRYfYJ4cnktGpBq+1CKplYVhtIFRrIag3IP2zEPlYx8EZmaXsr7yRTUyp2U04TcWnbQEIxsCgb
210 | e0GqgYcTOY22t+LuWyBPduVk3kCcyO+/1DGfq0PcqpNgC32c4ND2VqJC1slXbSSI/IFMXSDyHBFnN3Xw
211 | 6zpWv1nwj+4TEF4oa+v0+X+m8hs6ponsnpOKjjtPMiXa3srIfIl9m93BZtlq7t6UpT35U9FEaDqPQCBg
212 | 8ncvdFLlb9xf9HhyW4wmy8gUDKx+NbFCvoSs49lUHgPhONaifYjdPl+Z6Dn775AHrzbYe2FJc/e9PCw4
213 | vU9Txf7gcyU90oNyagzLL3sRvnGm8uJ6Z/uQdnCMzzt+61xkkb2C4lwI8cGrCPlPVmj5YHBMl3f05unI
214 | zCMf5Nh9sP4ToKWDw/m6vIPdHZHQtVMIXjrWT6//D87nORq8eLyDHg8Dj+c3bvhyU5pTU/AAAAAASUVO
215 | RK5CYII=
216 |
217 |
218 |
219 |
220 | iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
221 | YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAJtSURBVDhPldPrS1phHAdwob/DRbO10WTQBcMuc0LWKu2C
222 | 6SDJfDLDYRdZrGUuu5y08syyUqvVcrVYoxZIwWy3tlKK2qUlg73uXQS9Hb37To8PhdsY6/Pux+98eQ7P
223 | 9xze/7jzrLxDtaRKouPFyX1FkZJR6Qwd/+7epo5velNnblitCWpW1Mc1zyuhnC2DwieD8YUO9fMa5HZl
224 | uenjiUxv68XG19oAE7JgbG8IM988mD3wYmrfDc+nRxjZHcBAuAfV3nIIm9L6aSzu7rqOb3ilCQzv2rHw
225 | fRqTX0fweH8M3s8uuPcGwW4zsIdt6N60QO4qhsCQ4qTRuIY1jdn24T7mIpOY2ffAteOAYVGLWw4xcm3Z
226 | yGq/gQp3CUpZGVJJ8jiNnatdVgaHQj3cic4wAwlbcFjQJ3LRNSdVL4gIdJf8dEykfHr7qGJKdFo0Kv0p
227 | ceSd5PdkM3R1JqWOb+WpeEnapWqini8nVdMlRD4uJYVsPuHJvYWkyCUhEoeYiG3ZJKNdSGKdt27prTR/
228 | RjWnYBSe4pPYYaJu0Wl+d8YRXSVq+aj3G9drI3TkKJ+UuhQe2eHwtiPayiDa11qj9yMM0vW55g0ybt+x
229 | onfrAbTL1Yh+hYi+Mkwv9WBDDFfp0HYf1BOVuN6cZqaxONM7nZMJW7D4Y5ar1B+ZSKi0b6uTq1S/UIt0
230 | 05WAQCfg02hcw1pN/8P3bfAf+LhKfV9GMLrnBLtjR+9GJ5pWDKgaK8M1Y2pAUJ8sprFE6jm5uyXQCOMS
231 | QSFbgJtMDnKsmchsSz8WNl0NpjVeNv9x8u9iP47UnpdwiRcSq1HcldVBx3/g8X4Bj5QzBMM+BqgAAAAA
232 | SUVORK5CYII=
233 |
234 |
235 |
236 |
237 | AAABAAIAICAAAAEAIACoEAAAJgAAABAQAAABACAAaAQAAM4QAAAoAAAAIAAAAEAAAAABACAAAAAAAAAA
238 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
239 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
240 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
241 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
242 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAANAAAADwAAAA8AAAAPAAAADwAA
243 | AA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAA
244 | AA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA0AAAACAAAADWVlZaJ5eXn/eXl5/3l5
245 | ef95eXn/eXl5/3l5ef95eXn/eXl5/3l5ef95eXn/eXl5/3l5ef95eXn/eXl5/3l5ef95eXn/eXl5/3l5
246 | ef95eXn/eXl5/3l5ef95eXn/eXl5/3l5ef95eXn/eXl5/3l5ef95eXn/ZWVlogAAAA0AAAANhYWF/+/v
247 | 7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v
248 | 7//v7+//7+/v/+/v7//29vb/r62k/6+tpP+vraT/r62k/6+tpP+vraT/r62k/6+tpP96enr/AAAADQAA
249 | AAKGhob/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm
250 | 5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+/v7/+xr6b/sa+m/7Gvpv+xr6b/sa+m/7Gvpv+xr6b/sa+m/3t7
251 | e/8AAAACAAAAAIeHh//n5+f/5+fn/6Ghof/n5+f/oaGh/6Ghof+hoaH/5+fn/+fn5/+hoaH/oaGh/+fn
252 | 5/+hoaH/oaGh/+fn5/+hoaH/oaGh/6Ghof/n5+f/8PDw/7Oyqf9paWT/kZCJ/5GQif+RkIn/kZCJ/5GQ
253 | if+zsqn/fHx8/wAAAAAAAAAAiYmJ/+np6f/p6en/6enp/+np6f/p6en/6enp/+np6f/p6en/6enp/+np
254 | 6f/p6en/6enp/+np6f/p6en/6enp/+np6f/p6en/6enp/+np6f/x8fH/trWs/7a1rP+2taz/trWs/7a1
255 | rP+2taz/trWs/7a1rP9+fn7/AAAAAAAAAACLi4v/6+vr/+vr6/+kpKT/pKSk/6SkpP/r6+v/pKSk/6Sk
256 | pP/r6+v/6+vr/6SkpP+kpKT/6+vr/6SkpP+kpKT/pKSk/+vr6/+kpKT/6+vr//Ly8v+5t6//bWxn/5aV
257 | jv+WlY7/lpWO/5aVjv+WlY7/ubev/39/f/8AAAAAAAAAAIyMjP/t7e3/7e3t/+3t7f/t7e3/7e3t/+3t
258 | 7f/t7e3/7e3t/+3t7f/t7e3/7e3t/+3t7f/t7e3/7e3t/+3t7f/t7e3/7e3t/+3t7f/t7e3/9PT0/7y7
259 | sv+8u7L/vLuy/7y7sv+8u7L/vLuy/7y7sv+8u7L/gICA/wAAAAAAAAAAjo6O/+/v7//v7+//p6en/6en
260 | p/+np6f/p6en/+/v7/+np6f/7+/v/+/v7/+np6f/7+/v/6enp/+np6f/7+/v/+/v7/+np6f/p6en/+/v
261 | 7//19fX/v761/3Bvav+bmpP/m5qT/5uak/+bmpP/m5qT/7++tf+CgoL/AAAAAAAAAACQkJD/8fHx//Hx
262 | 8f/x8fH/8fHx//Hx8f/x8fH/8fHx//Hx8f/x8fH/8fHx//Hx8f/x8fH/8fHx//Hx8f/x8fH/8fHx//Hx
263 | 8f/x8fH/8fHx//b29v/Dwbn/w8G5/8PBuf/Dwbn/w8G5/8PBuf/Dwbn/w8G5/4ODg/8AAAAAAAAAAJGR
264 | kf/y8vL/8vLy/6mpqf+pqan/8vLy/6mpqf+pqan/qamp//Ly8v/y8vL/qamp/6mpqf+pqan/8vLy/6mp
265 | qf+pqan/8vLy/6mpqf/y8vL/9/f3/8bEvP91c2//oZ+Z/6Gfmf+hn5n/oZ+Z/6Gfmf/GxLz/hISE/wAA
266 | AAAAAAAAk5OT//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0
267 | 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/4+Pj/ysi//8rIv//KyL//ysi//8rIv//KyL//ysi//8rI
268 | v/+Ghob/AAAAAAAAAACVlZX/9vb2//b29v+srKz/rKys/6ysrP/29vb/rKys/6ysrP/29vb/9vb2/6ys
269 | rP+srKz/9vb2/6ysrP+srKz/rKys//b29v+srKz/9vb2//n5+f/Ny8P/eHdy/6alnv+mpZ7/pqWe/6al
270 | nv+mpZ7/zcvD/4eHh/8AAAAAAAAAAJeXl//4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4
271 | +P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+/v7/9DOxv/Qzsb/0M7G/9DO
272 | xv/Qzsb/0M7G/9DOxv/Qzsb/iYmJ/wAAAAAAAAAAmZmZ//r6+v/6+vr/r6+v/6+vr/+vr6//r6+v//r6
273 | +v+vr6//+vr6//r6+v+vr6//+vr6/6+vr/+vr6//+vr6//r6+v+vr6//r6+v//r6+v/8/Pz/09HJ/3x7
274 | dv+rqqP/q6qj/6uqo/+rqqP/q6qj/9PRyf+Li4v/AAAAAAAAAACampr//Pz8//z8/P/8/Pz//Pz8//z8
275 | /P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//39
276 | /f/W1Mz/1tTM/9bUzP/W1Mz/1tTM/9bUzP/W1Mz/1tTM/4uLi/8AAAAAAAAAAJycnP/9/f3//f39/7Gx
277 | sf+xsbH//f39/7Gxsf+xsbH/sbGx//39/f/9/f3/sbGx/7Gxsf+xsbH//f39/7Gxsf+xsbH//f39/7Gx
278 | sf/9/f3//v7+/7V4Kv+1eCr/tXgq/7V4Kv+1eCr/tXgq/7V4Kv+1eCr/jY2N/wAAAAAAAAAAnp6e//7+
279 | /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+
280 | /v/+/v7//v7+//7+/v/+/v7/04wx/9OMMf/TjDH/04wx/9OMMf/TjDH/04wx/9OMMf+Pj4//AAAAAAAA
281 | AACfn5//////////////////////////////////////////////////////////////////////////
282 | ///////////////////////////////////c2tL/3NrS/9za0v/c2tL/3NrS/9za0v/c2tL/3NrS/4+P
283 | j/8AAAAAAAAAAKGhof+Xl5f/l5eX/5eXl/+Xl5f/l5eX/5eXl/+Xl5f/l5eX/5eXl/+Xl5f/l5eX/5eX
284 | l/+Xl5f/l5eX/5eXl/+Xl5f/l5eX/5eXl/+Xl5f/l5eX/5eXl/+Xl5f/l5eX/5eXl/+Xl5f/l5eX/5eX
285 | l/+Xl5f/goKC/wAAAAAAAAAAo6Oj/76+vv++vr7/vr6+/76+vv++vr7/vr6+/76+vv++vr7/vr6+/76+
286 | vv++vr7/vr6+/76+vv++vr7/vr6+/76+vv+ovKz/iLmS/6i8rP++vr7/p7y//4a6wP+uvb//vr6+/6ur
287 | xf+Pj9D/q6vF/76+vv+Tk5P/AAAAAAAAAACkpKT/wcHB/8HBwf/BwcH/wcHB/8HBwf/BwcH/wcHB/8HB
288 | wf/BwcH/wcHB/8HBwf/BwcH/wcHB/8HBwf/BwcH/wcHB/z6yVv8a5yn/PrJW/8HBwf84tcT/KP/y/zi1
289 | xP/BwcH/T0/q/3Nz//9PT+r/wcHB/5OTk/8AAAAAAAAAAKWlpf/CwsL/wsLC/8LCwv/CwsL/wsLC/8LC
290 | wv/CwsL/wsLC/8LCwv/CwsL/wsLC/8LCwv/CwsL/wsLC/8LCwv/CwsL/jLyX/wetK/+MvJf/wsLC/4q9
291 | w/8Ascb/ir3D/8LCwv+UlNP/ISH8/5SU0//CwsL/lJSU/wAAAAAAAAAApqam/87Ozv/V1dX/1dXV/9XV
292 | 1f/V1dX/1dXV/9XV1f/V1dX/1dXV/9XV1f/V1dX/1dXV/9XV1f/V1dX/1dXV/9XV1f/V1dX/1dXV/9XV
293 | 1f/V1dX/1dXV/9XV1f/V1dX/1dXV/9XV1f/V1dX/1dXV/9XV1f+VlZX/AAAAAAAAAACnp6dXp6en/6en
294 | p/+np6f/p6en/6enp/+np6f/p6en/6enp/+np6f/p6en/6enp/+np6f/p6en/6enp/+np6f/p6en/6en
295 | p/+np6f/p6en/6enp/+np6f/p6en/6enp/+np6f/p6en/6enp/+np6f/p6en/6enp1cAAAAAAAAAAAAA
296 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
297 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
298 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
299 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
300 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
301 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
302 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
303 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
304 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
305 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
306 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////AAAAAAAAAAAAAAAAAAAAAIAA
307 | AAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAA
308 | AAGAAAABgAAAAYAAAAGAAAABgAAAAf//////////////////////////KAAAABAAAAAgAAAAAQAgAAAA
309 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
310 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZGRkwPDw8hzw8PIc8PDyHPDw8hzw8PIc8PDyHPDw8hzw8
311 | PIc8PDyHPDw8hzw8PIc8PDyHPDw8hzw8PIcZGRkwQkJCg+rq6v/q6ur/6urq/+rq6v/q6ur/6urq/+rq
312 | 6v/q6ur/6urq/+7u7v+wrqX/sK6l/7Cupf+wrqX/PT09g4iIiIDo6Oj/1tbW/8XFxf/W1tb/1tbW/9bW
313 | 1v/FxcX/1tbW/8XFxf/s7Oz/oqGZ/6Oimv+jopr/rKui/319fYCLi4uA7Ozs/8jIyP/a2tr/yMjI/+zs
314 | 7P/IyMj/2tra/8jIyP/a2tr/7+/v/6emnv+pqKD/qaig/7GwqP9/f3+Aj4+PgPDw8P/MzMz/zMzM/97e
315 | 3v/w8PD/3t7e/8zMzP/w8PD/zMzM//Ly8v+tq6T/r62m/6+tpv+4tq7/goKCgJKSkoDz8/P/zs7O/+Dg
316 | 4P/Ozs7/8/Pz/87Ozv/g4OD/zs7O/+Dg4P/19fX/s7Gq/7WzrP+1s6z/vry0/4WFhYCWlpaA9/f3/9LS
317 | 0v/k5OT/0tLS//f39//S0tL/5OTk/9LS0v/k5OT/+Pj4/7m3sP+7ubL/u7my/8TDu/+IiIiAmZmZgPv7
318 | +//V1dX/1dXV/+jo6P/7+/v/6Ojo/9XV1f/7+/v/1dXV//v7+/++vbX/wL+3/8C/t//KyMH/i4uLgJ2d
319 | nYD9/f3/19fX/+rq6v/X19f//f39/9fX1//q6ur/19fX/+rq6v/9/f3/xIIt/8SCLf/Egi3/xIIt/46O
320 | joCgoKCAy8vL/8vLy//Ly8v/y8vL/8vLy//Ly8v/y8vL/8vLy//Ly8v/y8vL/7m4tP+5uLT/ubi0/7m4
321 | tP+IiIiAo6OjgL+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//YsNv/5m7oP9jys3/mbzA/39/
322 | 3/+ensv/k5OTgKWlpYDJycn/y8vL/8vLy//Ly8v/y8vL/8vLy//Ly8v/y8vL/4/Em/++ysD/jcbM/73K
323 | y/+Xl97/wMDP/5SUlICnp6cWp6engKenp4Cnp6eAp6engKenp4Cnp6eAp6engKenp4Cnp6eAp6engKen
324 | p4Cnp6eAp6engKenp4Cnp6cWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
325 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
326 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//6xBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAA
327 | rEEAAKxBAACsQQAArEEAAKxBAACsQf//rEH//6xB
328 |
329 |
330 |
--------------------------------------------------------------------------------
/Fetitor/FrmSearch.Designer.cs:
--------------------------------------------------------------------------------
1 | namespace Fetitor
2 | {
3 | partial class FrmSearch
4 | {
5 | ///
6 | /// Required designer variable.
7 | ///
8 | private System.ComponentModel.IContainer components = null;
9 |
10 | ///
11 | /// Clean up any resources being used.
12 | ///
13 | /// true if managed resources should be disposed; otherwise, false.
14 | protected override void Dispose(bool disposing)
15 | {
16 | if (disposing && (components != null))
17 | {
18 | components.Dispose();
19 | }
20 | base.Dispose(disposing);
21 | }
22 |
23 | #region Windows Form Designer generated code
24 |
25 | ///
26 | /// Required method for Designer support - do not modify
27 | /// the contents of this method with the code editor.
28 | ///
29 | private void InitializeComponent()
30 | {
31 | System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FrmSearch));
32 | this.TxtSearchText = new System.Windows.Forms.TextBox();
33 | this.label1 = new System.Windows.Forms.Label();
34 | this.BtnSearch = new System.Windows.Forms.Button();
35 | this.BtnClose = new System.Windows.Forms.Button();
36 | this.SuspendLayout();
37 | //
38 | // TxtSearchText
39 | //
40 | this.TxtSearchText.Location = new System.Drawing.Point(74, 12);
41 | this.TxtSearchText.Name = "TxtSearchText";
42 | this.TxtSearchText.Size = new System.Drawing.Size(289, 20);
43 | this.TxtSearchText.TabIndex = 0;
44 | //
45 | // label1
46 | //
47 | this.label1.AutoSize = true;
48 | this.label1.Location = new System.Drawing.Point(12, 15);
49 | this.label1.Name = "label1";
50 | this.label1.Size = new System.Drawing.Size(56, 13);
51 | this.label1.TabIndex = 1;
52 | this.label1.Text = "Search for";
53 | //
54 | // BtnSearch
55 | //
56 | this.BtnSearch.Location = new System.Drawing.Point(207, 38);
57 | this.BtnSearch.Name = "BtnSearch";
58 | this.BtnSearch.Size = new System.Drawing.Size(75, 23);
59 | this.BtnSearch.TabIndex = 2;
60 | this.BtnSearch.Text = "Search";
61 | this.BtnSearch.UseVisualStyleBackColor = true;
62 | this.BtnSearch.Click += new System.EventHandler(this.BtnSearch_Click);
63 | //
64 | // BtnClose
65 | //
66 | this.BtnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel;
67 | this.BtnClose.Location = new System.Drawing.Point(288, 38);
68 | this.BtnClose.Name = "BtnClose";
69 | this.BtnClose.Size = new System.Drawing.Size(75, 23);
70 | this.BtnClose.TabIndex = 3;
71 | this.BtnClose.Text = "Close";
72 | this.BtnClose.UseVisualStyleBackColor = true;
73 | this.BtnClose.Click += new System.EventHandler(this.BtnClose_Click);
74 | //
75 | // FrmSearch
76 | //
77 | this.AcceptButton = this.BtnSearch;
78 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
79 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
80 | this.CancelButton = this.BtnClose;
81 | this.ClientSize = new System.Drawing.Size(375, 71);
82 | this.Controls.Add(this.BtnClose);
83 | this.Controls.Add(this.BtnSearch);
84 | this.Controls.Add(this.label1);
85 | this.Controls.Add(this.TxtSearchText);
86 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
87 | this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
88 | this.MaximizeBox = false;
89 | this.MinimizeBox = false;
90 | this.Name = "FrmSearch";
91 | this.ShowIcon = false;
92 | this.ShowInTaskbar = false;
93 | this.StartPosition = System.Windows.Forms.FormStartPosition.Manual;
94 | this.Text = "Search";
95 | this.Activated += new System.EventHandler(this.FrmSearch_Activated);
96 | this.Deactivate += new System.EventHandler(this.FrmSearch_Deactivate);
97 | this.ResumeLayout(false);
98 | this.PerformLayout();
99 |
100 | }
101 |
102 | #endregion
103 |
104 | private System.Windows.Forms.TextBox TxtSearchText;
105 | private System.Windows.Forms.Label label1;
106 | private System.Windows.Forms.Button BtnSearch;
107 | private System.Windows.Forms.Button BtnClose;
108 | }
109 | }
--------------------------------------------------------------------------------
/Fetitor/FrmSearch.cs:
--------------------------------------------------------------------------------
1 | // This program is free software: you can redistribute it and/or modify
2 | // it under the terms of the GNU General Public License as published by
3 | // the Free Software Foundation, either version 3 of the License, or
4 | // (at your option) any later version.
5 | //
6 | // This program is distributed in the hope that it will be useful,
7 | // but WITHOUT ANY WARRANTY; without even the implied warranty of
8 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9 | // GNU General Public License for more details.
10 | //
11 | // You should have received a copy of the GNU General Public License
12 | // along with this program. If not, see .
13 |
14 | using System;
15 | using System.Windows.Forms;
16 |
17 | namespace Fetitor
18 | {
19 | ///
20 | /// Provides a form to input a search text.
21 | ///
22 | public partial class FrmSearch : Form
23 | {
24 | private FrmMain _mainForm;
25 |
26 | ///
27 | /// Creates new instance.
28 | ///
29 | ///
30 | public FrmSearch(FrmMain mainForm)
31 | {
32 | InitializeComponent();
33 | _mainForm = mainForm;
34 | }
35 |
36 | ///
37 | /// Hides form.
38 | ///
39 | ///
40 | ///
41 | private void BtnClose_Click(object sender, EventArgs e)
42 | {
43 | this.Hide();
44 | }
45 |
46 | ///
47 | /// Calls search method on main form.
48 | ///
49 | ///
50 | ///
51 | private void BtnSearch_Click(object sender, EventArgs e)
52 | {
53 | var searchText = this.TxtSearchText.Text;
54 |
55 | if (!_mainForm.SearchFor(searchText))
56 | MessageBox.Show("Text not found.", "Search", MessageBoxButtons.OK, MessageBoxIcon.Information);
57 | }
58 |
59 | ///
60 | /// Selects the search text.
61 | ///
62 | public void SelectSearchText()
63 | {
64 | this.TxtSearchText.Focus();
65 | this.TxtSearchText.SelectAll();
66 | }
67 |
68 | ///
69 | /// Changes opacity when the form's focus changes.
70 | ///
71 | ///
72 | ///
73 | private void FrmSearch_Deactivate(object sender, EventArgs e)
74 | {
75 | this.Opacity = 0.8;
76 | }
77 |
78 | ///
79 | /// Changes opacity when the form's focus changes.
80 | ///
81 | ///
82 | ///
83 | private void FrmSearch_Activated(object sender, EventArgs e)
84 | {
85 | this.Opacity = 1;
86 | }
87 | }
88 | }
89 |
--------------------------------------------------------------------------------
/Fetitor/FrmSearch.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
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 |
109 | text/microsoft-resx
110 |
111 |
112 | 2.0
113 |
114 |
115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
119 |
120 |
121 |
122 |
123 | AAABAAIAICAAAAEAIACoEAAAJgAAABAQAAABACAAaAQAAM4QAAAoAAAAIAAAAEAAAAABACAAAAAAAAAA
124 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
125 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
126 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
127 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
128 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAANAAAADwAAAA8AAAAPAAAADwAA
129 | AA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAA
130 | AA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA0AAAACAAAADWVlZaJ5eXn/eXl5/3l5
131 | ef95eXn/eXl5/3l5ef95eXn/eXl5/3l5ef95eXn/eXl5/3l5ef95eXn/eXl5/3l5ef95eXn/eXl5/3l5
132 | ef95eXn/eXl5/3l5ef95eXn/eXl5/3l5ef95eXn/eXl5/3l5ef95eXn/ZWVlogAAAA0AAAANhYWF/+/v
133 | 7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v
134 | 7//v7+//7+/v/+/v7//29vb/r62k/6+tpP+vraT/r62k/6+tpP+vraT/r62k/6+tpP96enr/AAAADQAA
135 | AAKGhob/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm
136 | 5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+/v7/+xr6b/sa+m/7Gvpv+xr6b/sa+m/7Gvpv+xr6b/sa+m/3t7
137 | e/8AAAACAAAAAIeHh//n5+f/5+fn/6Ghof/n5+f/oaGh/6Ghof+hoaH/5+fn/+fn5/+hoaH/oaGh/+fn
138 | 5/+hoaH/oaGh/+fn5/+hoaH/oaGh/6Ghof/n5+f/8PDw/7Oyqf9paWT/kZCJ/5GQif+RkIn/kZCJ/5GQ
139 | if+zsqn/fHx8/wAAAAAAAAAAiYmJ/+np6f/p6en/6enp/+np6f/p6en/6enp/+np6f/p6en/6enp/+np
140 | 6f/p6en/6enp/+np6f/p6en/6enp/+np6f/p6en/6enp/+np6f/x8fH/trWs/7a1rP+2taz/trWs/7a1
141 | rP+2taz/trWs/7a1rP9+fn7/AAAAAAAAAACLi4v/6+vr/+vr6/+kpKT/pKSk/6SkpP/r6+v/pKSk/6Sk
142 | pP/r6+v/6+vr/6SkpP+kpKT/6+vr/6SkpP+kpKT/pKSk/+vr6/+kpKT/6+vr//Ly8v+5t6//bWxn/5aV
143 | jv+WlY7/lpWO/5aVjv+WlY7/ubev/39/f/8AAAAAAAAAAIyMjP/t7e3/7e3t/+3t7f/t7e3/7e3t/+3t
144 | 7f/t7e3/7e3t/+3t7f/t7e3/7e3t/+3t7f/t7e3/7e3t/+3t7f/t7e3/7e3t/+3t7f/t7e3/9PT0/7y7
145 | sv+8u7L/vLuy/7y7sv+8u7L/vLuy/7y7sv+8u7L/gICA/wAAAAAAAAAAjo6O/+/v7//v7+//p6en/6en
146 | p/+np6f/p6en/+/v7/+np6f/7+/v/+/v7/+np6f/7+/v/6enp/+np6f/7+/v/+/v7/+np6f/p6en/+/v
147 | 7//19fX/v761/3Bvav+bmpP/m5qT/5uak/+bmpP/m5qT/7++tf+CgoL/AAAAAAAAAACQkJD/8fHx//Hx
148 | 8f/x8fH/8fHx//Hx8f/x8fH/8fHx//Hx8f/x8fH/8fHx//Hx8f/x8fH/8fHx//Hx8f/x8fH/8fHx//Hx
149 | 8f/x8fH/8fHx//b29v/Dwbn/w8G5/8PBuf/Dwbn/w8G5/8PBuf/Dwbn/w8G5/4ODg/8AAAAAAAAAAJGR
150 | kf/y8vL/8vLy/6mpqf+pqan/8vLy/6mpqf+pqan/qamp//Ly8v/y8vL/qamp/6mpqf+pqan/8vLy/6mp
151 | qf+pqan/8vLy/6mpqf/y8vL/9/f3/8bEvP91c2//oZ+Z/6Gfmf+hn5n/oZ+Z/6Gfmf/GxLz/hISE/wAA
152 | AAAAAAAAk5OT//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0
153 | 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/4+Pj/ysi//8rIv//KyL//ysi//8rIv//KyL//ysi//8rI
154 | v/+Ghob/AAAAAAAAAACVlZX/9vb2//b29v+srKz/rKys/6ysrP/29vb/rKys/6ysrP/29vb/9vb2/6ys
155 | rP+srKz/9vb2/6ysrP+srKz/rKys//b29v+srKz/9vb2//n5+f/Ny8P/eHdy/6alnv+mpZ7/pqWe/6al
156 | nv+mpZ7/zcvD/4eHh/8AAAAAAAAAAJeXl//4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4
157 | +P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+/v7/9DOxv/Qzsb/0M7G/9DO
158 | xv/Qzsb/0M7G/9DOxv/Qzsb/iYmJ/wAAAAAAAAAAmZmZ//r6+v/6+vr/r6+v/6+vr/+vr6//r6+v//r6
159 | +v+vr6//+vr6//r6+v+vr6//+vr6/6+vr/+vr6//+vr6//r6+v+vr6//r6+v//r6+v/8/Pz/09HJ/3x7
160 | dv+rqqP/q6qj/6uqo/+rqqP/q6qj/9PRyf+Li4v/AAAAAAAAAACampr//Pz8//z8/P/8/Pz//Pz8//z8
161 | /P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//39
162 | /f/W1Mz/1tTM/9bUzP/W1Mz/1tTM/9bUzP/W1Mz/1tTM/4uLi/8AAAAAAAAAAJycnP/9/f3//f39/7Gx
163 | sf+xsbH//f39/7Gxsf+xsbH/sbGx//39/f/9/f3/sbGx/7Gxsf+xsbH//f39/7Gxsf+xsbH//f39/7Gx
164 | sf/9/f3//v7+/7V4Kv+1eCr/tXgq/7V4Kv+1eCr/tXgq/7V4Kv+1eCr/jY2N/wAAAAAAAAAAnp6e//7+
165 | /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+
166 | /v/+/v7//v7+//7+/v/+/v7/04wx/9OMMf/TjDH/04wx/9OMMf/TjDH/04wx/9OMMf+Pj4//AAAAAAAA
167 | AACfn5//////////////////////////////////////////////////////////////////////////
168 | ///////////////////////////////////c2tL/3NrS/9za0v/c2tL/3NrS/9za0v/c2tL/3NrS/4+P
169 | j/8AAAAAAAAAAKGhof+Xl5f/l5eX/5eXl/+Xl5f/l5eX/5eXl/+Xl5f/l5eX/5eXl/+Xl5f/l5eX/5eX
170 | l/+Xl5f/l5eX/5eXl/+Xl5f/l5eX/5eXl/+Xl5f/l5eX/5eXl/+Xl5f/l5eX/5eXl/+Xl5f/l5eX/5eX
171 | l/+Xl5f/goKC/wAAAAAAAAAAo6Oj/76+vv++vr7/vr6+/76+vv++vr7/vr6+/76+vv++vr7/vr6+/76+
172 | vv++vr7/vr6+/76+vv++vr7/vr6+/76+vv+ovKz/iLmS/6i8rP++vr7/p7y//4a6wP+uvb//vr6+/6ur
173 | xf+Pj9D/q6vF/76+vv+Tk5P/AAAAAAAAAACkpKT/wcHB/8HBwf/BwcH/wcHB/8HBwf/BwcH/wcHB/8HB
174 | wf/BwcH/wcHB/8HBwf/BwcH/wcHB/8HBwf/BwcH/wcHB/z6yVv8a5yn/PrJW/8HBwf84tcT/KP/y/zi1
175 | xP/BwcH/T0/q/3Nz//9PT+r/wcHB/5OTk/8AAAAAAAAAAKWlpf/CwsL/wsLC/8LCwv/CwsL/wsLC/8LC
176 | wv/CwsL/wsLC/8LCwv/CwsL/wsLC/8LCwv/CwsL/wsLC/8LCwv/CwsL/jLyX/wetK/+MvJf/wsLC/4q9
177 | w/8Ascb/ir3D/8LCwv+UlNP/ISH8/5SU0//CwsL/lJSU/wAAAAAAAAAApqam/87Ozv/V1dX/1dXV/9XV
178 | 1f/V1dX/1dXV/9XV1f/V1dX/1dXV/9XV1f/V1dX/1dXV/9XV1f/V1dX/1dXV/9XV1f/V1dX/1dXV/9XV
179 | 1f/V1dX/1dXV/9XV1f/V1dX/1dXV/9XV1f/V1dX/1dXV/9XV1f+VlZX/AAAAAAAAAACnp6dXp6en/6en
180 | p/+np6f/p6en/6enp/+np6f/p6en/6enp/+np6f/p6en/6enp/+np6f/p6en/6enp/+np6f/p6en/6en
181 | p/+np6f/p6en/6enp/+np6f/p6en/6enp/+np6f/p6en/6enp/+np6f/p6en/6enp1cAAAAAAAAAAAAA
182 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
183 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
184 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
185 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
186 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
187 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
188 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
189 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
190 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
191 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
192 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////AAAAAAAAAAAAAAAAAAAAAIAA
193 | AAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAA
194 | AAGAAAABgAAAAYAAAAGAAAABgAAAAf//////////////////////////KAAAABAAAAAgAAAAAQAgAAAA
195 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
196 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZGRkwPDw8hzw8PIc8PDyHPDw8hzw8PIc8PDyHPDw8hzw8
197 | PIc8PDyHPDw8hzw8PIc8PDyHPDw8hzw8PIcZGRkwQkJCg+rq6v/q6ur/6urq/+rq6v/q6ur/6urq/+rq
198 | 6v/q6ur/6urq/+7u7v+wrqX/sK6l/7Cupf+wrqX/PT09g4iIiIDo6Oj/1tbW/8XFxf/W1tb/1tbW/9bW
199 | 1v/FxcX/1tbW/8XFxf/s7Oz/oqGZ/6Oimv+jopr/rKui/319fYCLi4uA7Ozs/8jIyP/a2tr/yMjI/+zs
200 | 7P/IyMj/2tra/8jIyP/a2tr/7+/v/6emnv+pqKD/qaig/7GwqP9/f3+Aj4+PgPDw8P/MzMz/zMzM/97e
201 | 3v/w8PD/3t7e/8zMzP/w8PD/zMzM//Ly8v+tq6T/r62m/6+tpv+4tq7/goKCgJKSkoDz8/P/zs7O/+Dg
202 | 4P/Ozs7/8/Pz/87Ozv/g4OD/zs7O/+Dg4P/19fX/s7Gq/7WzrP+1s6z/vry0/4WFhYCWlpaA9/f3/9LS
203 | 0v/k5OT/0tLS//f39//S0tL/5OTk/9LS0v/k5OT/+Pj4/7m3sP+7ubL/u7my/8TDu/+IiIiAmZmZgPv7
204 | +//V1dX/1dXV/+jo6P/7+/v/6Ojo/9XV1f/7+/v/1dXV//v7+/++vbX/wL+3/8C/t//KyMH/i4uLgJ2d
205 | nYD9/f3/19fX/+rq6v/X19f//f39/9fX1//q6ur/19fX/+rq6v/9/f3/xIIt/8SCLf/Egi3/xIIt/46O
206 | joCgoKCAy8vL/8vLy//Ly8v/y8vL/8vLy//Ly8v/y8vL/8vLy//Ly8v/y8vL/7m4tP+5uLT/ubi0/7m4
207 | tP+IiIiAo6OjgL+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//YsNv/5m7oP9jys3/mbzA/39/
208 | 3/+ensv/k5OTgKWlpYDJycn/y8vL/8vLy//Ly8v/y8vL/8vLy//Ly8v/y8vL/4/Em/++ysD/jcbM/73K
209 | y/+Xl97/wMDP/5SUlICnp6cWp6engKenp4Cnp6eAp6engKenp4Cnp6eAp6engKenp4Cnp6eAp6engKen
210 | p4Cnp6eAp6engKenp4Cnp6cWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
211 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
212 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//6xBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAA
213 | rEEAAKxBAACsQQAArEEAAKxBAACsQf//rEH//6xB
214 |
215 |
216 |
--------------------------------------------------------------------------------
/Fetitor/FrmUpdateFeatureNames.Designer.cs:
--------------------------------------------------------------------------------
1 | namespace Fetitor
2 | {
3 | partial class FrmUpdateFeatureNames
4 | {
5 | ///
6 | /// Required designer variable.
7 | ///
8 | private System.ComponentModel.IContainer components = null;
9 |
10 | ///
11 | /// Clean up any resources being used.
12 | ///
13 | /// true if managed resources should be disposed; otherwise, false.
14 | protected override void Dispose(bool disposing)
15 | {
16 | if (disposing && (components != null))
17 | {
18 | components.Dispose();
19 | }
20 | base.Dispose(disposing);
21 | }
22 |
23 | #region Windows Form Designer generated code
24 |
25 | ///
26 | /// Required method for Designer support - do not modify
27 | /// the contents of this method with the code editor.
28 | ///
29 | private void InitializeComponent()
30 | {
31 | System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FrmUpdateFeatureNames));
32 | this.LblHelp = new System.Windows.Forms.Label();
33 | this.GrpFolders = new System.Windows.Forms.GroupBox();
34 | this.ChkIncludeCurrent = new System.Windows.Forms.CheckBox();
35 | this.TxtFolders = new System.Windows.Forms.TextBox();
36 | this.GrpResults = new System.Windows.Forms.GroupBox();
37 | this.TxtResults = new System.Windows.Forms.TextBox();
38 | this.ProgressBar = new System.Windows.Forms.ProgressBar();
39 | this.BtnSave = new System.Windows.Forms.Button();
40 | this.BtnClose = new System.Windows.Forms.Button();
41 | this.BtnSearch = new System.Windows.Forms.Button();
42 | this.GrpFolders.SuspendLayout();
43 | this.GrpResults.SuspendLayout();
44 | this.SuspendLayout();
45 | //
46 | // LblHelp
47 | //
48 | this.LblHelp.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
49 | | System.Windows.Forms.AnchorStyles.Right)));
50 | this.LblHelp.ForeColor = System.Drawing.Color.Gray;
51 | this.LblHelp.Location = new System.Drawing.Point(9, 407);
52 | this.LblHelp.Name = "LblHelp";
53 | this.LblHelp.Size = new System.Drawing.Size(516, 48);
54 | this.LblHelp.TabIndex = 0;
55 | this.LblHelp.Text = resources.GetString("LblHelp.Text");
56 | //
57 | // GrpFolders
58 | //
59 | this.GrpFolders.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
60 | | System.Windows.Forms.AnchorStyles.Right)));
61 | this.GrpFolders.Controls.Add(this.ChkIncludeCurrent);
62 | this.GrpFolders.Controls.Add(this.TxtFolders);
63 | this.GrpFolders.Location = new System.Drawing.Point(12, 12);
64 | this.GrpFolders.Name = "GrpFolders";
65 | this.GrpFolders.Size = new System.Drawing.Size(513, 185);
66 | this.GrpFolders.TabIndex = 3;
67 | this.GrpFolders.TabStop = false;
68 | this.GrpFolders.Text = "Directories";
69 | //
70 | // ChkIncludeCurrent
71 | //
72 | this.ChkIncludeCurrent.AutoSize = true;
73 | this.ChkIncludeCurrent.Checked = true;
74 | this.ChkIncludeCurrent.CheckState = System.Windows.Forms.CheckState.Checked;
75 | this.ChkIncludeCurrent.Location = new System.Drawing.Point(11, 161);
76 | this.ChkIncludeCurrent.Name = "ChkIncludeCurrent";
77 | this.ChkIncludeCurrent.Size = new System.Drawing.Size(204, 17);
78 | this.ChkIncludeCurrent.TabIndex = 5;
79 | this.ChkIncludeCurrent.Text = "Include features in current features.txt";
80 | this.ChkIncludeCurrent.UseVisualStyleBackColor = true;
81 | //
82 | // TxtFolders
83 | //
84 | this.TxtFolders.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
85 | | System.Windows.Forms.AnchorStyles.Left)
86 | | System.Windows.Forms.AnchorStyles.Right)));
87 | this.TxtFolders.Font = new System.Drawing.Font("Consolas", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
88 | this.TxtFolders.Location = new System.Drawing.Point(11, 19);
89 | this.TxtFolders.Multiline = true;
90 | this.TxtFolders.Name = "TxtFolders";
91 | this.TxtFolders.ScrollBars = System.Windows.Forms.ScrollBars.Both;
92 | this.TxtFolders.Size = new System.Drawing.Size(491, 136);
93 | this.TxtFolders.TabIndex = 4;
94 | this.TxtFolders.WordWrap = false;
95 | //
96 | // GrpResults
97 | //
98 | this.GrpResults.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
99 | | System.Windows.Forms.AnchorStyles.Right)));
100 | this.GrpResults.Controls.Add(this.TxtResults);
101 | this.GrpResults.Location = new System.Drawing.Point(12, 203);
102 | this.GrpResults.Name = "GrpResults";
103 | this.GrpResults.Size = new System.Drawing.Size(513, 158);
104 | this.GrpResults.TabIndex = 4;
105 | this.GrpResults.TabStop = false;
106 | this.GrpResults.Text = "Results";
107 | //
108 | // TxtResults
109 | //
110 | this.TxtResults.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
111 | | System.Windows.Forms.AnchorStyles.Left)
112 | | System.Windows.Forms.AnchorStyles.Right)));
113 | this.TxtResults.Font = new System.Drawing.Font("Consolas", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
114 | this.TxtResults.Location = new System.Drawing.Point(11, 19);
115 | this.TxtResults.Multiline = true;
116 | this.TxtResults.Name = "TxtResults";
117 | this.TxtResults.ReadOnly = true;
118 | this.TxtResults.ScrollBars = System.Windows.Forms.ScrollBars.Both;
119 | this.TxtResults.Size = new System.Drawing.Size(491, 128);
120 | this.TxtResults.TabIndex = 6;
121 | this.TxtResults.WordWrap = false;
122 | //
123 | // ProgressBar
124 | //
125 | this.ProgressBar.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
126 | | System.Windows.Forms.AnchorStyles.Right)));
127 | this.ProgressBar.Location = new System.Drawing.Point(12, 370);
128 | this.ProgressBar.Name = "ProgressBar";
129 | this.ProgressBar.Size = new System.Drawing.Size(270, 23);
130 | this.ProgressBar.TabIndex = 5;
131 | //
132 | // BtnSave
133 | //
134 | this.BtnSave.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
135 | this.BtnSave.Enabled = false;
136 | this.BtnSave.Location = new System.Drawing.Point(369, 370);
137 | this.BtnSave.Name = "BtnSave";
138 | this.BtnSave.Size = new System.Drawing.Size(75, 23);
139 | this.BtnSave.TabIndex = 2;
140 | this.BtnSave.Text = "Save";
141 | this.BtnSave.UseVisualStyleBackColor = true;
142 | this.BtnSave.Click += new System.EventHandler(this.BtnSave_Click);
143 | //
144 | // BtnClose
145 | //
146 | this.BtnClose.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
147 | this.BtnClose.Location = new System.Drawing.Point(450, 370);
148 | this.BtnClose.Name = "BtnClose";
149 | this.BtnClose.Size = new System.Drawing.Size(75, 23);
150 | this.BtnClose.TabIndex = 3;
151 | this.BtnClose.Text = "Close";
152 | this.BtnClose.UseVisualStyleBackColor = true;
153 | this.BtnClose.Click += new System.EventHandler(this.BtnClose_Click);
154 | //
155 | // BtnSearch
156 | //
157 | this.BtnSearch.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
158 | this.BtnSearch.Location = new System.Drawing.Point(288, 370);
159 | this.BtnSearch.Name = "BtnSearch";
160 | this.BtnSearch.Size = new System.Drawing.Size(75, 23);
161 | this.BtnSearch.TabIndex = 1;
162 | this.BtnSearch.Text = "Search";
163 | this.BtnSearch.UseVisualStyleBackColor = true;
164 | this.BtnSearch.Click += new System.EventHandler(this.BtnSearch_Click);
165 | //
166 | // FrmUpdateFeatureNames
167 | //
168 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
169 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
170 | this.ClientSize = new System.Drawing.Size(537, 464);
171 | this.Controls.Add(this.BtnSearch);
172 | this.Controls.Add(this.BtnClose);
173 | this.Controls.Add(this.BtnSave);
174 | this.Controls.Add(this.ProgressBar);
175 | this.Controls.Add(this.GrpResults);
176 | this.Controls.Add(this.GrpFolders);
177 | this.Controls.Add(this.LblHelp);
178 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
179 | this.MaximizeBox = false;
180 | this.MinimizeBox = false;
181 | this.Name = "FrmUpdateFeatureNames";
182 | this.ShowIcon = false;
183 | this.ShowInTaskbar = false;
184 | this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
185 | this.Text = "Search Feature Names";
186 | this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FrmUpdateFeatureNames_FormClosing);
187 | this.GrpFolders.ResumeLayout(false);
188 | this.GrpFolders.PerformLayout();
189 | this.GrpResults.ResumeLayout(false);
190 | this.GrpResults.PerformLayout();
191 | this.ResumeLayout(false);
192 |
193 | }
194 |
195 | #endregion
196 |
197 | private System.Windows.Forms.Label LblHelp;
198 | private System.Windows.Forms.GroupBox GrpFolders;
199 | private System.Windows.Forms.TextBox TxtFolders;
200 | private System.Windows.Forms.GroupBox GrpResults;
201 | private System.Windows.Forms.TextBox TxtResults;
202 | private System.Windows.Forms.ProgressBar ProgressBar;
203 | private System.Windows.Forms.Button BtnSave;
204 | private System.Windows.Forms.Button BtnClose;
205 | private System.Windows.Forms.Button BtnSearch;
206 | private System.Windows.Forms.CheckBox ChkIncludeCurrent;
207 | }
208 | }
209 |
--------------------------------------------------------------------------------
/Fetitor/FrmUpdateFeatureNames.cs:
--------------------------------------------------------------------------------
1 | // This program is free software: you can redistribute it and/or modify
2 | // it under the terms of the GNU General Public License as published by
3 | // the Free Software Foundation, either version 3 of the License, or
4 | // (at your option) any later version.
5 | //
6 | // This program is distributed in the hope that it will be useful,
7 | // but WITHOUT ANY WARRANTY; without even the implied warranty of
8 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9 | // GNU General Public License for more details.
10 | //
11 | // You should have received a copy of the GNU General Public License
12 | // along with this program. If not, see .
13 |
14 | using System;
15 | using System.Collections.Generic;
16 | using System.IO;
17 | using System.Linq;
18 | using System.Text;
19 | using System.Text.RegularExpressions;
20 | using System.Threading.Tasks;
21 | using System.Windows.Forms;
22 | using Fetitor.Properties;
23 |
24 | namespace Fetitor
25 | {
26 | ///
27 | /// Provides a form to update the features.txt.
28 | ///
29 | public partial class FrmUpdateFeatureNames : Form
30 | {
31 | private readonly static string[] FileExtensions = new[] { ".xml", ".txt", ".data" };
32 | private readonly static string FeaturesListPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "features.txt");
33 | private readonly static Regex GfRegex = new Regex(@"(gf[a-zA-Z][\w\-]+)", RegexOptions.Compiled);
34 | private readonly static Regex FeatureStrRegex = new Regex(@"(feature[a-zA-Z][\w\-]+)", RegexOptions.Compiled);
35 | private readonly static Regex FeatureAttr1Regex = new Regex(@"feature\s*=\s*""([^""]+)""", RegexOptions.Compiled | RegexOptions.IgnoreCase);
36 | private readonly static Regex FeatureAttr2Regex = new Regex(@"feature\s*=\s*"([^&]+)"", RegexOptions.Compiled | RegexOptions.IgnoreCase);
37 |
38 | private bool _closing;
39 |
40 | ///
41 | /// Creates new instance.
42 | ///
43 | public FrmUpdateFeatureNames()
44 | {
45 | InitializeComponent();
46 |
47 | this.TxtFolders.Text = Settings.Default.NameSearchFolders;
48 | this.TxtFolders.SelectionStart = 0;
49 | this.BtnSave.Select();
50 | }
51 |
52 | ///
53 | /// Called when closing the form.
54 | ///
55 | ///
56 | ///
57 | private void FrmUpdateFeatureNames_FormClosing(object sender, FormClosingEventArgs e)
58 | {
59 | _closing = true;
60 | Settings.Default.NameSearchFolders = this.TxtFolders.Text;
61 | }
62 |
63 | ///
64 | /// Closes form.
65 | ///
66 | ///
67 | ///
68 | private void BtnClose_Click(object sender, EventArgs e)
69 | {
70 | this.Close();
71 | }
72 |
73 | ///
74 | /// Saves the results to the features.txt
75 | ///
76 | ///
77 | ///
78 | private void BtnSave_Click(object sender, EventArgs e)
79 | {
80 | this.BtnSave.Enabled = false;
81 | File.WriteAllText(FeaturesListPath, this.TxtResults.Text);
82 | }
83 |
84 | ///
85 | /// Starts search for feature names.
86 | ///
87 | ///
88 | ///
89 | private void BtnSearch_Click(object sender, EventArgs e)
90 | {
91 | var folderPaths = this.TxtFolders.Lines;
92 | var includeCurrent = this.ChkIncludeCurrent.Checked;
93 |
94 | this.BtnSearch.Enabled = false;
95 | this.BtnSave.Enabled = false;
96 | this.GrpFolders.Enabled = false;
97 | this.ProgressBar.Value = 0;
98 |
99 | Task.Run(() =>
100 | {
101 | var filePaths = this.FindFiles(folderPaths);
102 | if (includeCurrent)
103 | filePaths.Add(FeaturesListPath);
104 |
105 | if (_closing)
106 | return;
107 |
108 | var foundFeatures = this.SearchFeatures(filePaths);
109 | var features = new HashSet();
110 |
111 | if (_closing)
112 | return;
113 |
114 | for (var i = 0; i < foundFeatures.Length; ++i)
115 | {
116 | var f = foundFeatures[i];
117 |
118 | var name = f.Trim();
119 | name = name.TrimStart('!');
120 | name = name.TrimStart('-');
121 | name = name.TrimEnd('-');
122 | features.Add(name);
123 |
124 | if (name.StartsWith("feature"))
125 | features.Add("gf" + name.Substring("feature".Length));
126 | }
127 |
128 | var sb = new StringBuilder();
129 |
130 | if (features.Any())
131 | {
132 | sb.AppendLine("// This file contains a number of strings that *could* be feature names.");
133 | sb.AppendLine("// The editor checks every line against the features and uses them as names");
134 | sb.AppendLine("// if they turn out to be valid.");
135 | sb.AppendLine("");
136 | foreach (var feature in features.OrderBy(a => a).Where(a => !string.IsNullOrWhiteSpace(a)))
137 | sb.AppendLine(feature);
138 | }
139 | else
140 | {
141 | sb.AppendLine("No feature names found.");
142 | }
143 |
144 | this.Invoke((MethodInvoker)delegate
145 | {
146 | this.TxtResults.Text = sb.ToString();
147 | this.BtnSearch.Enabled = true;
148 | this.GrpFolders.Enabled = true;
149 | this.ProgressBar.Value = this.ProgressBar.Maximum;
150 |
151 | if (features.Any())
152 | this.BtnSave.Enabled = true;
153 |
154 | var totalCount = features.Count;
155 | var newCount = (totalCount - FeaturesFile.FetureNameCount);
156 |
157 | if (newCount > 0)
158 | MessageBox.Show(this, $"Found {totalCount} potential feature names, {newCount} more than in the features.txt.", "", MessageBoxButtons.OK, MessageBoxIcon.Information);
159 | else if (newCount == 0)
160 | MessageBox.Show(this, $"Found {totalCount} potential feature names, no new ones were found.", "", MessageBoxButtons.OK, MessageBoxIcon.Information);
161 | else
162 | MessageBox.Show(this, $"Found {totalCount} potential feature names.", "", MessageBoxButtons.OK, MessageBoxIcon.Information);
163 | });
164 | });
165 | }
166 |
167 | ///
168 | /// Returns list of files that may be searched for feature names,
169 | /// ignores folders that don't exist, but gives a warning about
170 | /// them.
171 | ///
172 | ///
173 | ///
174 | private HashSet FindFiles(string[] paths)
175 | {
176 | var result = new HashSet();
177 |
178 | foreach (var path in paths)
179 | {
180 | if (_closing)
181 | return result;
182 |
183 | if (!Directory.Exists(path))
184 | {
185 | this.Invoke((MethodInvoker)delegate
186 | {
187 | MessageBox.Show(this, $"Directory '{path}' not found.", "", MessageBoxButtons.OK, MessageBoxIcon.Warning);
188 | });
189 | continue;
190 | }
191 |
192 | foreach (var filePath in Directory.EnumerateFiles(path, "*", SearchOption.AllDirectories))
193 | {
194 | if (_closing)
195 | return result;
196 |
197 | var ext = Path.GetExtension(filePath);
198 | if (!FileExtensions.Contains(ext))
199 | continue;
200 |
201 | result.Add(filePath);
202 | }
203 | }
204 |
205 | return result;
206 | }
207 |
208 | ///
209 | /// Searches for feature names in given files and returns them,
210 | /// ignores files that don't exist.
211 | ///
212 | ///
213 | ///
214 | private string[] SearchFeatures(IEnumerable filePaths)
215 | {
216 | var result = new HashSet();
217 |
218 | this.Invoke((MethodInvoker)delegate
219 | {
220 | this.ProgressBar.Maximum = filePaths.Count();
221 | });
222 |
223 | Parallel.ForEach(filePaths, filePath =>
224 | {
225 | if (_closing)
226 | return;
227 |
228 | if (!File.Exists(filePath))
229 | return;
230 |
231 | var isFeatureList = (filePath == FeaturesListPath);
232 |
233 | using (var fr = new StreamReader(filePath))
234 | {
235 | string line = null;
236 | while ((line = fr.ReadLine()) != null)
237 | {
238 | if (_closing)
239 | return;
240 |
241 | if (!isFeatureList && line.StartsWith("// This file contains a number of strings that *could* be feature names."))
242 | isFeatureList = true;
243 |
244 | if (isFeatureList)
245 | {
246 | line = line.Trim();
247 | if (!string.IsNullOrWhiteSpace(line) && !line.StartsWith("//"))
248 | {
249 | lock (result)
250 | result.Add(line);
251 | }
252 |
253 | continue;
254 | }
255 |
256 | var matches = GfRegex.Matches(line);
257 | foreach (Match match in matches)
258 | {
259 | lock (result)
260 | result.Add(match.Groups[1].Value);
261 | }
262 |
263 | matches = FeatureStrRegex.Matches(line);
264 | foreach (Match match in matches)
265 | {
266 | lock (result)
267 | result.Add(match.Groups[1].Value);
268 | }
269 |
270 | matches = FeatureAttr1Regex.Matches(line);
271 | foreach (Match match in matches)
272 | {
273 | lock (result)
274 | result.Add(match.Groups[1].Value);
275 | }
276 |
277 | matches = FeatureAttr2Regex.Matches(line);
278 | foreach (Match match in matches)
279 | {
280 | lock (result)
281 | result.Add(match.Groups[1].Value);
282 | }
283 | }
284 | }
285 |
286 | if (_closing)
287 | return;
288 |
289 | try
290 | {
291 | this.Invoke((MethodInvoker)delegate
292 | {
293 | this.ProgressBar.Increment(1);
294 | });
295 | }
296 | catch (ObjectDisposedException)
297 | {
298 | }
299 | });
300 |
301 | result.RemoveWhere(a => a.Length > 40 || a.Any(b => b > 128));
302 |
303 | var multi = result.Where(a => a.Contains('|')).ToArray();
304 | foreach (var name in multi)
305 | {
306 | var split = name.Split(new[] { '|' }, StringSplitOptions.RemoveEmptyEntries);
307 | foreach (var s in split)
308 | result.Add(s);
309 |
310 | result.Remove(name);
311 | }
312 |
313 | return result.ToArray();
314 | }
315 |
316 | ///
317 | /// Returns hash for the given string.
318 | ///
319 | ///
320 | ///
321 | public static uint GetStringHash(string str)
322 | {
323 | var s = 5381;
324 | foreach (var ch in str)
325 | s = s * 33 + ch;
326 | return (uint)s;
327 | }
328 | }
329 | }
330 |
--------------------------------------------------------------------------------
/Fetitor/FrmUpdateFeatureNames.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
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 |
109 | text/microsoft-resx
110 |
111 |
112 | 2.0
113 |
114 |
115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
119 |
120 |
121 | Enter one directory per line for Fetitor to search through for feature names, such as an extraced Mabinogi data folder. The results will be combined with the current feature names and you can update your features.txt with the results by clicking Save. The file types Fetitor searches are .xml, .txt, and .data.
122 |
123 |
--------------------------------------------------------------------------------
/Fetitor/MyScintilla.cs:
--------------------------------------------------------------------------------
1 | // This program is free software: you can redistribute it and/or modify
2 | // it under the terms of the GNU General Public License as published by
3 | // the Free Software Foundation, either version 3 of the License, or
4 | // (at your option) any later version.
5 | //
6 | // This program is distributed in the hope that it will be useful,
7 | // but WITHOUT ANY WARRANTY; without even the implied warranty of
8 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9 | // GNU General Public License for more details.
10 | //
11 | // You should have received a copy of the GNU General Public License
12 | // along with this program. If not, see .
13 |
14 | using ScintillaNET;
15 | using System;
16 | using System.Windows.Forms;
17 |
18 | namespace Fetitor
19 | {
20 | ///
21 | /// A version of Scintilla with additional hotkeys.
22 | ///
23 | class MyScintilla : Scintilla
24 | {
25 | ///
26 | /// Raised when Ctrl+S is pressed.
27 | ///
28 | public event EventHandler CtrlS;
29 |
30 | ///
31 | /// Raised when Ctrl+F is pressed.
32 | ///
33 | public event EventHandler CtrlF;
34 |
35 | ///
36 | /// Catches hotkeys and raises their events.
37 | ///
38 | ///
39 | ///
40 | ///
41 | protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
42 | {
43 | switch (keyData)
44 | {
45 | case Keys.Control | Keys.S:
46 | this.CtrlS?.Invoke(this, null);
47 | return true;
48 |
49 | case Keys.Control | Keys.F:
50 | this.CtrlF?.Invoke(this, null);
51 | return true;
52 | }
53 |
54 | return base.ProcessCmdKey(ref msg, keyData);
55 | }
56 | }
57 | }
58 |
--------------------------------------------------------------------------------
/Fetitor/Program.cs:
--------------------------------------------------------------------------------
1 | // This program is free software: you can redistribute it and/or modify
2 | // it under the terms of the GNU General Public License as published by
3 | // the Free Software Foundation, either version 3 of the License, or
4 | // (at your option) any later version.
5 | //
6 | // This program is distributed in the hope that it will be useful,
7 | // but WITHOUT ANY WARRANTY; without even the implied warranty of
8 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9 | // GNU General Public License for more details.
10 | //
11 | // You should have received a copy of the GNU General Public License
12 | // along with this program. If not, see .
13 |
14 | using System;
15 | using System.Windows.Forms;
16 |
17 | namespace Fetitor
18 | {
19 | static class Program
20 | {
21 | ///
22 | /// Der Haupteinstiegspunkt für die Anwendung.
23 | ///
24 | [STAThread]
25 | static void Main()
26 | {
27 | Application.EnableVisualStyles();
28 | Application.SetCompatibleTextRenderingDefault(false);
29 | Application.Run(new FrmMain());
30 | }
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/Fetitor/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Reflection;
2 | using System.Runtime.CompilerServices;
3 | using System.Runtime.InteropServices;
4 |
5 | // Allgemeine Informationen über eine Assembly werden über die folgenden
6 | // Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern,
7 | // die mit einer Assembly verknüpft sind.
8 | [assembly: AssemblyTitle("Fetitor")]
9 | [assembly: AssemblyDescription("")]
10 | [assembly: AssemblyConfiguration("")]
11 | [assembly: AssemblyCompany("Microsoft")]
12 | [assembly: AssemblyProduct("Fetitor")]
13 | [assembly: AssemblyCopyright("Copyright © Microsoft 2015")]
14 | [assembly: AssemblyTrademark("")]
15 | [assembly: AssemblyCulture("")]
16 |
17 | // Durch Festlegen von ComVisible auf "false" werden die Typen in dieser Assembly unsichtbar
18 | // für COM-Komponenten. Wenn Sie auf einen Typ in dieser Assembly von
19 | // COM zugreifen müssen, legen Sie das ComVisible-Attribut für diesen Typ auf "true" fest.
20 | [assembly: ComVisible(false)]
21 |
22 | // Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird
23 | [assembly: Guid("a09271cf-f044-42a5-b6dd-f45cbd0f9902")]
24 |
25 | // Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten:
26 | //
27 | // Hauptversion
28 | // Nebenversion
29 | // Buildnummer
30 | // Revision
31 | //
32 | // Sie können alle Werte angeben oder die standardmäßigen Build- und Revisionsnummern
33 | // übernehmen, indem Sie "*" eingeben:
34 | // [assembly: AssemblyVersion("1.0.*")]
35 | [assembly: AssemblyVersion("1.0.0.0")]
36 | [assembly: AssemblyFileVersion("1.0.0.0")]
37 |
--------------------------------------------------------------------------------
/Fetitor/Properties/Resources.Designer.cs:
--------------------------------------------------------------------------------
1 | //------------------------------------------------------------------------------
2 | //
3 | // Dieser Code wurde von einem Tool generiert.
4 | // Laufzeitversion:4.0.30319.42000
5 | //
6 | // Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
7 | // der Code erneut generiert wird.
8 | //
9 | //------------------------------------------------------------------------------
10 |
11 | namespace Fetitor.Properties {
12 | using System;
13 |
14 |
15 | ///
16 | /// Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw.
17 | ///
18 | // Diese Klasse wurde von der StronglyTypedResourceBuilder automatisch generiert
19 | // -Klasse über ein Tool wie ResGen oder Visual Studio automatisch generiert.
20 | // Um einen Member hinzuzufügen oder zu entfernen, bearbeiten Sie die .ResX-Datei und führen dann ResGen
21 | // mit der /str-Option erneut aus, oder Sie erstellen Ihr VS-Projekt neu.
22 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
25 | internal class Resources {
26 |
27 | private static global::System.Resources.ResourceManager resourceMan;
28 |
29 | private static global::System.Globalization.CultureInfo resourceCulture;
30 |
31 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
32 | internal Resources() {
33 | }
34 |
35 | ///
36 | /// Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird.
37 | ///
38 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
39 | internal static global::System.Resources.ResourceManager ResourceManager {
40 | get {
41 | if (object.ReferenceEquals(resourceMan, null)) {
42 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Fetitor.Properties.Resources", typeof(Resources).Assembly);
43 | resourceMan = temp;
44 | }
45 | return resourceMan;
46 | }
47 | }
48 |
49 | ///
50 | /// Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle
51 | /// Ressourcenzuordnungen, die diese stark typisierte Ressourcenklasse verwenden.
52 | ///
53 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
54 | internal static global::System.Globalization.CultureInfo Culture {
55 | get {
56 | return resourceCulture;
57 | }
58 | set {
59 | resourceCulture = value;
60 | }
61 | }
62 | }
63 | }
64 |
--------------------------------------------------------------------------------
/Fetitor/Properties/Resources.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
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 | text/microsoft-resx
107 |
108 |
109 | 2.0
110 |
111 |
112 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
113 |
114 |
115 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
--------------------------------------------------------------------------------
/Fetitor/Properties/Settings.Designer.cs:
--------------------------------------------------------------------------------
1 | //------------------------------------------------------------------------------
2 | //
3 | // Dieser Code wurde von einem Tool generiert.
4 | // Laufzeitversion:4.0.30319.42000
5 | //
6 | // Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
7 | // der Code erneut generiert wird.
8 | //
9 | //------------------------------------------------------------------------------
10 |
11 | namespace Fetitor.Properties {
12 |
13 |
14 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
15 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.7.0.0")]
16 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
17 |
18 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
19 |
20 | public static Settings Default {
21 | get {
22 | return defaultInstance;
23 | }
24 | }
25 |
26 | [global::System.Configuration.UserScopedSettingAttribute()]
27 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
28 | [global::System.Configuration.DefaultSettingValueAttribute("")]
29 | public string NameSearchFolders {
30 | get {
31 | return ((string)(this["NameSearchFolders"]));
32 | }
33 | set {
34 | this["NameSearchFolders"] = value;
35 | }
36 | }
37 |
38 | [global::System.Configuration.UserScopedSettingAttribute()]
39 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
40 | [global::System.Configuration.DefaultSettingValueAttribute("False")]
41 | public bool WindowMaximized {
42 | get {
43 | return ((bool)(this["WindowMaximized"]));
44 | }
45 | set {
46 | this["WindowMaximized"] = value;
47 | }
48 | }
49 |
50 | [global::System.Configuration.UserScopedSettingAttribute()]
51 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
52 | [global::System.Configuration.DefaultSettingValueAttribute("-1, -1")]
53 | public global::System.Drawing.Point WindowLocation {
54 | get {
55 | return ((global::System.Drawing.Point)(this["WindowLocation"]));
56 | }
57 | set {
58 | this["WindowLocation"] = value;
59 | }
60 | }
61 |
62 | [global::System.Configuration.UserScopedSettingAttribute()]
63 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
64 | [global::System.Configuration.DefaultSettingValueAttribute("-1, -1")]
65 | public global::System.Drawing.Size WindowSize {
66 | get {
67 | return ((global::System.Drawing.Size)(this["WindowSize"]));
68 | }
69 | set {
70 | this["WindowSize"] = value;
71 | }
72 | }
73 | }
74 | }
75 |
--------------------------------------------------------------------------------
/Fetitor/Properties/Settings.settings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 | False
10 |
11 |
12 | -1, -1
13 |
14 |
15 | -1, -1
16 |
17 |
18 |
--------------------------------------------------------------------------------
/Fetitor/ToolStripRendererNL.cs:
--------------------------------------------------------------------------------
1 | // This program is free software: you can redistribute it and/or modify
2 | // it under the terms of the GNU General Public License as published by
3 | // the Free Software Foundation, either version 3 of the License, or
4 | // (at your option) any later version.
5 | //
6 | // This program is distributed in the hope that it will be useful,
7 | // but WITHOUT ANY WARRANTY; without even the implied warranty of
8 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9 | // GNU General Public License for more details.
10 | //
11 | // You should have received a copy of the GNU General Public License
12 | // along with this program. If not, see .
13 |
14 | using System.Windows.Forms;
15 |
16 | namespace Fetitor
17 | {
18 | ///
19 | /// ToolStrip renderer without border.
20 | ///
21 | public class ToolStripRendererNL : ToolStripSystemRenderer
22 | {
23 | ///
24 | /// Skips border rendering.
25 | ///
26 | ///
27 | protected override void OnRenderToolStripBorder(ToolStripRenderEventArgs e)
28 | {
29 | //base.OnRenderToolStripBorder(e);
30 | }
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/Fetitor/app.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 | False
15 |
16 |
17 | -1, -1
18 |
19 |
20 | -1, -1
21 |
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/Fetitor/icon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/exectails/Fetitor/c1a5f42c9303dbed41766f9dfccdf598bf2833c9/Fetitor/icon.ico
--------------------------------------------------------------------------------
/Lib/jacobslusser.ScintillaNET.3.2.0-rc/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2015, Jacob Slusser, https://github.com/jacobslusser
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/Lib/jacobslusser.ScintillaNET.3.2.0-rc/ScintillaNET.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/exectails/Fetitor/c1a5f42c9303dbed41766f9dfccdf598bf2833c9/Lib/jacobslusser.ScintillaNET.3.2.0-rc/ScintillaNET.dll
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | Fetitor
2 | =============================================================================
3 |
4 | Fetitor is an editor for Mabinogi's features file (features.xml.compiled),
5 | which is essentially a compiled XML file. It converts it to XML and back
6 | on the fly, to allow the user to edit it more quickly than if they had to
7 | convert it first, open and edit it, and convert it back.
8 |
9 | Features
10 | -----------------------------------------------------------------------------
11 |
12 | - Editing Mabinogi's .xml.compiled files.
13 | - Jump list to find specific features more quickly.
14 |
15 | Preview
16 | -----------------------------------------------------------------------------
17 |
18 | 
19 |
20 | Links
21 | ------------------------------
22 | * GitHub: https://github.com/exectails/Fetitor
23 |
--------------------------------------------------------------------------------
/icon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/exectails/Fetitor/c1a5f42c9303dbed41766f9dfccdf598bf2833c9/icon.ico
--------------------------------------------------------------------------------
/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/exectails/Fetitor/c1a5f42c9303dbed41766f9dfccdf598bf2833c9/icon.png
--------------------------------------------------------------------------------
/preview.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/exectails/Fetitor/c1a5f42c9303dbed41766f9dfccdf598bf2833c9/preview.png
--------------------------------------------------------------------------------