Skip to content

Commit

Permalink
Merge pull request #16 from IvoKrugers/develop
Browse files Browse the repository at this point in the history
Develop 1.6.3
  • Loading branch information
IvoKrugers committed Mar 25, 2020
2 parents 3ca8565 + e674758 commit 0126229
Show file tree
Hide file tree
Showing 13 changed files with 212 additions and 134 deletions.
8 changes: 8 additions & 0 deletions EssentialsAddin/Constants.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
namespace EssentialsAddin
{
public static class Constants
{
public const string Version = "1.6.3";
public const string SolutionPadId = "EssentialsAddin.SolutionFilterPad";
}
}
3 changes: 2 additions & 1 deletion EssentialsAddin/EssentialsAddin.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{06AAEAAA-1031-4096-BA41-394CACC5CC92}</ProjectGuid>
<ProjectTypeGuids>{86F6BF2A-E449-4B3E-813B-9ACC37E5545F};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
<!--<ProjectTypeGuids>{86F6BF2A-E449-4B3E-813B-9ACC37E5545F};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>-->
<OutputType>Library</OutputType>
<RootNamespace>EssentialsAddin</RootNamespace>
<AssemblyName>EssentialsAddin</AssemblyName>
Expand Down Expand Up @@ -47,6 +47,7 @@
<Compile Include="SolutionFilter\SolutionFilterPadMenuHandler.cs" />
<Compile Include="SolutionFilter\SpecialNodeBuilderExtension.cs" />
<Compile Include="SolutionFilter\SolutionTreeExtensions.cs" />
<Compile Include="Constants.cs" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Properties\Manifest.addin.xml" />
Expand Down
7 changes: 5 additions & 2 deletions EssentialsAddin/Properties/AddinInfo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,18 @@
[assembly: Addin(
"EssentialsAddin",
Namespace = "EssentialsAddin",
Version = "1.5.0"
Version = EssentialsAddin.Constants.Version
)]

[assembly: AddinName("EssentialsAddin")]
[assembly: AddinCategory("IDE extensions")]
[assembly: AddinDescription("EssentialsAddin provides:\n"+
[assembly: AddinDescription("Essentials Addin provides:\n"+
" - Solution tree filtering\n" +
" - One click to open file functionality. \n" +
" - Expand project filter when closing all projects\n"+
"\n"+
"The filter pad can be opened from the Tools->Essentials->")]
[assembly: AddinAuthor("Ivo Krugers")]

[assembly: AddinDependency("::MonoDevelop.Core", MonoDevelop.BuildInfo.Version)]
[assembly: AddinDependency("::MonoDevelop.Ide", MonoDevelop.BuildInfo.Version)]
2 changes: 1 addition & 1 deletion EssentialsAddin/Properties/AssemblyInfo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
[assembly: AssemblyTitle("EssentialsAddin")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyCompany("Ivo Krugers")]
[assembly: AssemblyProduct("")]
[assembly: AssemblyCopyright("")]
[assembly: AssemblyTrademark("")]
Expand Down
2 changes: 1 addition & 1 deletion EssentialsAddin/Properties/Manifest.addin.xml
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@
</SolutionPad>-->
<Extension path="/MonoDevelop/Ide/Pads">
<Pad id="EssentialsAddin.SolutionFilterPad"
_label="Essentials Pad (1.5.0)"
_label="Essentials Pad (x.x.x)"
class="EssentialsAddin.SolutionFilterPad"
defaultStatus="Dockable"
defaultPlacement="ProjectPad/bottom" />
Expand Down
24 changes: 11 additions & 13 deletions EssentialsAddin/SolutionFilter/FileNodeBuilderExtension.cs
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@ public override bool CanBuildNode(Type dataType)
typeof(ProjectFolder).IsAssignableFrom(dataType) ||
typeof(ProjectFile).IsAssignableFrom(dataType) ||
dataType.Name == "CSharpProject";
//Debug.WriteLine($"[CanBuildNode] {dataType}, canBuild: {canBuild}");
return canBuild;
}

Expand All @@ -38,7 +37,6 @@ public override void GetNodeAttributes(ITreeNavigator parentNode, object dataObj
base.GetNodeAttributes(parentNode, dataObject, ref attributes);

var filter = EssentialProperties.SolutionFilterArray;

if (filter.Length == 0)
return;

Expand All @@ -62,16 +60,16 @@ public override void GetNodeAttributes(ITreeNavigator parentNode, object dataObj

if (dataObject is ProjectFile file )
{
var hide = true;
foreach (var key in filter)
{
if (file.ProjectVirtualPath.ToString().ToLower().Contains(key))
{
hide = false;
break;
}
}
if (hide)
//var hide = true;
//foreach (var key in filter)
//{
// if (file.ProjectVirtualPath.ToString().ToLower().Contains(key))
// {
// hide = false;
// break;
// }
//}
if (!FilteredProjectCache.IsProjectItemVisible(file))
attributes = NodeAttributes.Hidden;
}
}
Expand All @@ -96,7 +94,7 @@ public override void BuildNode(ITreeBuilder treeBuilder, object dataObject, Node
{
if (!string.IsNullOrEmpty(EssentialProperties.SolutionFilter))
{
if (!FilteredProjectCache.IsProjectItemExpanded(dataObject))
if (!FilteredProjectCache.IsProjectItemEnabled(dataObject))

nodeInfo.DisabledStyle = true;
}
Expand Down
82 changes: 61 additions & 21 deletions EssentialsAddin/SolutionFilter/FilteredProjectCache.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ struct TreeItem
{
public FilePath ProjectVirtualPath;
public bool IsExpanded;
public bool IsEnabled;
}

private static Dictionary<string, DateTime> _projectsDictionary = new Dictionary<string, DateTime>();
Expand Down Expand Up @@ -60,28 +61,40 @@ public static void ScanProjectForFiles(Project project)

path = file.IsLink ? project.BaseDirectory.Combine(file.ProjectVirtualPath) : file.FilePath;

foreach (var key in filterArray)
if (filterArray.Length > 0)
{

if (file.ProjectVirtualPath.ToString().ToLower().Contains(key))
foreach (var key in filterArray)
{
// Found file of folder that fits the filter
var filenameInFilter = false;
var filenameToTest = file.FilePath.FileName.ToLower();
foreach (var key1 in filterArray)

if (file.ProjectVirtualPath.ToString().ToLower().Contains(key))
{
if (filenameToTest.Contains(key1))
#if DEBUG
if (file.FilePath.FileName == "StageProgressBar.designer.cs")
{
filenameInFilter = true;
break;
Debug.WriteLine("BINGO !!");
}
}
#endif
// if this file depends on another, make sure that that parent file in the cache is marked as expanded too.

var filename = file.ProjectVirtualPath.FileName;
var folder = file.ProjectVirtualPath.ParentDirectory;
RegisterFile(project.Name, filename, folder, filenameInFilter, filterArray);

break;
// Found file or folder that fits the filter
var filenameInFilter = false;
var filenameToTest = file.FilePath.FileName.ToLower();
foreach (var key1 in filterArray)
{
if (filenameToTest.Contains(key1))
{
filenameInFilter = true;
break;
}
}

var filename = file.ProjectVirtualPath.FileName;
var folder = file.ProjectVirtualPath.ParentDirectory;
RegisterFile(project.Name, filename, folder, filenameInFilter, filterArray);

break;
}
}
}
}
Expand All @@ -106,11 +119,13 @@ private static void RegisterFile(string projectname, string filename, FilePath f

// Register file
var foldername = projectname + "/" + folder.ToString() + "/" + filename;
foldername = foldername.Replace("//", "/");
TreeItem item;
if (!_treeDictionary.TryGetValue(foldername, out item))
item = new TreeItem { ProjectVirtualPath = folder };

item.IsExpanded = item.IsExpanded || filenameInFilter;
item.IsEnabled = item.IsEnabled || filenameInFilter;
_treeDictionary[foldername] = item;
}

Expand All @@ -124,12 +139,13 @@ private static string RegisterFileForFolder(string projectname, string filename,

// Enter recursion
var foldername = RegisterFileForFolder(projectname, filename, folder.ParentDirectory, filenameInFilter, filter) + $"/" + folder.FileName;

foldername = foldername.Replace("//", "/");
// Register file in dictionary
TreeItem item;
if (!_treeDictionary.TryGetValue(foldername, out item))
item = new TreeItem { ProjectVirtualPath = folder };
item.IsExpanded = item.IsExpanded || filenameInFilter || IsFilePathExpanded(folder, filter);
item.IsEnabled = true;
_treeDictionary[foldername] = item;

return foldername;
Expand Down Expand Up @@ -157,17 +173,24 @@ private static string GetFoldername(ProjectFolder folder)

private static string GetKeyFor(object dataObject)
{
string key;
switch (dataObject)
{
case ProjectFile file:
return file.Project.Name + "/" + file.ProjectVirtualPath.ToString();
key= file.Project.Name + "/" + file.ProjectVirtualPath.ToString();
break;
case ProjectFolder folder:
return GetFoldername(folder);
key= GetFoldername(folder);
break;
case Project project:
return project.Name;
key= project.Name;
break;
default:
return string.Empty;
key= string.Empty;
break;
}
key = key.Replace("//", "/");
return key;
}

public static bool IsProjectItemVisible(object dataItem)
Expand All @@ -184,6 +207,23 @@ public static bool IsProjectItemVisible(object dataItem)
return false;
}

public static bool IsProjectItemEnabled(object dataItem)
{
if (dataItem is ProjectFile || dataItem is ProjectFolder)
{
var key = GetKeyFor(dataItem);
TreeItem item;
if (!_treeDictionary.TryGetValue(key, out item))
return false;
return item.IsEnabled;
}
else if (dataItem is Project project)
{
return true;
}
return false;
}

public static bool IsProjectItemExpanded(object dataItem)
{
if (dataItem is ProjectFile || dataItem is ProjectFolder)
Expand Down Expand Up @@ -215,7 +255,7 @@ public static new string ToString()
str += $"\n{{FilteredProjectCache - TreeDictionary}}\n";
foreach (var item in _treeDictionary)
{
str += $"\t- {item.Key.PadRight(maxLength, '.')}\t=> IsExpanded: {item.Value.IsExpanded}\n";
str += $"\t- {item.Key.PadRight(maxLength, '.')}\t=> IsExpanded: {item.Value.IsExpanded}\t=> IsEnabled: {item.Value.IsEnabled}\n";
}
return str;
}
Expand Down
Loading

0 comments on commit 0126229

Please sign in to comment.